案例一:
# 创建一个文档,姓名和工作地点之间用制表符'\t'分隔,地点之间以','分隔
[xiaokang@hadoop hive_data]$ vi complex_array.txt
zhangsan beijing,shanghai,shenzhen
lisi chengdu,chongqing,guizhou
# 创建表
hive (xiaoliu)> create table complex_array(name string,work_locations array<string>)
> row format delimited
> fields terminated by '\t'
> collection items terminated by ',';
OK
Time taken: 0.08 seconds
# 上传文档至hdfs
[xiaokang@hadoop hive_data]$ hadoop fs -put complex_array.txt /user/hive/warehouse/xiaoliu.db/complex_array
# 查看
hive (xiaoliu)> select * from complex_array;
OK
complex_array.name complex_array.work_locations
zhangsan ["beijing","shanghai","shenzhen"]
lisi ["chengdu","chongqing","guizhou"]
# 映射成功
案例二:
[xiaokang@hadoop hive_data]$ vi t_map.txt
1,小刘,听歌:非常喜欢-跳舞:喜欢-游泳:一般般
2,奕博,打游戏:非常喜欢-篮球:非常喜欢-吃饭:非常喜欢
3,海龙,吃饭:非常喜欢-学习:喜欢
hive (xiaoliu)> create table t_map(id int,name string,hobby map<string,string>)
> row format delimited
> fields terminated by ','
> collection items terminated by '-'
> map keys terminated by ':';
OK
Time taken: 0.087 seconds
[xiaokang@hadoop hive_data]$ hadoop fs -put t_map.txt /user/hive/warehouse/xiaoliu.db/t_map
hive (xiaoliu)> select * from t_map;
OK
t_map.id t_map.name t_map.hobby
1 小刘 {"听歌":"非常喜欢","跳舞":"喜欢","游泳":"一般般"}
2 奕博 {"打游戏":"非常喜欢","篮球":"非常喜欢","吃饭":"非常喜欢"}
3 海龙 {"吃饭":"非常喜欢","学习":"喜欢"}
建表语句的解释:
row format delimited | 表示使用内置分隔符 |
---|---|
fields terminated by ',' | 字段之间采用逗号分隔,因此:"1"是一个字段,"小刘"是一个字段,"唱歌:非常喜欢-跳舞:喜欢-游泳:一般般"是一个字段 |
collection items terminated by '-' | 集合元素使用"-"来分割 |
map keys terminated by ':' | 集合元素中的key使用’:'分割 |
案例一、二 小结:
①建表的时候一定要根据结构化数据文件的分隔符类型来指定分隔符
②建表的字段个数和字段类型要跟结构化数据中的个数类型一致
③分隔符一般使用内置的来指定 row format delimited 分割字段 分割集合 等等
案例三
①hive建表的时候默认的分隔符是’\001’,若在建表的时候没有指明分隔符,load文件的时候文件的分隔符需要的是’\001’,若文件分隔符不是’\001’,程序不会报错,但表查询的结果会全部为’null’。
②用vi编辑器Ctrl+v然后Ctrl+a后输入的’^A’即为’\001’
#创建t_t5,不指定分隔符
hive (xiaoliu)> create table t_t5(id int,attention string);
[xiaokang@hadoop hive_data]$ vi t_t5.txt
1^A微信公众号
2^A大象吃西瓜
[xiaokang@hadoop hive_data]$ hadoop fs -put t_t5.txt /user/hive/warehouse/xiaoliu.db/t_t5
hive (xiaoliu)> select * from t_t5;
OK
t_t5.id t_t5.attention
1 微信公众号
2 大象吃西瓜
您的点赞支持是小编更新文章的最大动力