在 BigQuery 中有条件地限制

Conditionally LIMIT in BigQuery

我读到在 Postgres 中设置 LIMIT NULL 不会有效地限制 SELECT 的结果。但是在 BigQuery 中,当我根据条件设置 LIMIT NULL 时,我看到 Syntax error: Unexpected keyword NULL.

我想找出一种方法来限制或不基于条件(可以是传递给过程的参数,或者查询作业传递的参数,我可以写的任何东西 CASEIF 声明)。设置条件的机制无关紧要,我正在寻找的是是否有一种方法可以在语法上指示 LIMIT 的值,而不会以有效的方式限制 BigQuery.

LIMIT 子句在 BigQuery 中的工作方式不同。它指定结果中的最大抑郁输入数。 LIMIT n 必须是一个常数 INT64。

使用LIMIT子句,可以克服缓存结果大小的限制:

  • 使用过滤器限制结果集。
  • 使用 LIMIT 子句来减少结果集,尤其是当您 使用 ORDER BY 子句。

你可以看到这个例子:

SELECT
  title
FROM
  `my-project.mydataset.mytable`
ORDER BY
  title DESC
LIMIT
  100

这只会 return 100 行。

最佳做法是在对大量值进行排序时使用它。您可以通过示例查看此 document

如果您想要 return 来自 table 的所有行,您需要省略 LIMIT 子句。

SELECT
  title
FROM
  `my-project.mydataset.mytable`
ORDER BY
  title DESC

此示例将 return 来自 table 的所有行。如果你的table太大,不建议省略LIMIT,会消耗大量资源。

优化资源的一种解决方案是使用集群 tables。这将节省成本和查询时间。您可以查看此 document 及其工作原理的详细说明。

您可以编写一个存储过程,根据输入参数动态创建查询。一旦您的 sql 查询准备就绪,您就可以使用 execute immediate 运行 了。通过这种方式,您可以控制应向查询的限制子句提供什么值。 https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting#execute_immediate

希望这能回答您的问题。