Snowflake - 查询嵌套 JSON

Snowflake - Querying Nested JSON

我需要一些帮助来查询这个 JSON 文件,我已将其提取到 Snowflake 中的临时文件 table 中。所以,我创建了一个 JSON_DATA 变体列并计划查询并复制到另一个 table,但我的查询还没有工作......我觉得我很接近(可能? )

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' 的值,以获取 'text' 和 'value' 我试过了:

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 中显示的内容的图片:

SNOWFLAKE_SCREENSHOT

departmentnohierarchy 是一个数组。你需要在下面提到索引。

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