大量INSERT SQLの生成

大量INSERT SQLの生成

使い方
awk -f scriptbuilder.awk -v dateSet="$(date +%Y-%m-%d)" insert.sql>import.sql

例)下記のような注文テーブルのINSERT SQL文を作成します。
+--+------+---------+----------+----------+----------+-----------+-----------+
|ID|USERID|ORDERTYPE|ORDERCOUNT|ORDERLIMIT|ORDERINPUT|ORDERUPDATE| VALIDFLAG |
+--+------+---------+----------+----------+----------+-----------+-----------+

1. SQLBuilderの元ネタ
INSERT INTO ORDER_TBL (ID,USERID,ORDERTYPE,ORDERCOUNT,ORDERLIMIT,ORDERINPUT,ORDERUPDATE,VALIDFLAG)
 VALUES
 (
'[dateNum][timeNum][fixNum02][lineNum05]',
'USER[fixNum05]',
'[seqNum05]',
10000,
100000,
'[dateString] [timeString]',
'[dateString] [timeString]',
'1')
;

2. 1.からSQLBuilderで、下記INSERT SQL文
INSERT INTO ORDER_TBL (ID,USERID,ORDERTYPE,ORDERCOUNT,ORDERLIMIT,ORDERINPUT,ORDERUPDATE,VALIDFLAG)
 VALUES
 (
'201703130659599980100001',
'USER00001',
'00001',
10000,
100000,
'2017-03-13 06:59:59.998’,
'2017-03-13 06:59:59.998’,
'1')
;
が生成されました。

利用方法
[loop 100000]
生成したい元ネタのSQL文
[loopEnd]
と指定すると、たった1行のSQL元ネタから100000件などの、大量SQLデータをサクッと作成することができます。



SQLBuilderの予約語説明
'[dateNum][timeNum][fixNum02][lineNum05]',
組み合わせ出力例
'201702050659599980100001'


SQLBuilderの予約語説明

[dateNum]
・説明
引数dateSetで与えた日付をyyyymmddで出力します。
dateSet="$(date +%Y-%m-%d)”を指定すると、マシン日付となります。
他にテスト要件に合わせた日付も指定できます。
・カウントアップのタイミング
 初期値のみ
・例)2017年サマータイム切替日用のテストデータ作成
dateSet=“2017-03-13” -> 20170313


[timeNum]
・説明
時間のカウンターをhhmmss999で出力します。
・カウントアップのタイミング
 ループ処理毎にインクリメント(SQLBuilder全体でユニーク値)
・例 NY市場オープン直前用のテストデータ作成
06:59:59.999 -> 065959999

[fixNum02]
・説明
SQL元ネタ記述毎のカウンターを指定ケタ数(前ゼロ)で出力します。

・カウントアップのタイミング
 SQLBuilderで元ネタSQL行数毎にインクリメント
・例 ユーザー毎の注文レコードを作成する
元ネタ
[loop 2]
INSERT INTO ORDER_TBL VALUES(’[fixNum03]’,’USER[fixNum02]’………
[loopEnd]
[loop 3]
INSERT INTO ORDER_TBL VALUES(’[fixNum03]’,’USER[fixNum02]’………
[loopEnd]
[loop 4]
INSERT INTO ORDER_TBL VALUES(’[fixNum03]’,’USER[fixNum02]’………
[loopEnd]

生成後
INSERT INTO ORDER_TBL VALUES(’001’,’USER01’………
INSERT INTO ORDER_TBL VALUES(’001’,’USER01’………

INSERT INTO ORDER_TBL VALUES(’002’,’USER02’………
INSERT INTO ORDER_TBL VALUES(’002’,’USER02’………
INSERT INTO ORDER_TBL VALUES(’002’,’USER02’………

INSERT INTO ORDER_TBL VALUES(’003’,’USER03’………
INSERT INTO ORDER_TBL VALUES(’003’,’USER03’………
INSERT INTO ORDER_TBL VALUES(’003’,’USER03’………
INSERT INTO ORDER_TBL VALUES(’003’,’USER03’………


[lineNum05]
・説明
SQL生成毎のユニークなカウンター値が必要な場合、指定ケタ数(前ゼロ)で出力します。

・カウントアップのタイミング
 SQLBuilderで生成SQL行数毎にインクリメント

・例 システム全体でユニーク値が必要な項目のレコードを作成する
[loop 4]
'[dateNum][timeNum][fixNum02][lineNum05]',
[loopEnd]
[loop 2]
'[dateNum][timeNum][fixNum02][lineNum05]',
[loopEnd]

'201703130659599980100001',
'201703130659599990100002’,
'201703130700000000100003’,
'201703130700000010100004’,

'201703130700000020100005’,
'201703130700000030100006’,


[seqNum05]
・説明
SQL元ネタのループ処理内でのカウンターを指定ケタ数(前ゼロ)で出力します。

・カウントアップのタイミング
 SQLBuilderでループ処理単位のSQL出力行数毎にインクリメント
・例 ユーザーの複数注文レコードの値を作成する(ループ処理をまたがるとリセット)
[loop 2]
INSERT INTO ORDER_TBL VALUES(’ORDER[seqNum05]’………
[loopEnd]
[loop 3]
INSERT INTO ORDER_TBL VALUES(’ORDER[seqNum05]’………
[loopEnd]

INSERT INTO ORDER_TBL VALUES(’ORDER00001’………
INSERT INTO ORDER_TBL VALUES(’ORDER00002’………

INSERT INTO ORDER_TBL VALUES(’ORDER00001’………
INSERT INTO ORDER_TBL VALUES(’ORDER00002’………
INSERT INTO ORDER_TBL VALUES(’ORDER00003’………

[dateString] 
・説明
引数dateSetで与えた日付をyyyy-mm-ddで出力します。
カウンターの機能は[dateNum]と同じで出力書式が違うだけです。
[timeString]
・説明
時間のカウンターをhh:mm:ss.999で出力します。
カウンターの機能は[timeNum]と同じで出力書式が違うだけです。

・例)2017年サマータイム切替日用のテストデータ作成
dateSet=“2017-03-13” -> 2017-03-13

'2017-03-13 06:59:59.998’,

コメントを残す