在 BigQuery 中有条件地限制
Conditionally LIMIT in BigQuery
我读到在 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
这只会 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
希望这能回答您的问题。
我读到在 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
这只会 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
希望这能回答您的问题。