镶木地板查询WHERE子句不适用于ARRAY

时间:2015-09-14 13:01:21

标签: hive hadoop-streaming parquet

drop table if exists test_parquet;
CREATE EXTERNAL TABLE IF NOT EXISTS test_parquet (
ckey string, 
eid string, 
emkey string, 
mkey string,
urid string,
vst array<struct<bd:string, p01:string, p02:string, uid:string, v_h:string, v_w:string, v_m:string,pd:array<struct<c1key:string,cp_met_key:string,od:string,o_key:string,omt:string,sey:string,skey:string>>>>
) 
STORED AS Parquet
LOCATION  '/somelocation';

INSERT OVERWRITE TABLE test_parquet SELECT * FROM another_table;

现在我做了

select * from test_parquet;

它有效

select ckey, vst[0].bd, vst[0].pd[0].od from test_parquet limit 10;

它工作得很好!!

但是

select ckey
from test_parquet 
where test_parquet.vst.p01 in ('A','B','C','D');

它失败。

知道如何在where的{​​{1}}条件下编写数组?

1 个答案:

答案 0 :(得分:0)

我在做这件事的时候得到了答案。 选择ckey 来自test_parquet 其中test_parquet.vst [0] .p01 in(&#39; A&#39;,&#39; B&#39;,&#39; C&#39;,&#39; D&#39;); 要么 选择ckey 来自test_parquet 其中test_parquet.vst [1] .p01 in(&#39; A&#39;,&#39; B&#39;,&#39; C&#39;&#39; D&#39;);

这很有效,因为我们正在尝试访问数组,我们需要通过索引访问它们。