Hive学习笔记(一)集合数据类型和文本文件数据编码

本文介绍Hive中创建包含复杂数据类型的表,并详细解释了不同数据类型的使用方法及文本文件的数据编码方式。

集合数据类型

集合数据类型分为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’。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值