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}}条件下编写数组?
答案 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;);
这很有效,因为我们正在尝试访问数组,我们需要通过索引访问它们。