【问题标题】:Snowflake - Querying Nested JSONSnowflake - 查询嵌套的 JSON
【发布时间】:2021-02-04 18:34:37
【问题描述】:

我需要一些帮助来查询这个我已摄取到 Snowflake 中的临时表中的 JSON 文件。因此,我创建了一个 JSON_DATA 变体列并计划查询并执行 COPY INTO 另一个表,但我的查询还没有工作......我觉得我很接近(可能?)

JSON 布局:

{
  "nextPage": "01",
  "page": "0",
  "status": "ok",
  "transactions": [
    {
      "id": "65985",
      "recordTp": "vendorbill",
      "values": {
        "account": [
          {
            "text": "14500 Deferred Expenses",
            "value": "249"
          }
        ],
        "account.number": "1450",
        "account.type": [
          {
            "text": "Deferred Expense",
            "value": "DeferExpense"
          }
        ],
        "amount": "51733",
        "classnohierarchy": [
          {
            "text": "901 Corporate",
            "value": "139"
          }
        ],
        "currency": [
          {
            "text": "Canadian Dollar",
            "value": "3"
          }
        ],
        "customer.altname": "V Sties expenses (Tor)",
        "customer.custate": "12/31/2019",
        "customer.custentient": "ada Inc.",
        "customer.custendate": "1/1/2019",
        "customer.entyid": "PR781",
        "departmentnohierarchy": [
          {
            "text": "8rity",
            "value": "37"
          }
        ],
        "fxamount": "689",
        "location": [
          {
            "text": "Othad Projects",
            "value": "48"
          }
        ],
        "postingperiod": [
          {
            "text": "Jan 2020",
            "value": "1"
          }
        ],
        "subsidiary.custrecord_region": [
          {
            "text": "CANADA",
            "value": "3"
          }
        ],
        "subsidiarynohierarchy": [
          {
            "text": "ada Inc.",
            "value": "25"
          }
        ]
      }
    },

我已经能够查询未(深度)嵌套的值,但我需要帮助,例如,从“classnohierarchy”中获取值,以获取我尝试过的“文本”和“值”:

transactions.value:"values".classnohierarchy.text::string as class_txt,
transactions.value:"values".classnohierarchy.value::string as class_val,

但它返回 NULL 值。

以下是我的整个查询:

SELECT 
JSON_DATA:status::string as connection_status,
transactions.value:id::string as id,
transactions.value:recordType::string as record_type,
transactions.value:"values"::variant as trans_val,
transactions.value:"values".account as acc,
transactions.value:"values".account.text as text,
transactions.value:"values".account.value as val,
transactions.value:"values"."account.number"::string as acc_num,
transactions.value:"values"."account.type".text::string as acc_type_txt,
transactions.value:"values"."account.type".value::string as acc_type_val,
transactions.value:"values".amount::string as amount,
**transactions.value:"values".classnohierarchy.text::string as class_txt,
transactions.value:"values".classnohierarchy.value::string as class_val,**
transactions.value:"values".currency.text::string as currency_text,
transactions.value:"values".currency.value::string as currency_val,
transactions.value:"values"."customer.altname"::string as customer_project_name,
transactions.value:"values"."customer.custate"::string as customer_end_date,
transactions.value:"values"."customer.custentient"::string as customer_end_client,
transactions.value:"values"."customer.custendate"::string as customer_start_date,
transactions.value:"values"."customer.entyid"::string as customer_project_id,
transactions.value:"values".departmentnohierarchy.text::string as department_name,
transactions.value:"values".departmentnohierarchy.value::string as department_value,
transactions.value:"values".fxamount::string as fx_amount,
transactions.value:"values".location.text::string as product_name,
transactions.value:"values".postingperiod.text::string as postingperiod,
transactions.value:"values".postingperiod.value::string as postingperiod,
transactions.value:"values"."subsidiary.custrecord_region".text::string as region_name,
transactions.value:"values"."subsidiary.custrecord_region".value::string as region_value,
transactions.value:"values".subsidiarynohierarchy.text::string as entity_name,
transactions.value:"values".subsidiarynohierarchy.value::string as entity_value,

FROM MY_TABLE,
LATERAL FLATTEN (JSON_DATA:transactions) as transactions

这是雪花中显示的图片:

SNOWFLAKE_SCREENSHOT

【问题讨论】:

    标签: json multidimensional-array nested snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    departmentnohierarchy 是一个数组。您需要提及以下索引。

    select *,transactions.VALUE:"values".departmentnohierarchy[0].value::text as department_name  
    FROM jsont1,
    LATERAL FLATTEN (JSON_DATA:transactions) as transactions
    

    【讨论】:

    • 非常感谢@RajibDeb!这工作你是最棒的!!!度过一个美好的夜晚!
    猜你喜欢
    • 2022-10-12
    • 2023-02-03
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2021-06-27
    • 2013-03-18
    • 2023-02-04
    • 2016-03-22
    相关资源
    最近更新 更多