当前位置:   article > 正文

Hive的DDL--复杂类型的数据表指定分隔符_hive ddl 分隔符

hive ddl 分隔符

案例一:

# 创建一个文档,姓名和工作地点之间用制表符'\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"]
# 映射成功
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

案例二:

[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  海龙  {"吃饭":"非常喜欢","学习":"喜欢"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

建表语句的解释:

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  大象吃西瓜
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

您的点赞支持是小编更新文章的最大动力

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号