Reverse ETL من Databricks إلى Spanner باستخدام BQ

1. إنشاء مسار Reverse ETL من Databricks إلى Spanner باستخدام Google Cloud Storage وBigQuery

مقدمة

في هذا الدرس التطبيقي حول الترميز، ستنشئ مسار Reverse ETL من Databricks إلى Spanner. في السابق، كانت عمليات نقل البيانات القياسية من خلال مسارات ETL (الاستخراج والتحويل والتحميل) تنقل البيانات من قواعد البيانات التشغيلية إلى مستودع بيانات، مثل Databricks، لإجراء الإحصاءات. تنفّذ عملية Reverse ETL العكس من خلال نقل البيانات المنسّقة والمعالَجة من مستودع البيانات إلى قواعد البيانات التشغيلية، مثل Spanner، وهي قاعدة بيانات ارتباطية موزّعة على مستوى العالم ومثالية للتطبيقات العالية التوفّر، حيث يمكنها تشغيل التطبيقات أو تقديم ميزات للمستخدمين أو استخدامها لاتخاذ القرارات في الوقت الفعلي.

الهدف هو نقل مجموعة بيانات مجمّعة من جداول Databricks Iceberg إلى جداول Spanner.

لتحقيق ذلك، يتم استخدام Google Cloud Storage (GCS) وBigQuery كخطوات وسيطة. في ما يلي تفصيل لتدفّق البيانات وسبب اختيار هذه البنية:

b2dae0f06b59656a.png

  1. نقل البيانات من Databricks إلى Google Cloud Storage (GCS) بتنسيق Iceberg:
  • الخطوة الأولى هي استخراج البيانات من Databricks بتنسيق مفتوح ومحدّد جيدًا. يتم تصدير الجدول بتنسيق Apache Iceberg. تؤدي هذه العملية إلى كتابة البيانات الأساسية كمجموعة من ملفات Parquet والبيانات الوصفية للجدول (المخطط والأقسام ومواقع الملفات) كـ ملفات JSON وAvro. يؤدي إعداد بنية الجدول الكاملة هذه في GCS إلى إتاحة نقل البيانات وإمكانية وصول أي نظام يفهم تنسيق Iceberg إليها.
  1. تحويل جداول Iceberg في "خدمة التخزين السحابي من Google" إلى جدول خارجي في BigLake ضمن BigQuery:
  • بدلاً من تحميل البيانات مباشرةً من "خدمة التخزين السحابي من Google" إلى Spanner، يتم استخدام BigQuery كوسيط قوي. يتم إنشاء جدول خارجي في BigLake في BigQuery يشير مباشرةً إلى ملف بيانات Iceberg الوصفية في GCS. لهذا الأسلوب عدة مزايا:
  • عدم تكرار البيانات: تقرأ BigQuery بنية الجدول من البيانات الوصفية وتطلب ملفات بيانات Parquet في مكانها بدون نقلها، ما يؤدي إلى توفير الكثير من الوقت وتكاليف التخزين.
  • الطلبات الموحّدة: تتيح تنفيذ طلبات SQL معقّدة على بيانات GCS كما لو كانت جدول BigQuery أصليًا.
  1. نقل بيانات جدول BigLake الخارجي باستخدام ReverseETL إلى Spanner:
  • الخطوة الأخيرة هي نقل البيانات من BigQuery إلى Spanner. يتم تحقيق ذلك باستخدام ميزة فعّالة في BigQuery تُعرف باسم استعلام EXPORT DATA، وهي خطوة "استخراج البيانات وتحويلها وتحميلها بشكل عكسي".
  • الاستعداد التشغيلي: تم تصميم Spanner لأحمال العمل المتعلقة بالمعاملات، ما يوفّر اتساقًا قويًا وتوفّرًا عاليًا للتطبيقات. من خلال نقل البيانات إلى Spanner، تصبح متاحة للتطبيقات التي تواجه المستخدمين وواجهات برمجة التطبيقات والأنظمة التشغيلية الأخرى التي تتطلّب عمليات بحث سريعة.
  • قابلية التوسّع: يتيح هذا النمط الاستفادة من قدرة BigQuery التحليلية لمعالجة مجموعات البيانات الكبيرة ثم عرض النتائج بكفاءة من خلال البنية الأساسية القابلة للتوسّع عالميًا في Spanner.

الخدمات والمصطلحات

  • DataBricks: منصة بيانات مستندة إلى السحابة الإلكترونية ومصمَّمة حول Apache Spark
  • ‫Spanner: قاعدة بيانات ارتباطية موزّعة عالميًا وتديرها Google بالكامل.
  • Google Cloud Storage: خدمة تخزين البيانات الثنائية الكبيرة (BLOB) من Google Cloud
  • BigQuery: مستودع بيانات بدون خادم مخصّص للتحليلات، وتديره Google بالكامل.
  • Iceberg: هو تنسيق جدول مفتوح محدّد من قِبل Apache يوفّر تجريدًا لتنسيقات ملفات البيانات الشائعة مفتوحة المصدر.
  • Parquet: هو تنسيق ملف بيانات ثنائي عمودي مفتوح المصدر من Apache.

أهداف الدورة التعليمية

  • كيفية تحميل البيانات إلى Databricks كجداول Iceberg
  • كيفية إنشاء حزمة GCS
  • كيفية تصدير جدول Databricks إلى GCS بتنسيق Iceberg
  • كيفية إنشاء جدول خارجي في BigLake من جدول Iceberg في BigQuery من جدول Iceberg في GCS
  • كيفية إعداد مثيل Spanner
  • كيفية تحميل جداول BigLake الخارجية في BigQuery إلى Spanner

