HiveQL详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HiveQL详解
HiveQL是一种类似SQL的语言, 它与大部分的SQL语法兼容, 但是并不完全支持SQL标准, 如HiveQL不支持更新操作, 也不支持索引和事务, 它的子查询和join操作也很局限, 这是因其底层依赖于Hadoop云平台这一特性决定的, 但其有些特点是SQL所无法企及的。例如多表查询、支持create table as select和集成MapReduce脚本等, 本节主要介绍Hive的数据类型和常用的HiveQL操作。
1.hive client命令
a.hive命令参数
-e: 命令行sql语句
-f: SQL文件
-h, --help: 帮助
--hiveconf: 指定配置文件
-i: 初始化文件
-S, --silent: 静态模式(不将错误输出)
-v,--verbose: 详细模式
b.交互模式
hive> show tables; #查看所有表名
hive> show tables 'ad*' #查看以'ad'开头的表名
hive>set命令 #设置变量与查看变量;
hive>set-v #查看所有的变量
hive>set hive.stats.atomic #查看hive.stats.atomic变量
hive>set hive.stats.atomic=false #设置hive.stats.atomic变量
hive> dfs -ls #查看hadoop所有文件路径
hive> dfs -ls /user/hive/warehouse/ #查看hive所有文件
hive> dfs -ls /user/hive/warehouse/ptest #查看ptest文件
hive> source file
hive> quit #退出交互式shell
hive>exit #退出交互式shell
hive> reset #重置配置为默认值
hive> !ls #从Hive shell执行一个shell命令
2.操作及函数
查看函数:
hive> show functions;
正则查看函数名:
show functions 'xpath.*';
查看具体函数内容:
describe function xpath; |desc function xpath;
3.字段类型
Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INT、FLOAT、DOUBLE)、布尔型和字符串, 复杂类型有三种:ARRAY、MAP 和STRUCT。
a.基本数据类型
TINYINT: 1个字节
SMALLINT: 2个字节
INT: 4个字节
BIGINT: 8个字节
BOOLEAN: TRUE/FALSE
FLOAT: 4个字节,单精度浮点型
DOUBLE: 8个字节,双精度浮点型STRING 字符串
b.复杂数据类型
ARRAY: 有序字段
MAP: 无序字段
STRUCT: 一组命名的字段
4.表类型
hive表大致分为普通表、外部表、分区表三种。
a.普通表
创建表
hive>create table tb_person(id int, name string);
创建表并创建分区字段ds
hive>create table tb_stu(id int, name string) partitioned by(ds string);
查看分区
hive> show partitions tb_stu;
显示所有表
hive> show tables;
按正则表达式显示表,
hive> show tables 'tb_*';
表添加一列
hive>alter table tb_person add columns (new_col int);
添加一列并增加列字段注释
hive>alter table tb_stu add columns (new_col2 int comment 'a comment');
更改表名
hive>alter table tb_stu rename to tb_stu;
删除表(hive只能删分区,不能删记录或列 )
hive>drop table tb_stu;
对于托管表, drop操作会把元数据和数据文件删除掉, 对于外部表, 只是删除元数据。如果只要删除表中的数据, 保留表名可以在 HDFS 上删除数据文件: hive> dfs –rmr /user/hive/warehouse/mutill1/*
将本地/home/hadoop/ziliao/stu.txt文件中的数据加载到表中, stu.txt文件数据如下:
1 zhangsan
2 lisi
3 wangwu
将文件中的数据加载到表中
hive>load data local inpath '/home/hadoop/ziliao/stu.txt' overwrite into table tb_person;
加载本地数据,同时给定分区信息
hive>load data local inpath '/home/hadoop/ziliao/stu.txt' overwrite into table tb_stu partition (ds='2008-08-15');
备注:如果导入的数据在HDFS 上,则不需要local 关键字。托管表导入的数据文件可在数据仓库目录“user/hive/warehouse/
查看数据
hive> dfs -ls /user/hive/warehouse/tb_stu
hive> dfs -ls /user/hive/warehouse/tb_person
b.外部表
external关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(location),hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
eg. 创建外部表:
create external table tb_record(col1 string, col2 string) row format delimited fields terminated by'\t' location '/user/hadoop/input';
这样表tb_record的数据就是hdfs://user/hadoop/input/* 的数据了。
c.分区表
分区是表的部分列的集合, 可以为频繁使用的数据建立分区, 这样查找分区中的数据时就不需要扫描全表, 这对于提高查找效率很有帮助。