如何在JSON类型上链接条件

euoag5mw  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(176)

假设我在BigQuery查询中有以下json对象数组:

with tbl as (
  select json '''{
  "products": {
    "product": [
      {
        "territory": "CA",
        "sales_start_date": "2023-05-05"
      },
      {
        "territory": "US",
        "sales_start_date": "2023-06-05"
      }
    ]
  }
}''' as j)
select json_extract_array(j, '$.products.product') from tbl

如何将WHERE territory="CA" AND sales_start_date="2023-05-05"的条件链接到查询?我已经将json值分解成一个数组,但我不确定从那里开始该去哪里。显然,我需要一个unnest,但是当我在json数组上尝试时,它告诉我:
不支持类型为ARRAY的IN UNNEST的第二个参数,因为数组元素类型在[16:10]处不是相等可比的
我该怎么解决这个问题呢?(顺便说一下,翻译成XPath将是以下查询://products/product[territory="CA" and sales_start_date="2023-05-05"])。

xcitsw88

xcitsw881#

一种更简单的方法是在table子句中使用UNNEST。下面是一个例子:

with tbl as (
  select json '''{
  "products": {
    "product": [
      {
        "territory": "CA",
        "sales_start_date": "2023-05-05"
      },
      {
        "territory": "US",
        "sales_start_date": "2023-06-05"
      }
    ]
  }
}''' as j)
select j from tbl, unnest(json_query_array(j, '$.products.product')) j2 
where STRING(j2.territory)="CA" and STRING(j2.sales_start_date)="2023-05-05"

请注意,在WHERE子句中需要将json值转换为string(bigquery不允许对json类型进行相等性检查)`。

相关问题