2. الإعداد والمتطلبات والقيود

المتطلبات الأساسية

  • حساب Databricks، يُفضَّل أن يكون على Google Cloud Platform
  • يجب توفّر حساب على Google Cloud يتضمّن حجزًا من فئة Enterprise أو أعلى لتصدير البيانات من BigQuery إلى Spanner.
  • الوصول إلى "وحدة تحكّم Google Cloud" من خلال متصفّح ويب
  • وحدة طرفية لتنفيذ أوامر Google Cloud CLI

إذا كانت مؤسستك على Google Cloud مفعَّلة فيها سياسة iam.allowedPolicyMemberDomains، قد يحتاج المشرف إلى منح استثناء للسماح بحسابات الخدمة من نطاقات خارجية. سيتم تناول هذا الموضوع في خطوة لاحقة عند الاقتضاء.

المتطلبات

  • مشروع على السحابة الإلكترونية من Google Cloud تم تفعيل الفوترة فيه
  • متصفّح ويب، مثل Chrome
  • حساب Databricks (يفترض هذا المختبر مساحة عمل مستضافة في "منصة Google Cloud")
  • يجب أن يكون إصدار BigQuery هو Enterprise أو إصدار أحدث لاستخدام ميزة EXPORT DATA.
  • إذا كانت مؤسستك على Google Cloud مفعَّلة فيها سياسة iam.allowedPolicyMemberDomains، قد يحتاج المشرف إلى منح استثناء للسماح بحسابات الخدمة من نطاقات خارجية. سيتم تناول هذا الموضوع في خطوة لاحقة عند الاقتضاء.

أذونات "إدارة الهوية وإمكانية الوصول" في Google Cloud Platform

يجب أن يتضمّن حساب Google الأذونات التالية لتنفيذ جميع الخطوات الواردة في هذا الدرس العملي.

حسابات الخدمة

iam.serviceAccountKeys.create

يسمح بإنشاء حسابات الخدمة.

Spanner

spanner.instances.create

يسمح بإنشاء مثيل Spanner جديد.

spanner.databases.create

تسمح بتنفيذ عبارات DDL لإنشاء

spanner.databases.updateDdl

يسمح بتنفيذ عبارات DDL لإنشاء جداول في قاعدة البيانات.

Google Cloud Storage

storage.buckets.create

تتيح إنشاء حزمة GCS جديدة لتخزين ملفات Parquet التي تم تصديرها.

storage.objects.create

يسمح بكتابة ملفات Parquet التي تم تصديرها إلى حزمة GCS.

storage.objects.get

يسمح هذا الإذن لأداة BigQuery بقراءة ملفات Parquet من حزمة GCS.

storage.objects.list

يسمح لـ BigQuery بإدراج ملفات Parquet في حزمة GCS.

Dataflow

Dataflow.workitems.lease

يسمح هذا الإذن بطلب عناصر العمل من Dataflow.

Dataflow.workitems.sendMessage

يسمح هذا الإذن للعامل في Dataflow بإرسال رسائل إلى خدمة Dataflow.

Logging.logEntries.create

يسمح هذا الإذن لبرامج Dataflow العاملة بكتابة إدخالات السجلّ في Google Cloud Logging.

لتسهيل الأمر، يمكن استخدام الأدوار المحدّدة مسبقًا التي تتضمّن هذه الأذونات.

roles/resourcemanager.projectIamAdmin

roles/iam.serviceAccountKeyAdmin

roles/spanner.instanceAdmin

roles/spanner.databaseAdmin

roles/storage.admin

roles/dataflow.serviceAgent

roles/dataflow.worker

roles/dataflow.serviceAgent

مشروع Google Cloud

المشروع هو وحدة تنظيم أساسية في Google Cloud. إذا قدّم المشرف رمزًا لاستخدامه، يمكن تخطّي هذه الخطوة.

يمكن إنشاء مشروع باستخدام واجهة سطر الأوامر على النحو التالي:

gcloud projects create <your-project-name>

مزيد من المعلومات عن إنشاء المشاريع وإدارتها

القيود

من المهم أن تكون على دراية ببعض القيود وحالات عدم التوافق بين أنواع البيانات التي يمكن أن تنشأ في مسار النقل هذا.

Databricks Iceberg إلى BigQuery

عند استخدام BigQuery لطلب بيانات من جداول Iceberg التي تديرها Databricks (من خلال UniForm)، يجب مراعاة ما يلي:

  • تطوّر المخطط: على الرغم من أنّ UniForm يؤدي وظيفة جيدة في ترجمة تغييرات مخطط Delta Lake إلى Iceberg، قد لا يتم نشر التغييرات المعقّدة دائمًا على النحو المتوقّع. على سبيل المثال، لا تتم ترجمة إعادة تسمية الأعمدة في Delta Lake إلى Iceberg، الذي يراها على أنّها drop وadd. يجب اختبار تغييرات المخطط بدقة دائمًا.
  • السفر عبر الزمن: لا يمكن أن تستخدم BigQuery إمكانات السفر عبر الزمن في Delta Lake. سيتم الاستعلام فقط عن أحدث لقطة لجدول Iceberg.
  • ميزات Delta Lake غير المتوافقة: لا تتوافق ميزات مثل "متجهات الحذف" و"ربط الأعمدة" مع وضع id في Delta Lake مع UniForm for Iceberg. يستخدم المختبر الوضع name لربط الأعمدة، وهو وضع متاح.

نقل البيانات من BigQuery إلى Spanner

