بدء استخدام Spanner Data Boost وBigQuery

لمحة عن هذا الدرس التطبيقي حول الترميز
schedule67 دقيقة
subjectتاريخ التعديل الأخير: 9 مايو 2024
account_circleتأليف: Derek Downey

في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام Spanner Data Boost لطلب بيانات Spanner من BigQuery باستخدام استعلامات Spanner الموحّدة دون التأثير في قاعدة بيانات Spanner.

f1de68f762a86cc7.png

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

عند الإقران مع اتصالات BigQuery الخارجية، تسمح لك ميزة "تعزيز البيانات" بالاستعلام عن البيانات بسهولة من Spanner في منصة تحليلات البيانات الخاصة بك بدون حركة بيانات ETL معقدة.

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

  • الإلمام بأساسيات Google Cloud ووحدة التحكم
  • المهارات الأساسية في واجهة سطر الأوامر وGoogle Shell

ما ستتعرَّف عليه

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

المتطلبات

  • حساب على Google Cloud ومشروع على Google Cloud
  • متصفّح ويب، مثل Chrome

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

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه PROJECT_ID). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع.
  • لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع، الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

55efc1aaa7a4d3ad.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا الدرس التطبيقي حول الترميز من خلال متصفّح. لا تحتاج إلى تثبيت أي تطبيقات.

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

تفعيل واجهة برمجة تطبيقات Spanner

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك:

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)

اضبط منطقتك التلقائية على us-central1. يمكنك تغيير هذه الإعدادات إلى منطقة مختلفة تتوافق مع الإعدادات الإقليمية لـ Spanner.

gcloud config set compute/region us-central1

تفعيل واجهة Spanner API:

gcloud services enable spanner.googleapis.com

إنشاء مثيل Spanner

في هذه الخطوة، نُعدّ مثيل Spanner للدرس التطبيقي حول الترميز. ولإجراء ذلك، افتح Cloud Shell وشغِّل الأمر التالي:

export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1

إخراج الأمر:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.  

إنشاء قاعدة البيانات

بمجرد تشغيل المثيل الخاص بك، يمكنك إنشاء قاعدة البيانات. يسمح Spanner بقواعد بيانات متعددة على مثيل واحد.

قاعدة البيانات هي المكان الذي يمكنك فيه تعريف المخطط. يمكنك أيضًا التحكم في الأشخاص الذين يمكنهم الوصول إلى قاعدة البيانات، وإعداد تشفير مخصص، وتهيئة المحسِّن، وتعيين فترة الاحتفاظ.

لإنشاء قاعدة البيانات، يُرجى استخدام أداة سطر الأوامر gcloud مرة أخرى:

export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

إخراج الأمر:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

4. تحميل البيانات

قبل أن تتمكن من استخدام "تعزيز البيانات"، تحتاج إلى بعض البيانات في قاعدة البيانات. لإجراء ذلك، عليك إنشاء حزمة Cloud Storage وتحميل عملية استيراد avro إلى الحزمة وبدء مهمة استيراد Dataflow لتحميل بيانات Avro إلى Spanner.

تفعيل واجهات برمجة التطبيقات

ولإجراء ذلك، افتح طلب Cloud Shell إذا تم إغلاق الطلب السابق.

احرص على تفعيل واجهات برمجة تطبيقات Compute وCloud Storage وDataflow.

gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com

الناتج المتوقّع لوحدة التحكّم:

$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.

استيراد الملفات على مراحل على Cloud Storage

والآن، أنشئ الحزمة لتخزين ملفات avro:

export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET

الناتج المتوقّع لوحدة التحكّم:

$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...

بعد ذلك، قم بتنزيل ملف tar من github واستخرجه.

wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz 

الناتج المتوقّع لوحدة التحكّم:

$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz 
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001

ويمكنك الآن تحميل الملفات إلى الحزمة التي أنشأتها.

gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive

الناتج المتوقّع لوحدة التحكّم:

$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json           
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
  Completed files 13/13 | 54.6MiB/54.6MiB                                                                                               

Average throughput: 46.4MiB/s

استيراد البيانات

باستخدام الملفات المتوفّرة في Cloud Storage، يمكنك بدء مهمة استيراد تدفق البيانات لتحميل البيانات إلى Spanner.

gcloud dataflow jobs run import_chatdb \
    --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
    --region us-central1 \
    --staging-location gs://$GCS_BUCKET/tmp \
    --parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db

الناتج المتوقّع لوحدة التحكّم:

$ gcloud dataflow jobs run import_chatdb \
>     --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
>     --region us-central1 \
>     --staging-location gs://$GCS_BUCKET/tmp \
>     --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH

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

gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1

الناتج المتوقّع لوحدة التحكّم:

$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID                                   NAME           TYPE   CREATION_TIME        STATE    REGION
*snip*                                  import_chatdb  Batch  2024-04-*snip*  Done  us-central1

التحقق من البيانات في Spanner

يمكنك الآن الانتقال إلى Spanner Studio والتأكّد من أنّ البيانات متوفّرة. أولاً، عليك توسيع جدول المواضيع لعرض الأعمدة.

cd1cf38efd2b974a.png

الآن، قم بتشغيل الاستعلام التالي للتأكد من توفر البيانات:

SELECT COUNT(*) FROM topics;

المخرجات المتوقعة:

