一、Hive DDL 操作
Hive DDL用于定义Hive 数据库模式,其命令包括create、drop、alter、truncate、show
和describe等,主要是对数据库和表进行创建、修改、删除等操作。
1.1数据库操作
(1)创建数据库
【语法】
CREATE (DATABASESCHEMA) [IF NOT EXISTS] database _name
[COMMENT database_comment]
[LOCATION hdfs_path][WITH DBPROPERTIES
示例2-1
创建empdb数据库。
关键代码:
hive>create database empdb;
> show databases;
> use empdb;
其中,“show databases;”显示数据库列表,“useempdb;”选择empdb作为当前操作
的数据库。
(1)修改数据库
【语法】
ALTER (DATABASEISCHEMA) database_name SET DBPROPERTIES(property _name-property_value
(1)删除数据库
【语法】
DROP (DATABASEISCHEMA) [IF EXISTS] database _name [RESTRICTICASCADE];
默认情况下使用RESTRICT 删除数据库。
如果数据库非空,则使用RESTRICT 删除
数据库将会失败,此时须使用CASCADE 级联删除数据库。
1.2表操作
1)创建表
【语法】
CREATE [TEMPORARY][EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[(col data_ type [COMMENT col_comment],...[constraint specification])]
[COMMENT table_comment]
[PARTITIONED BY (col data_type [COMMENT col_comment],.)]
[CLUSTERED BY (col,.)[SORTED BY(col[ASC|DESC],.)]INTO num_buckets BUCKEE
[SKEWED BY(col,..)
ON((Col_ value, col_ value,.),(col_value, col_value,.),..)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file format]
|STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (..)]
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name-property_value, ..)]
创建表语法中的关键点介绍如下。
>CREATE TABLE:创建一个指定名称的表,如果存在同名表,则抛出异常。可
使用“IFNOTEXISTS”忽略该异常。
> EXTERNAL:表示该表为外部表,须同时指定实际数据的HDFS 路径LOCATION.
注意:当表被删除时,实际数据不会被删除。
>TEMPORARY:指定该表为临时表,被Hive0.14之后的版本支持。临时表只对
当前会话有效,会话退出后临时表自动删除。注意,临时表不支持分区与索引。
> PARTITIONED BY:创建表的时候可以同时为表创建一个或多个分区。
>CLUSTERED BY:分桶,让数据能够均匀地分布在表的各个数据文件中。
> ROWFORMAT:用于指定序列化与反序列化器(Serializer/Deserializer,SerDe)。
Hive 使用SerDe 读写表的每一行数据。如果 ROW FORMAT 未指定或者指定了“ROW FORMAT DELIMITED”,Hive 将使用内置的SerDe来确定表中具体字段的数据。
【语法】
ROW FORMAT
DELIMITED
[FIELDS TERMINATED BY char]
[COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char]
[LINES TERMINATED BY char]
>STOREDAS:如果表中数据是文本数据,则使用TEXTFILE;如果数据需要压
ISERDE serde name [WITH SERDEPROPERTIES. (..)]
缩,可使用SEQUENCEFILE等。
2)修改表
修改表包括重命名、添加列、更新列等操作。表重命名的语法如下。
【语法】
ALTER TABLE table_name RENAME TO new_table name。
示例2-3
将雇员表“employee_external”改名为“employee_cxt”.
关键代码:
hive> alter table employee external rename to employee ext;
添加和更新列的语法如下。
【语法】
ALTER TABLE table_name ADD|REPLACE
COLUMNS (col name data_type[COMMENT col_comment]....
示例2-4
在雇员表“employee_ext”中增加一列“empid”。
关键代码:
hive> alter table employee_ext add columns(empid string);
二、Hive DML 操作
1.1 数据转载与插入
一般使用两种方式实现数据装载,分别是load和insert命令,二者有明显的区别。
> load命令不对数据进行任何转换,只是简单地将数据复制或者移动至Hive 表对应的位置。
> insert 命令将会执行MapReduce 作业并将数据插入至Hive表中,一般使用
较少。
(1)load命令
【语法】
LOAD DATA [LOCAL] INPATH'filepat
OVERWRITE]INTO TABLE table name [PARTITION(partcoll=val1,partcol2-val2..….)]
>LOCAL:限制为本地文件系统路径,如果没有该关键字则是HDFS路径。>OVERWRITE:覆盖目标文件夹中的数据,如果没有该关键字且目标文件夹中已存在同名文件,将保留之前的文件,新文件名后缀以自动序号区分。
> PARTITION:如果目标表是分区表,须使用该关键字为每个分区键指定一个值。
1.2数据更新、删除与合并
从0.14版本起Hive 支持数据更新与删除操作,从2.2版本起Hive支持数据合并操
是数据仓库解决方案,不适合进行更新、删除等事务操作。
1.3 数据导入/导出
(1) export
【语法】
EXPORT TABLE table name [PARTITIO
(partcol=partval..)] TO 'export_target path'
例如:
hive> export table emp to '/tmp/emp";
上述命令将导出emp表至HDFS目录/tmp/emp,包括其元数据与实际数据。在实际使用过程中,通常也利用insert命令完成数据的导出。
【语法】
INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT... FROM.
例如:
hive> insert overwrite local directory'/home/hadoop/hive/empdb.emp' select * from emp;
(2) import
【语法】
IMPORT[[EXTERNAL]TABLE new_or_original tablename [PARTITION(partcoll=vall,….]
FROM 'source_ path' [LOCATION 'import target path']
例如:
hive> import table emp new from'/tmp/emp';
上述代码将向HDFS目录/tmp/emp导入数据并生成新的内部表emp_new。
1.4数据执行计划查询
Hive 提供explain命令,可显示数据查询的执行计划。
【语法】
EXPLAIN [EXTENDEDlASTDEPENDENCYAUTHORIZATIONILOCKSIVECTORIZATION] query
例如:
hive> explain select * from emp;
三、Hive Shell 操作
1.1Hive 命令行
前面提到,无论是CLI还是Beeline, Hive Shell 都可以通过两种模式运行,即交互模式与命令行模式。
【语法】
hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>k-e query-string>] [-S] [-d]
主要参数使用说明如下。
_i:从文件初始化HQL。
-e:从命令行执行指定的HQL。
2024.04
-f:执行HQL脚本,与-作用类似。
-S:静默模式,在交互式模式中仅输出主要信息,即去掉“OK”和“Time taken...
-d:自定义变量,以便在HQL脚本中使用。
-hiveconfx=y:配置Hive/Hadoop参数。
示例2-9
使用Hive命令行运行一个查询。
输入命令:
$ hive -e'select count(1) from empdb.emp'
输出结果:
OK
4
Time taken:52.286 seconds, Fetched: 4 row(s)
1.2Hive 参数配置方式
(1)配置文件设定参数
用户自定义配置文件:SHIVE_HOME/conf/hive-site.xml,全局永久配置,修改后需要重启Hive服务。
(2)命令行设定参数
启动Hive 客户端(或其处于Server 模式)时,可以通过在命令行添加-hiveconf param—value 来设定参数,例如:
$ hive -hiveconf hive.root.logger=INFO,console
这一设定只对本次启动的Session有效。如果以Server 模式启动,则对所有请求的Session 都有效,例如:
$ hive --service hiveserver2 --hiveconf hive.root.logger-INFO,console
(3)SET 关键字设定参数
可以在HQL中通过使用 SET 关键字来设定参数,这一设定的作用域也是Session级别的,例如:
set mapred.reduce.tasks=100;
上述3种设定方式的优先级依次递增,即SET关键字设定参数覆盖命令行设定参数,命令行设定参数又覆盖配置文件设定参数。