sql - 如何将旧版 SQL 请求移动到 BigQuery 中带有嵌套字段的标准 SQL?
问题描述
我有像这样非常简单的遗留 SQL 构造
SELECT
report_date,
campaign.bundleId,
campaign.countryCode,
campaign.stageNum
FROM
[...records_20200708],
[...records_20200707]
我试图将其转换为标准 SQL
SELECT
report_date,
(select bundleId from unnest(campaign)) as campaign_bundleId,
(select countryCode from unnest(campaign)) as campaign_countryCode,
(select stageNum from unnest(campaign)) as campaign_stageNum
FROM
`...records_*`
这没用。我收到一个错误:Scalar subquery produced more than one element
。我错在哪里以及如何解决?
解决方案
下面是 BigQuery 标准 SQL 来解决您收到的错误消息Scalar subquery produced more than one element
- 只需添加ARRAY
以便 BQ 知道如何处理more than one element
输出中的错误消息
SELECT
report_date,
ARRAY(SELECT bundleId FROM UNNEST(campaign)) AS campaign_bundleId,
ARRAY(SELECT countryCode FROM UNNEST(campaign)) AS campaign_countryCode,
ARRAY(SELECT stageNum FROM UNNEST(campaign)) AS campaign_stageNum
FROM
`...records_*`
或者,取决于预期的输出 - 您可以在下面使用
SELECT
report_date,
c.bundleId AS campaign_bundleId,
c.countryCode AS campaign_countryCode,
c.stageNum AS campaign_stageNum
FROM
`...records_*`,
UNNEST(campaign) AS c
推荐阅读
- mysql - 如果子查询返回多于 1 行,SQL 我可以创建一个 if 语句吗?
- onenote-api - 使用 API 从 onenote 课堂笔记本中删除学生时出错
- php - Laravel 6 - 在 Blade 中显示名称、邮政编码而不是 ID
- javascript - 无论如何都会出错 Uncaught TypeError: Cannot set property 'value' of null
- html - 该网站在默认移动浏览器上没有响应
- python - 无法使用 pyspark 运行简单的 hql 文件
- r - R:命名列表和描述列表
- javascript - 使用元素的子文本来设置/更新变量
- javascript - 在两个事件'mousemove'和'scroll'上显示自定义水平滚动条,然后在两个事件都没有触发约1秒时隐藏滚动条
- android - 在 UncaughtExceptionHandler 中将 Stacktrace 记录到 FirebaseDatabase,调用默认 uncaughtException 方法时出现问题