1. Pengantar
Dalam codelab ini, Anda akan mempelajari cara memanfaatkan BigQuery Graph untuk memecahkan masalah kompleks dalam supply chain dan logistik.
Anda akan membuat model jaringan supply chain restoran yang berfokus pada keamanan dan kontrol kualitas makanan. Jika terjadi masalah keamanan makanan—seperti bahan yang terkontaminasi dari supplier—waktu adalah hal yang sangat penting. Mengidentifikasi "potensi dampak kerusakan" dan melakukan penarikan produk secara cepat dapat menghemat biaya dan melindungi pelanggan.

Model relasional tradisional memerlukan operasi JOIN yang kompleks dan multi-langkah untuk melacak item melalui beberapa tahap (Supplier -> DC -> Commissary -> Store -> Finished Item). Dengan BigQuery Graph, kita dapat membuat model koneksi ini secara langsung, sehingga memungkinkan kueri yang intuitif dan cepat menggunakan standar ISO GQL (Graph Query Language).
Yang akan Anda pelajari
- Cara menentukan model grafik di atas tabel BigQuery yang ada.
- Cara membuat Property Graph di dalam BigQuery.
- Cara menjalankan kueri traversal untuk melacak dampak hulu dan hilir.
Yang akan Anda butuhkan
- Project Google Cloud yang mengaktifkan penagihan.
- Google Cloud Shell.
Estimasi Biaya
Lab ini diperkirakan akan dikenai biaya analisis BigQuery kurang dari $5 USD, yang masih dalam alokasi Paket Gratis untuk pengguna baru.
2. Penyiapan dan Persyaratan
Buka Cloud Shell
Anda akan melakukan sebagian besar pekerjaan di Cloud Shell, lingkungan yang sudah dilengkapi dengan semua yang Anda butuhkan untuk menggunakan Google Cloud.
- Buka Konsol Google Cloud.
- Klik ikon Activate Cloud Shell di toolbar kanan atas.
- Klik Continue jika diminta.
Menyiapkan Variabel Lingkungan
Di Cloud Shell, tetapkan Project ID Anda untuk menyederhanakan perintah di masa mendatang.
export PROJECT_ID=$(gcloud config get-value project)
Mengaktifkan API
Jalankan perintah ini untuk mengaktifkan BigQuery API yang diperlukan:
gcloud services enable bigquery.googleapis.com \
bigqueryreservation.googleapis.com
Membuat Pemesanan &Penugasan BigQuery
Untuk menjalankan kueri GQL, Anda harus memiliki pemesanan yang menggunakan edisi Enterprise atau Enterprise Plus. Buat pemesanan Edisi Enterprise dengan penskalaan otomatis di Cloud Shell:
# 1. Create a BigQuery Enterprise reservation with 0 baseline slots and 100 max autoscaling slots
bq mk --reservation \
--project_id=${GCP_PROJECT} \
--location=US \
--edition=ENTERPRISE \
--slots=0 \
--autoscale_max_slots=100 \
--ignore_idle_slots=true \
supplychaingraph-reservation
# 2. Assign your Cloud project to the newly created reservation for query execution
bq mk --reservation_assignment \
--project_id=${GCP_PROJECT} \
--location=US \
--reservation_id=supplychaingraph-reservation \
--job_type=QUERY \
--assignee_type=PROJECT \
--assignee_id=${GCP_PROJECT}
3. Membuat Skema dan Tabel
Anda akan membuat set data dan tabel yang mewakili komponen supply chain:
item: Definisi item generik (misalnya, Tomat, Ayam).location: Fasilitas (Supplier, pusat distribusi, kafe).itemlocation: Tabel persimpangan yang mewakili lokasi inventaris.bom: Bill of Materials (menentukan hubungan berat, misalnya Item A masuk ke Item B).makes: Memetakanitemlocationkeitem.stored_at: Memetakanitemlocationkelocation.
Buat Set data
Anda dapat menjalankan perintah SQL di lab ini menggunakan Cloud Shell atau BigQuery Console.
Untuk menggunakan BigQuery Console:
- Buka BigQuery Console di tab baru.
- Tempel setiap cuplikan SQL dari lab ini ke editor, lalu klik tombol Run untuk menjalankannya.

