【问题标题】:BigQuery UNNEST including empty rows?BigQuery UNNEST 包括空行?
【发布时间】:2020-04-13 02:54:38
【问题描述】:

对于 BigQuery,我们可以使用 UNNEST 提取特殊的重复结构。当您在结构键和值(字符串、整数或双精度之一)中有数据时,这非常有效。但是,有时我有一个带有键(“foo”)的结构,并且通常带有数据 value.string_value 但并非总是如此。当没有 string_value 时,以下内容将不包含该行:

SELECT
  event_timestamp,
  event_params_custom.value.string_value
FROM 
  `my_database.events_*` T,
  UNNEST(T.event_params) event_params_custom
WHERE
  event_name = "some_custom_event"
  AND event_params_custom.key = "foo"

是否有可能做类似于“外连接”的事情并包括所有行,即使键“foo”没有值?

【问题讨论】:

  • 能否提供样本数据?
  • 我还没有想出解决问题的方法,但我找到了解决方法。您可以将查询拆分为单独的部分,然后使用“UNION ALL”组合结果。然后,关键是通过调整每个查询来避免重复,使其仅包含您在另一个查询中捕获的特定键丢失的行: ...AND 'STOP_NO' NOT IN (SELECT key FROM UNNEST(T.event_params ))

标签: google-cloud-platform google-bigquery


【解决方案1】:
#standardSQL
SELECT
  event_timestamp,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = "foo") AS string_value
FROM 
  `my_database.events_*`
WHERE
  event_name = "some_custom_event"

【讨论】:

  • 所以基本不用加入了?!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
相关资源
最近更新 更多