2016-03-28 9 views
0

私はテーブルを持っています。各行にはbodyという列があり、JSON形式のデータが格納されます。mysql何百万もの行データを1つのテーブルから別のテーブルにインポートする

table_a:たとえば

id user_id body 
1 1  {'tel': '13678031283', 'email': '[email protected]', 'name': 'test'....} 
2 2  {'tel' : '1567827126', 'age': '16'....} 
...... 

私はtable_bという名前の、別のテーブルを持っている:

table_b:

id  user_id tel  email   name 
1  1   13678019 [email protected] test1 
2  2   15627378 [email protected] test2 
..... 

table_aは、私が欲しい2万行のデータを持っていますすべてのtable_aデータをtable_bにインポートするには、table_aの各行を処理する必要があります。

私はこのようにそれに対処したい:

for row in table_a_rows: 
    result = process(row) 
    insert result to table_b 
..... 

しかし、私は、それは良いアイデアではないと思います。そこにそれを作る良い方法はありますか?

+1

ことができます:

mysql> SELECT JSON_EXTRACT(body, '$.email') from table_a; 

だからあなたはtable_bに直接おtable_aで持っているすべてのデータを置き換えることができます:たとえば、電子メールを取得することは、このようなものになるだろうそのような厄介なjson構造を「仮想列」として扱うことができます。そうすれば、ストアドプロシージャを実装する必要なしに、タスクに対してプレーンSQLの更新ステートメントを使用することができます。 – arkascha

+0

私は体の各キーを単一の列としては望んでいません、私は情報を必要としたいだけです。 – pangpang

+0

申し訳ありませんが、私はあなたの最後のコメントであなたが何を言おうとしているのか分かりません。値が別々の列に格納されているかのように、JSON構造のコンテンツにアクセスする必要があります。これは拡張機能が許すものです。こうすることで、JSON文字列の内容を別々の値に分割し、別の値に戻してからupdateステートメントで再度使用することができます。それは私があなたの質問を完全に見逃していない限り、あなたが尋ねるものです。 – arkascha

答えて

1

必要なデータは、JSON_EXTRACTで直接table_aから選択できます。 mysqlの/ mariadbの拡張子はあり

mysql> REPLACE INTO table_b SELECT user_id, 
JSON_EXTRACT(body, '$.tel'), 
JSON_EXTRACT(body,'$.email'), 
JSON_EXTRACT(body,'$.name') from table_a 
+0

がエラーを返しました: 'FUNCTION JSON_EXTRACT does not exist' – pangpang

+0

ops、申し訳ありません、mysqlのjsonライブラリをインストールする必要があります。 labs.mysql.comにアクセスし、JSON UDF(ユーザー定義関数)をインストールします。そのためのReadmeを確認してください。 – vivoconunxino

関連する問題