【问题标题】:Google BigQuery SQL: Parse multi level JSON (list +json+list+json) to ColumnsGoogle BigQuery SQL:将多级 JSON (list +json+list+json) 解析为列
【发布时间】:2021-03-15 11:42:22
【问题描述】:

我有两个级别的 Json 字符串:list[json{list[json]}]:

UserID               Json_List
100     [{"application_charge":{"id":13409353813,"name":"Starter","api_client_id":2485321},"usage_charges":[{"id":48216805,"description":"Extras","price":"60.70"}]}]
200     [{"application_charge":{"id":13409353814,"name":"Starter","api_client_id":2485322},"usage_charges":[{"id":48216890,"description":"Extras","price":"80.79"}]}]

需要像表格一样的输出:

UserID  application_charge.id   name    api_client_id   usage_charges.id    description   price
100      13409353813          Starter    2485321        48216805           Extras         60.7
200      13409353814          Starter    2485322        48216890           Extras         80.79

我设法退出了第一步“application_charge”,但不明白如何进入下一步“usage_charges”

select  
  UserID,
  json_extract_scalar(json, '$.application_charge.id')  as id,
  json_extract_scalar(json, '$.application_charge.name')  as name,
  json_extract_scalar(json, '$.application_charge.api_client_id')  as api_client_id
from `be-prod-data.retailers_billing_data_production.shopify_application_charges`,
unnest(json_extract_array( json_list, '$')) json

如何从第二阶段提取数据??

【问题讨论】:

    标签: sql json google-bigquery


    【解决方案1】:

    再多一个unnest(json_extract_array(...

    with mytable as (
      select 100 as userid, '[{"application_charge":{"id":13409353813,"name":"Starter","api_client_id":2485321},"usage_charges":[{"id":48216805,"description":"Extras","price":"60.70"}]}]' as json_list union all
      select 200, '[{"application_charge":{"id":13409353814,"name":"Starter","api_client_id":2485322},"usage_charges":[{"id":48216890,"description":"Extras","price":"80.79"}]}]'
    )
    select  
      UserID,
      json_extract_scalar(json, '$.application_charge.id')  as id,
      json_extract_scalar(json, '$.application_charge.name')  as name,
      json_extract_scalar(json, '$.application_charge.api_client_id')  as api_client_id,
      json_extract_scalar(nested, '$.id')  as usage_charges_id,
    from mytable,
    unnest(json_extract_array( json_list, '$')) json, unnest(json_extract_array(json, '$.usage_charges')) as nested
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2021-07-20
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      相关资源
      最近更新 更多