我有一个很大的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