2016-03-28 1 views
0

У меня есть таблица, она содержит данные из двух миллионов строк. Для каждой строки он имеет столбец body, он хранит данные формата JSON. Например:mysql миллионы строк импорта данных из одной таблицы в другую таблицы

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 миллиона строк данных, я хочу для импорта всех табличных данных в таблицу_b, каждая строка таблицы_a должна быть процессом.

Я хочу иметь дело с ним, как это:

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

Но я думаю, что это не очень хорошая идея. это лучший способ сделать это?

+1

Существует расширение для MySQL/MariaDB, что позволяет рассматривать такие раздражающие json-структуры как «виртуальные столбцы». Таким образом, вы можете использовать простой оператор sql update для своей задачи без необходимости реализации хранимой процедуры. – arkascha

+0

Я не хочу, чтобы каждый ключ тела был одним столбцом, я просто хочу получить необходимую информацию. – pangpang

+0

Извините, я не понимаю, что вы пытаетесь сказать в своем последнем комментарии. Вам нужен доступ к контенту структуры JSON, как если бы значения хранились в отдельных столбцах. Это то, что позволяет расширение. Таким образом, вы можете разделить содержимое этих строк JSON, чтобы разделить значения, которые вы снова можете использовать в инструкции обновления. Это то, о чем вы просите, если я полностью не пойму, понял ваш вопрос. – arkascha

ответ

1

Вы можете напрямую выбрать нужные данные из table_a с помощью JSON_EXTRACT. Например, получение электронной почты будет что-то вроде этого:

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

Таким образом, вы могли бы заменить непосредственно в TABLE_B все данные, которые вы имеете в TABLE_A:

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 не существует' – pangpang

+0

ops, извините, вам нужно установить json-библиотеку для mysql. Посетите labs.mysql.com и установите JSON UDF (пользовательские функции). Проверьте Readme. – vivoconunxino

Смежные вопросы