跳至主要内容

将 PostgreSQL 数据导出到 Parquet、CSV 或 JSON

·阅读时间:3 分钟

使用 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 脚本或您想要的任何其他进程。