BigQuery select row_number() 来自 dbc.tables(按表名排序)

BigQuery select row_number() over (order by tablename) from dbc.tables

我正在翻译一个非常大的 CTE Teradata 查询,并卡在了它自己的子查询的以下部分,该子查询正在交叉连接成一个非常大的子查询。

如何将此查询转换为 Bigquery?

(select row_number() over (order by tablename) subsequent_month from dbc.tables qualify row_number() over (order by tablename) <= 24)

有什么想法吗?

您需要 qualify:

的子查询
from (select row_number() over (order by tablename) as subsequent_month
      from dbc.tables
     ) t
where subsequent_month < 24;

在 Teradata 中,qualify 是一个 "where" 子句,适用于 window 函数。它类似于 having 作用于聚合函数。

以下适用于 BigQuery 标准 SQL

#standardSQL
SELECT subsequent_month FROM (
  SELECT ROW_NUMBER() OVER (ORDER BY tablename) subsequent_month 
  FROM dbc.tables 
) WHERE subsequent_month <= 24

这只是 returns 24 行从 1 到 24 的连续数字。

因此将其转换为针对 BigQuery 中任何 table 的类似查询,或使用现有的 numbers table.