89e5d92fbe71c022.png

5- قراءة البيانات من BigQuery

الآن بعد أن أصبحت لديك بيانات في Spanner، حان وقت الوصول إليها من داخل BigQuery. لإجراء ذلك، عليك إعداد اتصال خارجي بخدمة Spanner في BigQuery.

لنفترض أن لديك الأذونات الصحيحة، يمكنك إنشاء اتصال خارجي بـ Spanner من خلال الخطوات التالية.

انقر على "إضافة" في أعلى وحدة تحكُّم BigQuery، ثم اختَر الخيار "الاتصالات بمصادر البيانات الأبدية" الخيار.

580a0d237f11a9c5.png

75968de398fabf7e.png

يمكنك الآن تنفيذ استعلام لقراءة البيانات من Spanner. قم بتشغيل هذا الاستعلام في وحدة تحكم BigQuery، مع التأكد من استبدال القيمة بـ ${PROJECT_ID}:

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

مثال على الإخراج:

e47265487c3e39bd.png

يمكنك الاطّلاع في صفحة "معلومات الوظيفة" على معلومات عن الوظيفة، مثل المدة التي استغرقها تشغيلها ومقدار البيانات التي تمت معالجتها. .

9ae40b0aa8c4891.png

بعد ذلك، ستضيف اتصال "تحسين البيانات" إلى Spanner، وتقارن النتائج.

6- قراءة البيانات باستخدام ميزة "تحسين البيانات"

لاستخدام ميزة Spanner Data Boost، عليك إنشاء اتصال خارجي جديد من BigQuery إلى Spanner. النقر على "إضافة" في وحدة تحكّم BigQuery، واختَر "Connections from external data sources". مرة أخرى.

املأ التفاصيل باستخدام عنوان URI للاتصال نفسه بـ Spanner. تغيير "معرّف الاتصال" والتحقق من خيار "استخدام تعزيز البيانات" .

8e2205255b56a279.png

مع إنشاء اتصال "تعزيز البيانات"، يمكنك تشغيل الاستعلام نفسه ولكن باسم الاتصال الجديد. مرة أخرى، استبدل project_id في الاستعلام.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

يجب أن تحصل على مجموعة النتائج نفسها كما في السابق. هل تغيَّر التوقيت؟

7. فهم تعزيز البيانات

تسمح لك ميزة Spanner Data Boost باستخدام موارد غير مرتبطة بموارد مثيل Spanner. يقلل هذا في المقام الأول من تأثير أعباء العمل التحليلية في أعباء العمل التشغيلية.

يمكنك أن ترى هذا إذا قمت بتشغيل الاستعلام لعدم استخدام Data Boost بضع مرات على مدار دقيقتين أو ثلاث دقائق. تذكر استبدال ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

بعد ذلك، انتظر بضع دقائق أخرى، وقم بتشغيل الاستعلام لاستخدام "تعزيز البيانات" عدة مرات أخرى. تذكر استبدال ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

الآن، يمكنك الرجوع إلى Spanner studio في Cloud Console، والانتقال إلى System Insights

c1dc67fcc7a2a71.png

ومن هنا، يمكنك الاطلاع على مقاييس وحدة المعالجة المركزية (CPU). الاستعلامات التي يتم تشغيلها بدون ميزة "تعزيز البيانات" تستخدم وحدة المعالجة المركزية (CPU) من أجل "executesql_select_withpartitiontoken" العمليات التجارية. على الرغم من أن الاستعلام هو نفسه، لا يظهر تنفيذ "تعزيز البيانات" عند استخدام المثيل لوحدة المعالجة المركزية.

a86a7508b6738904.png

في كثير من الحالات، سيتحسّن أداء الاستعلام التحليلي عند استخدام "تعزيز البيانات". مجموعة البيانات في هذا البرنامج التعليمي صغيرة ولا توجد أعباء عمل أخرى تتنافس للحصول على الموارد. لذلك، لا يتوقع هذا البرنامج التعليمي عرض تحسينات الأداء.

لا تتردد في تجربة طلبات البحث وأعباء العمل ومعرفة آلية عمل ميزة "تعزيز البيانات". عند الانتهاء، انتقل إلى القسم التالي لتنظيف البيئة.

8. تنظيف البيئة

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

إزالة عمليات ربط BigQuery

لإزالة كلا الاتصالين، انقر على النقاط الثلاث بجانب اسم الاتصال. انقر على "حذف"، ثم اتّبِع التعليمات لإلغاء الربط.

c9348832bcf202a9.png

حذف حزمة Cloud Storage

gcloud storage rm --recursive gs://$GCS_BUCKET

حذف مثيل Spanner

لمحو مساحة التخزين، ما عليك سوى الانتقال إلى قسم Cloud Spanner في Cloud Console وحذف "codelab-demo". مثال أنشأناه في الدرس التطبيقي حول الترميز.

ab7c83ebdab74c04.png

9. تهانينا

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

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

  • كيفية نشر مثيل Spanner
  • كيفية تحميل البيانات إلى Spanner باستخدام Dataflow
  • كيفية الوصول إلى بيانات Spanner من BigQuery
  • كيفية استخدام ميزة Spanner Data Boost لتجنّب التأثير على مثيل Spanner لطلبات البحث التحليلية من BigQuery

10. استطلاع

إخراج:

كيف ستستخدم هذا البرنامج التعليمي؟