我有一个包含json variant
s的表,其中包含的键可能存在,也可能不存在,这取决于API响应。
示例表:
create or replace temporary table test (variant_col variant);
insert into test(variant_col)
select parse_json('{"response": [{"key1":[1,2,3]}, {"key2":[7,8,9]}]}');
insert into test(variant_col)
select parse_json('{"response": [{"key2":[7,8,9]}]}');
我想根据它们的关键点横向展平它们,如果存在,使用key1
,否则使用key2
(将始终存在)
SELECT
iff(f2.value::int is null, 'key2', 'key1') as value_type,
ifnull(f2.value::int, f3.value::int) as desired_value
FROM
test,
LATERAL FLATTEN(input => response) as f1,
LATERAL FLATTEN(input => f1.value:key1) as f2,
LATERAL FLATTEN(input => f1.value:key2) as f3
;
1条答案
按热度按时间qcuzuvrc1#
我们可以通过给每一行一个id来解决这个问题,然后我们可以
union all
2个查询的结果-取决于key1
的存在: