【问题标题】:Use of Lateral Flatten for JSON in Snowflake在雪花中对 JSON 使用横向扁平化
【发布时间】:2022-08-20 02:25:13
【问题描述】:

我有以下 JSON 作为雪花中的变体字段。查询数据时我得到NULLS,如下所示 - -

create or replace table car_sales
( 
  src variant
)
as
select parse_json(column1) as src
from values
(\'{
  \"MyData\": {
    \"DataID\": \"16784\",
    \"EmpFirstName\": \"Jenny\",
    \"EmpLastName\": \"Test1\",
    \"Description\": \"My Company Data\",
    \"Assignment\": [
      {
        \"AssignentId\": \"1077\",
        \"AssignentName\": \"Multi Location\",
        \"AssignentDescription\": \"usa\",
      },
    ],
    \"salary\": 21557
  },
  \"Update\": true
}\') v;

当我查询数据时,我得到 Nulls -

select value:AssignentId::string as \"1ProductName\"
from car_sales,
lateral flatten(input => src:Assignment);

输出为 NULL

您能帮助解决为什么会发生这种情况吗?

    标签: json snowflake-cloud-data-platform


    【解决方案1】:

    尝试添加我的数据横向展平中的限定符:

    with car_sales(src) as (
        select
            parse_json(column1) as src
        from
        values
            (
                '{ "MyData": {
         "DataID": "16784",
        "EmpFirstName": "Jenny",
        "EmpLastName": "Test1",
        "Description": "My Company Data",
        "Assignment": [
          {
            "AssignentId": "1077",
            "AssignentName": "Multi Location",
            "AssignentDescription": "usa",
          },
        ],
        "salary": 21557
        }, "Update": true }'
            )
    )
    select
        value:AssignentId::string as "1ProductName"
    from
        car_sales,
        lateral flatten(input => src:MyData:Assignment);
    
    
    1ProductName
    1077

    【讨论】:

      【解决方案2】:

      您正在尝试直接访问子节点。同时指定父节点

      select value:AssignentId::string as "1ProductName"
      from car_sales,
      lateral flatten(input => src:MyData:Assignment);
      

      input => src:Assignment
      

      应该

      input => src:MyData:Assignment
      

      这是读取每个键的值的查询

      select  src:MyData.DataID::string as "DataID"
              , src:MyData.EmpFirstName::string as "EmpFirstName"
              , src:MyData.EmpLastName::string as "EmpLastName"
              , src:MyData.Description::string as "Description"
              , src:MyData.Assignment[0]:AssignentId::string as "AssignentId/1ProductName"
              , src:MyData.Assignment[0]:AssignentName::string as "AssignentName"
              , src:MyData.Assignment[0]:AssignentDescription::string as "AssignentDescription"
              , src:MyData.salary::number as "salary"
              , src:Update::boolean as "Update"
      from car_sales
      

      【讨论】:

      • 如何在我的查询中添加其他标签,如更新。例如从 car_sales 中选择 value.Update::Boolean 作为“Update”,value:AssignentId::string 作为“1ProductName”,横向展平(input => src:MyData:Assignment);以上查询给了我一个错误 - 意外的“更新”。
      猜你喜欢
      • 2021-03-31
      • 1970-01-01
      • 2019-08-10
      • 2020-06-17
      • 2021-04-25
      • 2023-01-07
      • 2016-08-16
      • 2021-08-16
      • 2023-02-08
      相关资源
      最近更新 更多