如何用Python转换CSV时间格式适配BigQuery的DATETIME类型要求
问题根因
BigQuery DATETIME 类型默认仅识别YYYY-MM-DD HH:MM:SS格式的时间字符串,你当前CSV内的时间格式和标准要求不匹配,所以触发Invalid DateTime string报错。你给出的Schema配置bigquery.SchemaField("DATE", "DATETIME", mode="REQUIRED")本身没有问题,只需要提前把源数据的时间字段做格式转换即可。
注意你描述中写的时间格式为DD:MM:YY HH:MM,和你给出的实际报错样例"21.03.22 22:02"的点分隔格式存在出入,下面代码默认按你提供的真实报错样例做解析,如果实际分隔符是冒号,调整格式匹配串即可。
处理步骤
- 先通过Python读取原始CSV文件,不要直接上传未处理的源文件
- 按原始时间格式解析DATE列的字符串,统一转换为BigQuery兼容的
YYYY-MM-DD HH:MM:SS格式,自动补全缺失的秒位为00 - 导出处理后的新CSV文件,再用原有Schema配置上传即可
可直接运行的代码
首先安装需要的依赖:pip install pandas
处理脚本:
import pandas as pd from datetime import datetime # 替换为你的原始CSV文件路径 raw_df = pd.read_csv("your_raw_data.csv") def format_for_bq(datetime_str): # 按样例格式DD.MM.YY HH:MM解析,若原格式是冒号分隔,把下面字符串里的.换成:即可 parsed_time = datetime.strptime(datetime_str.strip(), "%d.%m.%y %H:%M") # 输出BigQuery支持的标准格式 return parsed_time.strftime("%Y-%m-%d %H:%M:%S") # 转换DATE列 raw_df["DATE"] = raw_df["DATE"].apply(format_for_bq) # 导出处理后的文件,关闭索引写入避免生成多余列 raw_df.to_csv("bq_ready_data.csv", index=False)
注意事项
因为你给DATE字段设置了
REQUIRED模式,上传前务必检查该列是否存在空值、无法解析的异常时间字符串,否则还是会触发上传报错。可以在format_for_bq函数中增加try-except逻辑提前排查脏数据。
处理完成后,直接上传生成的bq_ready_data.csv即可,不需要修改原有BigQuery表的Schema配置。
内容的提问来源于stack exchange,提问作者Osama
相关产品推荐
相关产品推荐

