sql - 为什么在插入时间分区的 BigQuery 表时流数据未分区?

标签 sql google-cloud-platform google-bigquery partitioning

将流式数据插入 BigQuery 中的时间分区表(例如按天)时,查询时不会显示所有预期的分区(尽管所有数据实际上都可用)。

例如,虽然有日期 2021-09-132021-09-15 的数据,但在以下情况下无法看到相应的分区:使用旧版 SQL 查询它们。

bq query --use_legacy_sql '
    SELECT partition_id
    FROM [database.product$__PARTITIONS_SUMMARY__]
    ORDER BY partition_id DESC '

Waiting on bqjob_id_1 ... (0s) Current status: DONE
+-------------------+
|   partition_id    |
+-------------------+
| __UNPARTITIONED__ |
| 20210912          |
| 20210911          |
| 20210910          |
+-------------------+

使用表元数据INFORMATION_SCHEMA.PARTITIONS中包含的信息仔细观察会发现一个名为__STREAMING_UNPARTITIONED__的分区,其中包含尚未正确分区的所有行。

bq query --nouse_legacy_sql '
    SELECT table_name, partition_id, total_rows
    FROM database.INFORMATION_SCHEMA.PARTITIONS
    WHERE table_name="product"
    ORDER BY partition_id DESC '

Waiting on bqjob_id_2 ... (0s) Current status: DONE
+------------+-----------------------------+------------+
| table_name |        partition_id         | total_rows |
+------------+-----------------------------+------------+
| product    | __UNPARTITIONED__           |          0 |
| product    | __STREAMING_UNPARTITIONED__ |       9519 |
| product    | 20210912                    |       3014 |
| product    | 20210911                    |       3152 |
| product    | 20210910                    |       3369 |
+------------+-----------------------------+------------+ 

所以问题是,为什么所有这些数据都没有分区?请注意,此行为会对业务产生影响,因为重复查询未分区的数据可能会产生高额费用。

最佳答案

根据官方 Google Cloud 支持,“报告的行为是预期行为,因为流数据仅在有足够的未分区数据时才会重新分区。BigQuery 当前对热数据重新分区的内部限制为 5GiB(尽管这可能会在当月)”。

更多信息可以在 the corresponding Google Cloud documentation site 中找到.

关于sql - 为什么在插入时间分区的 BigQuery 表时流数据未分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69167863/

相关文章:

docker - 谷歌云计算实例更新

sql - 左连接嵌套选择和聚合函数

ios - 是否可以使用 firebase 调用云函数中的其他 API?

sql在使用order by时分配一个类别id

java - Google DataStore 与 objectify - HashMap 上的复合查询

java - 无法从 AppEngine java 访问 BigQuery

sql - 获取每组得分前 5 行

java - BigQueryIO 读取获取 TableSchema

Android SQLite多WHERE

mysql - mySQL 中的外部引用时出错(错误 3780)