在 bigquery 中创建非常大 table 的 id 的成对组合

Creating pairwise combination of ids of a very large table in bigquery

我有一个非常大的 table ID(字符串),它有 424,970 行,只有一列。

我正在尝试在新 table 中创建这些 ID 的组合。创建那个 table 的动机可以在这个 question.

中找到

我尝试了以下查询来创建成对组合 table:

#standardSQL
SELECT
  t1.id AS id_1,
  t2.id AS id_2
FROM
  `project.dataset.id_vectors` t1
INNER JOIN
  `project.dataset.id_vectors` t2
ON
  t1.id < t2.id

但是查询在 15 分钟后失败,错误信息如下:

Query exceeded resource limits. 602467.2409093559 CPU seconds were used, and this query must use less than 3000.0 CPU seconds. (error code: billingTierLimitExceeded)

是否有任何解决方法 运行 查询并获得所需的输出 table 以及所有 ID 组合?

您可以尝试将您的 table T 拆分为 2 个较小的 tables T1 和 T2,然后为每个较小的 tables T1:T1 执行 4 个连接, T1:T2、T2:T1、T2:T2,然后合并结果。这将等同于将 T 与其自身连接起来。如果仍然失败,请尝试将其分解成更小的 tables.

或者将 maximumBillingTier 设置为更高的值 https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs

configuration.query.maximumBillingTier - Limits the billing tier for this job. Queries that have resource usage beyond this tier will fail (without incurring a charge). If unspecified, this will be set to your project default.

如果使用Java,可以在JobQueryConfiguration中设置。 UI 控制台目前不支持此配置 属性。


要拆分 table,您可以使用 BigQuery 中的 FARM_FINGERPRINT 函数。例如。第一部分将有一个过滤器:

where mod(abs(farm_fingerprint(id)), 10) < 5

第二部分将过滤:

where mod(abs(farm_fingerprint(id)), 10) >= 5