我有一个从MySQL数据库导出的CSV文件,我想把它移到CockroachDB。如何从命令行读取数据?
答案 0 :(得分:2)
使用IMPORT
语句在CockroachDB 2.0及更高版本中本机支持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;"
答案 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
硬编码为分隔符而不是,
是我所不知道的。
答案 2 :(得分:0)
上述说明已过时; 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迁移指南。