问题描述
我已连接到数据供应商提供的只读 Redshift 实例(通过 JDBC 且没有其他可用的 AWS 工具),该实例包含数百个不同的表。现在我需要从中派生一些表,因为 Redshift 是只读的,所以加载到我的远程服务器。 (注意:我对 Redshift 实例的访问时间有限,这就是我需要将派生表传输到远程服务器的原因。)
原始数据很大(每个表都有数百万到数十亿条记录),每个派生表涉及连接 10-20 个原始表(当然还有条件)。我在我的服务器上使用 Python/pandas,我目前的解决方案是这样的:
from sqlalchemy import create_engine
# Connect to Redshift
engine = create_engine(conn_str)
conn = engine.connect().execution_options(stream_results=True) # Enable server-side cursor
# Run query on Redshift and save results to HDF in batches
query = "SELECT ... FROM ... INNER JOIN ... LEFT JOIN ..." # Join multiple tables here
itr = pd.read_sql(query,conn,chunksize=100000)
print('Query executed')
for chunk in itr:
chunk.to_hdf('test.h5',**kwargs_to_hdf)
然而,itr
对象需要永远生成(没有错误),尽管我尝试在服务器端和客户端上进行批处理。当我在本地机器上的 Datagrip 中运行 相同 查询时,它将在 20 分钟内完成。
我的知识太有限,无法确定是否有任何问题,以及在我的限制下是否有更好的方法(例如,只读 RedShift,没有其他 AWS 工具,如 S3,海量数据)。有什么推荐吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)