BigQuery上传CSV创建表时TIMESTAMP字段时区错误的修复方案咨询
BigQuery上传CSV创建表时TIMESTAMP字段时区错误的修复方案咨询
嗨,这个问题我之前碰到过好多次啦!核心原因是BigQuery默认的TIMESTAMP解析逻辑误解了你时间字符串里的AM/PM标识——它把AM/PM当成了时区参数,所以才会报出「Invalid time zone: AM」的错误。下面给你几个实用的解决办法,不管你的CSV文件多大都能搞定:
方法一:先传字符串再转TIMESTAMP(适合不想动原文件的情况)
- 创建表的时候,把「Time」字段的类型改成
STRING,先顺利完成CSV上传 - 上传完成后,用BigQuery的
PARSE_TIMESTAMP函数把字符串转换成标准TIMESTAMP,示例SQL如下:
这里的SELECT PARSE_TIMESTAMP('%m/%d/%Y %I:%M:%S %p', `Time`) AS parsed_time FROM `你的项目ID.你的数据集ID.你的表名`%p就是专门用来识别AM/PM的格式符,%I对应12小时制的小时数,别和24小时制的%H搞混哦 - 如果需要替换原字段,可以创建新表存储转换后的数据,或者用
ALTER TABLE新增字段再批量更新
- 创建表的时候,把「Time」字段的类型改成
方法二:上传时直接指定时间解析格式(推荐!一步到位)
在BigQuery上传CSV的「高级选项」里找到「CSV选项」,然后在「TIMESTAMP格式」输入框中填入对应的格式字符串:%m/%d/%Y %I:%M:%S %p
这样BigQuery就会按照你指定的规则去解析带AM/PM的时间,直接生成TIMESTAMP类型的字段,不用后续再做转换方法三:预处理CSV文件(适合能编辑文件的场景)
如果你的CSV文件虽然大但可以用工具处理(比如Excel、Python脚本),可以把时间转换成24小时制并去掉AM/PM:
比如把「4/1/2016 7:54:00 AM」改成「4/1/2016 07:54:00」,「4/1/2016 2:30:00 PM」改成「4/1/2016 14:30:00」,这样BigQuery就能默认识别了
用Python批量处理的话,简单脚本示例:import pandas as pd # 读取原CSV df = pd.read_csv('你的原文件.csv') # 转换时间格式为24小时制 df['Time'] = pd.to_datetime(df['Time']).dt.strftime('%m/%d/%Y %H:%M:%S') # 保存修复后的CSV df.to_csv('修复后的文件.csv', index=False)
备注:内容来源于stack exchange,提问作者Eugenia24
相关产品推荐
相关产品推荐

