我有以下数据。
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
当我使用explode函数时,数据不会被拆分成行。
2条答案
按热度按时间mdfafbf11#
这是因为在创建表时可能没有声明collection items termination子句。我将向您提供创建此表的语法:
create table if not exists authors(author string,books array)行格式分隔字段,以“|”结尾,集合项以“,”结尾,存储为textfile;
然后加载数据:将数据本地inpath'/home/cloudera/desktop/hadoop/dummy'加载到表作者中;
另外请注意,集合项和字段终止都应该是不同的。这意味着,如果您声明集合项以逗号分隔,那么您必须声明字段终止值与逗号不同的内容我已声明数组终止为逗号,字段终止为|(管道)。下面是样本数据:
现在启动select查询,您也可以尝试简单分解,无需在此处执行拆分:
作者。作者。书籍
作者1[“book1”,“book2”,“book3”]
作者2[“book4”,“book5”,“book6”]
列book1 book2 book3 book4 book5 book6
yebdmbv42#
输出看起来像books数组包含唯一一个字符串元素
"book1,book2,book3"
.应该是这样的:
["book1","book2","book3"]
不是["book1,book2,book3"]
这就是分解生成单行的原因。如果你还想引爆它,用explode(split(books[0],','))