我已经读到,在Postgres中设置LIMIT NULL
实际上不会限制SELECT
的结果。然而,在BigQuery中,当我根据条件设置LIMIT NULL
时,我看到了Syntax error: Unexpected keyword NULL
。
我想找出一种方法来限制或不基于条件(可以是传递到过程中的参数,也可以是查询作业传递的参数,我可以为其编写CASE
或IF
语句(。设置条件的机制应该无关紧要,我想要的是是否有一种方法可以在语法上指示LIMIT
的值,这不会限制BigQuery。
LIMIT
子句在BigQuery中的工作方式不同。它指定了结果中按下输入的最大数量。LIMIT
n必须是一个常量INT64。
使用LIMIT
子句,您可以克服缓存结果大小的限制:
- 使用过滤器来限制结果集
- 使用LIMIT子句来减少结果集,尤其是在使用ORDER BY子句
您可以看到以下示例:
SELECT
title
FROM
`my-project.mydataset.mytable`
ORDER BY
title DESC
LIMIT
100
这将只返回100行。
如果要对大量值进行排序,最好使用它。您可以看到此文档中的示例。
如果要返回表中的所有行,则需要省略LIMIT子句。
SELECT
title
FROM
`my-project.mydataset.mytable`
ORDER BY
title DESC
此示例将返回表中的所有行。如果表太大,不建议省略LIMIT
,因为它会消耗大量资源。
优化资源的一个解决方案是使用集群表。这将节省成本和查询时间。您可以看到此文档,其中详细解释了它的工作原理。
您可以编写一个存储过程,根据输入参数动态创建查询。sql查询准备好后,您可以使用execute immediate来运行它。通过这种方式,您可以控制应该向查询的limit子句提供什么值。https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting#execute_immediate
希望这能回答您的疑问。