協助建立與配置 Bigtable 執行個體及資料表、設計高效能 Schema 與查詢資料。當您需要設計 Bigtable Row Key、設定 Column Family、撰寫 SQL 查詢或用戶端函式庫(Java、Go、Python)程式碼,或是診斷效能與熱點(hotspotting)問題時,皆可使用此 Skill。此外,也適用於透過 gcloud 或 cbt CLI 配置 Bigtable 叢集。請勿用於一般 Cloud SQL 的管理作業。
Bigtable Basics
本 Skill 提供管理與開發 Google Bigtable 的核心工作流程及指引。
核心原則
- 控制面(Control Plane)與資料面(Data Plane):
- 使用
gcloud進行控制面操作:管理執行個體(Instances)、叢集(Clusters)、應用程式設定檔(App Profiles)、備份(Backups)與 IAM。建立資料表(Tables)、邏輯檢視表(Logical Views)、實體化檢視表(Materialized Views)及授權檢視表(Authorized Views)。 - 使用
cbt進行資料面操作:更新資料表、Column Families,以及讀取與寫入資料。
- 使用
- 效能優先: Bigtable 為 NoSQL 資料庫,其運作效率與 Row Key 設計息息相關。若遇到全表掃描(Full Table Scan),務必提醒其效能風險。
- 用戶端選擇: 正式環境(Production)建議優先使用 Java 或 Go,相較於其他語言,這兩者能提供更優異的效能與更完整的功能支援。
- 可觀測性(Observability): 診斷效能或熱點問題時,務必將 Key Visualizer(可透過 Cloud Console 存取)列為首要診斷工具,因為它能針對 Row Key 的存取模式提供最細緻的檢視角度。其次可利用 hot-tablets 工具、gcloud CLI 中的資料表統計資訊,以及
cbt read的include-stats=full選項來排查慢查詢(slow queries)。
[!IMPORTANT] 安全規則: 在非模擬器(emulator)環境中執行任何資料庫變更前,必須先取得使用者的明確確認。當提供會修改資料庫結構或資料的命令或說明時,必須提醒此安全要求。
常用情境速查(Quick Recipes)
1. 查詢資料
進行複雜轉換或聚合計算時請使用 SQL;對於較簡單的查詢模式,請使用 Key-Value API。注意:針對 _key 請使用精確比對、前綴(_key LIKE 'myprefix%')或範圍條件,以避免高昂的全表掃描。在可行情況下,建議使用明確的 Row 範圍(_key BETWEEN 'start' AND 'end')替代前綴比對,以獲得更好的效能。
若因存取模式多元、無法在單一 Schema 中全部滿足,導致無法避免昂貴的掃描作業(不論是全表掃描、大範圍前綴或大範圍條件查詢),請考慮以下兩種方案:
- 若查詢用於面向使用者或對延遲敏感的應用程式,請使用連續實體化檢視表(Continuous Materialized Views),並針對額外的存取模式最佳化 Key。
- 若次要存取模式頻率較低,例如 ETL、機器學習模型訓練或唯讀分析任務等批次處理情境,請改用 Bigtable Data Boost。
2. 操作資料
新增(Insert)、更新(Update)、遞增(Increment)及刪除(Delete)作業請使用 Key-Value API。SQL API 僅支援唯讀操作。
3. 資料模型定義(DDL)
SQL API 不支援 DDL 操作。資料表的建立、刪除與更新應透過 gcloud CLI 進行。邏輯檢視表與連續實體化檢視表雖以 SQL 查詢定義,但仍必須使用 gcloud CLI 來建立。
參考指南
- CLI 操作:
- infrastructure_management.md:配置執行個體、叢集與資料表 Schema。
- cli_data_access.md:透過
cbtCLI 讀取與寫入資料。
- 設計與探索:
- schema_design.md:資料表與連續實體化檢視表在 Row Key 設計及效能上的最佳實踐。
- dataplex.md:針對 Bigtable 資產的 Data Catalog 搜尋。
- 查詢與程式碼:
- sql_guide.md:透過 SQL 及 CLI 查詢結構化的 Row Key。
- client_libraries.md:高效能 Go/Java/Python 程式碼的設計模式。
常見工作流程
Schema 演進(DevOps)
-
正式環境的 Schema 變更建議優先使用 Terraform,以避免意外造成資料遺失。
-
若要進行手動
cbt變更,在提出任何修改建議前,請先列出資料表的 Column Family 及 GC 策略(GC Policy)來確認現有狀態:cbt ls {table}若需要變更,請建立 Column Family 或更新 GC 策略:
cbt createfamily {table} {family} cbt setgcpolicy {table} {family} "maxversions=5 AND maxage=30d" -
完整語法請參考 infrastructure_management.md。






