集合数据类型
集合数据类型分为STRUCT,MAP,ARRAY三种。
下面一个例子用于演示如何使用这些数据类型,这是一张虚构的人力资源应用程序的中的员工表:
CREATE TABLE employees (
name STRING COMMENT 'Employee name',
salary FLOAT COMMENT 'Employee salary',
subordinates ARRAY<STRING> COMMENT 'Names of subordinates',
deductions MAP<STRING,FLOAT> COMMENT 'Keys are deductions names,values are percentages',
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> COMMENT 'Home address')
COMMENT 'Description of tht table'
TBLPROPERTIES ('creator'='me','created_at'='2018-01-10 19:00:00')
LOCATION '/user/hive/warehouse/mydb.db/employees';
- 其中,name是字符串类型,代表职员的姓名;
- salary是float浮点数类型,代表职员的薪水;
- subordinates是一个字符串数组,代表下属职员的名字;
- deductions是一个由键-值对构成的map,代表从薪水中扣除的明细,map中的键是一个字符串类型,代表扣款金额项目的名称(如“国家税收”),map中的值代表扣税的金额,是float浮点数类型;
- address是struct数据类型,代表职员的家庭住址。这个表没有指明“主键”,我们根据表中字段的含义可以理解为name就是“主键”。
- COMMENT是对字段或者表的说明。(可选)
- TBLPROPERTIES的主要作用是按键-值对的格式为表增加额外的文档说明。(可选)
- LOCATION表明存储路径。(可选)
Hive中并没有键的概念,我们在这里是为了加深理解。
文本文件数据编码
Hive中默认的记录和字符分隔符:
在建表的时候我们可以自己设定分隔符,还是以上面的例子为例。
CREATE TABLE employees (
name STRING COMMENT 'Employee name',
salary FLOAT COMMENT 'Employee salary',
subordinates ARRAY<STRING> COMMENT 'Names of subordinates',
deductions MAP<STRING,FLOAT> COMMENT 'Keys are deductions names,values are percentages',
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> COMMENT 'Home address'
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
- ROW FORMAT DELIMITED这组关键字必须要写在其他字句之前(除STORED AS……字句)。
- ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001’表明Hive将使用^A作为列分隔符。
- COLLECTION ITEMS TERMINATED BY ‘\002’表明Hive将使用^B作为集合元素间的分隔符。
- MAP KEYS TERMINATED BY ‘\003’表明Hive将使用^C作为map的键和值之间的分隔符。
- 子句LINES TERMINATED BY…和STORED AS…不需要使用ROW FORMAT DELIMITED关键字。
事实上,Hive到目前为止LINES TERMINATED BY …仅支持’\n’分隔,也就是说行与行之间的分隔符只能是’\n’。