使用LOAD DATA INTO导入CSV至BigQuery时DATETIME列类型识别错误
解决BigQuery导入CSV时误将DATETIME识别为TIMESTAMP的问题
核心原因
BigQuery的LOAD DATA INTO默认会尝试自动推断数据类型,即使目标表已有明确结构,仍可能将符合ISO8601格式的日期时间字符串误判为TIMESTAMP,导致与目标表的DATETIME类型冲突。
解决方案
1. 明确指定列类型,覆盖自动推断
在LOAD DATA INTO语句中直接定义完整表结构,强制指定dt_created列为DATETIME类型,避免BigQuery自动推断:
LOAD DATA INTO `your-project.your-dataset.target_table` ( -- 按实际表结构列出所有列及类型,示例: id INT64, name STRING, dt_created DATETIME, status BOOL ) FROM FILES( format = 'CSV', uris = ['gs://your-bucket/path/exported-file.csv'] ) OPTIONS( skip_leading_rows = 1 -- 如果CSV包含表头行,设置为1;无表头则省略 );
2. 关闭自动类型推断功能
通过OPTIONS参数关闭自动检测,强制BigQuery使用目标表已定义的结构导入数据:
LOAD DATA INTO `your-project.your-dataset.target_table` FROM FILES( format = 'CSV', uris = ['gs://your-bucket/path/exported-file.csv'] ) OPTIONS( autodetect = FALSE, skip_leading_rows = 1 -- 根据CSV是否有表头调整 );
3. 确认目标表结构无误
先执行以下语句验证目标表的dt_created列确实为DATETIME类型,避免因表结构不一致导致的问题:
DESCRIBE TABLE `your-project.your-dataset.target_table`;
内容的提问来源于stack exchange,提问作者apw-ub
相关产品推荐
相关产品推荐

