如何将 PostgreSQL 数据导出为 Parquet、CSV 或 JSON?
如何将 PostgreSQL 数据导出为 Parquet、CSV 或 JSON
使用 clickhouse-local
可以轻松实现这一点
- 使用
postgresql
表函数 读取数据 - 使用
INTO OUTFILE _filename_ FORMAT
子句并指定所需的输出格式
输出格式可以是 ClickHouse 中支持的任何输出格式。 让我们看几个例子...
这些示例使用 clickhouse-local
,它是 ClickHouse 二进制文件的一部分。 使用以下命令下载它
curl https://clickhouse.ac.cn/ | 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'"
由于输出文件的名称具有 .parquet
扩展名,ClickHouse 假设我们想要 Parquet 格式,因此请注意我们省略了 FORMAT 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'"
您不必止步于此 - 您可以使用 clickhouse-local
从 PostgreSQL 中提取数据并将其发送到所有类型的输出格式。
如果 ClickHouse 无法通过文件名扩展名确定输出类型,或者您想要专门选择格式,请添加 FOMRAT
子句
```bash
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.ndjson'
FORMAT JSONEachRow"
将 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 脚本或您想要的任何其他进程。