实木复合地板查询 WHERE 子句不适用于 ARRAY
parquet query WHERE clause not working for ARRAY
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');
它失败了。
知道如何在 parquet
的 where
条件下编写数组吗?
我自己在研究的过程中得到了答案。
select ckey
来自 test_parquet
其中 test_parquet.vst[0].p01 在 ('A','B','C','D');
要么
select c键
来自 test_parquet
其中 test_parquet.vst[1].p01 在 ('A','B','C','D');
这很有效,因为我们正在尝试访问一个数组,我们需要通过索引访问它们。
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');
它失败了。
知道如何在 parquet
的 where
条件下编写数组吗?
我自己在研究的过程中得到了答案。 select ckey 来自 test_parquet 其中 test_parquet.vst[0].p01 在 ('A','B','C','D'); 要么 select c键 来自 test_parquet 其中 test_parquet.vst[1].p01 在 ('A','B','C','D');
这很有效,因为我们正在尝试访问一个数组,我们需要通过索引访问它们。