我有一个从 MySQL 数据库导出的 CSV 文件,我想将其移至 CockroachDB。如何从命令行读取数据?
3 回答
CockroachDB v2.0 或更高版本
IMPORT
CockroachDB 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;"
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中已经有一个未解决的问题