ما هو ETL؟
ETL هي عملية تستخرج البيانات من أنظمة مصادر متعددة، وتغيرها (من خلال العمليات الحسابية والتسلسلات وما إلى ذلك)، ثم تضعها في نظام مستودع البيانات. يرمز ETL إلى الاستخراج والتحويل والتحميل.
من السهل تصديق أن بناء مستودع البيانات أمر بسيط مثل سحب البيانات من مصادر متعددة وإدخالها في قاعدة بيانات مستودع البيانات. هذا ليس هو الحال، ويلزم إجراء ETL معقد. تتضمن عملية ETL، المعقدة تقنيًا، مشاركة نشطة من مجموعة متنوعة من أصحاب المصلحة، بما في ذلك المطورين والمحللين والمختبرين وكبار المديرين التنفيذيين.
للحفاظ على قيمته كأداة لصنع القرار، يجب أن يتطور نظام مستودع البيانات بالتزامن مع تطورات الأعمال. ETL هي عملية منتظمة (يومية وأسبوعية وشهرية) لنظام مستودع البيانات الذي يجب أن يكون مرنًا وآليًا وموثقًا بشكل صحيح.
كيف تعمل ETL؟
سنتعلم هنا كيفية عمل عملية ETL خطوة بخطوة:
الخطوة 1) الاستخراج
يتم استخراج البيانات من النظام المصدر ووضعها في منطقة التدريج أثناء الاستخراج. إذا كانت هناك حاجة لأي تحويلات، فسيتم تنفيذها في منطقة التدريج حتى لا يتضرر أداء النظام المصدر. سيكون التراجع صعبًا إذا تم نقل البيانات التالفة مباشرة من المصدر إلى قاعدة بيانات مستودع البيانات. قبل نقل البيانات المستخرجة إلى مستودع البيانات، يمكن التحقق من صحتها في منطقة التدريج.
يمكن لمستودعات البيانات الجمع بين الأنظمة والأجهزة المختلفة وأنظمة إدارة قواعد البيانات وأنظمة التشغيل وبروتوكولات الاتصال. يجب أن تجمع مستودعات البيانات الأنظمة مع أنظمة إدارة قواعد البيانات (DBMS) والأجهزة وأنظمة التشغيل وبروتوكولات الاتصال المختلفة. قد تتضمن المصادر برامج قديمة مثل الحواسيب المركزية والتطبيقات المخصصة وأجهزة نقطة الاتصال مثل أجهزة الصراف الآلي ومفاتيح الاتصال والملفات النصية وجداول البيانات وتخطيط موارد المؤسسات (ERP) والبيانات من البائعين والشركاء وما إلى ذلك.
وبالتالي، قبل استخراج البيانات وتحميلها فعليًا، يلزم وجود خريطة بيانات منطقية. يظهر الاتصال بين المصادر والبيانات المستهدفة في خريطة البيانات هذه.
ثلاث طرق لاستخراج البيانات:
- الاستخراج الجزئي – إذا قام النظام المصدر بتنبيهك عند تعديل السجل، فهذه هي أبسط طريقة للحصول على البيانات.
- استخراج جزئي (بدون إشعار التحديث) - لا تستطيع جميع الأنظمة إرسال إشعار عند حدوث تحديث؛ ولكن يمكنهم الإشارة إلى السجلات التي تم تغييرها وتوفير استخراج تلك السجلات.
- مستخلص كامل – بعض الأنظمة غير قادرة على تحديد البيانات التي تم تغييرها على الإطلاق. في هذا السيناريو، الطريقة الوحيدة لإخراج البيانات من النظام هي إجراء استخراج كامل. يتطلب هذا الأسلوب وجود نسخة احتياطية من المستخرج السابق في ملف
نفس التنسيق الموجود من أجل تحديد التغييرات التي تم إجراؤها.
وبغض النظر عن الطريقة المعتمدة، لا ينبغي أن يكون للاستخراج تأثير على أداء أو وقت استجابة الأنظمة المصدر. هذه هي قواعد بيانات الإنتاج في الوقت الحقيقي. قد يكون لأي تباطؤ أو قفل تأثير على النتيجة النهائية للشركة.
الخطوة 2) التحول
البيانات المستردة من الخادم المصدر هي بيانات أولية وغير قابلة للاستخدام في حالتها الأصلية. ونتيجة لذلك، يجب تنظيفها ورسم خرائط لها وتحويلها. في الواقع، هذه هي الخطوة الأساسية حيث تضيف عملية ETL قيمة وتحول البيانات من أجل إنتاج تقارير ذكاء أعمال ذات معنى.
إنه مفهوم ETL أساسي حيث يمكنك تطبيق مجموعة من الوظائف على البيانات المستخرجة. التحرك المباشر or تمر عبر داتa هو نوع البيانات الذي لا يتطلب أي تحويل.
يمكنك تنفيذ عمليات مخصصة على البيانات أثناء خطوة التحويل. على سبيل المثال، لنفترض أن العميل يريد إيرادات إجمالية للمبيعات غير موجودة في قاعدة البيانات. أو إذا كان الاسم الأول والأخير في الجدول موجودين في أعمدة منفصلة. قبل التحميل، يمكن أن تكون متسلسلة.
فيما يلي بعض الأمثلة على مشكلات سلامة البيانات:
- تهجئات مختلفة لنفس الفرد، مثل براشانت وبارشانت وما إلى ذلك.
- هناك العديد من الطرق لتمثيل اسم الشركة، مثل Google وGoogle Inc.
- يتم استخدام أسماء مختلفة، مثل كليفلاند وكليفلاند.
- من الممكن أن يتم إنتاج أرقام حسابات متعددة بواسطة تطبيقات مختلفة لنفس العميل.
- يتم ترك بعض ملفات البيانات المطلوبة فارغة.
الخطوة 3) التحميل
المرحلة النهائية في عملية ETL هي تحميل البيانات في قاعدة بيانات مستودع البيانات الهدف. يتم تحميل حجم كبير من البيانات في فترة زمنية قصيرة نسبيًا في مستودع بيانات نموذجي. ونتيجة لذلك، يجب تحسين عملية التحميل من أجل الأداء.
في حالة فشل التحميل، يجب وضع إجراءات الاسترداد بحيث يمكن إعادة تشغيل العمليات من نقطة الفشل دون المساس بسلامة البيانات. يجب على مسؤولي مستودع البيانات مراقبة التحميل ومتابعته وإيقافه بناءً على أداء الخادم.
أنواع التحميل:
- التحميل الأولي - ملء الكل
جداول مستودع البيانات - الحمل الإضافي - التنفيذ مستمر
التعديلات حسب الحاجة على أساس منتظم - تحديث كامل - مسح المحتويات
جدول واحد أو أكثر وإعادة تحميلها ببيانات جديدة
التحقق من التحميل
- تأكد من أن بيانات الحقل الرئيسي ليست مفقودة أو فارغة.
- ينبغي اختبار طرق عرض النمذجة بناءً على الجداول المستهدفة.
- فحص القيم المجمعة 3 والتدابير المحسوبة.
- التحقق من البيانات في جداول الأبعاد والتاريخ.
- قم بفحص تقارير BI في جدول الحقائق والأبعاد الذي تم تحميله.
إعداد ETL باستخدام PythonScript
ونتيجة لذلك، يجب عليك تنفيذ عملية استخراج التحويل الأساسية (ETL) من عدة قواعد بيانات إلى مستودع بيانات لتتمكن من تجميع البيانات لذكاء الأعمال. هناك العديد من حزم ETL المتاحة التي تعتقد أنها زائدة عن الحد بالنسبة لحالة الاستخدام الأساسية لديك.
سأوضح لك كيفية استخراج البيانات من MySQL وSQL-server وfirebird في هذه المقالة. باستخدام Python 3.6، قم بتحويل البيانات وتحميلها إلى SQL-server (مستودع البيانات).
أولًا، علينا إنشاء دليل لمشروعنا:
python_etl |__main.py |__db_credentials.py |__variables.py |__sql_queries.py |__etl.py
لإعداد ETL باستخدام Python، ستحتاج إلى إنشاء الملفات التالية في دليل المشروع الخاص بك.
- db_credentials.py: ينبغي أن يكون لديه كافة المعلومات اللازمة للاتصال بجميع قواعد البيانات. مثل كلمة مرور قاعدة البيانات ورقم المنفذ وما إلى ذلك.
- sql_queries.py: يجب أن تكون جميع استعلامات قاعدة البيانات شائعة الاستخدام لاستخراج البيانات وتحميلها بتنسيق String متاحة.
- etl.py: الاتصال بقاعدة البيانات وإجراء الاستعلامات المطلوبة عن طريق تنفيذ كافة الإجراءات اللازمة.
- main.py: مسؤول عن إدارة تدفق العمليات وتنفيذ العمليات الأساسية بترتيب محدد.
في هذا القسم من sql_queries.py، هذا هو المكان الذي سنقوم فيه بتخزين جميع استعلامات SQL الخاصة بنا لاستخراجها من قواعد البيانات المصدر واستيرادها إلى قاعدة البيانات المستهدفة (مستودع البيانات)
إعداد بيانات اعتماد قاعدة البيانات والمتغيرات
فيvariables.py، أنشئ متغيرًا لتسجيل اسم القاعدة.
datawarehouse_name = 'your_datawarehouse_name'
قم بتكوين كافة سلاسل اتصال قاعدة البيانات المصدر والهدف وبيانات الاعتماد في db_credentials.py كما هو موضح أدناه. احفظ التكوين كقائمة حتى نتمكن من تكراره كلما لزم الأمر من خلال العديد من قواعد البيانات لاحقًا.
من المتغيرات import datawarehouse_name datawarehouse_name = 'your_datawarehouse_name' # sql-server (target db, datawarehouse) datawarehouse_db_config = { 'Trusted_Connection': 'yes', 'driver': '{SQL Server}', 'server': 'datawarehouse_sql_server', ' قاعدة البيانات': '{}'.format(datawarehouse_name)، 'user': 'your_db_username'، 'password': 'your_db_password'، 'autocommit': True، } # sql-server (مصدر db) sqlserver_db_config = [ { 'Trusted_Connection ': 'yes'، 'driver': '{SQL Server}'، 'server': 'your_sql_server'، 'قاعدة البيانات': 'db1'، 'user': 'your_db_username'، 'password': 'your_db_password'، ' autocommit': True, } ] # mysql (مصدر db) mysql_db_config = [ { 'user': 'your_user_1', 'password': 'your_password_1', 'host': 'db_connection_string_1', 'قاعدة البيانات': 'db_1', } , { 'user': 'your_user_2', 'password': 'your_password_2', 'host': 'db_connection_string_2', 'database': 'db_2', }, ] # firebird (مصدر db) fdb_db_config = [ { 'dsn' : "/your/path/to/source.db"، 'user': "your_username"، 'password': "your_password"، } ]
استعلامات SQL
في هذا القسم من sql_queries.py، هذا هو المكان الذي سنقوم فيه بتخزين جميع استعلامات SQL الخاصة بنا لاستخراجها من قواعد البيانات المصدر واستيرادها إلى قاعدة البيانات المستهدفة (مستودع البيانات).
يتعين علينا تنفيذ صيغ مختلفة لكل قاعدة بيانات لأننا نعمل مع منصات بيانات متعددة. يمكننا القيام بذلك عن طريق فصل الاستعلامات بناءً على نوع قاعدة البيانات.
# مثال للاستعلامات، سيكون مختلفًا عبر منصة قاعدة بيانات مختلفة firebird_extract = (''' SELECT fbd_column_1, fbd_column_2, fbd_column_3 FROM fbd_table; ''') firebird_insert = (''' INSERT INTO table (column_1, column_2, column_3) VALUES (?, ?, ?) ''') firebird_extract_2 = (''' SELECT fbd_column_1, fbd_column_2, fbd_column_3 FROM fbd_table_2; ''') firebird_insert_2 = (''' INSERT INTO table_2 (column_1, column_2, column_3) VALUES (?, ?, ? ) ''') sqlserver_extract = (''' SELECT sqlserver_column_1, sqlserver_column_2, sqlserver_column_3 FROM sqlserver_table ''') sqlserver_insert = (''' INSERT INTO table (column_1, column_2, column_3) VALUES (?, ?, ?) ''' ) mysql_extract = (''' SELECT mysql_column_1, mysql_column_2, mysql_column_3 FROM mysql_table ''') mysql_insert = (''' INSERT INTO table (column_1, column_2, column_3) VALUES (?, ?, ?) ''') # تصدير الاستعلامات class SqlQuery: def __init__(self, extract_query,load_query): self.extract_query = extract_query self.load_query = Load_query # إنشاء مثيلات لـ SqlQuery class fbd_query = SqlQuery(firebird_extract, firebird_insert) fbd_query_2 = SqlQuery(firebird_extract_2, firebird_insert_2) sqlserver_que ry = SqlQuery(sqlserver_extract , sqlserver_insert) mysql_query = SqlQuery(mysql_extract, mysql_insert) # تخزين كقائمة للتكرار fbd_queries = [fbdquery, fbd_query_2] sqlserver_queries = [sqlserver_query] mysql_queries = [mysql_query]
استخراج تحميل التحويل
لإعداد ETL باستخدام Python لمصادر البيانات المذكورة أعلاه، ستحتاج إلى الوحدات التالية:
# وحدات بايثون استيراد mysql.connector استيراد pyodbc استيراد fdb # المتغيرات من المتغيرات استيراد datawarehouse_name
يمكننا استخدام تقنيتين في هذا: etl() وetl_process().
etl_process() هو الإجراء الخاص بإنشاء اتصال مصدر قاعدة البيانات واستدعاء طريقة etl() بناءً على النظام الأساسي لقاعدة البيانات.
وفي الطريقة الثانية وهي طريقة etl()، تقوم بتشغيل استعلام الاستخراج أولاً، ثم تقوم بتخزين بيانات SQL في البيانات المتغيرة وإدراجها في قاعدة البيانات المستهدفة، وهي مستودع البيانات لدينا. يمكن تحقيق تحويل البيانات عن طريق تغيير متغير البيانات من النوع Tuple.
def etl(query, source_cnx, target_cnx): # استخراج البيانات من مصدر db source_cursor = source_cnx.cursor() source_cursor.execute(query.extract_query) data = source_cursor.fetchall() source_cursor. Close() # تحميل البيانات إلى مستودع db إذا البيانات: target_cursor = target_cnx.cursor() target_cursor.execute("USE {}".format(datawarehouse_name)) target_cursor.executemy(query.load_query, data) print('البيانات المحملة إلى المستودع db') target_cursor. Close() else : print('البيانات فارغة') def etl_process(queries, target_cnx, source_db_config, db_platform): # إنشاء اتصال db المصدر if db_platform == 'mysql': source_cnx = mysql.connector.connect(**source_db_config) elif db_platform == 'sqlserver': source_cnx = pyodbc.connect(**source_db_config) elif db_platform == 'firebird': source_cnx = fdb.connect(**source_db_config) else: return 'خطأ! منصة قاعدة بيانات غير معروفة' # حلقة من خلال استعلامات SQL للاستعلام في الاستعلامات: etl(query, source_cnx, target_cnx) # أغلق اتصال قاعدة البيانات المصدر source_cnx. Close()
نضع كل شيء معًا
الآن، في الخطوة التالية، يمكننا تكرار جميع بيانات الاعتماد في main.py وتنفيذ etl لجميع قواعد البيانات.
لذلك يتعين علينا استيراد جميع المتغيرات والأساليب المطلوبة:
# متغيرات من db_credentials استيراد datawarehouse_db_config، sqlserver_db_config، mysql_db_config، fbd_db_config من sql_queries استيراد fbd_queries، sqlserver_queries، mysql_queries من المتغيرات import * # طرق من etl import etl_process
الكود الموجود في هذا الملف مسؤول عن التكرار عبر بيانات الاعتماد للاتصال بقاعدة البيانات وتنفيذ عمليات ETL اللازمة باستخدام عمليات Python.
def main(): print('starting etl') # إنشاء اتصال لقاعدة البيانات الهدف (sql-server) target_cnx = pyodbc.connect(**datawarehouse_db_config) # حلقة من خلال بيانات الاعتماد # mysql للتكوين في mysql_db_config: حاول: print("loading" db: " + config['database']) etl_process(mysql_queries, target_cnx, config, 'mysql') باستثناء الاستثناء كخطأ: print("etl for {} به خطأ".format(config['database'])) طباعة ("رسالة الخطأ: {}'.format(error)) تابع # sql-server للتكوين في sqlserver_db_config: حاول: print("loading db: " + config['database']) etl_process(sqlserver_queries, target_cnx, config,' sqlserver') باستثناء الاستثناء كخطأ: print("etl for {} به خطأ".format(config['database'])) print('رسالة خطأ: {}'.format(error)) تابع # firebird للتكوين في fbd_db_config: حاول: print("loading db: " + config['database']) etl_process(fbd_queries, target_cnx, config, 'firebird') باستثناء الاستثناء كخطأ: print("etl for {} به خطأ".format(config) ['قاعدة البيانات'])) print('رسالة خطأ: {}'.format(خطأ)) تابع target_cnx. Close() إذا كان __name__ == "__main__": main()
في المحطة الطرفية لديك، اكتب python main.py وقمت للتو بإنشاء ETL باستخدام برنامج نصي خالص من نوع python.
أدوات ETL
هناك العديد من أدوات تخزين البيانات في السوق. وفيما يلي بعض الأمثلة الأكثر شهرة:
1. مارك لوجيك:
MarkLogic هو نظام لتخزين البيانات يستخدم مجموعة من إمكانيات الأعمال لجعل تكامل البيانات أسهل وأسرع. يمكنه الاستعلام عن العديد من أنواع البيانات، مثل المستندات والعلاقات وبيانات التعريف.
https://www.marklogic.com/product/getting-started/
2. أوراكل:
Oracle هي قاعدة البيانات الأكثر شعبية في الصناعة. إنه يقدم مجموعة واسعة من حلول مستودع البيانات لكل من الخدمات المحلية والسحابية. فهو يساعد في تحسين تجارب العملاء من خلال تعزيز الكفاءة التشغيلية.
https://www.oracle.com/index.html
3. أمازون ريد شيفت:
Redshift هو أحد حلول تخزين البيانات من Amazon. إنه حل بسيط وفعال من حيث التكلفة لتحليل أنواع مختلفة من البيانات باستخدام SQL القياسي وأدوات ذكاء الأعمال الحالية. كما أنه يتيح تنفيذ الاستعلامات المعقدة على بيتابايت من البيانات المنظمة.
https://aws.amazon.com/redshift/?nc2=h_m1
وفي الختام
أعطتك هذه المقالة فهمًا عميقًا لمعنى ETL، بالإضافة إلى برنامج تعليمي خطوة بخطوة حول كيفية إعداد ETL في Python. كما أعطاك قائمة بأفضل الأدوات التي تستخدمها معظم المؤسسات في الوقت الحاضر لبناء خطوط أنابيب بيانات ETL الخاصة بها.
من ناحية أخرى، تمتلك معظم المنظمات في الوقت الحاضر كمية هائلة من البيانات ذات بنية ديناميكية للغاية. يعد إنشاء خط أنابيب ETL من البداية لمثل هذه البيانات إجراءً صعبًا حيث سيتعين على المؤسسات استخدام عدد كبير من الموارد لإنشاء خط الأنابيب هذا ثم التأكد من قدرته على مواكبة حجم البيانات الكبير وتغييرات المخطط.
نبذة عن الكاتب
براشانت شارما
حاليًا، أتابع درجة البكالوريوس في التكنولوجيا (B.Tech) من معهد فيلور للتكنولوجيا. أنا متحمس جدًا للبرمجة وتطبيقاتها الحقيقية بما في ذلك تطوير البرمجيات والتعلم الآلي والتعلم العميق وعلوم البيانات.
أتمنى أن يعجبك المقال إذا أردت التواصل معي يمكنك التواصل على:
أو لأي شكوك أخرى ، يمكنك ذلك إرسال بريد لي ايضا
مقالات ذات صلة
- '
- "
- حسابي
- نشط
- الكل
- أمازون
- تحليلات
- التطبيقات
- المنطقة
- البند
- الآلي
- دعم
- تعزيز
- نساعدك في بناء
- ابني
- الأعمال
- ذكاء الأعمال
- دعوة
- الشيكات
- كليفلاند
- سحابة
- الخدمات السحابية
- الكود
- Communication
- حول الشركة
- صلة
- استمر
- خلق
- أوراق اعتماد
- البيانات
- تكامل البيانات
- علم البيانات
- مستودع البيانات
- مستودعات البيانات
- قاعدة البيانات
- قواعد البيانات
- التعلم العميق
- تطوير
- المطورين
- التطوير التجاري
- الأجهزة
- بعد
- وثائق
- سائق
- كفاءة
- إلخ
- مُديرين تنفيذيين
- خبرة
- استخلاص
- مقتطفات
- فشل
- الاسم الأول
- تدفق
- شكل
- جديد
- بالإضافة إلى
- شراء مراجعات جوجل
- توجيه
- أجهزة التبخير
- هنا
- مرتفع
- تاريخ
- كيفية
- كيفية
- HTTPS
- تحديد
- التأثير
- استيراد
- بما فيه
- معلومات
- التكامل
- رؤيتنا
- مسائل
- IT
- القفل
- كبير
- تعلم
- تعلم
- خط
- لينكدين:
- قائمة
- تحميل
- آلة التعلم
- إدارة
- رسم خريطة
- تجارة
- الوسائط
- الاكثر شهره
- خطوة
- أسماء
- إعلام
- أرقام
- عروض
- تعمل
- أنظمة التشغيل
- عمليات
- أوراكل
- طلب
- المنظمات
- أخرى
- شركاء
- كلمة المرور
- أداء
- المنصة
- منصات التداول
- أكثر الاستفسارات
- أنتج
- الإنتــاج
- برمجة وتطوير
- البرامج
- تنفيذ المشاريع
- سحب
- بايثون
- الخام
- في الوقت الحقيقي
- واقع
- تسجيل
- استرجاع
- العلاقات
- التقارير
- الموارد
- استجابة
- إيرادات
- علوم
- خدمات
- طقم
- قصير
- الاشارات
- So
- تطبيقات الكمبيوتر
- تطوير البرمجيات
- الحلول
- SQL
- المسرح
- الولايه او المحافظه
- متجر
- فروعنا
- نظام
- أنظمة
- الهدف
- التكنولوجيا
- تقنيات
- تكنولوجيا
- المصدر
- الوقت
- تحول
- البرنامج التعليمي
- تحديث
- قيمنا
- الباعة
- حجم
- المخزن
- وحدات التخزين
- أسبوعي
- للعمل
- أعمال