![GCP 分析服務 — 使用Terraform創建BigQuery](https://cdn-images-1.medium.com/max/800/1*H82N8M0ddpozZ_y4pX5UXg.png)
1. GCP 分析服務 — BigQuery的主要功能和用途
BigQuery是一種強大的雲端資料倉庫和分析引擎,旨在幫助使用者儲存、查詢和分析大規模資料集,無需管理複雜的基礎設施。以下是一些主要的功能和用途:
- 雲端大數據分析服務:可以快速分析大量結構化和非結構化數據,並提供了一種高效、可擴展的解決方案。使用者可以使用 SQL 查詢來輕鬆地進行數據分析。
- 快速:BigQuery 能夠處理非常大的數據集,而且速度非常快,可以在數秒內查詢數據。
- 高效:使用 BigQuery 可以大大減少處理大數據時的負擔,因為使用者不需要自己設定基礎設施或資料庫,節省了大量的時間和金錢。
- 易用性:使用者只需要使用 SQL 查詢來進行數據分析,不需要學習複雜的工具和技術。
- 可擴展性:BigQuery 可以處理多達數千億行數據,而且可以自動擴展以處理更大的數據集。
2. GCP 分析服務 — BigQuery的使用情境
Google Cloud Platform 的 BigQuery 可在多種場景下使用,以下是一些常見的使用情境:
- 商業分析:使用者可以使用 BigQuery 來分析公司的銷售數據、客戶數據和財務數據,以便更好地了解公司的業務運作和未來的趨勢。例如,一家零售商可以使用 BigQuery 分析銷售數據和顧客反饋,以了解產品的熱門程度和消費者喜好,從而優化產品和市場策略。
- 行銷分析:使用者可以使用 BigQuery 來分析市場營銷數據,以便更好地了解消費者行為和市場趨勢,並制定更好的營銷策略。例如,一家網路服務公司可以使用 BigQuery 分析用戶訪問網站的行為和訪問時間,從而優化網站的設計和功能,提高用戶體驗和黏著度。
- IoT 數據分析:使用者可以使用 BigQuery 來分析 IoT 設備的數據,並坐數據洞察。
3. GCP 分析服務 — 使用Terraform創建BigQuery
在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建BigQuery。我們將依次進行以下步驟:
- 創建BigQuery的資料集與資料表: 我們會使用Terraform來定義和創建BigQuery中的資料集和資料表。這將確保我們可以按照預期配置和設定我們的數據結構。
- 使用bq cli來匯入Bigquery資料:我們將學習如何使用BigQuery的命令列工具(bq)來匯入資料至我們創建的資料表中
- 使用bq cli來查詢Bigquery資料:使用BigQuery的命令列工具(bq)來查詢資料,以供後續的分析。
- 了解資料型態的變化: 討論當資料從原始來源匯入到BigQuery時,可能會遇到的資料型態變化。這有助於我們確保資料在轉移過程中保持準確性和一致性。
- Terraform Bigquery 連結:可以到github參考對應的Terraform程式碼。
首先創建三個檔案,分別是 0-provider.tf, 1-variables.tf, 2-main.tf
0-provider.tf
################################################################################## # CONFIGURATION ################################################################################## terraform { required_version = ">=1.0" required_providers { google = { source = "hashicorp/google" version = ">= 4.40.0" } } } provider "google" { project = var.GCP_PROJECT # region = var.GCP_REGION # zone = var.zone }
這個檔案主要用於配置 Terraform 的提供者(provider),以確保 Terraform 可以正確地與 Google Cloud Platform(GCP)進行交互。
terraform
:這個區塊設定了 Terraform 的版本要求,確保使用的版本符合最低要求大於4.40.0版本。同時,它也定義了所需的提供者和版本。provider "google"
:這個區塊指定了要使用的 GCP 提供,指定了 GCP 專案 ID(由var.GCP_PROJECT
變數提供)。
1-variables.tf
variable "GCP_PROJECT" { description = "GCP Project ID" type = string default = "terraform101-384507" } variable "GCP_REGION" { type = string default = "asia-northeast1" } variable "bigquery_name" { type = string # bq 命名規則 default = "bq_tf_ch4_9_3" }
這個檔案用於定義 Terraform 使用的變數,以實現更高度的可配置性和重用性。
variable "GCP_PROJECT"
:這是 GCP 專案 ID 的變數,它描述了 GCP 專案的 ID。它的預設值是 “terraform101-384507″,但可以在使用時指定不同的值。variable "GCP_REGION"
:這是定義網路服務所在位置(地區)的變數。variable "bigquery_name"
:這是用於定義 Google Cloud Big Query名稱的變數,另外要注意 bq 命名規則只可以使用下底線 _。
2-main.tf
################################################################################## # RESOURCE ################################################################################## # 創建 BigQuery 資料集 resource "google_bigquery_dataset" "example_dataset" { dataset_id = var.bigquery_name description = "Terraform 101 - bq" location = var.GCP_REGION } # 創建 BigQuery 表格 resource "google_bigquery_table" "example_table" { dataset_id = google_bigquery_dataset.example_dataset.dataset_id table_id = "example_table" deletion_protection = false # 定義表格結構 schema = <<EOF [ { "name": "name", "type": "STRING" }, { "name": "age", "type": "INTEGER" } ] EOF } output "bq_dataset" { value = google_bigquery_table.example_table.dataset_id } output "bq_table" { value = google_bigquery_table.example_table.table_id }
這段 Terraform 程式碼的目的是在 Google Cloud Platform(GCP)上使用 Terraform 創建一個 BigQuery 資料集(Dataset)和一個 BigQuery 表格(Table),讓我們解釋這段代碼的意義:
resource "google_bigquery_dataset" "example_dataset"
:這段程式碼定義了一個名為 “example_dataset” 的 BigQuery 資料集資源。這將創建一個新的 BigQuery 資料集,var.bigquery_name
是一個變數,表示資料集的名稱。同時,我們還為資料集提供了描述和所在位置(var.GCP_REGION
)。resource "google_bigquery_table" "example_table"
:這段程式碼定義了一個名為 “example_table” 的 BigQuery 表格資源。它將在剛創建的資料集中創建一個新的表格。我們指定了資料集的 ID(google_bigquery_dataset.example_dataset.dataset_id
)以及表格的 ID(”example_table”)。deletion_protection
被設定為false
,這表示在刪除時不保護這個表格。schema
定義了表格的結構,包括了名稱和類型。在這個例子中,表格有兩個欄位,一個是名稱(STRING 型別),另一個是年齡(INTEGER 型別)。
總之,這段程式碼通過 Terraform 配置定義了創建 BigQuery 資料集和表格的過程。程式碼中的 schema
部分定義了表格的結構,讓您可以指定表格的欄位和資料類型。
接下來的部分是代碼的輸出部分,用於將 bq 相關地址 ID 輸出為 Terraform 變數。具體來說:
output "bq_dataset"
和output "bq_table"
:這兩個程式碼片段定義了兩個輸出變數,分別是 BigQuery 資料集的 ID 和 BigQuery 表格的 ID- 這些變數將在執行 Terraform 時被記錄下來,以便在部署完成後,您可以輕鬆地找到創建的資料集和表格的相關資訊。
ㄐ執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
![分析服務 BigQuery 產生的資料集與表格資料](https://cdn-images-1.medium.com/max/800/1*Hi3cgsaUHCoBAn_aKLlhVw.png)
Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。
- 打開終端機中的 .bashrc or .zshrc 檔案
- 在文件最下方加入下列指令
- 執行 source ~/.zshrc 或是 source ~/.bashrc 讓下面的 alias 快捷鍵生效
alias tf="terraform" alias tfv="terraform validate" alias tfdp="terraform apply -auto-approve plan.out" alias tfd="terraform apply -auto-approve" alias tfr="terraform destroy -auto-approve" alias tfp="terraform plan -out plan.out"
完成部署後,進行BigQuery的測試:
下面則是 data.txt,作為上傳到BigQuery資料集上的測試資料,並用於後續的練習。
# data.txt Alice,30 Bob,40
下列程式碼用於將資料從名為 data.txt
的檔案上傳到BigQuery中的特定資料表 bq_tf_ch4_9_3.example_table
。使用時必須先安裝gcloud cli,就可以正確使用bq cli。
BigQuery 上傳資料
--project_id
參數指定了Google Cloud專案的ID。- 我們指定了資料表的位置(
bq_tf_ch4_9_3.example_table
)以及要上傳的資料來源(data.txt
)。 - 我們定義了資料的欄位及其型別(
name:string,age:integer
),這將幫助BigQuery正確解析和處理資料。
# cmd # bq load --project_id=example-project \ # example_dataset.example_table \ # data \ # schema # 上傳資料 bq load --project_id=terraform101-384507 \ bq_tf_ch4_9_3.example_table \ data.txt \ name:string,age:integer
![BigQuery 上傳資料](https://cdn-images-1.medium.com/max/800/1*O-jnwf3cqHGqggJSvMJGIw.png)
BigQuery 查詢資料表的結構
- 這段程式碼用於顯示名為
bq_tf_ch4_9_3.example_table
的資料表的結構和模式。 - 它會列出資料表中的欄位以及每個欄位的型別和屬性。
# 查詢資料結構 bq show bq_tf_ch4_9_3.example_table
![BigQuery 查詢資料表的結構](https://cdn-images-1.medium.com/max/800/1*x3mX471QfcNg22ogNn4QWA.png)
BigQuery 查詢資料
- 這段程式碼用於在
bq_tf_ch4_9_3.example_table
資料表中執行一個SQL查詢。 - 該查詢選擇了資料表中的
name
和age
欄位,並限制結果返回的記錄數為最多5筆(LIMIT 5
)。
# 查詢資料 bq query "SELECT name,age FROM bq_tf_ch4_9_3.example_table LIMIT 5"課程連結
![BigQuery 查詢資料](https://cdn-images-1.medium.com/max/800/1*6qGMljTjYU8Q07ozzga8-Q.png)
![BigQuery 使用Console查詢資料](https://cdn-images-1.medium.com/max/800/1*-OKwDvemGXE2JGY8k6UbEA.png)
課程連結
如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 Udemy 課程,進一步深入學習 Terraform 和 GCP 的知識:
![訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程](https://cdn-images-1.medium.com/max/800/1*1e6Kj9yUjx6itnU2bEg_gw.png)