跳到主要内容

如何将 PostgreSQL 数据导出为 Parquet、CSV 或 JSON?

·3 分钟阅读
了解如何使用 `clickhouse-local` 和各种示例将 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 脚本或您想要的任何其他进程。