在蜂巢中爆炸功能不起作用

时间:2018-04-05 10:09:45

标签: hadoop hive explode

我有以下数据。

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

当我使用爆炸功能时,数据不会分成行。

2 个答案:

答案 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],','))