在bigquery中创建非常大的表的ID的成对组合



我有一个很大的id(字符串)表,它有424970行,只有一列。

我正在尝试在一个新表中创建这些id的组合。创建该表的动机可以从这个问题中找到。

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

#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)

是否有任何变通方法来运行查询并获得具有所有id组合的所需输出表?

您可以尝试将表T拆分为两个较小的表T1和T2,然后对每个较小的表T1:T1、T1:T2、T2:T1、T2:T2执行4个联接,然后合并结果。这将相当于将T与其自身连接起来。如果仍然失败,请尝试将其分解为更小的表。

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

configuration.query.maximumBillingTier-限制的计费层这份工作。资源使用率超过此层的查询将失败(不产生费用)。如果未指定,则会将其设置为项目默认值。

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


为了拆分表,可以在BigQuery中使用FARM_FINGERPRINT函数。例如,第一部分将有一个过滤器:

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

第二部分将过滤器:

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

最新更新