1. مقدمه
در این کد لبه یاد خواهید گرفت که چگونه از Spanner Data Boost برای جستجوی داده های Spanner از BigQuery با استفاده از پرس و جوهای فدرال ETL صفر و بدون تأثیر بر پایگاه داده Spanner استفاده کنید.
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. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 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 بروید و مطمئن شوید که داده ها در آنجا هستند. ابتدا جدول موضوعات را برای مشاهده ستون ها گسترش دهید.
اکنون برای اطمینان از در دسترس بودن داده ها، کوئری زیر را اجرا کنید:
SELECT COUNT(*) FROM topics;
خروجی مورد انتظار:
5. داده ها را از BigQuery بخوانید
اکنون که دادههایی در Spanner دارید، زمان آن رسیده است که از داخل BigQuery به آن دسترسی داشته باشید. برای انجام این کار، یک اتصال خارجی به Spanner در BigQuery راه اندازی می کنید.
با فرض داشتن مجوزهای مناسب، با مراحل زیر یک اتصال خارجی به Spanner ایجاد کنید.
روی دکمه «افزودن» در بالای کنسول BigQuery کلیک کنید و گزینه «اتصال به منابع داده ابدی» را انتخاب کنید.
اکنون می توانید یک پرس و جو برای خواندن داده ها از 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;
خروجی نمونه:
در برگه «اطلاعات شغلی» میتوانید اطلاعات مربوط به کار را مشاهده کنید، مانند مدت زمان اجرای آن و چه مقدار داده پردازش شده است.
در مرحله بعد، اتصال Data Boost را به Spanner اضافه میکنید و نتایج را با هم مقایسه میکنید.
6. خواندن داده ها با استفاده از Data Boost
برای استفاده از Spanner Data Boost، باید یک اتصال خارجی جدید از BigQuery به Spanner ایجاد کنید. روی «افزودن» در کنسول BigQuery کلیک کنید و دوباره « Connections from external data sources
» را انتخاب کنید.
جزئیات را با همان URI اتصال به Spanner پر کنید. "شناسه اتصال" را تغییر دهید و کادر "تقویت داده استفاده کنید" را علامت بزنید.
با ایجاد اتصال 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 بروید
در اینجا، می توانید معیارهای CPU را ببینید. پرس و جوهایی که بدون Data Boost اجرا می شوند از CPU برای عملیات "executesql_select_withpartitiontoken" استفاده می کنند. حتی اگر پرس و جو یکسان است، اجرای Data Boost در استفاده از CPU نمونه شما نشان داده نمی شود.
در بسیاری از موارد، عملکرد کوئری تحلیلی هنگام استفاده از Data Boost بهبود می یابد. مجموعه داده در این آموزش کوچک است و هیچ حجم کاری دیگری برای رقابت برای منابع وجود ندارد. بنابراین، این آموزش انتظار ندارد بهبود عملکرد را به نمایش بگذارد.
به راحتی با پرسشها و بارهای کاری بازی کنید و ببینید که Data Boost چگونه کار میکند. وقتی کارتان تمام شد، برای پاکسازی محیط به بخش بعدی بروید.
8. محیط را تمیز کنید
اگر پروژه خود را به طور خاص برای این کد لبه ایجاد کرده اید، می توانید به سادگی پروژه را حذف کنید تا پاک شود. اگر میخواهید پروژه را حفظ کنید و تک تک اجزا را پاکسازی کنید، مراحل زیر را ادامه دهید.
اتصالات BigQuery را حذف کنید
برای حذف هر دو اتصال، روی سه نقطه کنار نام اتصال کلیک کنید. «حذف» را انتخاب کنید، سپس دستورالعملها را برای حذف اتصال دنبال کنید.
سطل Cloud Storage را حذف کنید
gcloud storage rm --recursive gs://$GCS_BUCKET
نمونه Spanner را حذف کنید
برای پاکسازی، کافیست به بخش Cloud Spanner در Cloud Console بروید و نمونه ' codelab-demo
' را که در Codelab ایجاد کردیم را حذف کنید.
9. تبریک می گویم
برای تکمیل کد لبه تبریک می گویم.
آنچه را پوشش داده ایم
- نحوه استقرار یک نمونه Spanner
- نحوه بارگذاری داده ها در Spanner با استفاده از Dataflow
- نحوه دسترسی به داده های Spanner از BigQuery
- نحوه استفاده از Spanner Data Boost برای جلوگیری از تأثیر بر نمونه Spanner خود برای جستجوهای تحلیلی از BigQuery
10. نظرسنجی
خروجی: