【发布时间】:2017-09-05 23:44:43
【问题描述】:
我有一个从 MySQL 数据库导出的 CSV 文件,我想将其移至 CockroachDB。如何从命令行读取数据?
【问题讨论】:
标签: cockroachdb
我有一个从 MySQL 数据库导出的 CSV 文件,我想将其移至 CockroachDB。如何从命令行读取数据?
【问题讨论】:
标签: cockroachdb
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 中已经有一个未解决的问题
【讨论】:
CockroachDB 2.0 及更高版本使用IMPORT 语句原生支持CSV 导入。您可以使用WITH delimiter 选项指定自定义分隔符,如these examples 和this 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 MYSQLDUMP 或 IMPORT PGDUMP 直接从 MySQL 或 PostgreSQL 文件导入。有关详细信息,请参阅文档的 this section 以及 MySQL/Postgres 迁移指南。
将 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;"
【讨论】:
DELIMITER,因此不能接受带有逗号分隔符的 CSV 文件。
psql(即 Postgres CLI),而不是 cockroach sql,才能使用 COPY 命令。
以上说明现已过时; CockroachDB 2.0 及更高版本使用IMPORT 语句原生支持CSV 导入。您可以使用WITH delimiter 选项指定自定义分隔符,如these examples 和this migration guide 所示。
如果您使用 CockroachDB 2.1 并从 MySQL 或 Postgres 迁移,您还可以使用 IMPORT MYSQLDUMP 或 IMPORT PGDUMP 从 mysqldump 或 pg_dump SQL 文件直接导入。有关详细信息,请参阅文档的 this section 以及 MySQL/Postgres 迁移指南。
【讨论】: