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

时间:2018-11-12 13:38:08

标签: google-bigquery

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

我有一些要加载到BigQuery中的数据,但是我不确定应该使用的模式。

我拥有的数据(除其他外)具有以下列:

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

我的问题:

  1. 如果仅查询event.id,是否还会扫描其他event.*列中的数据?

    SELECT event.id FROM table_name

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

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

不幸的是,来自Google的(详细)信息无法回答这些问题,因为它没有提及query pricing的嵌套列,并且在描述data sizes时也含糊不清

1 个答案:

答案 0 :(得分: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中看到字节差,请注意,这只是对读取的字节数的估计。