【问题标题】:How to import a csv file into a crdb table with a column of type SERIAL?如何将 csv 文件导入到带有 SERIAL 类型列的 crdb 表中?
【发布时间】:2017-11-05 10:59:26
【问题描述】:

我有一个表,其列类型为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

有什么解决方法吗?

【问题讨论】:

标签: csv cockroachdb


【解决方案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

【讨论】:

  • 是的,我已经尝试导入临时表,然后运行INSERT INTO 语句,但它失败了。问题是 crdb 无法处理那么大的事务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-18
  • 2017-03-31
  • 2014-12-01
  • 2021-09-28
相关资源
最近更新 更多