لا يتيح الأمر EXPORT DATA من BigQuery إلى Spanner جميع أنواع بيانات BigQuery. سيؤدي تصدير جدول يتضمّن الأنواع التالية إلى حدوث خطأ:

  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME

بالإضافة إلى ذلك، إذا كان مشروع BigQuery يستخدم لغة GoogleSQL، لا تتوفّر أيضًا الأنواع الرقمية التالية للتصدير إلى Spanner:

  • BIGNUMERIC

للحصول على قائمة كاملة وحديثة بالقيود، يُرجى الرجوع إلى المستندات الرسمية: قيود التصدير إلى Spanner.

تحديد المشاكل وحلّها والأخطاء الشائعة

  • إذا لم تكن تستخدم مثيلاً من Databricks على Google Cloud Platform، قد لا يكون من الممكن تحديد موقع بيانات خارجي في GCS. في مثل هذه الحالات، يجب تخزين الملفات في حل التخزين الخاص بموفّر الخدمات السحابية في مساحة عمل Databricks، ثم نقلها إلى GCS بشكل منفصل.
  • عند إجراء ذلك، يجب إجراء تعديلات على البيانات الوصفية لأنّ المعلومات ستتضمّن مسارات مبرمَجة ثابتة إلى الملفات التي تمّت إضافتها.

3- إعداد Google Cloud Storage (GCS)

سيتم استخدام Google Cloud Storage (GCS) لتخزين ملفات بيانات Parquet التي تم إنشاؤها بواسطة Databricks. لإجراء ذلك، يجب أولاً إنشاء حزمة جديدة لاستخدامها كوجهة للملف.

Google Cloud Storage

إنشاء حزمة جديدة

  1. انتقِل إلى صفحة Google Cloud Storage في وحدة التحكّم السحابية.
  2. في اللوحة اليمنى، انقر على الحِزم:

27f4bdfaba9bbd6a.png

  1. انقر على الزر إنشاء:

e580967933f20cbf.png

  1. أدخِل تفاصيل المجموعة:
  • اختَر اسمًا للمجموعة لاستخدامه. في هذا التمرين العملي، سيتم استخدام الاسم codelabs_retl_databricks
  • اختَر منطقة لتخزين الحزمة، أو استخدِم القيم التلقائية.
  • إبقاء فئة التخزين على standard
  • الاحتفاظ بالقيم التلقائية لإذن الوصول
  • احتفِظ بالقيم التلقائية لحماية بيانات العنصر
  1. انقر على الزر Create عند الانتهاء. قد تظهر رسالة لتأكيد أنّه سيتم منع الوصول للجميع. يمكنك المتابعة وتأكيد ذلك.
  2. تهانينا، تم إنشاء مجموعة جديدة بنجاح. ستتم إعادة توجيهك إلى صفحة الحزمة.
  • انسخ اسم الحزمة الجديدة واحتفِظ به لأنّك ستحتاج إليه لاحقًا.

cfe4c7b70868ecac.png

الاستعداد للخطوات التالية

احرص على تدوين التفاصيل التالية لأنّك ستحتاج إليها في الخطوات التالية:

  1. معرّف مشروع Google
  2. اسم حزمة Google Storage

4. إعداد Databricks

بيانات TPC-H

في هذا التمرين العملي، سيتم استخدام مجموعة بيانات TPC-H، وهي معيار متّبَع في المجال لأنظمة دعم اتخاذ القرار. يصمّم المخطط البياني بيئة نشاط تجاري واقعية تتضمّن عملاء وطلبات ومورّدين وأجزاء، ما يجعله مثاليًا لعرض سيناريو واقعي للتحليلات ونقل البيانات.

بدلاً من استخدام جداول TPC-H الأولية والموحّدة، سيتم إنشاء جدول جديد مجمّع. سيتم دمج البيانات من الجداول orders وcustomer وnation في هذا الجدول الجديد لإنشاء عرض موجز غير طبيعي للمبيعات الإقليمية. تُعدّ خطوة التجميع المُسبَق هذه من الممارسات الشائعة في الإحصاءات، لأنّها تُجهّز البيانات لحالة استخدام محدّدة، وهي في هذا السيناريو، للاستهلاك من خلال تطبيق تشغيلي.

سيكون المخطط النهائي للجدول المجمَّع على النحو التالي:

Col

النوع

nation_name

سلسلة

market_segment

سلسلة

order_year

int

order_priority

سلسلة

total_order_count

bigint

total_revenue

decimal(29,2)

unique_customer_count

bigint

توافق Iceberg مع تنسيق Delta Lake العالمي (UniForm)

في هذا الدرس التطبيقي، سيكون الجدول داخل Databricks جدول Delta Lake. ومع ذلك، لتسهيل قراءتها من خلال الأنظمة الخارجية، مثل BigQuery، سيتم تفعيل ميزة قوية تُعرف باسم التنسيق العام (UniForm).

تنشئ UniForm تلقائيًا بيانات Iceberg الوصفية إلى جانب بيانات Delta Lake الوصفية لإنشاء نسخة واحدة مشترَكة من بيانات الجدول. يوفّر ذلك أفضل ما في الميزتين:

  • داخل Databricks: يمكنك الاستفادة من جميع مزايا الأداء والحوكمة التي يوفّرها Delta Lake.
  • خارج Databricks: يمكن لأي محرك طلبات متوافق مع Iceberg قراءة الجدول، مثل BigQuery، كما لو كان جدول Iceberg أصليًا.

يُغنيك ذلك عن الاحتفاظ بنُسخ منفصلة من البيانات أو تنفيذ مهام التحويل يدويًا. سيتم تفعيل UniForm من خلال ضبط خصائص جدول معيّنة عند إنشاء الجدول.

