使用BigQuery时间分区加载DataFrame时部分数据未上传求助
BigQuery分区表数据上传不完整的排查方向
- 日期格式不匹配:即使每行都有日期值,若DataFrame中date列的格式不符合BigQuery DATE类型要求(比如用
"2023/10/01"斜杠分隔而非"2023-10-01"横杠分隔,或是带多余时间戳的字符串),自动检测会识别失败,导致这类行被丢弃。可以将DataFrame的date列转为datetime.date类型后再上传,或在LoadJobConfig中手动指定schema,明确date列为DATE类型。 - 日期超出合法范围:BigQuery日分区表支持的日期范围是
1970-01-01至9999-12-31,若date列存在超出该范围的数值,对应行无法写入分区表。可通过df['date'].min()和df['date'].max()检查日期范围是否合规。 - 隐藏的无效值:确认date列无
NaT(缺失时间)值,有些情况下DataFrame视觉上显示有值,但实际是NaT,可执行df['date'].isna().sum()统计缺失数量。 - 加载作业的错误行处理:查看加载作业的错误统计,通过Python API获取作业对象后,检查
job.statistics['bad_records']字段,确认是否有因类型不匹配、字段缺失等问题被拒绝的行。 - 自动模式检测偏差:
autodetect=True可能误判date列类型(比如将日期字符串识别为STRING),而分区字段要求必须是DATE/DATETIME/TIMESTAMP类型,导致不符合的行无法写入。建议手动定义schema,避免自动检测的不确定性。 - 分批次加载异常:大DataFrame会被客户端分批次上传,若某一批次出现网络波动或数据校验失败,可能仅部分批次完成写入。可尝试拆分DataFrame为小批量上传,或查看作业的分批次执行日志。
内容的提问来源于stack exchange,提问作者在去中国
相关产品推荐
相关产品推荐

