【发布时间】:2019-04-23 21:37:23
【问题描述】:
我希望将以下旧版 SQL 查询转换为标准 SQL。我遇到的问题是我需要取消嵌套两个表(标签和学分)。如何转换此查询?谢谢!
每当我尝试重写此查询时,都会遇到“标量子查询产生了多个元素”(见下文)。
我正在尝试重写的旧版 SQL 查询:
SELECT
service.description,
sku.description,
usage_start_time,
usage_end_time,
labels.key,
labels.value,
cost,
usage.amount,
project.name,
credits.name,
credits.amount
FROM
flatten([gcp_billing_data.gcp_billing_export],
credits)
到目前为止我在标准 SQL 中的尝试:
SELECT
service.description AS service,
sku.description AS sku,
usage_start_time,
usage_end_time,
l.key,
l.value,
cost,
usage.amount AS usage,
project.name AS project,
c.name AS credit,
c.amount
FROM
`gcp_billing_data.gcp_billing_export`,
UNNEST(labels) AS l,
UNNEST(credits) AS c
Group by 1,2,3,4,5,7,8,9,10,11
此查询运行,但行数明显少于我的预期。
【问题讨论】:
-
对我个人而言 - 您正在使用的原始查询 - 看起来根本不符合要求 - 因为它在标签上重复了多次成本和信用 - 所以总结果最终将比实际结果大 x 倍.因此,如果您可以提供输入数据和预期输出的简化示例 - 并解释您究竟想要得到什么 - 这将加快答案:o)
-
...虽然快速而正式的修复类似于将
(select l.value from unnest(labels) as l)替换为(select string_agg(l.value) from unnest(labels) as l) -
那么学分呢?是否应该与标签交叉连接?
-
@MikhailBerlyant 我不太确定。您可以在旧版 SQL 中看到我需要做的就是选择标签。所以我不确定通过扁平化和“,”连接的性质。我假设这是一个交叉连接?感谢您在之前的评论中提供的帮助。该查询现在运行。
-
好的。所以,顺便说一句,这就是为什么我要求您发布输入和输出的简化示例,以便我们可以帮助您了解它应该如何工作/如何工作。同时-如果它对您有用-我会将其发布为答案:o)
标签: sql google-bigquery bigquery-standard-sql legacy-sql