我正在使用具有數百萬行和100列以上的Oracle數據庫。我試圖用索引某些列的pytables將這些數據存儲在HDF5文件中。我將在pandas DataFrame中讀取這些數據的子集並執行計算。從Oracle讀取數百萬行的大表並寫入HDF5
我已經嘗試以下操作:
下載的表格,使用工具到CSV文件中,通過使用塊讀取大熊貓CSV文件塊,並使用pandas.HDFStore
追加到HDF5表。我創建了一個dtype定義並提供了最大字符串大小。
但是,現在當我試圖直接從Oracle DB下載數據並通過pandas.HDFStore
將其發佈到HDF5文件時,我遇到了一些問題。
pandas.io.sql.read_frame不支持分塊讀取。我沒有足夠的RAM能夠將整個數據首先下載到內存中。
如果我嘗試使用帶有固定數量記錄的cursor.fecthmany()
,則在數據庫表中讀取操作需要很長時間纔會編制索引,並且我必須讀取日期範圍內的記錄。我正在使用DataFrame(cursor.fetchmany(), columns = ['a','b','c'], dtype=my_dtype)
然而,創建的DataFrame總是推斷dtype而不是強制執行我提供的dtype(與read_csv不同,它遵守我提供的dtype)。因此,當我將此數據幀附加到已存在的HDFDatastore
時,會出現類型不匹配的情況。 float64可能會在一個塊中被解釋爲int64。
欣賞如果你們可以提供你的想法並指向正確的方向。
你目前的做法(帶有csv)和dtype校正是正確的。 SQL將在0.14(0.13即將發佈)中獲得重大更新。所以不幸的是dtype infererence/chunking不可用。歡迎PRS的!看到這個問題:https://github.com/pydata/pandas/issues/4163 – Jeff
我建議刪除Oracle標記,除非你在Oracle方面有任何問題。 –
你應該讓你的dba將錶轉換爲範圍分區對象,之後應該很容易通過分區訪問 – klashxx