【问题标题】:Querying multi-element semi-structured data (json) with Snowflake SQL使用 Snowflake SQL 查询多元素半结构化数据 (json)
【发布时间】:2020-11-13 08:52:46
【问题描述】:

我无法使用 Snowflake SQL 正确查询多级 (json) 数据的半结构化数据。 您能否协助评论不正确的内容、我正在解析的数据或我的 FLATTEN 语法? 如何写出正确的语法?非常感谢! 我的查询是:

WITH a AS ( 
SELECT PARSE_JSON('[ 
             {
"name": "conversion_event",
"created_at" : "2020-01-01 00:00:00",
"uuid" : 12314512441312312,
"campaign_name": "campaign_name1",
"campaign_channel": "channel1",
"meta":{
"app_name": "iOS",
"os_version": 11,
"country" : "ABC",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-15 00:00:00",
"uuid" : 12314512441312435,
"campaign_name": "campaign_name2",
"campaign_channel": "channel1",
"meta":{
"app_name": "Winsows",
"os_version": "n/a" ,
"country" : "AC",
"latitude": 16.35,
"longitude": 31.45,
},
"type_of_conversion": "purchase"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-30 00:00:00",
"uuid" : 12314512441554433,
"campaign_name": "campaign_name1",
"campaign_channel": "channel3",
"meta":{
"app_name": "iOS",
"os_version": 11,
"country" : "AB",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}
,
{
"name": "conversion_event",
"created_at" : "2020-02-28 00:00:00",
"uuid" : 12314512441312312,
"campaign_name": "campaign_name2",
"campaign_channel": "channel3",
"meta":{
"app_name": "iOS",
"os_version": "9",
"country" : "ABC",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-30 00:00:00",
"uuid" : 12314512441312435,
"campaign_name": "campaign_name3",
"campaign_channel": "channel4",
"meta":{
"app_name": "Winsows",
"os_version": "n/a",
"country" : "AC",
"latitude": 16.35,
"longitude": 31.45,
},
"type_of_conversion": "purchase"
}
,
{
"name": "conversion_event",
"created_at" : "2020-03-01 00:00:00",
"uuid" : 12314512441312355,
"campaign_name": "campaign_name9",
"campaign_channel": "channel1",
"meta":{
"app_name": "Linux",
"os_version": "n/a",
"country" : "DE",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "purchase"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-06 00:00:00",
"uuid" : 12314512441312355,
"campaign_name": "campaign_name9",
"campaign_channel": "channel1",
"meta":{
"app_name": "Linux",
"os_version": "n/a",
"country" : "DE",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registration"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-01 00:00:00",
"uuid" : 12314512441554433,
"campaign_name": "campaign_name6",
"campaign_channel": "channel5",
"meta":{
"app_name": "iOS",
"os_version": 11,
"country" : "AB",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-01 00:00:00",
"uuid" : 12314512441312312,
"campaign_name": "campaign_name1",
"campaign_channel": "channel1",
"meta":{
"app_name": "iOS",
"os_version": 11,
"country" : "ABC",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}
,
{
"name": "conversion_event",
"created_at" : "2020-01-01 00:00:00",
"uuid" : 12314512441312312,
"campaign_name": "campaign_name1",
"campaign_channel": "channel1",
"meta":{
"app_name": "iOS",
"os_version": 11,
"country" : "ABC",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}
,
{
"name": "conversion_event",
"created_at" : "2020-06-04 00:00:00",
"uuid" : 12314512441312312,
"campaign_name": "campaign_name3",
"campaign_channel": "channel2",
"meta":{
"app_name": "iOS",
"os_version": 11,
"country" : "ABC",
"latitude": 12.12,
"longitude": 12.12,
},
"type_of_conversion": "registrations"
}

]')::variant as var)
            
            
            SELECT var:name::string AS "name", meta.value:country::string AS "country", var:uuid::int AS "uuid",
            var:type_of_conversion::string AS "type_of_conversion",  var:campaign_name::string AS "campaign_name",
             meta.value:app_name::string AS "app_name"
                       FROM a
, LATERAL FLATTEN (var:meta) AS meta ; 

【问题讨论】:

  • 您的问题应该包含一个最小可重现的示例。这个 JSON 不是一个最小的例子

标签: sql json snowflake-cloud-data-platform flatten


【解决方案1】:

实际问题在于您的数据,而不是您的代码。在 JSON 数据中,您将多个 json obect 数据用作单行。因此它会给出 Error parsing JSON: more than one document in the输入 。因此 Snowflake 建议在转换数据之前对其进行处理。 [Check This]

否则,您可以尝试从其中取出一个 json 对象。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 2023-01-10
    • 2020-05-30
    • 2015-01-15
    • 2022-08-11
    • 2014-10-03
    • 1970-01-01
    • 2021-06-19
    • 2011-11-16
    相关资源
    最近更新 更多