Google BigQuery 中的嵌套字段

Posted

技术标签:

【中文标题】Google BigQuery 中的嵌套字段【英文标题】:Nested Fields in Google BigQuery 【发布时间】:2018-10-16 20:40:51 【问题描述】:

我正在尝试取消嵌套一些嵌套字段并在 Google BigQuery 中执行子查询。

这很好用。

SELECT id, 
custom_field_options
FROM `project.database.ticket_fields`

'custom_field_options' 是一个嵌套字段,这给我带来了一些问题。我有“custom_field_options.id”和“custom_field_options.name”以及其他几个嵌套字段。

这也很好用。

SELECT ticket_fields.id,
ticket_fields.raw_title,
ticket_custom_fields.name AS ticket_custom_fields_name,
ticket_custom_fields.raw_name AS ticket_custom_fields_raw_name,
ticket_custom_fields.value AS ticket_custom_fields_value,
ticket_fields.created_at
FROM `project.database.ticket_fields` AS ticket_fields
LEFT JOIN UNNEST(custom_field_options) AS ticket_custom_fields
GROUP BY 1,2,3,4,5,6

单独运行时,这两个查询都运行良好。现在,我正在尝试将第一个查询作为第二个查询的子查询运行,以从该查询中提取所有 id,并在此基础上运行下面的查询。

SELECT ticket_fields.id,
ticket_fields.raw_title,
ticket_custom_fields.name AS ticket_custom_fields_name,
ticket_custom_fields.raw_name AS ticket_custom_fields_raw_name,
ticket_custom_fields.value AS ticket_custom_fields_value,
ticket_fields.created_at
FROM `project.database.ticket_fields` AS ticket_fields
LEFT JOIN UNNEST(custom_field_options) AS ticket_custom_fields
  WHERE id IN (SELECT id, 
  custom_field_options
  FROM `project.database.ticket_fields`)
GROUP BY 1,2,3,4,5,6

【问题讨论】:

错误是什么?预期的结果是什么? 这是我的错误:列名 id 在 [9:9] 时不明确 【参考方案1】:

您可以限定id 列名以使引用明确:

SELECT ticket_fields.id,
ticket_fields.raw_title,
ticket_custom_fields.name AS ticket_custom_fields_name,
ticket_custom_fields.raw_name AS ticket_custom_fields_raw_name,
ticket_custom_fields.value AS ticket_custom_fields_value,
ticket_fields.created_at
FROM `project.database.ticket_fields` AS ticket_fields
LEFT JOIN UNNEST(custom_field_options) AS ticket_custom_fields
  WHERE ticket_fields.id IN (SELECT id, 
  custom_field_options
  FROM `project.database.ticket_fields`)
GROUP BY 1,2,3,4,5,6

(我假设ticket_fields.id 是您要搜索的id

【讨论】:

是的,这就是问题所在。我忘记了;有一段时间没有这样做了。还有一件事,我只是将子查询更改为:WHERE ticket_metrics.id IN (SELECT id FROM project.database.ticket_metrics)。错误显示为“无法识别的名称:ticket_metrics”。子查询工作正常,在名为“ticket_metrics”的表中肯定有一个名为“in”的字段。这很奇怪。 很难说没有更多的上下文,对不起。如果您可以发布一个更详细的单独问题,有人可能会提供帮助。

以上是关于Google BigQuery 中的嵌套字段的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery - 更新嵌套的重复字段

对 Google Bigquery 中的嵌套字段使用 OFFSET 而不是 UNNEST

从Google BigQuery中的嵌套表中删除重复项

无法使用 google bigquery(标准)取消嵌套某些字段

Google BIgQuery 中的 POSITION(field) 是啥?

Google BigQuery 选择记录中所有嵌套字段的总和