Hive 镶木地板支持的蜂窝表:在Impala中数组列不可查询

Hive 镶木地板支持的蜂窝表:在Impala中数组列不可查询,hive,impala,parquet,Hive,Impala,Parquet,虽然Impala比Hive快得多,但我们使用Hive是因为它支持复杂的(嵌套的)数据类型,如数组和映射 我注意到,Impala现在支持复杂的数据类型。因为在黑斑羚中运行蜂巢UDF也是可能的,所以我们可能可以在黑斑羚中做任何我们想做的事情,但是要快得多。这是个好消息 当我浏览文档时,我看到Impala希望数据以拼花格式存储。“我的数据”的原始形式恰好是两列CSV,其中第一列是ID,第二列是管道分隔的字符串数组,例如: 123,ASDFG|SDFGH|DFGHJ|FGHJK 234,QWERT|WE

虽然Impala比Hive快得多,但我们使用Hive是因为它支持复杂的(嵌套的)数据类型,如数组和映射

我注意到,Impala现在支持复杂的数据类型。因为在黑斑羚中运行蜂巢UDF也是可能的,所以我们可能可以在黑斑羚中做任何我们想做的事情,但是要快得多。这是个好消息

当我浏览文档时,我看到Impala希望数据以拼花格式存储。“我的数据”的原始形式恰好是两列CSV,其中第一列是ID,第二列是管道分隔的字符串数组,例如:

123,ASDFG|SDFGH|DFGHJ|FGHJK
234,QWERT|WERTY|ERTYU
已创建配置单元表:

CREATE TABLE `id_member_of`(
  `id` INT, 
  `member_of` ARRAY<STRING>)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  COLLECTION ITEMS TERMINATED BY '|' 
  LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
CREATE TABLE `id_member_of_parquet` (
 `id` STRING, 
 `member_of` ARRAY<STRING>) 
STORED AS PARQUET;
创建了桌子的拼花地板版本:

CREATE TABLE `id_member_of`(
  `id` INT, 
  `member_of` ARRAY<STRING>)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  COLLECTION ITEMS TERMINATED BY '|' 
  LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
CREATE TABLE `id_member_of_parquet` (
 `id` STRING, 
 `member_of` ARRAY<STRING>) 
STORED AS PARQUET;
现在可以在蜂巢中查询拼花地板桌:

hive> select * from id_member_of_parquet;
123 ["ASDFG","SDFGH","DFGHJ","FGHJK"]
234 ["QWERT","WERTY","ERTYU"]
奇怪的是,当我在Impala中查询同一个镶木地板支持的表时,它没有返回数组列:

[hadoop01:21000] > invalidate metadata;
[hadoop01:21000] > select * from id_member_of_parquet;
+-----+
| id  |
+-----+
| 123 |
| 234 |
+-----+

问题:数组列发生了什么?你能看出我做错了什么吗

结果非常简单:我们可以通过使用点将数组添加到
中的
来访问数组,例如

Query: select * from id_member_of_parquet, id_member_of_parquet.member_of
+-----+-------+
| id  | item  |
+-----+-------+
| 123 | ASDFG |
| 123 | SDFGH |
| 123 | DFGHJ |
| 123 | FGHJK |
| 234 | QWERT |
| 234 | WERTY |
| 234 | ERTYU |
+-----+-------+

除了将数组转换为字符串per之外,是否可以像在配置单元中一样将数组的内容保留在一行?@NeilBest如果使用GROUP_CONCAT,这是可能的。