MS SQL Server データベースから 500 万件を超えるレコードのテーブルをクエリするのに問題があります。すべてのレコードを選択したいのですが、メモリに大量のデータを選択するとコードが失敗するようです。
これは機能します:
import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
...しかし、これは機能しません:
sql = "SELECT TOP 2000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
次のエラーが返されます。
File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error
ここで、csv ファイルから を作成するときに同様の問題が存在することを読みましたdataframe
。回避策は、次のように「iterator」および「chunksize」パラメーターを使用することです。
read_csv('exp4326.csv', iterator=True, chunksize=1000)
SQL データベースからクエリを実行するための同様のソリューションはありますか? そうでない場合、推奨される回避策は何ですか? チャンクでレコードを読み取るために他の方法を使用する必要がありますか? pandas で大規模なデータセットを操作する方法についての議論を少し読みましたが、SELECT * クエリを実行するのは大変な作業のようです。確かに、もっと簡単なアプローチがあります。