سؤال

ما هي أسرع طريقة لتحميل البيانات من Flatfiles إلى قاعدة بيانات MySQL ، ثم إنشاء العلاقات بين الجداول عبر المفاتيح الأجنبية؟

على سبيل المثال ... لدي ملف مسطح بالتنسيق:

[INDIVIDUAL]   [POP]  [MARKER]  [GENOTYPE]

"INDIVIDUAL1", "CEU", "rs55555","AA"  
"INDIVIDUAL1", "CEU", "rs535454","GA"  
"INDIVIDUAL1", "CEU", "rs555566","AT"  
"INDIVIDUAL1", "CEU", "rs12345","TT"  
...  
"INDIVIDUAL2", "JPT", "rs55555","AT"  

وهو ما أحتاج إلى تحميله في أربعة طاولات:

IND (id,fk_pop,name)  
POP (id,population)  
MARKER (id,rsid)  
GENOTYPE (id,fk_ind,fk_rsid,call)  

على وجه التحديد ، كيف يمكن للمرء أن يملأ المفاتيح الأجنبية بطريقة تقاس؟ الأرقام في حدود أكثر من 1000 فرد ، ولكل منها 1 مليون من الأنماط الوراثية.

هل كانت مفيدة؟

المحلول

هناك طريقة أبسط.

أولاً ، تأكد من أن لديك قيدًا فريدًا على تلك الأعمدة التي يجب أن تحتوي على واحد (اسم ، السكان ، RSID).

ثم استخدم شيئًا مثل ما يلي:

 LOAD DATA INFILE 'data.txt' IGNORE INTO TABLE POP FIELDS TERMINATED BY ','
    ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES 
    (@name, population, @rsid, @call);
 LOAD DATA INFILE 'data.txt' IGNORE INTO TABLE MARKER FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES 
    (@name, @population, rsid, @call);
 LOAD DATA INFILE 'data.txt' IGNORE INTO TABLE IND FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES 
    (name, @population, @rsid, @call) 
    SET fk_pop = (SELECT id FROM POP WHERE population = @population);
 LOAD DATA INFILE 'data.txt' IGNORE INTO TABLE GENOTYPE FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES 
    (@name, @population, @rsid, call)
    SET fk_ind = (SELECT id FROM IND where name = @name),
    fk_rsid = (SELECT id FROM MARKER where rsid = @rsid);

لاحظ حيث يتم استخدام @ للإشارة إلى المتغيرات ، بدلاً من أسماء الأعمدة. في أول 2 بيانات تحميل ، يتم استخدام هذه فقط لتجاهل البيانات. في الثانية 2 ، يتم استخدامها للبحث عن المفاتيح الأجنبية.

قد لا تكون سريعة جدا ، العقل :).

نصائح أخرى

أود اتباع نهج خطوة متعددة للقيام بذلك.

  1. قم بتحميل البيانات في جدول مؤقت ، وهو مطابقة لتنسيق الملف الذي لديك
  2. اكتب استفسارات للقيام بالإدراج الآخر ، وبدء الجداول العامة ، ثم القيام بالوصول للحصول على قيم FK.

يمكنك أن تبدأ مع الجداول الأساسية بدون مفاتيح أجنبية. يمكنك بعد ذلك البحث عن المعرفات عند إدراج البيانات في الجداول الأخرى.

فكرة أخرى هي أنه يمكنك استبدال المعرفات في الملف المسطح (الفرد 1 ، CEU ، ... إلخ.) بواسطة GUIDS. ثم استخدمها مباشرة كمعرفات ومفاتيح أجنبية (لاحظت أن هذا هو الأداء الموسومة ، وهذا قد لا يعطي أفضل "أداء").

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top