我正在尝试使用BQ支持的新标准SQL在BigQuery中运行查询。我目前的任务是尝试使用标准SQL运行以下查询(BQ语法):
SELECT
u0, u1
FROM
(SELECT
MIN(u) as u0, NEST(u) as u1
FROM
(FLATTEN((SELECT key, SPLIT(u2,',') as u FROM [dataset.table]),u))
GROUP EACH BY key
HAVING u0 <> u1)
GROUP EACH BY u0, u1
我主要遇到FLATTEN操作员的问题。 我到目前为止所做的工作(不完全)是:
SELECT
u0, u1
FROM
(SELECT
(SELECT MIN(uids) FROM UNNEST(u2_arr) u2) u0,
u2_arr
FROM
(SELECT SPLIT(uids, ',') as u2_arr FROM `datase.table`)),
UNNEST(u2_arr) u1
WHERE u0 <> u1
GROUP BY u0, u1
有关如何使第二个查询与第一个查询类似的任何建议吗?
提前谢谢! ģ
答案 0 :(得分:2)
假设您的表格如下所示(来自您问题中的代码)
key u2
1 2,6,3,1,4,5
2 21,6,32,11,4,5
下面的BigQuery Standard SQL返回与原始Legacy SQL完全相同的结果
SELECT
u0, u1
FROM (
SELECT
MIN(u) AS u0, ARRAY_AGG(u) AS u1
FROM
(SELECT key, u FROM `datase.table`, UNNEST(SPLIT(u2, ',')) AS u)
GROUP BY key
), UNNEST(u1) AS u1
WHERE u0 <> u1
它可能不是从遗留到标准sql的最佳“翻译” - 但是没有确切地知道你想要实现的目标 - 我希望保留代码尽可能接近原始代码
另一方面 - 我不确定it kind of works (not fully)
是什么意思,因为我希望你的版本可以正常工作!