从 JSON 时动态生成 Bigquery 案例

Dynamically generate Bigquery case when from JSON

我在 Bigquery 中有一个数据集,其中一个字段是 json,我想从该 json 创建一个 table 指标变量。我希望使用如下语句的 case when

SELECT id,
--   SELECT JSON EXTRACT_
--   UNNEST(JSON_EXTRACT(column,
--     "$.rules[0].group")) 
 
  CASE WHEN 
    JSON_EXTRACT_SCALAR(column, '$.rules[0].group') = "interests" OR     
    JSON_EXTRACT_SCALAR(column, '$.rules[1].group') = "interests" OR     
    JSON_EXTRACT_SCALAR(column, '$.rules[2].group') = “interests" OR     
    JSON_EXTRACT_SCALAR(column, '$.rules[3].group') = "interests" OR     
    JSON_EXTRACT_SCALAR(column, '$.rules[4].group') = "interests" OR     
    JSON_EXTRACT_SCALAR(column, '$.rules[5].group') = "interests"
  THEN 1
  ELSE 0
  END indicator_name

FROM
  table

但是,此查询仅适用于规则列表中有 6 个元素的行。规则列表的长度是可变的。此外,除了兴趣之外,我还想为几个不同的 'groups' 执行此操作,以便我 return 一个 table 的 ID 和几个指示变量列。

一行 json 的示例:

{"rules":[{"group":"age","key":"age","value":"13-17","operator":"equals"},{"group":"gender","key":"gender","value":"female","operator":"equals"},{"group":"interests","key":"interest","value":"xy_44","operator":"contains"},{"group":"geog","key":"geog","value":"US/","operator":"starts_with"},{"group":"o_version","key":"o_version","value":"ghybu","operator":"starts_with"},{"group":"o_version_min_group","key":"o_version","value":"36573232","operator":"greater_than_or_equals"}],"inventory":{"include":{"bundles":["mpp"]}}

此查询的脚本运行使用了 jinja,因此如果有帮助可以使用它。

考虑以下方法

SELECT id,
  IF((
    SELECT LOGICAL_OR(JSON_EXTRACT_SCALAR(rule, '$.group') = 'interests')
    FROM UNNEST(JSON_EXTRACT_ARRAY(column, '$.rules')) rule
  ), 1, 0) indicator_name
FROM `project.dataset.table`