可用于计算 BigQuery 查询成本的 Python API 是啥?
Posted
技术标签:
【中文标题】可用于计算 BigQuery 查询成本的 Python API 是啥?【英文标题】:What is the Python API I can use to calculate the cost of a BigQuery query?可用于计算 BigQuery 查询成本的 Python API 是什么? 【发布时间】:2019-10-25 15:08:10 【问题描述】:有人知道如何使用 Python Google Cloud BigQuery API 计算查询成本吗?
【问题讨论】:
【参考方案1】:1。获取查询处理的数据量
使用 Google Cloud Python SDK,您可以设置 dry_run
标志。
job_config = bigquery.QueryJobConfig()
job_config.dry_run = True
job_config.use_query_cache = False
query_job = client.query(
...
)
bigquery/docs/snippets.py
Google Cloud Docs: Issuing a query dry run
2。从total_bytes_processed
计算成本
如果您使用的是on-demand pricing,请查看query_job.total_bytes_processed
,了解您需要为多少处理数据付费。当前处理成本(截至 2019 年 10 月)为 每 TB 5 美元,其中第一个 TB 是免费的。
因此,您可以通过以下方式获得成本:
cost_dollars = (query_job.total_bytes_processed / 1024 ** 4) * 5
【讨论】:
感谢您的回复!你知道如何推导出与查询相关的美元成本吗?大查询在账户中的成本计算有很多因素,如基于活动存储、查询(包年费)、长期存储。 cloud.google.com/bigquery/pricing 很难计算出与查询相关的美元。有没有人知道python函数会做(我们可以编写简单的匹配query_job.total_bytes_processed/GB price per query。谢谢,Anand C @Anand,其中大多数(尤其是存储)不会影响特定查询的成本。唯一可能的情况是您使用统一费率定价,但在这种情况下,插槽使用(实际上只是间接“定价”)将取决于查询本身的实际执行。没有办法提前计算。 查询的按需定价为 5 美元/TB 扫描,因此您可以使用total_bytes_processed
重新计算。例如如果total_bytes_processed
是 1TB,那么它会花费你 5 美元。
更新了答案,以更具体地说明您如何为按需定价执行此操作。
总是删除 1 个免费 TB 可能没有意义,因为这并不是真正的每次查询效果。【参考方案2】:
我认为您不能直接计算成本,但您可以使用 python API 中的 dryRun 参数来获取处理的字节数,然后您可以将其转换为成本(在 $5/listed on demand price TB)。
类似:
from google.cloud import bigquery
job_config = bigquery.QueryJobConfig()
job_config.dry_run = True
job_config.use_query_cache = False
query_job = bigquery.Client().query(
(
"SELECT my_column FROM my_table"
),
location="US", # or wherever your data is
job_config=job_config,
)
print(" bytes will be processed".format(query_job.total_bytes_processed))
这里也引用了cost estimation docs。
【讨论】:
当您查询query_job = bigquery.Client().query
行时,您是否已经输了钱。有什么方法可以在运行它之前知道多少字节,就像在 BigQuery 上工作一样!
如果您指定dry_run,则不会,@ChauLoi【参考方案3】:
如果你有一个项目,你可能想做:
from google.cloud import bigquery
bqclient = bigquery.Client(
project='myproject',
)
query = "SQL BLA BLA SELECT etc.. "
job_config = bigquery.QueryJobConfig()
job_config.dry_run = True
job_config.use_query_cache = False
query_job = bqclient.query(
(
query
),
location="US", # or wherever your data is
job_config=job_config,
)
cost_dollars = (query_job.total_bytes_processed / 1024 ** 4) * 5
print(f"query_job.total_bytes_processed bytes will be processed , cost ~cost_dollars$")
【讨论】:
以上是关于可用于计算 BigQuery 查询成本的 Python API 是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Google Bigquery - 运行参数化查询 - php
BigQuery:我可以通过将数据存储在多个表中来降低查询成本吗?