Comment exporter des données PostgreSQL vers Parquet, CSV ou JSON
C’est simple avec clickhouse-local :
- Utilisez la fonction de table
postgresqlpour lire les données - Utilisez la clause
INTO OUTFILE _filename_ FORMATet indiquez le format de sortie souhaité
Le format de sortie peut être n’importe lequel des formats de sortie pris en charge par ClickHouse. Voyons quelques exemples…
Ces exemples utilisent clickhouse-local, qui fait partie du binaire ClickHouse. Téléchargez-le avec la commande suivante :
curl https://clickhouse.com/ | shExporter PostgreSQL vers Parquet
La fonction de table postgresql permet d'exécuter des requêtes SELECT (et INSERT) sur des données stockées sur un serveur PostgreSQL distant. Par exemple, pour afficher l'intégralité du contenu d'une table dans PostgreSQL :
SELECT *
FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
);Nous pouvons rediriger la sortie de cette requête vers un fichier à l’aide de INTO OUTFILE. Utilisez FORMAT pour préciser le format du fichier à créer. Récupérons l’intégralité du contenu de la table PostgreSQL et écrivons-le dans un fichier Parquet :
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.parquet'"Exporter PostgreSQL au format CSV
C’est la même chose que pour Parquet, sauf que nous indiquons un nom de fichier plus approprié pour le fichier de sortie :
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.csv'"Et voilà ! ClickHouse repère l’extension .csv dans le nom du fichier de sortie et exporte les données sous forme de valeurs séparées par des virgules. Sinon, c’est exactement la même commande que ci-dessus.
Exporter PostgreSQL en JSON
Pour exporter PostgreSQL en JSON, il suffit de modifier le nom du fichier et ClickHouse détectera le format :
./clickhouse local -q "SELECT * FROM
postgresql(
'localhost:5432',
'postgres_database',
'postgres_table',
'user',
'password'
)
INTO OUTFILE 'my_output_file.ndjson'"Envoyer PostgreSQL vers un autre processus en flux
Au lieu d’utiliser INTO OUTFILE, vous pouvez envoyer les résultats d’une fonction de table vers un autre processus en flux. Voici un exemple simple pour illustrer la syntaxe : nous comptons le nombre de lignes à l’aide de la commande 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 -lCependant, nous pourrions facilement envoyer les lignes vers un script shell, un script Python ou tout autre processus de votre choix.