۱. مقدمه
به آخرین مرحله از تحقیقات محموله گمشده خوش آمدید! پس از ردیابی کانتینر دزدیده شده حاوی مجسمههای اندروید از لندن تا سیدنی، ردپاها از بین رفته است. با غیرفعال کردن فرستنده آن، خزانه امنیتی هوشمند کانتینر به طور خودکار قفل اضطراری را فعال کرده است.
برای بازیابی محمولهی ارزشمند، قبل از اینکه برای همیشه قفل شود، ماموریت شما این است که محل نهایی کانتینر را پیدا کنید و رمز عبور دستی را برای باز کردن فیزیکی گاوصندوق بازیابی کنید .

برای پیدا کردن کانتینر گمشده و ایمنسازی محموله، شما یک نمودار ویژگی BigQuery برای ردیابی مسیر حمل و نقل ایجاد خواهید کرد. سپس با استفاده از Conversational Analytics این شبکه را به زبان طبیعی جستجو خواهید کرد و در نهایت با انجام یک جستجوی معنایی روی فرادادههای دادههای خود با Knowledge Catalog ، کدهای جایگزین را پیدا خواهید کرد.
💡 آزمایشگاه ۱ یا آزمایشگاه ۲ را از دست دادهاید ؟ نگران نباشید! این آزمایشگاه کاملاً مستقل است. مراحل راهاندازی محیط، هر آنچه را که نیاز دارید فراهم میکند تا بتوانید مستقیماً وارد آن شوید و آن را بهطور مستقل تکمیل کنید.
کاری که انجام خواهید داد
- مخزن را کلون کنید و اسکریپت راهاندازی را در Google Cloud Shell اجرا کنید.
- یک نمودار املاک در BigQuery بسازید که دادههای شرکت، کشتی و مانیفست را به هم پیوند میدهد.
- از تحلیل مکالمهای برای جستجوی نمودار به زبان طبیعی استفاده کنید و مسیر محموله را برای شناسایی اپراتور مسئول ردیابی کنید.
- با استفاده از Knowledge Catalog، جدولی که کدهای لغو نهایی را در خود جای داده است، پیدا کنید.
- از کنترل دسترسی سطح ستون BigQuery برای آشکارسازی و نمایش کد نهایی استفاده کنید .
آنچه نیاز دارید
- یک مرورگر وب مانند کروم
- یک پروژه گوگل کلود با قابلیت پرداخت صورتحساب
- دسترسی به پوسته ابری گوگل
این آزمایشگاه کد برای متخصصان داده در تمام سطوح طراحی شده است.
منابع ایجاد شده در این آزمایشگاه کد باید کمتر از ۵ دلار هزینه داشته باشند.
مدت زمان تخمینی: تکمیل این آزمایشگاه کد تقریباً ۴۵ دقیقه طول خواهد کشید.
۲. قبل از شروع
ایجاد یک پروژه ابری گوگل
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید .
- مطمئن شوید که پرداخت برای پروژه ابری شما فعال است.
شروع پوسته ابری
شما از Google Cloud Shell برای دانلود کد، اجرای اسکریپتهای راهاندازی و استقرار برنامه استفاده خواهید کرد.
- در یک برگه مرورگر جدید ، Cloud Shell را باز کنید :

