Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Snowflake cloud data platform 在Snowflake中提取variant/json数据_Snowflake Cloud Data Platform - Fatal编程技术网

Snowflake cloud data platform 在Snowflake中提取variant/json数据

Snowflake cloud data platform 在Snowflake中提取variant/json数据,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有一个列,比如variant_列,它的数据看起来与此完全相同(这将是一行数据): [ { “键”:“列名称1”, “值”:“值在这里” }, { “密钥”:“元数据”, “值”:“{这里可能是另一个巨大的json}” }, { “键”:“列名称2”, “值”:“值在这里再次出现” }, { “键”:“列名称3”, “价值”:“价值在这里继续” } ]虽然不是理想的JSON结构,但您仍然可以将其展平,使用一些case语句,然后再次将其聚合在一起。试着这样做: WITH x AS ( SELEC

我有一个列,比如variant_列,它的数据看起来与此完全相同(这将是一行数据):

[
{
“键”:“列名称1”,
“值”:“值在这里”
},
{
“密钥”:“元数据”,
“值”:“{这里可能是另一个巨大的json}”
},
{
“键”:“列名称2”,
“值”:“值在这里再次出现”
},
{
“键”:“列名称3”,
“价值”:“价值在这里继续”
}

]
虽然不是理想的JSON结构,但您仍然可以将其展平,使用一些case语句,然后再次将其聚合在一起。试着这样做:

WITH x AS (
SELECT parse_json('[
  {
    "key": "column_name_1",
    "value": "value_goes_here"
  },
  {
    "key": "metadata",
    "value": "{this_could_be_another_huge_json_here}"
  },
  {
    "key": "column_name_2",
    "value": "value_goes_here_again"
  },
  {
    "key": "column_name_3",
    "value": "value_goes_here_yet_again"
  }
]') as var
)
SELECT f.seq,
       MAX(CASE WHEN f.value:key::varchar = 'column_name_1' THEN f.value:value::varchar END) as column_name_1,
       MAX(CASE WHEN f.value:key::varchar = 'column_name_2' THEN f.value:value::varchar END) as column_name_2,
       MAX(CASE WHEN f.value:key::varchar = 'column_name_3' THEN f.value:value::varchar END) as column_name_3,
       MAX(CASE WHEN f.value:key::varchar = 'metadata' THEN f.value:value::variant END) as metadata
FROM x,
LATERAL FLATTEN(input=>var) f
GROUP BY f.seq
;

谢谢,这个很好用。此时我遇到的另一个问题是
元数据
列。该数据中有反斜杠(例如,“product\u type\”:“ALL\”)。当我在此列中使用
REPLACE()
删除反斜杠时,它会将其转换回字符串。但是,当我尝试将删除反斜杠的“替换”字符串转换回变体时,它会再次添加反斜杠!我需要能够与这个元数据列进行交互,就像它是一个变体一样,但是添加的反斜杠使这变得不可能。最初,我将元数据转换为一个变量(正如您在解决我的问题时添加的
::variant
),但是如果您将
\“
替换为
”,然后执行
PARSE_JSON(…)`而不是强制转换为变量,它将正确完成任务。