قوائم Databricks

كتالوج Databricks هو الحاوية ذات المستوى الأعلى للبيانات في Unity Catalog، وهو حلّ موحّد لإدارة البيانات من Databricks. توفّر Unity Catalog طريقة مركزية لإدارة أصول البيانات والتحكّم في إمكانية الوصول إليها وتتبُّع مصدرها، وهو أمر بالغ الأهمية لمنصة بيانات مُدارة بشكل جيد.

تستخدم مساحة اسم بثلاثة مستويات لتنظيم البيانات: catalog.schema.table.

  • الفهرس: هو المستوى الأعلى، ويُستخدم لتجميع البيانات حسب البيئة أو وحدة النشاط التجاري أو المشروع.
  • المخطط (أو قاعدة البيانات): هو تجميع منطقي للجداول وطرق العرض والدوال ضمن فهرس.
  • الجدول: العنصر الذي يحتوي على بياناتك.

قبل إنشاء جدول TPC-H المجمّع، يجب أولاً إعداد فهرس ومخطط مخصّصَين لاستضافته. يضمن ذلك تنظيم المشروع بشكلٍ جيد وعزله عن البيانات الأخرى في مساحة العمل.

إنشاء كتالوج ومخطط جديدَين

في Databricks Unity Catalog، يعمل "الكتالوج" كأعلى مستوى من التنظيم لأصول البيانات، ويعمل كحاوية آمنة يمكن أن تمتد على مساحات عمل متعددة في Databricks. يتيح لك تنظيم البيانات وعزلها استنادًا إلى وحدات الأعمال أو المشاريع أو البيئات، مع تحديد الأذونات وعناصر التحكّم في الوصول بشكل واضح.

ضمن "الفهرس"، ينظّم "المخطط" (المعروف أيضًا باسم قاعدة البيانات) الجداول وطرق العرض والدوال. يتيح هذا الهيكل الهرمي التحكّم الدقيق والتجميع المنطقي لعناصر البيانات ذات الصلة. في هذا الدرس التطبيقي، سيتم إنشاء فهرس ومخطط مخصّصَين لتخزين بيانات TPC-H، ما يضمن العزل والإدارة السليمَين.

إنشاء كتالوج
  1. انتقِل إلى 6761500bb3aaa502.png
  2. انقر على + ثمّ اختَر إنشاء كتالوج من القائمة المنسدلة.

13cfc62741161182.png

  1. سيتم إنشاء فهرس عادي جديد باستخدام الإعدادات التالية:
  • اسم الكتالوج: retl_tpch_project
  • موقع التخزين: استخدِم الموقع التلقائي إذا تم إعداده في مساحة العمل، أو أنشئ موقعًا جديدًا.

a6e3c89febde9a77.png

إنشاء مخطط
  1. انتقِل إلى 6761500bb3aaa502.png
  2. اختَر الفهرس الجديد الذي تم إنشاؤه من اللوحة اليمنى

89d2935ac4c5d655.png

  1. انقر على b7a6fc9785ac3a9d.png
  2. سيتم إنشاء مخطط جديد باسم اسم المخطط على النحو التالي: tpch_data

787631de85a6bb9.png

إعداد البيانات الخارجية

لتتمكّن من تصدير البيانات من Databricks إلى Google Cloud Storage (GCS)، يجب إعداد بيانات اعتماد البيانات الخارجية في Databricks. يسمح ذلك لـ Databricks بالوصول إلى حزمة GCS وتعديلها بشكل آمن.

  1. من شاشة الفهرس، انقر على 32d5a94ae444cd8e.png
  • إذا لم يظهر لك الخيار External Data، قد تجد External Locations مُدرَجًا ضمن القائمة المنسدلة Connect بدلاً من ذلك.
  1. انقر على e03562324c0ba85e.png
  2. في نافذة مربّع الحوار الجديدة، اضبط القيم المطلوبة لبيانات الاعتماد:
  • نوع بيانات الاعتماد: GCP Service Account
  • اسم بيانات الاعتماد: retl-gcs-credential

7be8456dfa196853.png

  1. انقر على إنشاء
  2. بعد ذلك، انقر على علامة التبويب المواقع الجغرافية الخارجية.
  3. انقر على إنشاء موقع جغرافي.
  4. في نافذة مربّع الحوار الجديدة، اضبط القيم المطلوبة للموقع الجغرافي الخارجي:
  • اسم الموقع الجغرافي الخارجي: retl-gcs-location
  • نوع مساحة التخزين: GCP
  • عنوان URL: عنوان URL لحزمة GCS، بالتنسيق gs://YOUR_BUCKET_NAME
  • بيانات اعتماد مساحة التخزين: اختَر retl-gcs-credential الذي تم إنشاؤه للتو.

6d9240128dfcfd80.png

  1. دوِّن عنوان البريد الإلكتروني لحساب الخدمة الذي يتم ملؤه تلقائيًا عند اختيار بيانات اعتماد التخزين، لأنّك ستحتاج إليه في الخطوة التالية.
  1. انقر على إنشاء

5- ضبط أذونات حساب الخدمة

حساب الخدمة هو نوع خاص من الحسابات تستخدمه التطبيقات أو الخدمات لإجراء طلبات بيانات من واجهة برمجة التطبيقات مع تفويض إلى موارد Google Cloud.

يجب الآن إضافة الأذونات إلى حساب الخدمة الذي تم إنشاؤه للحزمة الجديدة في GCS.

  1. من صفحة حزمة GCS، انقر على علامة التبويب الأذونات.

