使用 SQL 或 Python 如何确定 table 是否属于 table 的分片集(在 BigQuery 中)?

With SQL or Python how can I find out if a table is part of a sharded set of tables (in BigQuery)?

我想知道我的 table 尺码是多少(在 BigQuery 中)。
但是,我想总结属于一组特定的分片 table 的所有 table 的大小。 所以我需要找到显示 table 是一组分片 tables 的一部分的元数据。

所以我可以做到:

select 
  sum(size_bytes)/pow(2, 30) as size_gb
from
  <your_dataset>.__TABLES__

但在这里我看不到 table 是否是一组 table 的分片集的一部分。

这就是我的 Google 分析分片 table 在 BQ 中的样子:

所以某处必须是元数据,表明 tables 与例如名称 ga_sessions_20220504 属于分片集 ga_sesssions_

Where/how 我能找到那个元数据吗?

我认为您正在探索正确的查询,大多数时候,我使用以下查询来深入了解分片及其大小

SELECT
  project_id,
  dataset_id,
  table_id,
  array_reverse(SPLIT(table_id, '_'))[OFFSET(0)] AS shard_pt,
  DATE(TIMESTAMP_MILLIS(creation_time)) creation_dt,
  ROUND(size_bytes/POW(1024, 3), 2) size_in_gb
FROM
  `<project>.<dataset>.__TABLES__`
WHERE
  table_id LIKE 'ga_sessions_%'
ORDER BY
  4 DESC

结果(在一些随机 GA 数据集上我可以访问 FYI)

通过 SQL 在 table 上没有元数据。

表在 BigQuery 中显示为分片 UI 当您执行以下操作时会发生 ->

创建 2 个或更多具有以下特征的 table:

  • 存在于同一个数据集中
  • 具有完全相同的 table 架构
  • 相同的前缀
  • 具有 _YYYYMMDD 形式的后缀(例如 20210130)

这些是遗留功能,它们更常用于 bigquery 的遗留 SQL。

此博客对此很有见地:
https://mark-mccracken.medium.com/bigquery-date-sharding-vs-date-partitioning-cee3754f7900