BigQuery 定价:记录列的查询数据大小(成本)计算

Posted

技术标签:

【中文标题】BigQuery 定价:记录列的查询数据大小(成本)计算【英文标题】:BigQuery pricing: query data size (cost) calculation for record columns 【发布时间】:2018-11-12 13:38:08 【问题描述】:

BigQuery 如何计算要为嵌套列处理的数据大小?

我有想要加载到 BigQuery 的数据,但我不确定应该使用的架构。

我拥有的数据(其中包括)以下列:

timestamp sessionId event(必填) event.id event.details(可以为空的记录) event.details.type event.details.name event.attributes(重复记录) event.attributes.key event.attributes.value

我的问题:

    如果我只查询event.id,是否也会扫描其他event.*列中的数据?

    选择 event.id FROM table_name

BigQuery UI 显示现有表上这些查询的扫描数据大小没有差异(该表没有不可重复的嵌套列)。

SELECT attrs.name FROM `other_table_name`, UNNEST(attributes) AS attrs
SELECT attrs.name, attrs.value FROM `other_table_name`, UNNEST(attributes) AS attrs
    是否因为 UNNEST 操作而扫描了两个 attributes.* 列?

很遗憾,来自 Google 的(详细)信息没有回答这些问题,因为它没有提到带有 query pricing 的嵌套列,并且在描述 data sizes 时过于模糊

【问题讨论】:

【参考方案1】:

我刚刚测试了一个公共表:bigquery-public-data.bitcoin_blockchain.transactions。我已经运行了以下查询:

查询 1:

SELECT
  inputs.input_script_bytes,
  inputs.input_script_string,
  inputs.input_script_string_error,
  inputs.input_sequence_number
FROM
  `bigquery-public-data.bitcoin_blockchain.transactions`,
  UNNEST(inputs) AS inputs
LIMIT
  100

它返回 327 GB 已处理。

查询 2:

SELECT
  inputs.input_script_bytes
FROM
  `bigquery-public-data.bitcoin_blockchain.transactions`,
  UNNEST(inputs) AS inputs
LIMIT
  100

它返回 100 GB 已处理。

因此,在回答您的第一个问题时,不应扫描 event.* 的其他列。关于第二个问题,我在运行查询时看到不同的扫描数据大小。如果您在Validator 中看到字节差异,请注意这只是对读取的字节数的估计。

【讨论】:

谢谢。我认为我的数据集中的列大小太小而无法更改估计值。这些查询最有帮助。谢谢!

以上是关于BigQuery 定价:记录列的查询数据大小(成本)计算的主要内容,如果未能解决你的问题,请参考以下文章

大查询统一费率定价的复制,加载和导出操作的插槽利用率

BigQuery - 集群表不使用多个键减少查询大小

Bigquery 定价/客户支持?

查询“记录”中的特定值

了解 Google Bigquery 物化视图定价

如何在 BigQuery 中最小化每次 SQL 查询执行的成本