【问题标题】:Query/Flatten all the elemensts inside array in nested Json in snowflake在雪花中的嵌套Json中查询/展平数组内的所有元素
【发布时间】:2022-01-22 15:17:30
【问题描述】:

我是雪花的新手。我很想查询/展平嵌套 Json 中的所有字段,但在 Transactio 数组中,我有多个事务,我无法提取所有事务,我只能使用索引选择第一个。

我的json结构是这样的

[
  {
    "Employee": {
      "UID": "value",
      "Transactions": [
        {
          "ORBIS-Tx-ID": "123F",
          "ReferenceID": {
            "Amount": {
              "Charge": 0.3,
              "Currency": "USD",
              "StatusEntry": {
                "Status": "COMPLETED",
                "Timestamp": {
                  "$date": "2021-09-07T11:58:40.672Z"
                }
              },
              "SummaryStatus": "COMPLETED",
              "Value": 9.7
            },
            "Metadata": {
              "Notes": "Salary advance paid out",
              "TxSubType": {
                "From": {
                  "OrbisUID": "OPA",
                  "ProviderID": "gbQG0sTWZVmioQ"
                },
                "To": {
                  "UID": "59B7",
                  "ProviderID": "DnYOEs5A"
                }
              },
              "TxType": "ADVANCE"
            },
            "OrigMessage": {
              "EC": "0",
              "SC": 200,
              "approvalCode": "145382",
              "card": {
                "expirationDate": "202605",
                "last4": "6423"
              },
              "fees": {
                "interchange": "0.10",
                "network": "0.01"
              },
              "network": "VisaFF",
              "networkID": "5812198027",
              "networkRC": "00",
            },
            "Provider": {
              "ProviderID": "iuMVYeZLHQ",
              "ProviderName": "Name"
            }
          }
        },
        {
          "ORBIS-Tx-ID": "123F",
          "ReferenceID": {
            "Amount": {
              "Charge": 0.45,
              "Currency": "USD",
              "StatusEntry": {
                "Status": "COMPLETED",
                "Timestamp": {
                  "$date": "2021-09-10T15:44:11.896Z"
                }
              },
              "SummaryStatus": "COMPLETED",
              "Value": 19.55
            },
            "Metadata": {
              "Notes": "Salary advance paid out",
              "TxSubType": {
                "From": {
                  "OrbisUID": "ORA",
                  "ProviderID": “QIHVsTWZVmioQ"
                },
                "To": {
                  "UID": "59EB11-85A9-00155DC29747",
                  "ProviderID": "DngXSCgkYOEs5A"
                }
              },
              "TxType": "ADVANCE"
            },
            "OrigMessage": {
              "EC": "0",
              "SC": 200,
              "approvalCode": "164647",
              "card": {
                "expirationDate": "202605",
                "last4": "6423"
              },
              "fees": {
                "interchange": "0.10",
                "network": "0.02",
              },
              "network": "VisaFF",
              "networkID": "58112122",
              "networkRC": "00"
            },
            "Provider": {
              "ProviderID": "QjS0o4Mg",
              "ProviderName": "Name"
            }
          }
        }
          }
        }
        ]

我希望将所有字段放在单独的列中,并能够查询例如。在 Transactions.ReferenceID.Amount 内为所有交易收费。 现在我像这样变平:

select 
    value:Employer:UID as ER_ORBISUID,
    value:Employee:UID EE_ORBISUID,
    value:Employee:Transactions[0]['ORBIS-Tx-ID'] as TrasactionID,
    array_size(value:Employee:Transactions) as arraySize,
    value:Employee:Transactions[0].ReferenceID.Amount.Charge as AmtValue
    ,value:Employee:Transactions[0]:ReferenceID.Amount.StatusEntry.Status as Staus
from test11,
   -- lateral flatten(input => CLMN) as aa,
    lateral flatten(input => CLMN:Employee:Transactions);

当我运行上述查询时,我只能获取数组中的第一个元素,因为我使用的是 0 索引,我不知道如何在不使用索引的情况下做到这一点。任何人都可以帮忙吗?谢谢。

【问题讨论】:

    标签: snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    您可以使用 (LATERAL) FLATTEN 函数从 JSON 数据中提取嵌套变量、对象或数组。

    详细信息和示例:https://community.snowflake.com/s/article/Using-lateral-flatten-to-extract-data-from-JSON-internal-field

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-12
      • 2022-07-06
      • 2020-12-10
      • 2021-08-13
      • 2021-07-23
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多