1

我有一个类型为列的表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. 我希望id在导入数据时由 crdb 分配第一个 , 。

导入失败并出现以下错误:

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

有什么解决方法吗?

4

1 回答 1

1

不幸的是,目前在 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
于 2017-11-07T16:32:18.803 回答