csv ファイルから情報を解析し、SQL ステートメントを実行してテーブルを作成し、データを挿入するスクリプトがあります。~25 GB の csv ファイルを解析する必要がありますが、現在のスクリプトでは、解析した以前のサイズのファイルから判断すると、最大 20 日かかると推定されます。スクリプトを最適化して実行速度を上げる方法について何か提案はありますか? createtable 関数は 1 回しか呼び出されないため省略しました。InsertRow() は、私が本当に高速化する必要があると思う関数です。前もって感謝します。
#Builds sql insert statements and executes sqlite3 calls to insert the rows
def insertRow(cols):
first = True; #First value for INSERT arguments doesn't need comma front of it.
conn = sqlite3.connect('parsed_csv.sqlite')
c = conn.cursor()
print cols
insert = "INSERT INTO test9 VALUES("
for col in cols:
col = col.replace("'", "")
if(first):
insert += "'" + col + "'"
first = False;
else:
insert += "," + "'" + col+ "'" + " "
insert += ")"
print (insert)
c.execute(insert)
conn.commit()
def main():
#Get rid of first argument (filename)
cmdargs = sys.argv[1:]
#Convert values to integers
cmdargs = list(map(int, cmdargs))
#Get headers
with open(r'requests_fields.csv','rb') as source:
rdr = csv.reader(source)
for row in rdr:
createTable(row[:], cmdargs[:])
with open(r'test.csv','rb') as source:
rdr= csv.reader( source )
for row in rdr:
#Clear contents of list
outlist =[]
#Append all rows onto list and then write to row in output csv file
for index in cmdargs:
outlist.append(row[index])
insertRow(outlist[:])
私が経験している遅い速度は、insertRow() で毎回データベースへの接続を作成することが原因である可能性がありますか?