我有一个很大的id(字符串)表,它有424,970行,只有一列。
我正在尝试在新表中创建这些ID的组合。可以在此question中找到创建该表的动机。
我尝试了以下查询来创建成对组合表:
#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组合的所需输出表?
答案 0 :(得分:2)
您可以尝试将表T拆分为2个较小的表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