Jalankan perintah berikut di Cloud Shell atau gunakan BigQuery Console untuk membuat skema. Anda akan menggunakan variabel node di SQL.

Catatan: (1) Untuk menjalankannya di Google Colab, Anda juga dapat menggunakan perintah magic BigQuery: %%bigquery Cuplikan berikut membuat skema restoran dalam project Anda untuk menyimpan data grafik. (2) Anda harus menggunakan %%bigquery –project <PROJECT_ID> jika menjalankan dari Google Colab. Pastikan kolom PROJECT_ID dipetakan ke project yang sesuai yang ingin Anda gunakan: PROJECT_ID = "argolis-project-340214" # @param {"type":"string"} (3) Jika Anda menggunakan colab, Anda harus menginstal beberapa library, bergantung pada persyaratan Anda. Jika Anda akan menggunakan visualisasi grafik, pastikan Anda menginstal library menggunakan pip: spanner-graph-notebook==1.1.5

%%bigquery --project=$PROJECT_ID
CREATE SCHEMA IF NOT EXISTS restaurant ;
Buat Tabel
Jalankan kode SQL berikut untuk membuat tabel.
%%bigquery --project=$PROJECT_ID
-- 1. Item Table
DROP TABLE IF EXISTS `restaurant.item`;
CREATE TABLE `restaurant.item` (
itemKey STRING,
itemName STRING,
itemCategory STRING,
shelfLifeDays INT64,
PRIMARY KEY (itemKey) NOT ENFORCED
);
-- 2. Location Table
DROP TABLE IF EXISTS `restaurant.location`;
CREATE TABLE `restaurant.location` (
locationKey STRING,
locationType STRING,
locationCity STRING,
locationState STRING,
dunsNumber INT64,
PRIMARY KEY (locationKey) NOT ENFORCED
);
-- 3. ItemLocation Table
DROP TABLE IF EXISTS `restaurant.itemlocation`;
CREATE TABLE `restaurant.itemlocation` (
itemLocationKey STRING,
itemKey STRING,
locationKey STRING,
variants INT64,
PRIMARY KEY (itemLocationKey) NOT ENFORCED,
-- Foreign Key Definitions
FOREIGN KEY (itemKey) REFERENCES `restaurant.item`(itemKey) NOT ENFORCED,
FOREIGN KEY (locationKey) REFERENCES `restaurant.location`(locationKey) NOT ENFORCED
);
-- 4. BOM Table
DROP TABLE IF EXISTS `restaurant.bom`;
CREATE TABLE `restaurant.bom` (
bomKey INT64,
parentItemLocation STRING,
childItemLocation STRING,
childQuantity FLOAT64,
PRIMARY KEY (bomKey) NOT ENFORCED
);
-- 5. Makes Table
DROP TABLE IF EXISTS `restaurant.makes`;
CREATE TABLE `restaurant.makes` (
itemLocationKey STRING,
itemKey STRING,
locationKey STRING,
variants INT64,
PRIMARY KEY (itemLocationKey) NOT ENFORCED
);
DROP TABLE IF EXISTS `restaurant.stored_at`;
CREATE TABLE `restaurant.stored_at` (
itemLocationKey STRING,
itemKey STRING,
locationKey STRING,
variants INT64,
PRIMARY KEY (itemLocationKey) NOT ENFORCED
);
4. Memuat Data Contoh
Agar lab ini sepenuhnya mandiri, Anda akan mengisi tabel dengan data contoh menggunakan pernyataan LOAD DATA SQL murni. Hal ini mewakili jaringan yang dimulai dengan Supplier, melintasi Distribution Center (DC) dan Commissary Kitchen, dan berakhir di Retail Café.
Jalankan kueri SQL berikut untuk memuat data:

