Question

J'ai une table qui doit être remplie toutes les heures à partir des données extraites de Greenplum. Cette table est stockée sur le serveur Greenplum.

Donc, ce que je veux savoir, c'est quelle méthode (script python, planificateur Windows ou autre) conviendra à mes données (qui, je suppose, peuvent atteindre 60 Go ou plus) doit être utilisée pour planifier la requête (écrite en postgreSQL ) à exécuter toutes les heures.

Quelqu'un peut-il joindre un exemple de code pour le même ?

Était-ce utile?

La solution

Vous voudrez faire un parallèle COPY de plages de données hors de Greenplum et dans PostgreSQL.Assurez-vous que PostgreSQL est configuré pour un chargement rapide des données.Si possible, utilisez un UNLOGGED tableau;sinon utiliser wal_level = 'minimal' au moins.

Le nombre de travailleurs parallèles dépend plus que tout du sous-système d'E/S du serveur PostgreSQL.Testez et voyez.

Je recommanderais d'utiliser Python avec psychopg2 et le copy_expert fonction du curseur.Voir les documents.Utilisez le multitraitement avec un canal pour partager un objet de type fichier entre un lecteur et un rédacteur, le lecteur étant connecté à greenplum et le rédacteur à PostgreSQL.

Ainsi, chaque travailleur fait quelque chose qui ressemble un peu au pseudo-code shell suivant :

psql -h greenplum-box \
     -c "COPY (SELECT * FROM mytable WHERE id BETWEEN 1 AND 10000) TO stdin" \
  | \
psql -h postgres-box \
     -c "COPY myttable FROM stdin";

(mais vous connectez les deux en utilisant pyscopg2, copy_export, multitraitement et un tube).

Effectuez ensuite tout le travail de chargement rapide habituel, comme la création d'index.Voir comment accélérer les performances d'insertion dans PostgreSQL.

Si vous disposez de l'espace disque, créez une table comme dataload_temp, remplissez-le, puis en une seule transaction, supprimez l'ancien et renommez le nouveau avec le nom de l'ancien.De cette façon, il y a un minimum de perturbations.

Alternativement, jetez un œil à pg_bulkload pour le chargement de données en masse hors ligne (mais sans streaming).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top