Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

如何将 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 脚本或你需要的任何其他进程。

Navigation