+1 امتیاز
قبل در برنامه نویسی توسط (204 امتیاز)
ویرایش شده قبل توسط

برای import اطلاعات موجود در یک فایل txt (دومیلیون رکورد) که با فرمت خاصی ذخیره شده اند (مانند نمونه زیر) چه راهی پیشنهاد میکنید؟

Ben Kanobi, plaintext,Kawasaki news article,../sample_docs/kawasaki.txt,
Joe Bloggs, plaintext,Java plug-in,../sample_docs/javaplugin.txt,

1 پاسخ

+1 امتیاز
قبل توسط (204 امتیاز)
ویرایش شده قبل توسط
 
بهترین پاسخ

برای انتقال اطلاعات که با فرمت مشخص (با جداکننده مشخص) آماده شده اند، راه های مختلفی وجود دارد. راحت ترین راه استفاده از ابزارهایی مانند sql developer ویا بهتر از آن plsql developer است. که در یک نمای کاربرپسند، فایل، جداکننده، تنظیمات مربوط به کامیت و نام فیلدها را گرفته و عمل import را انجام میدهند. اما این راه حل یک ایراد کوچک دارد برای داده های حجیم بسیار کند است!!

راه حل پیشنهادی من استفاده از ابزارهای خود اوراکل سرور است: sqlldr
این ابزار با ساختار ساده و کارآمد به سرعت بسیاررر بالایی کار ایمپورت را برای شما انجام میدهد در انتها میتواند گزارشی از عملکرد خود ارائه کند و داده های نامناسب (داده هایی که نتوانسته به جدول اضافه کند) را نیز برایتان در محلی ذخیره کند.

برای کار با این علاوه بر فایل حاوی داده نیاز به یک فایل دیگر است تا دستورات و کنترل ها را در آن قرار گیرد.
در زیر با ذکر یک مثال نحوه کار با این دستور توصیف خواهد شد:

قصد داریم فایلی شامل 200000 رکورد را با ساختار زیر در یک جدول وارد کنیم

Ben Kanobi, plaintext,Kawasaki news article,../sample_docs/kawasaki.txt,
Joe Bloggs, plaintext,Java plug-in,../sample_docs/javaplugin.txt,

برای این منظور دستور زیر باید اجرا شود:

sqlldr userid=demo/demo control=loader1.dat log=loader.log

فایل loader1.dat همان فایل شامل دستورات است که نمونه آن در زیر آمده است:

options (rows=50000, skip=1, parallel=true, direct=true)
unrecoverable load data
INFILE 'loader2.dat'
BADFILE 'loader2.bad'
INTO TABLE articles_formatted
APPEND
FIELDS TERMINATED BY ','
(article,
author,
format,
ext_fname)
  1. در خط اول پارامترهایی به دستور پاس داده میشوند بدین شرح میباشند:
    1. row: عنوان میکند که هر 50000 رکورد commit انجام شود. این عمل در افزایش سرعت نقش بسزایی دارد و متناسب با مشخصات سرور تعیین میشود.
    2. skip: مشخص میکند که چند خط اول فایل مورد پردازش قرار نگیرد. این پارامتر در زمانهایی که فایل شامل مثلن عنوان فیلدها میباشد، کاربر دارد.
    3. parallel: امکان انجام کار بصورت parallel را فعال میکند (سیستم باید قادر به انجام این کار باشد).
    4. direct: از اوراکل میخواهد از نوشتن در redo.log خودداری کند، این عمل در افزایش سرعت نقش فوق العاده زیادی دارد.
  2. خط دوم داده ها را load کرده و علاوه بر آن امکان recover کردن فعالیت را نیز غیرفعال میکند. این کار هم در افزایش سرعت بسیار موثر است.
  3. خط سوم، نام فایل حاوی داده را مشخص میکند.
  4. خط چهارم، نام فایل حاوی داده های غیرقابل پردازش را مشخص میکند.
  5. خط پنجم، نام جدول مقصد را مشخص میکند.
  6. خط ششم، مشخص میکند که داده های جدید به جدول اضافه شوند.
  7. خط هفتم، مشخص کننده ی جداکننده ی بین فیلدهاست.
  8. خطوط بعد، نام فیلدهای جدول را مشخص میکنند.


sqlldr پارامترهای بیشتری هم دارد که میتوان با اجرای sqlldr بدون پارامتر، لیست آنها را مشاهده کنید.
برای راهنمایی بیشتر میتوانید از لینک های زیر کمک بگیرید:
لینک 1، لینک 2، لینک 3

سوالات مشابه

0 امتیاز
1 پاسخ 967 بازدید
+2 امتیاز
1 پاسخ 837 بازدید
0 امتیاز
1 پاسخ 501 بازدید
+1 امتیاز
1 پاسخ 316 بازدید
0 امتیاز
1 پاسخ 430 بازدید
+1 امتیاز
1 پاسخ 1.3هزار بازدید
0 امتیاز
2 پاسخ 1.7هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Milad (1.3هزار امتیاز)
...