我有一个包含SERIAL
类型列的表:
IMPORT TABLE osm.node_tags (
id SERIAL NOT NULL,
node_id INT NOT NULL,
key STRING NOT NULL,
value STRING NOT NULL,
PRIMARY KEY (id)
)
CSV DATA ('s3://cockroach-import/node-keys.csv?<snip>}')
WITH
temp = 's3://cockroach-import/?<snip>',
delimiter = ','
;
要导入3列的csv文件:node_id
,key
和value
。我希望在导入数据时由crdb分配第一个id
。
导入失败,并显示以下错误:
Error: pq: s3://cockroach-import/node-keys.csv?<snip>: row 1: expected 4 fields, got 3
这有什么解决方法吗?
答案 0 :(得分:0)
不幸的是,目前在IMPORT期间没有好办法做到这一点。
目前,您可以选择在IMPORT之前或之后添加ID。
要执行此操作,您只需将文件导入不带id
列的中间表,然后使用INSERT INTO real_table (SELECT * from imported_table)
之类的内容将其复制。不幸的是,如果桌子非常大,这将很慢甚至超时。
要在导入表之前执行此操作,您可以使用awk
之类的内容将行号添加到每一行,实际上在IMPORT读取之前在CSV中生成ID,例如。
awk '{printf("%d, %s\n", NR, $0)}' data.csv