240e591122612db0.png

  1. انقر على منح إذن الوصول في صفحة المستخدمين الرئيسيين.
  2. في لوحة منح الإذن بالوصول التي تظهر من اليسار، أدخِل معرّف حساب الخدمة في حقل الأعضاء الجدد.
  3. ضمن إسناد الأدوار، أضِف Storage Object Admin وStorage Legacy Bucket Reader. تسمح هذه الأدوار لحساب الخدمة بقراءة العناصر وكتابتها وإدراجها في حزمة التخزين.

تحميل بيانات TPC-H

بعد إنشاء "الفهرس" و"المخطط"، يمكن تحميل بيانات TPCH من الجدول الحالي samples.tpch المخزَّن داخليًا في Databricks، ثم تعديلها في جدول جديد في المخطط الذي تم تحديده حديثًا.

إنشاء جدول مع إتاحة Iceberg

توافق Iceberg مع UniForm

في الخلفية، تدير Databricks هذا الجدول داخليًا كجدول Delta Lake، ما يمنح جميع مزايا تحسين الأداء وميزات الحوكمة في Delta ضمن منظومة Databricks المتكاملة. ومع ذلك، من خلال تفعيل UniForm (اختصارًا لـ Universal Format)، يتم توجيه Databricks للقيام بشيء خاص: في كل مرة يتم فيها تعديل الجدول، تنشئ Databricks تلقائيًا بيانات Iceberg الوصفية المطابقة وتحتفظ بها بالإضافة إلى بيانات Delta Lake الوصفية.

وهذا يعني أنّه يتم الآن وصف مجموعة واحدة مشترَكة من ملفات البيانات (ملفات Parquet) من خلال مجموعتَين مختلفتَين من البيانات الوصفية.

  • بالنسبة إلى Databricks: تستخدم _delta_log لقراءة الجدول.
  • بالنسبة إلى القارئات الخارجية (مثل BigQuery): تستخدم هذه القارئات ملف البيانات الوصفية Iceberg (.metadata.json) لفهم مخطط الجدول والتقسيم ومواقع الملفات.

والنتيجة هي جدول متوافق تمامًا وبشفافية مع أي أداة متوافقة مع Iceberg. لا يتم تكرار البيانات، ولا حاجة إلى التحويل أو المزامنة يدويًا. وهي مصدر واحد للحقيقة يمكن الوصول إليه بسلاسة من خلال كلّ من عالم التحليلات في Databricks ومنظومة الأدوات المتكاملة الأوسع نطاقًا التي تتوافق مع معيار Iceberg المفتوح.

  1. انقر على جديد ثم على طلب بحث.

d5fad2076e475ebe.png

  1. في حقل النص الخاص بصفحة طلب البحث، نفِّذ أمر SQL التالي:
CREATE TABLE retl_tpch_project.tpch_data.regional_sales_iceberg
USING DELTA
LOCATION 'gs://<Your bucket name>/regional_sales_iceberg'
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
)
AS 

SELECT 
    n.n_name AS nation_name,
    c.c_mktsegment AS market_segment,
    YEAR(o.o_orderdate) AS order_year,
    o.o_orderpriority AS order_priority,
    COUNT(o.o_orderkey) AS total_order_count,
    ROUND(SUM(o.o_totalprice), 2) AS total_revenue,
    COUNT(DISTINCT c.c_custkey) AS unique_customer_count
FROM samples.tpch.orders AS o
INNER JOIN samples.tpch.customer AS c 
    ON o.o_custkey = c.c_custkey
INNER JOIN samples.tpch.nation AS n
    ON c.c_nationkey = n.n_nationkey
GROUP BY 
    n.n_name, 
    c.c_mktsegment, 
    YEAR(o.o_orderdate), 
    o.o_orderpriority;

OPTIMIZE retl_tpch_project.tpch_data.regional_sales_iceberg;

DESCRIBE EXTENDED retl_tpch_project.tpch_data.regional_sales_iceberg;

ملاحظات:

  • استخدام Delta: يحدّد أنّنا نستخدم جدول Delta Lake. يمكن تخزين جداول Delta Lake في Databricks كجدول خارجي فقط.
  • الموقع الجغرافي: يحدّد هذا الحقل مكان تخزين الجدول، إذا كان خارجيًا.
  • TablePropertoes: ينشئ delta.universalFormat.enabledFormats = ‘iceberg' بيانات وصفية متوافقة مع Iceberg إلى جانب ملفات Delta Lake.
  • تحسين: يؤدي إلى تشغيل عملية إنشاء البيانات الوصفية في UniForm بشكل إجباري، لأنّ هذه العملية تتم عادةً بشكل غير متزامن.
  1. يجب أن تعرض نتيجة طلب البحث تفاصيل حول الجدول الذي تم إنشاؤه حديثًا

285c622214824bc.png

التحقّق من بيانات جدول GCS

بعد الانتقال إلى حزمة GCS، يمكن الآن العثور على بيانات الجدول التي تم إنشاؤها حديثًا.

يمكنك العثور على البيانات الوصفية لـ Iceberg في المجلد metadata الذي تستخدمه أدوات القراءة الخارجية (مثل BigQuery). يتم تتبُّع البيانات الوصفية في Delta Lake، التي تستخدمها Databricks داخليًا، في المجلد _delta_log.

يتم تخزين بيانات الجدول الفعلية كـ ملفات Parquet ضِمن مجلد آخر، وعادةً ما يتم تسميته بسلسلة تم إنشاؤها عشوائيًا بواسطة Databricks. على سبيل المثال، في لقطة الشاشة أدناه، تقع ملفات البيانات في المجلد 9M.