- پس از اتصال، شناسه پروژه خود را تنظیم کرده و محیط خود را تأیید کنید:
gcloud config set project <<YOUR_PROJECT_ID>>
export PROJECT_ID=$(gcloud config get-value project)
export REGION=us-central1
شما باید پیامی مشابه زیر را ببینید:
Your active configuration is: [cloudshell-####] Updated property [core/project]
فعال کردن API های مورد نیاز
برای فعال کردن API های مورد نیاز، دستور زیر را در Cloud Shell اجرا کنید:
gcloud services enable \
bigquery.googleapis.com \
aiplatform.googleapis.com \
datacatalog.googleapis.com \
geminidataanalytics.googleapis.com \
cloudaicompanion.googleapis.com
در صورت اجرای موفقیتآمیز، باید پیامی مشابه زیر را مشاهده کنید:
Operation "operations/..." finished successfully.
۳. محیط خود را آماده کنید
در آزمایشهای قبلی این مجموعه، ما زمینه را برای تحقیقات خود فراهم کردیم.
۱. مخزن را کلون کنید
مخزن codelab را در محیط Cloud Shell خود کلون کنید:
cd ~/
git clone --filter=blob:none --no-checkout https://github.com/GoogleCloudPlatform/devrel-demos.git
cd ~/devrel-demos
git sparse-checkout init --cone
git sparse-checkout set codelabs/bigquery-graph-analytics
git checkout main
cd codelabs/bigquery-graph-analytics/
۲. تنظیم جداول پایه و برچسبهای سیاست
اسکریپت راهاندازی را اجرا کنید تا مجموعه دادههای BigQuery شما پر شود و برچسبهای امنیتی سطح ستون را برای محدود کردن دادههای حساس اعمال کنید:
bash setup_lab.sh
تأیید کنید که خروجی در ترمینال شما مقداردهی اولیه موفقیتآمیز را نشان میدهد:
🚀 Provisioning foundational tables and deploying Policy Tag security bindings... 🎯 Active Project: your-project-id ... 🎉 Success! Foundational tables initialized and Column-Level Policy Tags fully mapped out of the box!
با راهاندازی موفقیتآمیز محیط و جمعآوری دادههای لجستیک در BigQuery، اکنون میتوانید یک نمودار ویژگی (Property Graph) برای اتصال جداول خود و ردیابی مسیر محموله بسازید!
۴. دادههای خود را با استفاده از BigQuery Graph متصل کنید
برای تجزیه و تحلیل دادههای زنجیره تأمین، نحوه ارتباط شرکتها، کشتیها و بارنامهها را با یکدیگر تعریف خواهیم کرد. ایجاد یک نمودار دارایی به ما امکان میدهد تا به راحتی این ارتباطات را جستجو کنیم.
۱. چگونه نمودارهای ویژگی روابط را مدلسازی میکنند

یک نمودار ویژگی BigQuery شبکهها را با استفاده از موارد زیر مدلسازی میکند:
- گرهها : موجودیتهای موجود در شبکه. در این آزمایش، گرهها نشاندهنده شرکتها (که مستقیماً اطلاعات تماس را ذخیره میکنند)، مانیفستها و مخازن هستند .
- لبهها : روابطی که گرهها را به هم متصل میکنند. برای مثال:
- یک لبه، یک مانیفست را به یک ظرف (Vessel) متصل میکند (از طریق روابط موجود در جدول
manifests). - یک یال، یک کشتی (Vessel) را به یک شرکت (Company) متصل میکند (از طریق روابط موجود در جدول
vessels).
- یک لبه، یک مانیفست را به یک ظرف (Vessel) متصل میکند (از طریق روابط موجود در جدول
- ویژگیها : فرادادههایی که روی گرهها یا لبهها ذخیره میشوند. برای مثال، یک گره Company دارای ستونهایی مانند
company_nameوphone_numberاست و یک گره Manifest دارایseal_integrity_statusو مختصات (last_ping_lat,last_ping_long) است. - برچسبها : نامهای برچسبی که به گرهها (مثلاً
Company،Vessel،Manifest) و لبهها (مثلاًCARRIED_BY،OPERATED_BY) اختصاص داده شدهاند تا ابزارهای پرسوجو بتوانند انواع گره و رابطه را تشخیص دهند.
۲. نمودار ویژگی را در BigQuery مستقر کنید
فایل setup_graph.sql شامل SQL DDL برای تعریف و ایجاد گراف ویژگی است، اما در حال حاضر ناقص است. شما باید قبل از کامپایل و استقرار این فایل طرحواره، برچسبهای لبه (روابط) را در آن تعریف کنید:
- ویرایشگر Cloud Shell را باز کنید.

- فایل
setup_graph.sqlرا در ویرایشگر Cloud Shell باز کنید.

- محل قرارگیری برچسبهای لبه را پیدا کنید:
- خط ۲۲ : عبارت
`EDGE_TABLE_PLACEHOLDER`را با یک تگ معنادار که نشان دهنده ارتباط مانیفستها با کشتیها باشد (مثلاًCARRIED_BY) جایگزین کنید. - خط ۲۷ : عبارت
`EDGE_TABLE_PLACEHOLDER`را با برچسبی که نشان دهنده ارتباط کشتیها با شرکتها است (مثلاًOPERATED_BY) جایگزین کنید.
- خط ۲۲ : عبارت
- فایل را ذخیره کنید.
اکنون، به ترمینال Cloud Shell برگردید و نمودار ویژگی بهروز شده را با استفاده از اسکریپت تکمیلشده مستقر کنید:
bq query --use_legacy_sql=false < setup_graph.sql
باید خروجی را ببینید که نشان میدهد کار کامل شده است:
Waiting on bqjob_r... ... (0s) Current status: DONE
میتوانید جزئیات نمودار ویژگیها را در کنسول BigQuery مشاهده کنید:
مجموعه داده lost_cargo_dataset را پیدا کنید و نمودارها را انتخاب کنید:

حالا که نمودار ویژگیها با موفقیت کامپایل شد، بیایید برای پرسوجو و مصورسازی ارتباطات، به BigQuery Studio برویم!
۵. نمودار خود را جستجو کنید
شما میتوانید با استفاده از زبان بومی جستجوی گراف (GQL) مستقیماً در داخل BigQuery Studio، نمودار را به صورت بصری جستجو و کاوش کنید.
۱. کانتینر -> کشتی -> زنجیره شرکت را جستجو کنید
بیایید با یافتن اینکه چه کسی کشتیهای حمل بار را اداره میکند، پرسوجوهای GQL را بررسی کنیم. یافتن اپراتور مستلزم پیمایش سه گره موجودیت جداگانه در شبکه لجستیک ما است:

- از گره
Manifestکانتینر شروع کنید. - لبه رابطه
CARRIED_BYرا دنبال کنید تاVesselحامل را پیدا کنید. - لبه رابطه
OPERATED_BYرا از آن کشتی تاCompanyمسئول دنبال کنید و شناسه آن را بازیابی کنید.
ابتدا، بیایید یک کوئری برای تجسم کل شبکه (بدون هیچ فیلتری) اجرا کنیم تا نمودار کامل را ببینیم.
- یک تب جدید در ویرایشگر SQL بیگکوئری استودیو باز کنید، کوئری GQL زیر را جایگذاری کنید و روی Run کلیک کنید:
SELECT * FROM GRAPH_TABLE( `lost_cargo_dataset.logistics_network` MATCH p = (m:Manifest)-[:CARRIED_BY]->(v:Vessel)-[:OPERATED_BY]->(comp:Company) RETURN TO_JSON(p) AS path ); - وقتی جستجو کامل شد، در قسمت نتایج جستجو در پایین، روی تب Graph (که در کنار تب Results table قرار دارد) کلیک کنید.

- BigQuery نتایج را به صورت یک نمودار بصری تعاملی ارائه میدهد! برای دیدن شبکه کامل کانتینرها، کشتیها و اپراتورهای متصل، بزرگنمایی کنید.
آناتومی یک پرسوجوی GQL
بیایید کوئری GQL که اجرا کردیم را تجزیه و تحلیل کنیم:
-
GRAPH_TABLE: به BigQuery دستور میدهد تا یک کوئری گراف ویژگی را در گرافlogistics_networkاجرا کند. -
MATCH: الگوی پیمایش چندگامی را اعلام میکند. ما از یکManifest(m) شروع میکنیم، رابطه لبهای:CARRIED_BYرا که بهVessel(v) اشاره دارد، مطابقت میدهیم، سپس رابطه لبهای:OPERATED_BYکه بهCompany(comp) اشاره دارد، مطابقت میدهیم. - GQL منطق اتصال پیچیده را با فلشهای رابطهای ASCII-art
()->[]->()که برای انسان قابل خواندن هستند، جایگزین میکند و نوشتن و بهینهسازی کوئریهای چندگامی را بسیار ساده میسازد. -
RETURN: ویژگیها یا مسیر JSON را از عناصر منطبق برمیگرداند.
۲. نتایج جستجوی GQL را فیلتر کنید
حالا، بیایید کوئری را فیلتر کنیم تا فقط مسیر کانتینر آلودهشدهی هدفمان MV-CAPYBARA-003 را بررسی کنیم.
- عبارت زیر را در ویرایشگر SQL وارد کنید و روی Run کلیک کنید:
SELECT * FROM GRAPH_TABLE( `lost_cargo_dataset.logistics_network` MATCH p = (m:Manifest {shipment_id: 'MV-CAPYBARA-003'})-[:CARRIED_BY]->(v:Vessel)-[:OPERATED_BY]->(comp:Company) RETURN TO_JSON(p) AS path ); - روی برگه نمودار در زیر نتایج کلیک کنید.

- اکنون نمایشگر فقط مسیر پیمایش فعال برای
MV-CAPYBARA-003را نمایش میدهد. برای دیدن گرهها و اتصالات، بزرگنمایی کنید:- روی گره
Companyدوبار کلیک کنید تا پنل Properties باز شود. در قسمت Properties ، اپراتورcompany_idبا103(Davy Jones Shipping) مشاهده خواهید کرد. این شناسه شرکت را یادداشت کنید - بعداً برای بازیابی کد عبور مجوز از رجیستری امنیتی به آن نیاز خواهید داشت! - برای تأیید اینکه گره
VesselهمانFlying Dutchmanاست، روی آن دوبار کلیک کنید.
- روی گره
۶. با استفاده از تحلیل مکالمهای با نمودار خود چت کنید
حالا که نمودار خود را به صورت دستی برای یافتن شناسه شرکت جستجو کردهاید، بیایید از Conversational Analytics برای چت مستقیم با نمودار خود و مشخص کردن مسیر کانتینرمان استفاده کنیم.
۱. یک جلسه تحلیل مکالمهای را شروع کنید
- در کنسول گوگل کلود، به کنسول بیگکوئری بروید و پنل منابع را گسترش دهید تا مجموعه داده خود (
lost_cargo_dataset) را پیدا کنید. - روی منبع نمودار دارایی خود کلیک کنید:
logistics_network. - در نوار ابزار پنل جزئیات در بالا، روی دکمه چت کلیک کنید. این یک جلسه تحلیل مکالمهای را باز میکند که از قبل با محتوای نمودار شما بارگذاری شده است.

۲. نزدیکترین پورت اتصال به کانتینر ربوده شده را مشخص کنید
یک هواپیمای گشت دریایی به تازگی کشتیای را مشاهده کرده است که با مشخصات کشتی باری ما مطابقت دارد و در مختصات POINT(-122.48 37.55) در حال حرکت خارج از شبکه (با فرستنده غیرفعال) است. برای رهگیری محموله، باید نزدیکترین بندر پهلوگیری را که سندیکای سایه Davy Jones Shipping در آن فعالیت میکند، پیدا کنیم.
به جای جستجوی دستی تمام پورتهای جهانی، ما از شبکه گراف خود پرس و جو خواهیم کرد تا پورتهای متصل به ناوگان فعال سندیکا را استخراج کرده و اندازهگیری کنیم که کدام یک از نظر فیزیکی به محل مشاهده نزدیکتر است!
- در کادر گفتگوی Conversational Analytics، عبارت زیر را وارد کنید:
Find all ports associated with Davy Jones Shipping vessels. Which port is closest to coordinate POINT(-122.48 37.55), show the distance in km, and display it on a map.

- به پاسخ با دقت نگاه کنید. عامل نمودار را پیمایش میکند و نزدیکترین مرکز اتصال و فاصله آن را برمیگرداند:
- بندر پهلوگیری :
Mountain View Terminal - مسافت :
39.42 kilometers
- بندر پهلوگیری :
- از آنجا که Conversational Analytics توسط Gemini با ادغام بومی اطلاعات مکانی (GIS) پشتیبانی میشود، میتواند نقاط مختصات جغرافیایی را تفسیر کند و از دانش جهانی خود برای تأیید موقعیت مکانی استفاده کند: "این کشتی تقریباً 39.42 کیلومتر از ترمینال مانتین ویو، کالیفرنیا فاصله دارد، که نشان میدهد برای پهلوگیری به آنجا میرود."
این تایید میکنه که محموله ما مستقیماً به سمت مانتین ویو در حرکته!
زیربنا: زبان پرسوجوی گراف (GQL) و GIS مکانی
در پشت صحنه، عامل Conversational Analytics به صورت پویا یک پرسوجو را کامپایل و اجرا کرد که تطبیق مسیر گراف را با محاسبات فاصله مکانی ترکیب میکند. این کار با استفاده از یک عبارت GQL COLUMNS بومی انجام میشود که فاصله ژئودزیک را به صورت بومی درون تطبیق پیمایش گراف محاسبه میکند:
SELECT port_id, port_name, country, latitude, longitude, distance_km
FROM GRAPH_TABLE(
`lost_cargo_dataset.logistics_network`
MATCH (c:Company)<-[]-(v:Vessel)-[]->(p:Port)
WHERE LOWER(c.company_name) = 'davy jones shipping'
COLUMNS (
p.port_id,
p.port_name,
p.country,
p.latitude,
p.longitude,
ROUND(ST_DISTANCE(ST_GEOGPOINT(p.longitude, p.latitude), ST_GEOGPOINT(-122.48, 37.55)) / 1000, 2) AS distance_km
)
)
ORDER BY distance_km ASC;
با ترکیب توابع بومی مکانی (GIS) ( ST_DISTANCE ، ST_GEOGPOINT ) با تطابق نمودار ویژگی GQL ، BigQuery به صورت پویا ردپای عملیاتی سندیکا را حل میکند و نزدیکی فیزیکی دنیای واقعی را در یک پرسوجو محاسبه میکند!
۷. دادههای گمشده خود را با کاتالوگ دانش پیدا کنید
نمودار ویژگیها روابط را نشان میدهد، اما شامل جدولی که کدهای لغو واقعی در آن ذخیره میشوند، نیست.
در یک محیط سازمانی واقعی با صدها مجموعه داده و جدول، یافتن این اطلاعات میتواند دشوار باشد. ما از کاتالوگ دانش برای انجام جستجوی معنایی و یافتن جدول صحیح استفاده خواهیم کرد.
۱. جستجوی معنایی در کاتالوگ دانش
- در کنسول گوگل کلود ، عبارت «Knowledge Catalog ➔ Search» را جستجو کرده و به آن بروید.
- در ستون فیلتر جستجو در زیر بخش «سیستمها» ، گزینهی «BigQuery» را تیک بزنید تا نتایج محدودتر شوند.
- در کادر جستجو، عبارت زیر را وارد کنید:
container override codes

- روی منبع جدول
maritime_security_registryکه در نتایج جستجو ظاهر میشود کلیک کنید:
با بررسی طرح فراداده، خواهید دید که جدول شامل ستونهایی برای دادههای امنیتی کانتینر است - مانند شرکت هماهنگکننده co_id ، توکن متولی cust_tok و از همه مهمتر، ستون کد عبور لغو کانتینر امن: clc_ovr_cd .
ما با موفقیت هم میز و هم ستون امن مورد نیاز برای بازیابی محمولهمان را پیدا کردیم!
🔓 مدیریت در دنیای واقعی : در یک محیط سازمانی عملیاتی، تیمهای امنیتی و مدیریتی از موارد زیر نیز بهره میبرند:
- قالبهای جنبهها و برچسبها : برای پیوست کردن فرادادههای تجاری (مانند مالک داده ، دوره نگهداری یا طبقهبندی PII ) به طرحوارههای جدول.
- تبار دادهها : برای تولید خودکار فلوچارتهای بصری که نشان میدهند چگونه جداولی مانند
maritime_security_registryتوسط سیستمهای پاییندستی مورد پرسش و استفاده قرار میگیرند.
۲. بررسی امنیت ستونها در BigQuery
- به کنسول BigQuery برگردید.
- در برگه Explorer ، مجموعه
lost_cargo_datasetرا انتخاب کرده و روی جدولmaritime_security_registryکلیک کنید. - روی برگه طرحواره کلیک کنید.

- توجه داشته باشید که ستون
clc_ovr_cdتوسط یک برچسب سیاست با نامMaskShippingDetails(که در ستون برچسبهای سیاست ذکر شده است) ایمن شده است. - یک تب جدید SQL Editor در BigQuery باز کنید و با اجرای کوئری زیر، سعی کنید کدهای بازنویسی رجیستری را مشاهده کنید:
SELECT * FROM `lost_cargo_dataset.maritime_security_registry` WHERE co_id = 103; - از آنجا که حساب شما هنوز مجوز خواندن ستونهای برچسبگذاری شده با
MaskShippingDetailsرا ندارد، پرسوجو بلافاصله با خطای امنیتی پایگاه داده Access Denied با شکست مواجه میشود:

۸. کرک کردن امنیت ستون برای بازیابی رمز عبور
برای خواندن کد نهایی بازنویسی شده به صورت متن ساده، باید به حساب کاربری خود اجازه خواندن ستونهای برچسبگذاری شده با MaskShippingDetails را بدهیم.
۱. اعطای مجوزهای برچسب سیاست
- در پنل ناوبری سمت چپ کنسول BigQuery، به Policy tags بروید.
- طبقهبندی با نام
LostCargoSecurity_را انتخاب کنید.LostCargoSecurity_. - در لیست برچسبها، روی
MaskShippingDetailsکلیک کنید. - در پنل اطلاعات در سمت راست صفحه، روی «افزودن مدیر» کلیک کنید. (اگر پنل پنهان است، روی «نمایش پنل اطلاعات» در بالا سمت راست کلیک کنید).
- در فیلد «مدیران جدید» ، ایمیل فعال کاربر Google Cloud خود را وارد کنید.
- در منوی کشویی «انتخاب نقش» ، عبارت «خوانندهی ریزدانه» را جستجو و انتخاب کنید، سپس روی «ذخیره» کلیک کنید.

۲. جستجوی کد لغو (Override Code)
به ویرایشگر فضای کاری BigQuery خود برگردید. از آنجا که اکنون به خواننده ریز دسترسی دارید، باید بتوانیم دوباره پرس و جو را اجرا کنیم و بتوانیم دادههای بدون نقاب را ببینیم:
SELECT * FROM `lost_cargo_dataset.maritime_security_registry`
WHERE co_id = 103;
🔓 نتیجه
این کوئری کد بازنویسی بدون نقاب را برمیگرداند:
SHIVER-ME-TIMBERS-888

۹. تمیز کردن
برای جلوگیری از تحمیل هزینه، منابع سندباکس ایجاد شده در طول این آزمایش را پاک کنید.
به Cloud Shell Terminal برگردید و مجموعه دادههای BigQuery حاوی جداول لجستیک را حذف کنید :
bq rm -r -f -d lost_cargo_dataset
فایلهای مخزن کلون شده را حذف کنید:
cd ..
rm -rf data-cloud-roadshow-26
۱۰. تبریک
شما با موفقیت تحقیقات را حل کردید و کد لغو مجوز را بازیابی کردید!
آنچه آموختهاید
- نحوه ساخت نمودار ویژگی در BigQuery برای نمایش موجودیتها و روابط پیچیده.
- نحوه پیکربندی گرهها ، لبهها ، ویژگیها و برچسبها برای ثبت اتصالات داده.
- نحوه پرس و جو در نمودارهای ویژگی با استفاده از زبان طبیعی با BigQuery Conversational Analytics .
- چگونه عبارات زبان پرس و جوی گراف (GQL) برای پیمایش مسیرهای رابطهای ساختار یافتهاند.
- نحوه کشف داراییهای امن با استفاده از کاتالوگ دانش و دسترسی به دادههای محدود شده در سطح ستون با استفاده از برچسبهای سیاست.