将流式数据插入 BigQuery 中的时间分区表(例如按天)时,查询时不会显示所有预期的分区(尽管所有数据实际上都可用)。
例如,虽然有日期 2021-09-13
到 2021-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/