雪花-查询嵌套JSON

时间:2020-10-21 19:29:51

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

我需要一些帮助来查询我在Snowflake中的临时表中提取的这个JSON文件。因此,我创建了一个JSON_DATA变体列,并计划查询并将其复制到另一个表中,但是我的查询仍无法正常工作……我感觉自己已经关闭(可能吗?)

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”中获取值,以获取我尝试过的“文本”和“值”: / p>

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

1 个答案:

答案 0 :(得分:1)

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

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