e9c1dfecb7b6af05.png

6. إعداد BigQuery وBigLake

بعد أن أصبح جدول Iceberg في Google Cloud Storage، الخطوة التالية هي إتاحة الوصول إليه في BigQuery. سيتم ذلك من خلال إنشاء جدول خارجي في BigLake.

BigLake هو محرّك تخزين يتيح إنشاء جداول في BigQuery تقرأ البيانات مباشرةً من مصادر خارجية، مثل Google Cloud Storage. في هذا المختبر، هذه هي التكنولوجيا الأساسية التي تتيح لـ BigQuery فهم جدول Iceberg الذي تم تصديره للتو بدون الحاجة إلى استيعاب البيانات.

لإنجاح هذه العملية، يجب توفُّر عنصرَين:

  1. اتصال بمورد على السحابة الإلكترونية: هذا رابط آمن بين BigQuery وGCS. يستخدم حساب خدمة خاصًا للتعامل مع المصادقة، ما يضمن حصول BigQuery على الأذونات اللازمة لقراءة الملفات من حزمة GCS.
  2. تعريف جدول خارجي: يخبر هذا التعريف BigQuery بمكان العثور على ملف البيانات الوصفية لجدول Iceberg في GCS وكيفية تفسيره.

إنشاء عملية ربط بمورد على السحابة الإلكترونية

أولاً، سيتم إنشاء عملية الربط التي تسمح لأداة BigQuery بالوصول إلى GCS.

يمكنك الاطّلاع على مزيد من المعلومات حول إنشاء عمليات ربط موارد السحابة الإلكترونية هنا.

  1. الانتقال إلى BigQuery
  2. انقر على عمليات الربط ضمن المستكشف
  • إذا لم يظهر مستوى المستكشف، انقر على e09eaea936f28d62.png

3b64ad1e030299e5.png

  1. في صفحة عمليات الربط، انقر على 6b81c7550b537890.png.
  2. بالنسبة إلى نوع الاتصال، اختَر Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource)
  3. اضبط معرّف الاتصال على databricks_retl وأنشئ الاتصال

a0c9030883e6fb2.png

7aa50f0ee61d7b67.png

  1. من المفترض أن يظهر إدخال الآن في جدول عمليات الربط لعملية الربط التي تم إنشاؤها حديثًا. انقر على هذا الإدخال للاطّلاع على تفاصيل عملية الربط.

3cf84a65e626ccfe.png

  1. في صفحة تفاصيل الربط، دوِّن رقم تعريف حساب الخدمة لأنّك ستحتاج إليه لاحقًا.

7f52106c43700b78.png

منح إذن الوصول إلى حساب خدمة الربط

  1. انتقِل إلى إدارة الهوية وإمكانية الوصول والمشرف.
  2. انقر على منح إذن الوصول.

d8fc7690bba820c7.png

  1. في حقل المشرفون الجدد، أدخِل معرّف حساب الخدمة الخاص بـ "مصدر الربط" الذي تم إنشاؤه أعلاه.
  2. بالنسبة إلى "الدور"، اختَر Storage Object User، ثم انقر على 9e23819e5bc1babb.png.

بعد إنشاء عملية الربط ومنح حساب الخدمة الأذونات اللازمة، يمكن الآن إنشاء الجدول الخارجي BigLake. أولاً، يجب إنشاء مجموعة بيانات في BigQuery لتكون بمثابة حاوية للجدول الجديد. بعد ذلك، سيتم إنشاء الجدول نفسه، مع توجيهه إلى ملف البيانات الوصفية Iceberg في حزمة GCS.

  1. الانتقال إلى BigQuery
  2. في لوحة المستكشف، انقر على رقم تعريف المشروع، ثم انقر على النقاط الثلاث واختَر إنشاء مجموعة بيانات.

9ef91b1c8433b641.png

  1. سيتم تسمية مجموعة البيانات databricks_retl. اترك الخيارات الأخرى على الإعدادات التلقائية وانقر على الزر إنشاء مجموعة بيانات.

9f413d6f65520b2f.png

  1. ابحث الآن عن مجموعة البيانات الجديدة databricks_retl في لوحة المستكشف. انقر على النقاط الثلاث بجانبه واختَر إنشاء جدول.

858cb483ebd3ce2a.png

  1. املأ الإعدادات التالية لإنشاء الجدول:
  • إنشاء جدول من: Google Cloud Storage
  • اختيار ملف من حزمة GCS أو استخدام نمط معرّف الموارد المنتظم (URI): انتقِل إلى حزمة GCS وابحث عن ملف JSON الخاص بالبيانات الوصفية الذي تم إنشاؤه أثناء عملية التصدير من Databricks. يجب أن يبدو المسار على النحو التالي: regional_sales/metadata/v1.metadata.json.
  • تنسيق الملف: Iceberg
  • الجدول: regional_sales
  • نوع الجدول: External table
  • رقم تعريف الاتصال: اختَر اتصال databricks_retl الذي تم إنشاؤه سابقًا.
  • اترك بقية القيم على الإعدادات التلقائية، ثم انقر على إنشاء جدول.
  1. بعد الإنشاء، من المفترض أن يظهر جدول regional_sales الجديد ضمن مجموعة بيانات databricks_retl. يمكن الآن إجراء طلبات بحث في هذا الجدول باستخدام لغة SQL العادية، تمامًا كما هو الحال مع أي جدول آخر في BigQuery.

133be43ad67a5a21.png

7. التحميل إلى Spanner