Catatan: Anda dapat menghapus %%bigquery jika menjalankan langsung di bigquery studio
%%bigquery --project=$PROJECT_ID
-- Load Item
LOAD DATA OVERWRITE `restaurant.item`
FROM FILES (format = 'CSV', uris = ['gs://supply_chain_demo/item2.csv'], skip_leading_rows = 1);
-- Load Location
LOAD DATA OVERWRITE `restaurant.location`
FROM FILES (format = 'CSV', uris = ['gs://supply_chain_demo/location.csv'], skip_leading_rows = 1);
-- Load ItemLocation
LOAD DATA OVERWRITE `restaurant.itemlocation`
FROM FILES (format = 'CSV', uris = ['gs://supply_chain_demo/itemlocation.csv'], skip_leading_rows = 1);
-- Load BOM
LOAD DATA OVERWRITE `restaurant.bom`
FROM FILES (format = 'CSV', uris = ['gs://supply_chain_demo/bom2.csv'], skip_leading_rows = 1);
-- Load Makes
LOAD DATA OVERWRITE `restaurant.makes`
FROM FILES (format = 'CSV', uris = ['gs://supply_chain_demo/makes.csv'], skip_leading_rows = 1);
-- Load StoredAt
LOAD DATA OVERWRITE `restaurant.stored_at`
FROM FILES (format = 'CSV', uris = ['gs://supply_chain_demo/itemlocation.csv'], skip_leading_rows = 1);
5. Menambahkan Batasan dan Menentukan Grafik
Sebelum membuat grafik, Anda mendeklarasikan hubungan semantik menggunakan batasan Kunci Utama dan Kunci Asing SQL standar. Hal ini memandu BigQuery dalam memahami ID Node dan menghubungkan tabel Edge ke tabel Node.
Buat Property Graph
Sekarang, gabungkan tabel ini ke dalam satu struktur Grafik kohesif yang disebut restaurant.bombod.
Anda menentukan:
- Node:
item,location,itemlocation - Edge:
makes,stored_at, danconsists_of(BOM)
%%bigquery --project=$PROJECT_ID
CREATE OR REPLACE PROPERTY GRAPH `restaurant.bombod`
NODE TABLES (
`restaurant.item` KEY (itemKey) LABEL item PROPERTIES ALL COLUMNS,
`restaurant.location` KEY (locationKey) LABEL location PROPERTIES ALL COLUMNS,
`restaurant.itemlocation` KEY (itemLocationKey) LABEL itemlocation PROPERTIES ALL COLUMNS
)
EDGE TABLES (
`restaurant.makes`
KEY (itemLocationKey)
SOURCE KEY (itemLocationKey) REFERENCES `restaurant.itemlocation`(itemLocationKey)
DESTINATION KEY (itemKey) REFERENCES `restaurant.item`(itemKey)
LABEL makes PROPERTIES ALL COLUMNS,
`restaurant.bom`
KEY (bomKey)
SOURCE KEY (childItemLocation) REFERENCES `restaurant.itemlocation`(itemLocationKey)
DESTINATION KEY (parentItemLocation) REFERENCES `restaurant.itemlocation`(itemLocationKey)
LABEL consists_of PROPERTIES ALL COLUMNS,
`restaurant.stored_at`
KEY (itemLocationKey)
SOURCE KEY (itemLocationKey) REFERENCES `restaurant.itemlocation`(itemLocationKey)
DESTINATION KEY (locationKey) REFERENCES `restaurant.location`(locationKey)
LABEL stored_at PROPERTIES ALL COLUMNS
);
6. Memvisualisasikan Supply Chain
Anda dapat menjalankan kueri traversal top-down untuk melihat seluruh jaringan supply chain. Di notebook atau UI standar yang mendukungnya (seperti %%bigquery --graph), hal ini akan menampilkan peta visual.
Gunakan kueri grafik absolut untuk menyiapkan node dan edge.
Catatan: Seperti yang disebutkan sebelumnya, untuk menjalankannya di Google Colab atau Colab Enterprise Notebooks, Anda juga dapat menggunakan perintah magic BigQuery: %%bigquery Selain itu, untuk memvisualisasikan grafik di Google Colab atau Colab Enterprise Notebooks, sertakan flag –graph sebagai: %%bigquery –graph
%%bigquery --project=$PROJECT_ID --graph output
Graph restaurant.bombod
match p=(a:itemlocation)-[c:consists_of]->(b:itemlocation)
match q=(a)-[d:stored_at]->(e:location)
optional match z=(f)-[g:makes]-(b)
return to_json(p) as ppath, to_json(q) as qpath, to_json(z) as zpath
Output:

