我有以下数据。
hive> select * from authors;
author1 ["book1,book2,book3"]
hive> describe authors;
author string
books array<string>
hive> select explode(books) as mycol from authors;
book1,book2,book3
当我使用爆炸功能时,数据不会分成行。
答案 0 :(得分:1)
这是因为您可能没有在创建表时声明收集项终止子句。我为您提供了创建该表的语法:
如果不存在作者,则创建表(作者字符串,books数组)ROW格式由“ |”终止的限定字段收集项以“,”结尾,以文本文件存储;
然后加载数据:将数据本地LOCAL INPATH'/ home / cloudera / Desktop / hadoop / dummy'加载到表作者中;
还请注意,收集项和字段终止两者应彼此不同,这意味着如果声明收集项以逗号分隔,则必须声明归档终止值与逗号不同数组终止为逗号,字段终止为|(pipe)。下面是示例数据:
author1|book1,book2,book3 author2|book4,book5,book6
现在触发选择查询,您也可以尝试简单爆炸,而无需在此处拆分:
hive> select * from authors;
authors.author authors.books
author1 [“ book1”,“ book2”,“ book3”]
author2 [“ book4”,“ book5”,“ book6”]
hive>select explode(books) as mycol from authors;
col book1 book2 book3 book4 book5 book6
答案 1 :(得分:0)
输出看起来像books数组包含唯一带有字符串"book1,book2,book3"
的元素。
应该如下所示:
["book1","book2","book3"]
不是["book1,book2,book3"]
这就是爆炸生成单行的原因。
如果您仍想要将其展开,请使用explode(split(books[0],','))