【发布时间】:2020-05-20 17:30:22
【问题描述】:
我有以下 Python 代码来检索 BigQuery 数据集。然后我在 Jupyter Notebook on kaggle 上执行两个查询 working_query 和 bad_query。
唯一的区别是在第 3 行之后添加了空格
...posts_questions` as q 这使得 bad_query 失败并显示消息
Query exceeded limit for bytes billed: 10000000000. 24460132352 or higher required.
我知道成本控制已启用,但不知道这可能是这里的问题。 以后如何避免此类陷阱,有人可以解释这个问题吗?
from google.cloud import bigquery
client = bigquery.Client()
dataset_ref = client.dataset("stackoverflow", project="bigquery-public-data")
dataset = client.get_dataset(dataset_ref)
safe_config = bigquery.QueryJobConfig(maximum_bytes_billed=10**10)
answers_query_job = client.query(working_query, job_config=safe_config)
answers_query_job.to_dataframe()
working_query = """
SELECT a.id, a.body, a.owner_user_id
FROM `bigquery-public-data.stackoverflow.posts_answers` AS a
INNER JOIN `bigquery-public-data.stackoverflow.posts_questions` AS q
ON q.id = a.parent_id
WHERE q.tags LIKE '%bigquery%'
"""
bad_query = """
SELECT a.id, a.body, a.owner_user_id
FROM `bigquery-public-data.stackoverflow.posts_answers` AS a
INNER JOIN `bigquery-public-data.stackoverflow.posts_questions` AS q
ON q.id = a.parent_id
WHERE q.tags LIKE '%bigquery%'
"""
更新:
这是一个缓存问题,因为 working_query 在激活成本控制之前运行。这样,即使启用了成本控制,它也可以从缓存中检索数据。 查询必须完全相同才能共享缓存,因此即使添加空格也可以防止这种情况发生。
【问题讨论】:
标签: python sql caching google-bigquery whitespace