تم الوصول إلى الجزء الأخير والأكثر أهمية في مسار النقل، وهو نقل البيانات من جداول BigLake الخارجية إلى Spanner. هذه هي خطوة "استخراج البيانات وتحويلها وتحميلها بشكل عكسي"، حيث يتم تحميل البيانات، بعد معالجتها وتنظيمها في مستودع البيانات، إلى نظام تشغيلي لتستخدمه التطبيقات.

‫Spanner هي قاعدة بيانات ارتباطية مُدارة بالكامل وموزّعة على مستوى العالم. وتوفّر اتساق المعاملات لقاعدة بيانات ارتباطية تقليدية، ولكن مع قابلية التوسّع الأفقي لقاعدة بيانات NoSQL. وهذا يجعلها خيارًا مثاليًا لإنشاء تطبيقات قابلة للتوسّع وعالية التوفّر.

ستكون العملية على النحو التالي:

  1. أنشئ مثيلاً من Spanner، وهو التخصيص الفعلي للموارد.
  2. أنشئ قاعدة بيانات ضمن هذا المثيل.
  3. حدِّد مخطط جدول في قاعدة البيانات يتطابق مع بنية بيانات regional_sales.
  4. نفِّذ طلب بحث EXPORT DATA في BigQuery لتحميل البيانات من جدول BigLake مباشرةً إلى جدول Spanner.

إنشاء مثيل وقاعدة بيانات وجدول في Spanner

  1. انتقِل إلى Spanner.
  2. انقر على 6a261f186de0bf4a.png . يمكنك استخدام مثيل حالي إذا كان متاحًا. اضبط متطلبات المثيل حسب الحاجة. تم استخدام ما يلي في هذا الدرس التطبيقي:

الإصدار

للمؤسسات

اسم المثيل

databricks-retl

إعدادات المنطقة

المنطقة التي تختارها

وحدة الحوسبة

وحدات المعالجة (PU)

التخصيص اليدوي

100

  1. بعد الإنشاء، انتقِل إلى صفحة مثيل Spanner، وانقر على 99e50c2015c697f4.png. يمكنك استخدام قاعدة بيانات حالية إذا كانت متاحة.
  • في هذا التمرين العملي، سيتم إنشاء قاعدة بيانات باستخدام
  • الاسم:databricks-retl
  • لغة قاعدة البيانات: Google Standard SQL
  1. بعد إنشاء قاعدة البيانات، اختَرها من صفحة "مثيل Spanner" (Spanner Instance) للانتقال إلى صفحة "قاعدة بيانات Spanner" (Spanner Database).
  2. من صفحة "قاعدة بيانات Spanner"، انقر على 1df26c863b1327d5.png.
  3. في صفحة طلب البحث الجديدة، سيتم إنشاء تعريف الجدول الذي سيتم استيراده إلى Spanner. لإجراء ذلك، نفِّذ طلب SQL التالي.
CREATE TABLE regional_sales (
    nation_name STRING(MAX),
    market_segment STRING(MAX),
    order_year INT64,
    order_priority STRING(MAX),
    total_order_count INT64,
    total_revenue NUMERIC,
    unique_customer_count INT64
) PRIMARY KEY (nation_name, market_segment, order_year, order_priority);
  1. بعد تنفيذ أمر SQL، سيصبح جدول Spanner جاهزًا الآن لكي تنقل BigQuery البيانات باستخدام Reverse ETL. يمكن التحقّق من إنشاء الجدول من خلال الاطّلاع عليه في اللوحة اليمنى في قاعدة بيانات Spanner.

baf4caec5c236f4f.png

نقل البيانات من مستودع البيانات إلى Spanner باستخدام EXPORT DATA

هذه هي الخطوة الأخيرة. بعد أن تصبح البيانات المصدر جاهزة في جدول BigLake في BigQuery وإنشاء جدول الوجهة في Spanner، تصبح عملية نقل البيانات الفعلية بسيطة بشكل مدهش. سيتم استخدام طلب بحث واحد بلغة SQL في BigQuery: EXPORT DATA.

تم تصميم طلب البحث هذا خصيصًا لحالات مثل هذه. تصدّر هذه الأداة البيانات بكفاءة من جدول BigQuery (بما في ذلك الجداول الخارجية مثل جدول BigLake) إلى وجهة خارجية. في هذه الحالة، تكون الوجهة هي جدول Spanner. يمكنك الاطّلاع على مزيد من المعلومات حول ميزة التصدير هنا.

يمكنك الاطّلاع على مزيد من المعلومات حول إعداد BigQuery لخدمة Spanner Reverse ETL هنا.

  1. الانتقال إلى BigQuery
  2. افتح علامة تبويب جديدة لمحرّر طلبات البحث.
  3. في صفحة "طلب البحث"، أدخِل عبارة SQL التالية. تذكَّر استبدال رقم تعريف المشروع في **uri** **ومسار الجدول برقم تعريف المشروع الصحيح.**
EXPORT DATA OPTIONS(

uri='https://spanner.googleapis.com/projects/YOUR_PROJECT_ID/instances/databricks-retl/databases/databricks-retl',
  format='CLOUD_SPANNER',
   spanner_options="""{
      "table": "regional_sales",
      "priority": "MEDIUM"
  }"""
) AS

SELECT * FROM `YOUR_PROJECT_ID.databricks_retl.regional_sales`;
  1. بعد اكتمال الأمر، تكون البيانات قد تم تصديرها بنجاح إلى Spanner.

8. التحقّق من البيانات في Spanner

تهانينا! تم إنشاء مسار Reverse ETL كامل وتنفيذه بنجاح، ما أدّى إلى نقل البيانات من مستودع بيانات Databricks إلى قاعدة بيانات Spanner التشغيلية.

