Vertica 导入导出CSV文件

Posted by hydra on 2019-11-04

copy 数据导入工具

copy 命令无疑是最常用的导入工具了, 它是Vertica的bulk copy工具, 性能非常好. 可以直接从文本文件或者压缩文件导入数据,
支持的压缩格式有: BZIP | GZIP | LZO | UNCOMPRESSED
支持的文件格式有: csv | FIXEDWIDTH | json | ORC | parquet
设置为json 格式设置 parser.

从数据库 node 节点导入

从数据库节点的文件系统中导入数据, 需要有 vertica 的 superuser 的权限, 一般用比较少. 数据文件可以仅仅存放在某个节点上, 或者所有节点上. 比如在节点2上, 使用 on v_dbname_node0002 ; 在所有节点上, 使用 ON ANY NODE, 下面是一个示例

1
2
3
4
5
6
7
8
COPY schema.table 
(column_a, column_b...)
FROM '/tmp/bigdata.csv.gz' GZIP
on v_dbname_node0002
WITH
DELIMITER AS ','
ENCLOSED BY '"'
SKIP 1

从客户端本地导入(copy local)

今天使用过,发现若是平面文件存在空行,会自动跳过,但若有对应列存在’NULL’值,这行也会不处理。
(工作时间,没细查,尚不知道是目标表该列定义为数值型的原因,还是因为只要是NULL就会导致问题。)
100多列,3万行,大概1-2秒就能完成。

1
2
3
4
5
6
7
COPY schema.table 
(column_a, column_b...)
FROM LOCAL '/tmp/bigdata.csv.gz' GZIP
WITH
DELIMITER AS ','
ENCLOSED BY '"'
SKIP 1

导出数据到本地文件

可以使用 vsql 命令行工具导出数据到本地文件, vsql 有非常强大的输出格式定制功能, 我们甚至可以使用 html 模版进行文件的导出.

1
vsql -U username -w passwd -h testdb01 -d vmart "select * from export_query_result " -Aq -P footer=off -F ',' -o "/tmp/example.csv"

export table 到另一个 vertica 集群中

1
2
3
4
5
6
7
--首先执行连接目标集群
CONNECT TO VERTICA my_database USER my_user PASSWORD 'my_password' ON '10.205.10.00',5433;
--执行数据 Export
EXPORT TO VERTICA my_database.my_schema.my_table as
select * from my_schema.my_table where my_date_column=date'2019-11-04';
---关闭连接
DISCONNECT my_database;

来源

harrychinese 刘忠武