2016-03-28 20 views
0

Tablo var, iki milyon satırlık veri var. Her satır için, bir body sütunu vardır, bir JSON biçim verisi depolar.mysql milyonlarca satırlık veri bir tablodan başka bir tabloya içe aktarılıyor

table_a: Ben başka bir tablo var

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

isimli table_b:

table_b:

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

table_a 2000000 satır veri var, istediğim Örneğin tüm table_a verilerini table_b'ye aktarmak için, table_a'nın her satırı işlem olmalıdır.

Böyle başa istiyorum:

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

Ama bu iyi bir fikir olmadığını düşünüyorum. Bunu yapmanın daha iyi bir yolu var mı?

+1

sağlar:

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

Yani table_b içine doğrudan table_a sahip tüm verileri değiştirmek olabilir: Örneğin, e-posta almak böyle bir şey olurdu Bu tür sinir bozucu json yapılarını "sanal sütunlar" olarak ele almak. Bu şekilde, saklı bir yordamı uygulama gereği olmadan göreviniz için düz bir sql güncelleştirme deyimini kullanabilirsiniz. – arkascha

+0

Tek bir sütun olarak vücudun her tuşlarını istemiyorum, sadece bilgi almak istiyorum. – pangpang

+0

Üzgünüz, son yorumunuzda söylemeye çalıştığınız şeyi anlamıyorum. Değerler ayrı sütunlarda depolanmış gibi JSON yapısının içeriğine erişmeniz gerekir. Uzatma buna izin veriyor. Bu şekilde, bu JSON dizelerinin içeriğini, daha sonra bir güncelleme deyiminde kullanabileceğiniz ayrı değerlere bölebilirsiniz. Sorunu tam olarak anlayamadığım sürece, sorduğun şey buydu. – arkascha

cevap

1

Table_a'dan ihtiyacınız olan verileri doğrudan JSON_EXTRACT ile seçebilirsiniz. mysql/mariadb için bir uzantısı vardır

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

hata aldı: 'FUNCTION JSON_EXTRACT var' – pangpang

+0

ops, üzgünüm, mysql için bir json kütüphanesi yüklemeniz gerekir. Labs.mysql.com adresini ziyaret edin ve JSON UDF'lerini (kullanıcı tanımlı işlevler) kurun. Bunun için Benioku kontrol edin. – vivoconunxino

İlgili konular