导入CSV至BigQuery遇时间戳解析错误,求解决方法
解决BigQuery导入CSV时AM/PM时间格式解析错误的问题
核心原因
BigQuery自动检测schema时,误将12小时制时间里的AM/PM识别为时区标识,导致TIMESTAMP类型解析失败。
解决方案一:先导入为字符串,再转换为TIMESTAMP
这是UI操作下最直接的办法:
- 手动定义导入schema
在导入CSV时,放弃自动检测schema,选择「edit as text」,将SleepDay字段的类型设为STRING,示例schema如下(替换其他字段为你的实际字段):[ {"name": "SleepDay", "type": "STRING"}, {"name": "其他字段1", "type": "INTEGER"}, {"name": "其他字段2", "type": "STRING"} ] - 导入后转换时间格式
数据导入完成后,执行SQL将字符串转换为标准TIMESTAMP,使用PARSE_TIMESTAMP函数指定12小时制格式:
格式说明:SELECT PARSE_TIMESTAMP('%m/%d/%Y %I:%M:%S %p', SleepDay) AS SleepDay, -- 保留其他字段 其他字段1, 其他字段2 FROM `你的项目ID.你的数据集ID.你的表名`%m/%d/%Y:匹配「月/日/年」格式%I:%M:%S:匹配12小时制的时分秒(01-12)%p:匹配AM/PM标识
解决方案二:使用命令行工具指定时间格式(适合批量操作)
如果用bq命令行工具导入,可以直接指定时间解析格式,无需先转字符串:
- 先编写schema文件(比如
schema.json),将SleepDay设为TIMESTAMP:[ {"name": "SleepDay", "type": "TIMESTAMP"}, {"name": "其他字段1", "type": "INTEGER"} ] - 执行导入命令,通过
--time_format参数指定格式:bq load --source_format=CSV --time_format='%m/%d/%Y %I:%M:%S %p' \ 你的项目ID:你的数据集ID.你的表名 \ 本地CSV文件路径 \ schema.json
内容的提问来源于stack exchange,提问作者Danielle Angel
相关产品推荐
相关产品推荐

