我有一个配置单元表列作为
col1 array<map<string,string>>
此列包含以下值:
[
{'a':1,'b':2},
{'a':1,'c':3},
.
.
.
]
现在,内部Map中的键可以根据每个项目而变化。我想过滤数组,以便只获取 b
存在。这样的事情能用计算机来实现吗 array_contains
? 我试过了,但我错了
select col1 from mytab where size(col1) > 0 and array_contains(col1, 'b');
FAILED: SemanticException [Error 10016]: Line 1:196 Argument type mismatch ''b'': "map<string,string>" expected at function ARRAY_CONTAINS, but "string" is found
很明显,但我还是试过了。
更新
我试过了
select res from mytab LATERAL VIEW EXPLODE (col1) c as res where
size(col1) > 0 and res is not NULL and length(res) > 0;
为此我得到
{}
{a=1, b=2}
{a=1, b=2}
{}
这是好的,但我如何才能避免空洞的结果,即。 {}
?
更新2
我可以删除空的结果
select res from mytab LATERAL VIEW EXPLODE (col1) c as res where
size(col1) > 0 and res['b'] is not NULL and length(res['b']) > 0 res <> '{}';
最后一个问题是,如何转换 res
从字符串到正确的Map?我想有一些地方的条件,使用密钥在res。我试过了
select str_to_map(res) as st from mytab LATERAL VIEW EXPLODE (col1) c as res where
size(col1) > 0 and res is not NULL and length(res) > 0 res <> '{}';
但我明白了
{"{a=1, b=2}":null}
我怎样才能得到一张合适的Map?我只想用Map的键过滤。现在这个Map被选为一个字符串
select res['b'] from mytab LATERAL VIEW EXPLODE (col1) c as res where
size(col1) > 0 and res['b'] is not NULL and length(res) > 0 res['b'] <> '{}' and res['b']=1;
但我明白了
失败:semanticexception[error 10033]:行1:237[]对非集合类型“b”无效:string
暂无答案!
目前还没有任何答案,快来回答吧!