如何将CSV文件导入CockroachDB?

时间:2017-04-10 19:29:20

标签: cockroachdb

我有一个从MySQL数据库导出的CSV文件,我想把它移到CockroachDB。如何从命令行读取数据?

3 个答案:

答案 0 :(得分:2)

CockroachDB v2.0或更高版本

使用IMPORT语句在CockroachDB 2.0及更高版本中本机支持CSV导入。您可以使用WITH delimiter选项指定自定义分隔符,如these examplesthis migration guide所示。

例如:

IMPORT TABLE customers
    CREATE USING 'azure://acme-co/customer-create-table.sql'
    CSV DATA ('azure://acme-co/customer-import-data.csv')

在v2.1中,您还可以使用IMPORT MYSQLDUMPIMPORT PGDUMP直接从MySQL或PostgreSQL文件导入。有关详细信息,请参阅文档的this section以及MySQL / Postgres迁移指南。

CockroachDB v1.1或更早版本

将CSV文件导入CockroachDB的最简单方法是使用CSV到SQL转换器,将CSV中的每一行转换为SQL INSERT语句。您可以找到任意数量的网站来为您执行此操作,或者您可以构建一个脚本来执行诸如awk,Perl或Python之类的处理。一旦在文件中获得了SQL INSERT语句,就可以执行它们:

cockroach sql --database=[your db] < [file].sql

或者,如果您安装了Postgres,则可以通过psql连接到CockroachDB并使用其COPY命令导入CSV。

psql postgres://USER@HOST:PORT/DATABASE -c "COPY [table] FROM '[path to].csv' DELIMITER ',' CSV;"

如果你在本地机器上的默认端口上运行CockroachDB,这里的命令是填充默认值的相同命令:

psql postgres://root@localhost:26257/DATABASE -c "COPY [table] FROM '[path to].csv' DELIMITER ',' CSV;"

答案 1 :(得分:2)

Cockroach不支持DELIMITER语句,它也不接受CSV格式的显式,因此使用COPY FROM的正确命令将是:

psql postgres://user@host:port/DATABASE -c "COPY [table] FROM '[path to].csv';"

分隔符字符必须为特殊字符\t,因此如果您的CSV文件使用,作为分隔符,则可以使用sed轻松转换它:

sed -i 's/,/\t/g' [your file].csv

为什么他们将特殊字符\t硬编码为分隔符而不是,是我所不知道的。

https://github.com/cockroachdb/cockroach/issues/16407

中已经有一个未解决的问题

答案 2 :(得分:0)

上述说明已过时; CockroachDB 2.0和更高版本使用IMPORT语句本机支持CSV导入。您可以使用WITH delimiter选项指定自定义分隔符,如these examplesthis migration guide所示。

如果您使用的是CockroachDB 2.1并从MySQL或Postgres迁移,则还可以使用IMPORT MYSQLDUMPIMPORT PGDUMP从mysqldump或pg_dump SQL文件直接导入。有关更多详细信息,请参见文档中的this section以及MySQL / Postgres迁移指南。