شروع کار با Spanner Data Boost و BigQuery

1. مقدمه

در این کد لبه یاد خواهید گرفت که چگونه از Spanner Data Boost برای جستجوی داده های Spanner از BigQuery با استفاده از پرس و جوهای فدرال ETL صفر و بدون تأثیر بر پایگاه داده Spanner استفاده کنید.

f1de68f762a86cc7.png

Spanner Data Boost یک سرویس کاملاً مدیریت شده و بدون سرور است که منابع محاسباتی مستقلی را برای بارهای کاری پشتیبانی شده Spanner فراهم می کند. Data Boost به شما امکان می دهد پرس و جوهای تحلیلی و صادرات داده را با تأثیر تقریباً صفر بر بارهای کاری موجود در نمونه ارائه شده Spanner با استفاده از یک مدل استفاده درخواستی بدون سرور اجرا کنید.

هنگامی که با اتصالات خارجی BigQuery جفت می شود، Data Boost به شما امکان می دهد به راحتی داده ها را از Spanner در پلت فرم تجزیه و تحلیل داده خود بدون جابجایی پیچیده داده ETL جستجو کنید.

پیش نیازها

  • درک اولیه از Google Cloud، کنسول
  • مهارت های اولیه در رابط خط فرمان و پوسته گوگل

چیزی که یاد خواهید گرفت

  • نحوه استقرار یک نمونه Spanner
  • نحوه بارگذاری داده ها برای ایجاد پایگاه داده Spanner
  • نحوه دسترسی به داده های Spanner از BigQuery بدون Data Boost
  • نحوه دسترسی به داده های Spanner از BigQuery با Data Boost

آنچه شما نیاز دارید

  • یک حساب Google Cloud و پروژه Google Cloud
  • یک مرورگر وب مانند کروم

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

3. یک نمونه و پایگاه داده Spanner ایجاد کنید

Spanner API را فعال کنید

در داخل Cloud Shell، مطمئن شوید که ID پروژه شما تنظیم شده است:

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 خود را برای Codelab راه اندازی کردیم. برای انجام این کار، 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. داده ها را بارگذاری کنید

قبل از اینکه بتوانید از Data Boost استفاده کنید، باید مقداری داده در پایگاه داده داشته باشید. برای انجام این کار، یک سطل Cloud Storage ایجاد می‌کنید، یک import avro را در سطل آپلود می‌کنید و یک کار واردات Dataflow را برای بارگذاری داده‌های Avro در Spanner شروع می‌کنید.

API ها را فعال کنید

برای انجام این کار، اگر مورد قبلی بسته بود، یک Cloud Shell را باز کنید.

مطمئن شوید که API های 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.

مرحله وارد کردن فایل ها در فضای ذخیره سازی ابری

اکنون سطلی برای ذخیره فایل‌های 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 بروید و مطمئن شوید که داده ها در آنجا هستند. ابتدا جدول موضوعات را برای مشاهده ستون ها گسترش دهید.

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

در مرحله بعد، اتصال Data Boost را به Spanner اضافه می‌کنید و نتایج را با هم مقایسه می‌کنید.

6. خواندن داده ها با استفاده از Data Boost

برای استفاده از Spanner Data Boost، باید یک اتصال خارجی جدید از BigQuery به Spanner ایجاد کنید. روی «افزودن» در کنسول BigQuery کلیک کنید و دوباره « Connections from external data sources » را انتخاب کنید.

جزئیات را با همان URI اتصال به Spanner پر کنید. "شناسه اتصال" را تغییر دهید و کادر "تقویت داده استفاده کنید" را علامت بزنید.

8e2205255b56a279.png

با ایجاد اتصال Data Boost، می توانید همان پرس و جو را اما با نام اتصال جدید اجرا کنید. دوباره پروژه_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. درک Data Boost

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;

سپس چند دقیقه دیگر منتظر بمانید و پرس و جو را اجرا کنید تا چند بار دیگر از Data Boost استفاده کنید. به یاد داشته باشید که ${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 در Cloud Console برگردید و به System Insights بروید

c1dc67fcc7a2a71.png

در اینجا، می توانید معیارهای CPU را ببینید. پرس و جوهایی که بدون Data Boost اجرا می شوند از CPU برای عملیات "executesql_select_withpartitiontoken" استفاده می کنند. حتی اگر پرس و جو یکسان است، اجرای Data Boost در استفاده از CPU نمونه شما نشان داده نمی شود.

a86a7508b6738904.png

در بسیاری از موارد، عملکرد کوئری تحلیلی هنگام استفاده از Data Boost بهبود می یابد. مجموعه داده در این آموزش کوچک است و هیچ حجم کاری دیگری برای رقابت برای منابع وجود ندارد. بنابراین، این آموزش انتظار ندارد بهبود عملکرد را به نمایش بگذارد.

به راحتی با پرسش‌ها و بارهای کاری بازی کنید و ببینید که Data Boost چگونه کار می‌کند. وقتی کارتان تمام شد، برای پاکسازی محیط به بخش بعدی بروید.

8. محیط را تمیز کنید

اگر پروژه خود را به طور خاص برای این کد لبه ایجاد کرده اید، می توانید به سادگی پروژه را حذف کنید تا پاک شود. اگر می‌خواهید پروژه را حفظ کنید و تک تک اجزا را پاکسازی کنید، مراحل زیر را ادامه دهید.

اتصالات BigQuery را حذف کنید

برای حذف هر دو اتصال، روی سه نقطه کنار نام اتصال کلیک کنید. «حذف» را انتخاب کنید، سپس دستورالعمل‌ها را برای حذف اتصال دنبال کنید.

c9348832bcf202a9.png

سطل Cloud Storage را حذف کنید

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

نمونه Spanner را حذف کنید

برای پاکسازی، کافیست به بخش Cloud Spanner در Cloud Console بروید و نمونه ' codelab-demo ' را که در Codelab ایجاد کردیم را حذف کنید.

ab7c83ebdab74c04.png

9. تبریک می گویم

برای تکمیل کد لبه تبریک می گویم.

آنچه را پوشش داده ایم

  • نحوه استقرار یک نمونه Spanner
  • نحوه بارگذاری داده ها در Spanner با استفاده از Dataflow
  • نحوه دسترسی به داده های Spanner از BigQuery
  • نحوه استفاده از Spanner Data Boost برای جلوگیری از تأثیر بر نمونه Spanner خود برای جستجوهای تحلیلی از BigQuery

10. نظرسنجی

خروجی:

چگونه از این آموزش استفاده خواهید کرد؟

فقط آن را بخوانید آن را بخوانید و تمرینات را کامل کنید