ChatGPTに1000万行のテスト用DBを作成してもらった

ChatGPTに1000万行のテスト用DBを作成してもらいました。大きなデータを扱う際、いきなり本番データをいじるのは怖いとき、大体のサイズや処理負荷をつかむために、テストDBを立てることがありますが、そういう想定です。

 

指示文(プロンプト):

10カラムからなるテーブルを作成して、ランダムな8桁の数字で1000万レコード文のデータを生成してデータベースに格納するPythonコードを作成してください。DBはSQLiteにしてください。

 

回答:

import sqlite3
import random

# データベースに接続
conn = sqlite3.connect('sample.db')
cur = conn.cursor()

# テーブルを作成
cur.execute('''CREATE TABLE IF NOT EXISTS sample_table
               (col1 INTEGER, col2 INTEGER, col3 INTEGER, col4 INTEGER, col5 INTEGER,
                col6 INTEGER, col7 INTEGER, col8 INTEGER, col9 INTEGER, col10 INTEGER)''')

# 1000万行のデータを生成して挿入
for i in range(10000000):
    row_data = []
    for j in range(10):
        row_data.append(random.randint(10000000, 99999999))  # 8桁のランダムな数字を生成
    cur.execute('INSERT INTO sample_table VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', row_data)

# コミットして接続を閉じる
conn.commit()
conn.close()
    
結果:

以下のように成功しました。作成にかかる時間計測部分は手動で追加してます。データをいったんPandassに展開してます。DBのサイズは585MBでした。

追記:

SQLiteとPandasでデータを扱う際、どのくらい速度差があるのでしょうか。扱うデータ次第なので一概には言えませんが、普通の感覚では高速なのはPandasですが、ちょっと気になったので計測してみたところ、結果は以下でした。

ランダムに10万行分のデータを取り出して、すべての値を合計する処理を比較
SQLiteeから直で操作した場合の処理時間:7.423秒
Pandasで操作した場合の処理時間:4.587秒