【发布时间】:2020-04-01 21:31:05
【问题描述】:
所以我每个表有大约 4-5 百万行数据。我有大约 10-15 张这样的桌子。我创建了一个表,它将根据一些 ID 和快照日期将 30,000 行连接到其中的几百万行。
有没有办法将我现有的数据表写入 SQL 查询,它会为我过滤结果,这样我就不必将整个表加载到内存中?
目前我一直在一次加载每个表,然后释放内存。但是,它仍然会占用我计算机上 100% 的内存。
for table in tablesToJoin:
if df is not None:
print("DF LENGTH", len(df))
query = """SET NOCOUNT ON; SELECT * FROM """ + table + """ (nolock) where snapshotdate = '"""+ date +"""'"""
query += """ SET NOCOUNT OFF;"""
start = time.time()
loadedDf = pd.read_sql_query(query, conn)
if df is None:
df = loadedDf
else:
loadedDf.info(verbose=True, null_counts=True)
df.info(verbose=True, null_counts=True)
df = df.merge(loadedDf, how='left', on=["MemberID", "SnapshotDate"])
#df = df.fillna(0)
print("DATA AFTER ALL MERGING", len(df))
print("Length of data loaded:", len(loadedDf))
print("Time to load data from sql", (time.time() - start))
【问题讨论】: