2

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

4

3 回答 3

2

CockroachDB v2.0 或更高版本

IMPORTCockroachDB 2.0 及更高版本使用该语句原生支持 CSV 导入。您可以使用该选项指定自定义分隔符WITH delimiter,如这些示例本迁移指南中所示。

例如:

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

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

CockroachDB v1.1 或更早版本

将 CSV 文件导入 CockroachDB 的最简单方法是使用 CSV 到 SQL 转换器,将 CSV 中的每一行转换为 SQLINSERT语句。您可以找到任意数量的网站来为您执行此操作,或者您可以构建一个脚本以使用 awk、Perl 或 Python 等方式进行处理。将 SQLINSERT语句放入文件后,您可以像这样执行它们:

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

或者,如果您安装了 Postgres,您可以通过连接到 CockroachDBpsql并使用其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;"
于 2017-04-10T19:29:19.603 回答
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中已经有一个未解决的问题

于 2017-12-07T09:08:53.233 回答
0

上述说明现已过时;IMPORTCockroachDB 2.0 及更高版本使用该语句原生支持 CSV 导入。您可以使用该选项指定自定义分隔符WITH delimiter,如这些示例本迁移指南中所示。

如果您使用 CockroachDB 2.1 并从 MySQL 或 Postgres 迁移,您还可以使用IMPORT MYSQLDUMPor直接从 mysqldump 或 pg_dump SQL 文件导入IMPORT PGDUMP。有关更多详细信息,请参阅文档的这一部分以及MySQL / Postgres迁移指南。

于 2018-11-20T16:35:24.010 回答