如何使用SERIAL类型的列将csv文件导入crdb表?

时间:2017-11-05 10:59:26

标签: csv cockroachdb

我有一个包含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_idkeyvalue。我希望在导入数据时由crdb分配第一个id

导入失败,并显示以下错误:

Error: pq: s3://cockroach-import/node-keys.csv?<snip>: row 1: expected 4 fields, got 3

这有什么解决方法吗?

1 个答案:

答案 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