Pergunta

Eu tenho uma tabela que precisa ser preenchida a cada hora a partir dos dados extraídos do Greenplum. Esta tabela está sendo armazenada no servidor Greenplum.

Então, o que eu quero saber é qual método (script python, agendador do Windows ou qualquer coisa) será adequado para meus dados (que eu acho que pode ser tão grande quanto 60 GB ou mais) deve ser usado para agendar a consulta (escrita em postgreSQL ) a ser executado a cada hora.

Alguém pode anexar um código de exemplo para o mesmo?

Foi útil?

Solução

Você vai querer fazer um paralelo COPY de intervalos de dados do Greenplum para o PostgreSQL.Certifique-se de que o PostgreSQL esteja configurado para carregamento rápido de dados.Se possível, use um UNLOGGED mesa;caso contrário, use wal_level = 'minimal' pelo menos.

Quantos trabalhadores paralelos dependem do subsistema de E/S do servidor PostgreSQL mais do que qualquer coisa.Teste e veja.

Eu recomendaria usar Python com psycopg2 e o copy_expert função de cursor.Ver os documentos.Use multiprocessamento com um pipe para compartilhar um objeto semelhante a um arquivo entre um leitor e um gravador de trabalho, com o leitor conectado ao greenplum e o gravador ao PostgreSQL.

Então, efetivamente, cada trabalhador faz algo parecido com o seguinte pseudocódigo do shell:

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";

(mas você conecta os dois usando pyscopg2, copy_export, multiprocessamento e um pipe).

Faça todo o trabalho normal de carregamento rápido, como criar índices posteriormente.Ver como acelerar o desempenho de inserção no PostgreSQL.

Se você tiver espaço em disco, crie uma tabela como dataload_temp, preencha-o e, em uma transação, elimine o antigo e renomeie o novo com o nome do antigo.Dessa forma, há interrupção mínima.

Como alternativa, dê uma olhada em pg_bulkload para carregamento de dados em massa off-line (mas sem streaming).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top