7. Kasus Penggunaan 1: Melacak Keluhan Hulu
Skenario: Pelanggan mengeluhkan kualitas ayam di sandwich mereka di toko New York. Anda perlu melacak item yang sudah selesai ke belakang untuk melihat tahap perakitannya.
Kueri Traversal
Jalankan kueri menggunakan format kueri Graph Traversal. Hal ini melihat edge consists_of yang menghubungkan rakitan hilir hingga bahan hulu.
%%bigquery --project=$PROJECT_ID --graph
GRAPH restaurant.bombod
MATCH p=(a:itemlocation)-[c:consists_of]->(b:itemlocation)
OPTIONAL MATCH q=(b)-[d:stored_at]-(e)
return to_json(p) as ppath, to_json(q) as qpath
Karena arah panah di Tabel Edge consists_of (Ingredient -> Finished), penelusuran yang mengalir ke hulu akan menghasilkan link yang dengan cepat mengisolasi bahan dan lokasi penyimpanan yang bergantung.
Output: 
8. Kasus Penggunaan 2: Analisis Dampak
Skenario: Badai salju telah menutup Distribution Center di Columbus, OH. Anda perlu mengetahui persiapan hilir atau item yang sudah selesai yang langsung terpengaruh.
Kueri Traversal
Anda mulai dari location tertentu yang mewakili Distribution Center, mengidentifikasi inventaris yang disimpan di sana, dan melihat item yang sudah selesai yang memerlukannya.
# @title Impact of a storm on a DC
%%bigquery --project=$PROJECT_ID --graph
Graph restaurant.bombod
match path1=(z:itemlocation)-[m:stored_at]->(dc:location) where dc.locationKey like '%DC-Sysco-Columbus-OH%'
match path2=(z:itemlocation)-[c:consists_of]->(b:itemlocation)
match path3=(b:itemlocation)-[n:makes]->(item:item)
optional match path4=(b)-[p:stored_at]->(q:location)
return to_json(path1) as path1, to_json(path2) as path2,to_json(path3) as path3, to_json(path4) as path4
Output: 
9. Kasus Penggunaan 3: Penarikan Produk Hilir
Skenario: Supplier memberi tahu Anda tentang batch produk tertentu yang terkontaminasi: Vine-Ripened Tomatoes dari Supplier. Anda perlu menemukan semua item menu akhir yang terpengaruh di kafe.
Kueri Traversal
Anda mencari lokasi bahan mentah yang terkontaminasi, lalu melakukan traversal jalur yang mengalir ke hilir untuk menemukan item yang paling terpengaruh.
%%bigquery --project=$PROJECT_ID --graph
Graph restaurant.bombod
match path1=(a:itemlocation)-[c:consists_of]->(b:itemlocation)-[e:makes]->(f:item) where f.itemKey like '%Tomato%'
return to_json(path1) as result
Kueri ini menemukan semua item yang cocok dengan pola 'Tomato' dan yang terkait dengan hubungan hulu, sehingga menjadikannya pemetaan yang efektif untuk menemukan item kafe mana yang harus ditarik.
Output: 
10. Pembersihan
Hapus resource setelah Anda menyelesaikan langkah-langkah panduan untuk menghindari biaya sisa di ruang kerja Anda.
DROP SCHEMA `restaurant` CASCADE;
11. Kesimpulan
Selamat! Anda telah membuat model supply chain dan menjalankan analisis dampak menggunakan BigQuery Graph.
Rangkuman
Anda telah mempelajari cara:
- Mendeklarasikan hubungan relasional yang berpusat pada grafik dengan Kunci Utama/Asing.
- Membuat Property Graph Terpadu.
- Menavigasi hubungan multi-node secara efisien menggunakan logika traversal Graph Query.
Untuk mendapatkan insight arsitektur grafik lainnya, buka dokumen Google Cloud.