如何将 PostgreSQL 数据导出为 Parquet、CSV 或 JSON
使用 clickhouse-local 很容易做到这一点:
- 使用
postgresql表函数 读取数据 - 使用
INTO OUTFILE _filename_ FORMAT子句,并指定所需的输出格式
输出格式可以是 ClickHouse 支持的任意一种 ouput formats。我们来看几个示例……
这些示例使用了 clickhouse-local,它是 ClickHouse 二进制程序的一部分。请按以下方式下载:
curl https://clickhouse.com/ | sh将 PostgreSQL 导出为 Parquet
postgresql 表函数允许对存储在远程 PostgreSQL 服务器上的数据执行 SELECT (以及 INSERT) 查询。例如,要查看 PostgreSQL 中某张表的全部内容:
SELECT *
FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
);我们可以使用 INTO OUTFILE 将此查询的输出写入文件。使用 FORMAT 指定要创建的文件格式。我们来获取 PostgreSQL 表的全部内容,并将其写入一个 Parquet 文件:
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.parquet'"将 PostgreSQL 导出为 CSV
这与导出为 Parquet 时相同,只是我们为输出指定了一个更合适的文件名:
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.csv'"就是这样!ClickHouse 会根据输出文件名中的 .csv 扩展名,将数据输出为逗号分隔格式。除此之外,该命令与上面的命令完全相同。
将 PostgreSQL 导出为 JSON
要将 PostgreSQL 导出为 JSON,只需更改文件名,ClickHouse 就会自动识别格式:
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.ndjson'"将 PostgreSQL 的输出流式传给另一个进程
你可以不使用 INTO OUTFILE,而是将表函数的结果流式传给另一个进程。下面用一个简单示例演示这种语法——我们使用 Linux 的 wc -l 命令来统计行数:
./clickhouse local -q "SELECT *
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/house_parquet/house_0.parquet'
FORMAT JSONEachRow
)" | wc -l不过,我们也可以轻松地将这些行流式发送给 shell 脚本、Python 脚本或你需要的任何其他进程。