Google Cloud按日期创建分区表后数据为空的问题求助
结合你提供的BigQuery代码和现象,以下是几种常见的触发原因及对应排查方法:
查询条件过滤掉了所有数据
你的CREATE TABLE语句中使用WHERE alpha_3_code NOT IN ("GBR", "BRA", "CAN", "USA")做过滤,如果源表bigquery-public-data.covid19_govt_response中所有行的alpha_3_code要么是这四个值,要么为NULL,那么查询结果集就是空的,创建出的分区表自然没有数据。
建议先单独执行计数查询验证:#standardSQL SELECT COUNT(*) FROM bigquery-public-data.covid19_govt_response AS oxford WHERE alpha_3_code NOT IN ("GBR", "BRA", "CAN", "USA")如果返回计数为0,说明就是条件过滤导致的无数据。
分区字段类型不匹配
你指定了PARTITION BY date,如果源表中的date字段不是DATE类型(比如是TIMESTAMP或STRING),BigQuery自动转换时可能出现异常,导致数据无法正确写入分区。可以先查看源表字段类型:#standardSQL SELECT data_type FROM bigquery-public-data.covid19_govt_response.INFORMATION_SCHEMA.COLUMNS WHERE column_name = 'date'如果是TIMESTAMP类型,建议显式转换为DATE后再分区:
#standardSQL CREATE OR REPLACE TABLE covid_598.oxford_policy_tracker_527 PARTITION BY parsed_date OPTIONS ( partition_expiration_days=360 ) AS ( SELECT *, DATE(date) AS parsed_date FROM bigquery-public-data.covid19_govt_response AS oxford WHERE alpha_3_code NOT IN ("GBR", "BRA", "CAN", "USA") )表/数据集/项目ID混淆
日志显示插入成功但查询不到数据,有可能是插入的表和查询的表并非同一对象——比如误写入其他数据集,或项目ID、表名拼写不一致。确认查询时使用的表名是否和创建/插入语句中的完全一致:covid_598.oxford_policy_tracker_527。预览/查询的分区过滤限制
BigQuery预览分区表时,默认可能只展示最近的几个分区。如果你的数据集中在较早的分区里,预览时会看不到。可以尝试在查询时添加WHERE date IS NOT NULL,或者在预览界面选择“所有分区”查看完整数据。
内容的提问来源于stack exchange,提问作者NovasVilla

