我试图从变体列中的Extern外表X中检索雪花半结构化数据的健康值。
该代码的一个示例如下:
[
{
"party":
"[{\"class\":\"Farmer\",\"gender\":\"Female\",\"ethnicity\":\"NativeAmerican\",\"health\":2},
{\"class\":\"Adventurer\",\"gender\":\"Male\",\"ethnicity\":\"White\",\"health\":3},
{\"class\":\"Farmer\",\"gender\":\"Male\",\"ethnicity\":\"White\",\"health\":0},
{\"class\":\"Banker\",\"gender\":\"Female\",\"ethnicity\":\"White\",\"health\":0}
}
] 我试过从https://community.snowflake.com/s/article/querying-semi-structured-data上阅读雪花文档
我还尝试了以下查询来简化查询:
SELECT result.value:health AS PartyHealth
FROM X
WHERE value = 'Trail'
AND name = 'Completed'
AND PartyHealth > 0,
TABLE(FLATTEN(X, 'party')) result和
SELECT [0]['party'][0]['health'] AS Health
FROM X
WHERE value = 'Trail'
AND name = 'Completed'
AND PH > 0;我试图从表X中从包含变量方的列extra中检索健康值,其中包含4个重复值0-3。我不知道怎么做,有人能告诉我如何在雪花中查询半结构化数据,考虑到文档没有多大意义吗?
发布于 2021-07-02 07:51:23
首先,您发布的JSON值似乎格式化错误(可能是复制粘贴问题)。
下面是一个有用的例子:
[{ "party": [ {"class":"Farmer","gender":"Female","ethnicity":"NativeAmerican","health":2}, {"class":"Adventurer","gender":"Male","ethnicity":"White","health":3}, {"class":"Farmer","gender":"Male","ethnicity":"White","health":0}, {"class":"Banker","gender":"Female","ethnicity":"White","health":0} ] }]CREATE OR REPLACE TABLE myvariant (v variant);INSERT INTO myvariant SELECT PARSE_JSON('[{ "party": [ {"class":"Farmer","gender":"Female","ethnicity":"NativeAmerican","health":2}, {"class":"Adventurer","gender":"Male","ethnicity":"White","health":3}, {"class":"Farmer","gender":"Male","ethnicity":"White","health":0}, {"class":"Banker","gender":"Female","ethnicity":"White","health":0} ] }]');SELECT v[0]:party[0].health FROM myvariant;上面给我的是:

对于其他行,您可以简单地这样做:
SELECT v[0]:party[1].health FROM myvariant;
SELECT v[0]:party[2].health FROM myvariant;
SELECT v[0]:party[3].health FROM myvariant;发布于 2021-07-02 22:27:37
另一个选择可能是使数据更像一个表..。我发现使用JSON比JSON更容易:-)
代码在底部-只要复制/粘贴,它运行在雪花返回截图下面。

SELECT d4.path, d4.value
from
lateral flatten(input=>PARSE_JSON('[{ "party": [ {"class":"Farmer","gender":"Female","ethnicity":"NativeAmerican","health":2}, {"class":"Adventurer","gender":"Male","ethnicity":"White","health":3}, {"class":"Farmer","gender":"Male","ethnicity":"White","health":0}, {"class":"Banker","gender":"Female","ethnicity":"White","health":0} ] }]') ) as d ,
lateral flatten(input=> value) as d2 ,
lateral flatten(input=> d2.value) as d3 ,
lateral flatten(input=> d3.value) as d4https://stackoverflow.com/questions/68218860
复制相似问题