HiveQL详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 #在client里执行一个hive脚本文件

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.分区表

分区是表的部分列的集合, 可以为频繁使用的数据建立分区, 这样查找分区中的数据时就不需要扫描全表, 这对于提高查找效率很有帮助。

相关文档
最新文档