Como exportar dados do PostgreSQL para Parquet, CSV ou JSON
Isso é fácil com clickhouse-local:
- Use a função de tabela
postgresqlpara ler os dados - Use a cláusula
INTO OUTFILE _filename_ FORMATe especifique o formato de saída desejado
O formato de saída pode ser qualquer um dos formatos de saída compatíveis com o ClickHouse. Vamos ver alguns exemplos…
Estes exemplos usam clickhouse-local, que faz parte do binário do ClickHouse. Baixe-o com o comando a seguir:
curl https://clickhouse.com/ | shExportar o PostgreSQL para Parquet
A função de tabela postgresql permite executar consultas SELECT (e INSERT) em dados armazenados em um servidor PostgreSQL remoto. Por exemplo, para visualizar todo o conteúdo de uma tabela no PostgreSQL:
SELECT *
FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
);Podemos redirecionar a saída desta consulta para um arquivo usando INTO OUTFILE. Use FORMAT para especificar o formato do arquivo que será criado. Vamos exportar todo o conteúdo da tabela PostgreSQL para um arquivo Parquet:
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.parquet'"Exportar PostgreSQL para CSV
É o mesmo processo do Parquet, exceto pelo fato de especificarmos um nome de arquivo mais apropriado para a saída:
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.csv'"É isso! O ClickHouse reconhece a extensão .csv no nome do arquivo de saída e exporta os dados como valores separados por vírgula. Fora isso, é exatamente o mesmo comando mostrado acima.
Exportar PostgreSQL para JSON
Para exportar do PostgreSQL para JSON, basta alterar o nome do arquivo, e o ClickHouse identificará o formato:
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.ndjson'"Enviar PostgreSQL para outro processo
Em vez de usar INTO OUTFILE, você pode enviar os resultados de uma função de tabela para outro processo. Aqui está um exemplo simples para demonstrar a sintaxe: contamos o número de linhas usando o comando 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 -lNo entanto, poderíamos facilmente direcionar as linhas para um script de shell, um script Python ou qualquer outro processo que você quiser.