الخطوة الأخيرة هي التأكّد من وصول البيانات إلى Spanner على النحو المتوقّع.

  1. انتقِل إلى Spanner.
  2. انتقِل إلى مثيل databricks-retl ثم إلى قاعدة بيانات databricks-retl.
  3. في قائمة الجداول، انقر على الجدول regional_sales.
  4. في قائمة التنقّل اليمنى للجدول، انقر على علامة التبويب البيانات.

710e41c80bdc31c4.png

  1. من المفترض الآن أن يتم تحميل بيانات المبيعات المجمّعة، التي تم الحصول عليها في الأصل من Databricks، وأن تكون جاهزة للاستخدام في جدول Spanner. تتوفّر هذه البيانات الآن في نظام تشغيلي، وهي جاهزة لتشغيل تطبيق مباشر أو عرض لوحة بيانات أو الاستعلام عنها من خلال واجهة برمجة تطبيقات.

f1201d6605b2a527.png

تم بنجاح سدّ الفجوة بين عالمَي البيانات التحليلية والتشغيلية.

9- الإزالة

أزِل جميع الجداول المضافة والبيانات المخزّنة عند الانتهاء من هذه التجربة.

تنظيف جداول Spanner

  1. الانتقال إلى Spanner
  2. انقر على الجهاز الظاهري الذي تم استخدامه في هذا المختبر من القائمة المسماة databricks-retl

aa32380b601fdb87.png

  1. في صفحة الجهاز الافتراضي، انقر على 5fc4696b82a79013.png.
  2. أدخِل databricks-retl في مربّع حوار التأكيد الذي يظهر، ثم انقر على ef9e3709dcad2683.png.

تنظيم GCS

  1. انتقِل إلى GCS
  2. انقر على b0aeb28c98f21942.png من قائمة الجانب الأيمن
  3. اختَر الحزمة ``codelabs_retl_databricks

e4f33fbebb892229.png

  1. بعد اختيار الملف، انقر على الزر 1f0075ce292003ff.png الذي يظهر في البانر العلوي.

384fe0801a23bfe5.png

  1. أدخِل DELETE في مربّع حوار التأكيد الذي يظهر، ثم انقر على ef9e3709dcad2683.png.

تنظيف Databricks

حذف كتالوج/مخطط/جدول

  1. تسجيل الدخول إلى نسخة Databricks
  2. انقروا على 20bae9c2c9097306.png من القائمة الجانبية اليمنى
  3. اختَر fc566eb3fddd7477.png الذي تم إنشاؤه سابقًا من قائمة الكتالوج
  4. في قائمة "المخطط"، اختَر deb927c01e9e76d0.png الذي تم إنشاؤه
  5. اختَر 332d33ee48a5897c.png الذي تم إنشاؤه سابقًا من قائمة الجداول
  6. وسِّع خيارات الجدول من خلال النقر على df6dbe6356f141c6.png واختَر Delete.
  7. انقر على 3951711057fe3048.png في مربّع حوار التأكيد لحذف الجدول.
  8. بعد حذف الجدول، ستتم إعادتك إلى صفحة المخطط.
  9. وسِّع خيارات المخطّط من خلال النقر على df6dbe6356f141c6.png واختَر Delete.
  10. انقر على 3951711057fe3048.png في مربّع حوار التأكيد لحذف المخطط.
  11. بعد حذف المخطط، ستتم إعادتك إلى صفحة الكتالوج.
  12. اتّبِع الخطوات من 4 إلى 11 مرة أخرى لحذف مخطط default إذا كان متوفّرًا.
  13. من صفحة الكتالوج، وسِّع خيارات الكتالوج بالنقر على df6dbe6356f141c6.png واختَر Delete.
  14. انقر على 3951711057fe3048.png في مربّع حوار التأكيد لحذف الفهرس

حذف بيانات اعتماد أو موقع البيانات الخارجية

  1. من شاشة "الفهرس"، انقر على 32d5a94ae444cd8e.png
  2. إذا لم يظهر لك الخيار External Data، قد تجد External Location مُدرَجًا ضمن القائمة المنسدلة Connect بدلاً من ذلك.
  3. انقر على موقع البيانات الخارجية retl-gcs-location الذي تم إنشاؤه سابقًا
  4. من صفحة الموقع الجغرافي الخارجي، وسِّع خيارات الموقع الجغرافي بالنقر على df6dbe6356f141c6.png واختَر Delete.
  5. انقر على 3951711057fe3048.png في مربّع حوار التأكيد لحذف الموقع الجغرافي الخارجي.
  6. انقر على e03562324c0ba85e.png
  7. انقر على retl-gcs-credential الذي تم إنشاؤه سابقًا
  8. من صفحة بيانات الاعتماد، وسِّع خيارات بيانات الاعتماد من خلال النقر على df6dbe6356f141c6.png واختَر Delete.
  9. انقر على 3951711057fe3048.png في مربّع حوار التأكيد لحذف بيانات الاعتماد.

10. تهانينا

تهانينا على إكمال تجربة البرمجة.

المواضيع التي تناولناها

  • كيفية تحميل البيانات إلى Databricks كجداول Iceberg
  • كيفية إنشاء حزمة GCS
  • كيفية تصدير جدول Databricks إلى GCS بتنسيق Iceberg
  • كيفية إنشاء جدول خارجي في BigLake من جدول Iceberg في BigQuery من جدول Iceberg في GCS
  • كيفية إعداد مثيل Spanner
  • كيفية تحميل جداول BigLake الخارجية في BigQuery إلى Spanner