Pandas DataFrame导入BigQuery失败:时间戳列格式问题
解决Pandas时间戳导入BigQuery的TIMESTAMP格式错误问题
问题原因
你遇到的错误是因为BigQuery自动推断CSV列类型时,无法正确识别Pandas默认生成的Timestamp格式,或者推断过程中模式参数冲突,导致抛出“TIMESTAMP is not a valid value for mode”的报错。
解决方案
方案1:格式化时间戳为BigQuery兼容的字符串
在Pandas生成时间戳时,直接转成BigQuery TIMESTAMP类型支持的RFC3339格式(优先用UTC时区),避免自动推断出错:
# 生成UTC时区的时间戳,格式化为精确到毫秒的字符串 df['CURRENT_TS'] = pd.Timestamp.now(tz='UTC').strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
这样写入CSV的时间格式完全符合BigQuery要求,导入时无需额外处理就能被正确识别为TIMESTAMP类型。
方案2:显式指定BigQuery表Schema
如果要保留Pandas的Timestamp类型写入CSV,在使用load_table_from_uri时直接定义表结构,强制指定CURRENT_TS列为TIMESTAMP类型:
from google.cloud import bigquery # 替换为你的实际列名和类型 schema = [ bigquery.SchemaField("列1", "STRING"), bigquery.SchemaField("CURRENT_TS", "TIMESTAMP"), # 添加其他列的定义 ] # 配置导入任务 job_config = bigquery.LoadJobConfig( schema=schema, source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, # CSV包含表头行时开启 ) # 执行导入 client = bigquery.Client() load_job = client.load_table_from_uri( "gs://你的存储桶路径/目标文件.csv", "你的项目ID.数据集ID.目标表ID", job_config=job_config ) # 等待任务完成 load_job.result()
显式指定Schema可以跳过BigQuery的自动类型推断,从根源避免格式识别错误。
内容的提问来源于stack exchange,提问作者Jonito
相关产品推荐
相关产品推荐

