这是我在连接中的不等式条件(简单重叠条件):
ON
(A.start <= B.End) AND (B.Start <= A.END)
它给了我以下错误:
了java.lang.RuntimeException: BigQueryError {reason = billingTierLimitExceeded,location = null, message =查询超出资源限制。 700920.3330645757 CPU秒 已使用,此查询必须使用少于529900.0 CPU秒。
令人惊讶的是,此操作不仅需要在单个实例(n1-highmem-16)上运行顺序算法(无任何连接)。
我有几个问题:
1) How can I calculate maximumBillingTier for my query?
2) Can someone explain how inequality joins work in BigQuery?
3) Why inequality joins are so expensive?
Is it because of number of operations, or is it because of large number of outputs?
对于相同的查询和输入表,不等式连接需要超过13000秒并最终因超时而被取消,但如果我将条件更改为仅覆盖相等,则只需70秒。
谢谢!
答案 0 :(得分:3)
1)如何为查询计算maximumBillingTier?
我认为这归结为Slots
BigQuery槽是执行SQL查询所需的计算容量单位。 BigQuery会根据查询大小和复杂性自动计算每个查询所需的插槽数。
按需查询的默认插槽数在单个项目中的所有查询之间共享。通常,如果您一次只处理少于100 GB的查询,则您不太可能使用所有2,000个广告位。
要查看您正在使用的插槽数量,请参阅Monitoring BigQuery Using Stackdriver
。
2)有人可以解释不平等如何加入BigQuery的工作?
这实际上取决于数据大小和分布
我建议Query Plan Explanation
- 它不仅有助于了解幕后发生的事情,还可以帮助您optimize your query