当我尝试使用时间戳字段的bq load命令将值加载到表时,遇到了一个错误,但当我在GUI上直接插入时,相同的值似乎可以正常工作。
- 表LOG已经创建,created_time字段类型为TIMESTAMP
-
这似乎插入得很好。
Insert into testdataset.LOG (id, created_time) values (123,"2014-09-27T12:30:00.45Z");
-
此操作失败,出现错误
bq load --source_format=CSV --skip_leading_rows=1 --autodetect --noreplace myproject:testdataset.LOG ./test.csv
CSV的成分:
"ID","CREATED_TIME"
1,"2014-09-27T12:30:00.45Z"
2,"2014-09-27T12:30:00.45Z"
错误如下:
Field CREATED_TIME has changed type from TIMESTAMP to STRING
如果我将模式添加到命令中,如下所示:
bq load --source_format=CSV --skip_leading_rows=1 --autodetect --noreplace myproject:testdataset.LOG ./test.csv ID:INTEGER,CREATED_TIME:TIMESTAMP
我得到错误:Field CREATED_TIME has changed mode from REQUIRED to NULLABLE
更新:
**我的问题是csv中字段和引号的顺序。。。我还必须将字段created_time从REQUIRED更改为NULLABLE。。一旦我做了这些,它就起作用了。我的新CSV如下所示:
CREATE_TIME,ID
2014-09-27T12:30:00.45Z,123
2014-09-27T12:30:00.45Z,123
**
看起来您的CSV有点格式错误。尝试完全删除引号:
ID,CREATED_TIME
1,2014-09-27T12:30:00.45Z
2,2014-09-27T12:30:00.45Z
如果您的模式存在,则不需要要求模式自动检测。如果可以的话,让BigQuery将您的字段转换为目标字段格式。为此,只需删除--autodetect
选项
bq load --source_format=CSV --skip_leading_rows=1 --noreplace myproject:testdataset.LOG ./test.csv