配置单元中的explode函数不工作

yzuktlbb  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(338)

我有以下数据。

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函数时,数据不会被拆分成行。

mdfafbf1

mdfafbf11#

这是因为在创建表时可能没有声明collection items termination子句。我将向您提供创建此表的语法:
create table if not exists authors(author string,books array)行格式分隔字段,以“|”结尾,集合项以“,”结尾,存储为textfile;
然后加载数据:将数据本地inpath'/home/cloudera/desktop/hadoop/dummy'加载到表作者中;
另外请注意,集合项和字段终止都应该是不同的。这意味着,如果您声明集合项以逗号分隔,那么您必须声明字段终止值与逗号不同的内容我已声明数组终止为逗号,字段终止为|(管道)。下面是样本数据:

author1|book1,book2,book3 author2|book4,book5,book6

现在启动select查询,您也可以尝试简单分解,无需在此处执行拆分:

hive> select * from authors;

作者。作者。书籍
作者1[“book1”,“book2”,“book3”]
作者2[“book4”,“book5”,“book6”]

hive>select explode(books) as mycol from authors;

列book1 book2 book3 book4 book5 book6

yebdmbv4

yebdmbv42#

输出看起来像books数组包含唯一一个字符串元素 "book1,book2,book3" .
应该是这样的: ["book1","book2","book3"] 不是 ["book1,book2,book3"] 这就是分解生成单行的原因。如果你还想引爆它,用 explode(split(books[0],','))

相关问题