Snowflake cloud data platform 雪花查询作为数组存储的嵌套JSON

Snowflake cloud data platform 雪花查询作为数组存储的嵌套JSON,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我已经运行了以下代码来生成表中的数组 CREATE OR REPLACE TABLE PROVIDER_TABLE_V8 AS SELECT "rmpostcode", array_agg(object_delete(object_construct(f.*),'rmpostcode') ) within group (order by "name") AS "providers" FROM FASTEST_DOWN_STR_V8

我已经运行了以下代码来生成表中的数组

CREATE OR REPLACE TABLE PROVIDER_TABLE_V8 AS 
SELECT "rmpostcode", 
array_agg(object_delete(object_construct(f.*),'rmpostcode') ) within group (order by "name") AS "providers"
FROM FASTEST_DOWN_STR_V8 f
GROUP BY "rmpostcode";
我现在试图检查生成的表是否完成了我认为它已经完成的操作。。。但我不确定如何查询结果对象。尝试横向展平等都失败了,因为它不再是JSON了,是吗

编辑:谢谢@Rob Silva,我已将数据类型更改为VARIANT,这对创建此表有所帮助

我的目标是

[{最快下降:0.00,名称:B4RN,当前值:0},{最快下降:0.00,名称:Gigaclear,当前值:0},{最快下降:0.00,名称:OFNL IFNL,当前值:0},{最快下降:0.00,名称:airband_fibre,当前值:0},{最快下降:0.00,名称:balquhidder,当前:0},{最快下降:0.00,名称:BlackFiber,当前:0},]

那是一排


我要做的是查找指定名称中present=1的所有行,但我很难查询嵌套的JSON对象。

Chris-尝试使用parse_jsonproviders,看看结果对象是否可以按预期的方式展平

尝试横向展平等失败,因为它不再是JSON, 是吗

是的。你可以把它转到jsonlint.com,它会进行验证

下面是如何一步一步地使其工作的分解:

create table foo (v variant);

-- Insert your data
insert into foo select parse_json('<your json>');

-- See how it looks raw.
select * from foo;

-- Now flatten the array with a lateral join.
-- Note the addition of metadata columns from the
-- output of the flatten table function
select * from foo, lateral flatten(v);

-- Filter rows to where present = 1
-- Parse using the pattern COLUMN_NAME:json_property::cast_type
select * from foo, lateral flatten(v) where VALUE:present::int = 1;

-- Clean up and alias the names, etc.
select   VALUE:fastest_down::float      as FASTEST_DOWN
        ,VALUE:name::string             as "NAME"
        ,VALUE:present::int             as PRESENT
from   foo, lateral flatten(v)
-- Optionally add your where clause on PRESENT
;

不幸的是,它没有-我从UPC.DEV.PROVIDER_TABLE_V8 LIMIT 10运行SELECT parse_JSON providers;但是我得到了错误SQL编译错误:错误行1位于函数“parse_JSON”的位置7无效参数类型:在您添加的示例中,您在同一行中有多个present。您的意思是至少一个present=1,或者名称是输入的一部分吗?是的,对不起,我应该放原始表,但它是rmpostcode,name,faster down,presentThank@Greg,这是一个棘手的函数来让你的头脑一开始,但设法得到这个工作我个人认为OP案例的问题是数组_agg创建数组类型,雪花期望对象或variant或parse_json的文本。::变量应该是解决问题的好方法