调度在greenplum数据库上运行的postgreSQL查询

调度在greenplum数据库上运行的postgreSQL查询,postgresql,scheduling,greenplum,Postgresql,Scheduling,Greenplum,我有一个表,从Greenplum中取出数据后每小时都要填充一次。这个表存储在Greenplum服务器上 所以,我想知道的是,应该使用什么方法Python脚本、windows调度程序或任何适合我的数据(我猜可能会达到60GB或更大)来调度用postgreSQL编写的查询每小时运行一次 有人可以为相同的代码附加一个示例代码吗?您需要将数据范围从Greenplum并行复制到PostgreSQL中。确保PostgreSQL已设置为快速加载数据。如果可能,使用未标记的表格;否则,至少使用wal_level

我有一个表,从Greenplum中取出数据后每小时都要填充一次。这个表存储在Greenplum服务器上

所以,我想知道的是,应该使用什么方法Python脚本、windows调度程序或任何适合我的数据(我猜可能会达到60GB或更大)来调度用postgreSQL编写的查询每小时运行一次


有人可以为相同的代码附加一个示例代码吗?

您需要将数据范围从Greenplum并行复制到PostgreSQL中。确保PostgreSQL已设置为快速加载数据。如果可能,使用未标记的表格;否则,至少使用wal_level='minimal'

有多少并行工作程序最依赖于PostgreSQL server的I/O子系统。试一试

我建议将Python与psycopg2和copy_expert cursor函数一起使用。看见通过管道使用多处理在读写器工作者之间共享类似文件的对象,读写器连接到greenplum,而写写器连接到PostgreSQL

因此,有效地,每个worker都会执行类似于以下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";
但是您可以使用pyscopg2、复制导出、多处理和管道将两者连接起来

完成所有通常的快速加载工作,比如之后创建索引。看

如果您有磁盘空间,请创建一个类似dataload_temp的表,填充它,然后在一个事务中删除旧表,并将新表重命名为旧表的名称。这样,干扰最小


或者,看看pg_bulkload的离线但非流式批量数据加载。

@craig..我正在同时学习GP、postgreSQL和Python,我只在过去的20个小时里一直在学习它。这些链接很有用,但我有一个confusion@craig..I我正在同时学习GP、postgreSQL和Python,我只花了20个小时的时间。这些链接很有帮助,但我有一个困惑,即如果我有以下类型的查询cur.executecreate table abc…,我是否需要使用copy_to和copy_from。。。。。;cur.executeinsert进入表abc值…选择@用户3336746您使用复制。。。从标准输出而不是插入到。。。。这是一种更有效的加载数据的方法。请参阅PostgreSQL用户手册。你可以用复制。。。以标准方式从Greenplum中提取数据。因此,我建议使用管道将两者连接在一起,以在DBs之间传输数据。添加了一些伪代码,可能有助于您理解。你需要做一些研究来学习如何快速并行地完成这项工作。我不需要文件。!我需要的只是greenplum上数据的一个子集,这个子集只存储在greenplum上。那个么,为什么我需要一个文件呢?