保持在 Google BigQuery SQL 查询配额内的通用方法

Posted

技术标签:

【中文标题】保持在 Google BigQuery SQL 查询配额内的通用方法【英文标题】:Generic way to stay within Google BigQuery SQL Query quota 【发布时间】:2018-08-30 23:56:36 【问题描述】:

这是我针对公共数据集运行的 SQL 查询:

SELECT
  package,
  COUNT(*) count
FROM (
  SELECT
    REGEXP_EXTRACT(line, '(.*)') package,
    id
  FROM (
    SELECT
      SPLIT(content, '\n') line,
      id
    FROM
      [bigquery-public-data:github_repos.contents]
    WHERE
      sample_path LIKE '%.bashrc' OR sample_path LIKE '%.bash_profile')
  GROUP BY
    package,
    id )
GROUP BY
  1
ORDER BY
  count DESC
LIMIT
  400;

这是错误信息:

错误:超出配额:您的项目超出了免费查询的配额 扫描的字节数。有关详细信息,请参阅 https://cloud.google.com/bigquery/troubleshooting-errors

bigquery-public-data:github_repos.contents 对我的配额来说太大了。

bigquery-public-data:github_repos.sample_contents 对于我正在分析的内容来说太小了。

有没有办法指定查询可以使用多少配额?例如,如果我有 1TB 配额,有没有办法针对 github_repos.contents 运行此查询(这将消耗 2.15TB),但在消耗 1TB 后停止处理?

【问题讨论】:

这是不可能的 AFAIK。对于免费套餐来说,桌子太大了。 @GrahamPolley 在 WHERE 子句中匹配更少的文件会减少消耗的配额吗?对此数据集的任何查询会消耗 2.15TB 吗? 不,因为它既没有分区也没有集群。 @GrahamPolley 好的,所以针对此数据集的任何可能查询都是 2.15TB? 否,取决于您在查询中访问的列。但是因为这个表主要是由“内容”列组成的,所以任何访问它的查询都会很大。 【参考方案1】:

您可以使用Custom Cost Controls。这可以在项目级别或用户设置。用户可以是服务帐户。让不同的服务帐户运行每个查询,您可以“指定查询可以使用多少配额”。

【讨论】:

以上是关于保持在 Google BigQuery SQL 查询配额内的通用方法的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 中用于 Google Analytics 数据的标准 SQL 还是旧版 SQL?

Google BigQuery 中的 TIMESTAMP 和标准 SQL

在 sql google BigQuery 中访问数组

Google Analytics 到 Bigquery 数据 - 自定义维度的 SQL 代码是啥?

无法在 Google BigQuery 中将此旧版 SQL 转换为标准 SQL

Google BigQuery 从 Python 脚本执行 SQL 文件