我一直在尝试将 BigQuery 转储从每日分区表加载到每小时分区表,但遇到以下错误: 我创建了一个按小时分区的新表,因为我们发现按小时分区对于我们的业务模型表现更好,我现在正在尝试将数据从每日分区表迁移到按小时分区。
两个表都在列 dt(时间戳)上进行分区,唯一的区别是新表的分区过期时间为 180 天,并且很少有字段用于通过 cid、mt、clid 对分区进行聚类,sid。两个表都位于同一区域的同一数据集下。我将 JSON 格式的数据导出到存储桶中,现在我尝试导入它,但收到此错误:
query: Too many partitions produced by query, allowed 4000, query
produces at least 4050 partitions
我使用的命令如下:
bq load --project_id=<my-project-id> --source_format=NEWLINE_DELIMITED_JSON --noreplace --autodetect --time_partitioning_type=HOUR --time_partitioning_field=dt --time_partitioning_expiration=15552000 --clustering_fields=cid,mt,clid,sid --noreplace -ignore_unknown_values=true <my-dataset>.<my-new-table> gs://<my-bucket>/<shards-name>*
在上面的命令中,尖括号之间的所有内容都替换为我当前项目的数据集、表和存储桶。 有什么解决方法可以导入转储吗?更多信息:每日表有 624,892,214。行。 我还在GCP文档中发现一个表只能有4000个表,这解释了错误,但是如何加载较旧的数据?
谢谢
添加此文档作为@guillaume blaquiere提到的内容的参考。
考虑探索表集群,因为在处理超过 4000 个分区时这是一个更好的选择。结合集群和分区是另一个可行的选择,但需要更多的时间和技术技能才能成功部署。
还有本指南可用于故障排除。