Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Как экспортировать данные PostgreSQL в Parquet, CSV или JSON?

Как экспортировать данные PostgreSQL в Parquet, CSV или JSON

Это легко сделать с помощью clickhouse-local:

  • Используйте табличную функцию postgresql, чтобы прочитать данные
  • Используйте предложение INTO OUTFILE _filename_ FORMAT и укажите нужный формат вывода

Форматом вывода может быть любой из поддерживаемых форматов вывода в ClickHouse. Рассмотрим несколько примеров…

В этих примерах используется clickhouse-local, который входит в состав бинарного файла ClickHouse. Скачайте его следующим образом:

curl https://clickhouse.com/ | sh

Экспорт PostgreSQL в Parquet

Табличная функция postgresql позволяет выполнять запросы SELECTINSERT) к данным, хранящимся на удалённом сервере PostgreSQL. Например, чтобы просмотреть всё содержимое таблицы в 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 в имени выходного файла и выводит данные в формате 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