【问题标题】:Flattening second level of Json array with changing values使用变化的值展平第二级 Json 数组
【发布时间】:2020-03-28 16:50:16
【问题描述】:

我正在使用Snowflake SQL(通常是语法和 SQL 的新手)并尝试访问我的 json 数组的第二级以打印 namevalue。当值不断变化时,您如何深入到 json 数组中,即在哪里说 Chase Operating - xxxx 您可以想到每个不同的名称,因此没有明确的键值可以指定....我尝试使用 Flatten功能,它最终只是复制了我已经拥有的东西。

我做错了什么?

SELECT
    c.id,
    pnl.PREPARED: "balanceSheet"."report"."Assets"."Cash and Cash Equivalents"."rows" as "banks"
    //,lateral flatten(input => parse_json(pnl.PREPARED: "balanceSheet"."report"."Assets"."Cash and Cash Equivalents"."rows"))


FROM
      COMPANY c
      LEFT JOIN pnl on  pnl.COMPANY_ID = c.ID

WHERE
(pnl.PREPARED: "balanceSheet"."report"."Assets"."Cash and Cash Equivalents"."rows") is not null
and pnl.FROM_DATE > '2020-01-31'
AND pnl.TO_DATE   <= '2020-2-29'

尝试的扁平化功能

 ,lateral flatten(input => parse_json(pnl.PREPARED: "balanceSheet"."report"."Assets"."Cash and Cash Equivalents"."rows"))

结果:

-------------
ID: 10001   

Banks: 
{
  "Chase Operating - 1111": {
    "emphasize": false,
    "name": "Chase Operating - 1111",
    "rawValue": 111.6,
    "value": "112"
  },
  "Chase Payroll - 2222": {
    "emphasize": false,
    "name": "Chase Payroll - 2222",
    "rawValue": 222.21,
    "value": "222"
  }
}

【问题讨论】:

  • 请分享示例数据
  • 完整的样本数据非常大,由于它的明显性质,我无法分享原始数据。这样就足够了,所以您可以了解关键级别吗? {“资产负债表”:{“datePeriod”:“2020 年 2 月 29 日”,“报告”:{“资产”:{“现金和现金等价物”:{“行”:{“大通运营 - 1111”:{“强调": false, "name": "Chase Operating - 1111", "rawValue": 111.6, "value": "112" }, "Chase Payroll - 2222": { "emphasize": false, "name": "Chase工资单 - 2222", "rawValue": 222.21, "value": "222" } }}}}}}

标签: sql snowflake-cloud-data-platform


【解决方案1】:

不确定,这是你要找的东西

create or replace table tablename as
                                      select parse_json(column1) as c
                                   from values
                                     ('{ "balanceSheet": { "datePeriod": "Feb 29, 2020", "report": { "Assets": { "Cash and Cash Equivalents": { "rows": { "Chase Operating - 1111"
                                  : { "emphasize": false, "name": "Chase Operating - 1111", "rawValue": 111.6, "value": "112" }, "Chase Payroll - 2222": { "emphasize": false, "na
                                  me": "Chase Payroll - 2222", "rawValue": 222.21, "value": "222" } }}}}}}') v;



select f.value:name::string as name,
       f.value:value::number as value
from tablename p
    ,lateral flatten( input => p.c , path => 'balanceSheet.report.Assets["Cash and Cash Equivalents"].rows' )f;

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2022-11-01
    • 2015-04-08
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多