メインコンテンツへスキップ

PostgreSQL のデータを Parquet、CSV、または JSON にエクスポートする方法

これは clickhouse-local を使えば簡単です。
  • postgresql table function を使用してデータを読み取ります
  • INTO OUTFILE _filename_ FORMAT 句を使用し、必要な出力フォーマットを指定します
出力フォーマットには、ClickHouse でサポートされている任意の ouput formats を使用できます。いくつか例を見てみましょう… これらの例では、ClickHouse バイナリの一部である clickhouse-local を使用します。以下の手順でダウンロードしてください。
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'"
出力ファイル名の拡張子が .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 句を追加します。
./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
ただし、行はシェルスクリプトやPythonスクリプト、あるいは任意の別プロセスに簡単にストリーミングできます。
最終更新日 2026年6月10日