回答編集履歴

4

追記

2016/07/02 01:08

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -29,3 +29,5 @@
29
29
  もっと高速化できるとは思いますが、数十万程度ならこれで十分かと。
30
30
 
31
31
  あと、DB にもよるのでしょうが、insert 文を大量に投げるより、CSV からインポートした方がいい場合もありますよ。
32
+
33
+ 一度 CSV にエクスポートしてから、Perl なり Python なり好きなスクリプトを使って加工し、インポートするのが一番簡単で、すでにそのような方法を取られている場合、数十万件程度でそこまでの時間(ここで質問して答えが返ってくるまでの時間)がかかるとは思えないんですが。

3

追記

2016/07/02 01:08

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -27,3 +27,5 @@
27
27
  ```
28
28
 
29
29
  もっと高速化できるとは思いますが、数十万程度ならこれで十分かと。
30
+
31
+ あと、DB にもよるのでしょうが、insert 文を大量に投げるより、CSV からインポートした方がいい場合もありますよ。

2

追記

2016/07/02 01:04

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -1,3 +1,29 @@
1
1
  変換にはどのようなスクリプトをお使いですか?
2
2
 
3
3
  追記お願いします。
4
+
5
+
6
+
7
+ ちなみに PowerShell だとこれで
8
+
9
+ ```PowerShell
10
+
11
+ $data = @{}; sql $udl "select * from t" |% { if (-not $data.ContainsKey($_.name)) { $data[$_.name] = @{} }; $data[$_.name][$_.category] = $_.data }
12
+
13
+ $data.Keys |% {$d = $data[$_]; $fields = [string]::Join(",", ($d.Keys |% {$_})); $values = [string]::Join(",",($d.Keys |% {"'" + $d[$_] + "'"})); "insert into newTable (name,{0}) values({2},{1});" -f $fields, $values, $_}
14
+
15
+ ```
16
+
17
+ このような結果が得られます。
18
+
19
+ ```
20
+
21
+ insert into newTable (name,hoge,fuga) values('bbb','d03','d04');
22
+
23
+ insert into newTable (name,hoge,fuga) values('ccc','d05','d06');
24
+
25
+ insert into newTable (name,hoge,fuga) values('aaa','d01','d02');
26
+
27
+ ```
28
+
29
+ もっと高速化できるとは思いますが、数十万程度ならこれで十分かと。

1

編集

2016/07/02 00:51

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -1,3 +1,3 @@
1
- まさか name で一つ一つ手で検索しているわけでもないでしょう。
1
+ 変換にはどのようスクリプトをお使いですか?
2
2
 
3
- スクリプト使っても時間がかかるならょうがないんじゃないでか?
3
+ 追記お願い