如何使用JSON_EXTRACT或JSON_EXTRACT_SCALAR在Big Query中读取多个级别的JSON数据

问题描述 投票:0回答:1

我正在尝试使用Bigquery中的JSON_EXTRACT读取Bigquery中的以下JSON结构。它说不支持的运算符路径“ *”

[在BigQuery中尝试了所有方法并寻求帮助

错误: JSONPath中不支持的运算符:*

**** JSON数据:**仅具有多个值且在阅读时有问题的部分。需要读取以下所有4个“ id”值,例如并且还需要阅读所有其他专栏在“组合”部分下,它会产生4行具有不同ID,类型等的行。**

"Combos": [
  {
    "Id": "1111",
    "Type": 0,
    "Description": "ABCD",
    "ComboDuration": {
      "StartDate": "2009-10-26T08:00:00",
      "EndDate": "2009-10-29T08:00:00"
    }
  },
  {
    "Id": "2222",
    "Type": 1,
    "Description": "XYZ",
    "ComboDuration": {
      "StartDate": "2019-10-26T08:00:00",
      "EndDate": "2019-10-29T08:00:00"
    }
  },
  {
    "Id": "39933",
    "Type": 3,
    "Description": "General",
    "ComboDuration": {
      "StartDate": "2019-10-26T08:00:00",
      "EndDate": "2019-10-29T08:00:00"
    }
  },
  {
    "Id": "39934",
    "Type": 2,
    "Description": "ABCDXYZ",
    "ComboDuration": {
      "StartDate": "2019-10-26T08:00:00",
      "EndDate": "2019-10-29T08:00:00"
    }
  },

]

****Code:** P.S - conv_column is a string column where my JSON structure stored**

SELECT 
JSON_EXTRACT(conv_column,"$.Combos.*.Id") as combo_id
from lz.json_file

SELECT JSON_EXTRACT(conv_column,"$.Combos[*].Id") as combo_id
from lz.json_file

SELECT JSON_EXTRACT(conv_column,"$.Combos[[email protected]]") as combo_id
from lz.json_file
json google-bigquery jsonpath
1个回答
0
投票
下面是标准SQL的BigQuery示例

#standardSQL CREATE TEMP FUNCTION jsonparse(input STRING) RETURNS ARRAY<STRING> LANGUAGE js AS """ return JSON.parse(input).map(x=>JSON.stringify(x)); """; WITH `project.lz.json_file` AS ( SELECT '''{ "Combos": [ { "Id": "1111", "Type": 0, "Description": "ABCD", "ComboDuration": { "StartDate": "2009-10-26T08:00:00", "EndDate": "2009-10-29T08:00:00" } }, { "Id": "2222", "Type": 1, "Description": "XYZ", "ComboDuration": { "StartDate": "2019-10-26T08:00:00", "EndDate": "2019-10-29T08:00:00" } }, { "Id": "39933", "Type": 3, "Description": "General", "ComboDuration": { "StartDate": "2019-10-26T08:00:00", "EndDate": "2019-10-29T08:00:00" } }, { "Id": "39934", "Type": 2, "Description": "ABCDXYZ", "ComboDuration": { "StartDate": "2019-10-26T08:00:00", "EndDate": "2019-10-29T08:00:00" } }]} ''' AS conv_column ) SELECT JSON_EXTRACT_SCALAR(combo, '$.Id') AS Id, JSON_EXTRACT_SCALAR(combo, '$.Type') AS Type, JSON_EXTRACT_SCALAR(combo, '$.Description') AS Description, JSON_EXTRACT_SCALAR(combo, '$.ComboDuration.StartDate') AS StartDate, JSON_EXTRACT_SCALAR(combo, '$.ComboDuration.EndDate') AS EndDate FROM `project.lz.json_file`, UNNEST(jsonparse(JSON_EXTRACT(conv_column, '$.Combos'))) combo

© www.soinside.com 2019 - 2024. All rights reserved.