blog post

Terraform 從零開始 (7) — GCP 分析服務 — 使用Terraform創建BigQuery

GCP 分析服務 — 使用Terraform創建BigQuery
GCP 分析服務 — 使用Terraform創建BigQuery

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

1. GCP 分析服務 — BigQuery的主要功能和用途

BigQuery是一種強大的雲端資料倉庫和分析引擎,旨在幫助使用者儲存、查詢和分析大規模資料集,無需管理複雜的基礎設施。以下是一些主要的功能和用途:

  1. 雲端大數據分析服務:可以快速分析大量結構化和非結構化數據,並提供了一種高效、可擴展的解決方案。使用者可以使用 SQL 查詢來輕鬆地進行數據分析。
  2. 快速:BigQuery 能夠處理非常大的數據集,而且速度非常快,可以在數秒內查詢數據。
  3. 高效:使用 BigQuery 可以大大減少處理大數據時的負擔,因為使用者不需要自己設定基礎設施或資料庫,節省了大量的時間和金錢。
  4. 易用性:使用者只需要使用 SQL 查詢來進行數據分析,不需要學習複雜的工具和技術。
  5. 可擴展性:BigQuery 可以處理多達數千億行數據,而且可以自動擴展以處理更大的數據集。

2. GCP 分析服務 — BigQuery的使用情境

Google Cloud Platform 的 BigQuery 可在多種場景下使用,以下是一些常見的使用情境:

  1. 商業分析:使用者可以使用 BigQuery 來分析公司的銷售數據、客戶數據和財務數據,以便更好地了解公司的業務運作和未來的趨勢。例如,一家零售商可以使用 BigQuery 分析銷售數據和顧客反饋,以了解產品的熱門程度和消費者喜好,從而優化產品和市場策略。
  2. 行銷分析:使用者可以使用 BigQuery 來分析市場營銷數據,以便更好地了解消費者行為和市場趨勢,並制定更好的營銷策略。例如,一家網路服務公司可以使用 BigQuery 分析用戶訪問網站的行為和訪問時間,從而優化網站的設計和功能,提高用戶體驗和黏著度。
  3. IoT 數據分析:使用者可以使用 BigQuery 來分析 IoT 設備的數據,並坐數據洞察。

3. GCP 分析服務 — 使用Terraform創建BigQuery

在這個章節中,我們將深入探討如何使用Terraform在Google Cloud Platform上創建BigQuery。我們將依次進行以下步驟:

  1. 創建BigQuery的資料集與資料表: 我們會使用Terraform來定義和創建BigQuery中的資料集和資料表。這將確保我們可以按照預期配置和設定我們的數據結構。
  2. 使用bq cli來匯入Bigquery資料:我們將學習如何使用BigQuery的命令列工具(bq)來匯入資料至我們創建的資料表中
  3. 使用bq cli來查詢Bigquery資料:使用BigQuery的命令列工具(bq)來查詢資料,以供後續的分析。
  4. 了解資料型態的變化: 討論當資料從原始來源匯入到BigQuery時,可能會遇到的資料型態變化。這有助於我們確保資料在轉移過程中保持準確性和一致性。
  5. 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),讓我們解釋這段代碼的意義:

  1. resource "google_bigquery_dataset" "example_dataset":這段程式碼定義了一個名為 “example_dataset” 的 BigQuery 資料集資源。這將創建一個新的 BigQuery 資料集,var.bigquery_name 是一個變數,表示資料集的名稱。同時,我們還為資料集提供了描述和所在位置(var.GCP_REGION)。
  2. resource "google_bigquery_table" "example_table":這段程式碼定義了一個名為 “example_table” 的 BigQuery 表格資源。它將在剛創建的資料集中創建一個新的表格。我們指定了資料集的 ID(google_bigquery_dataset.example_dataset.dataset_id)以及表格的 ID(”example_table”)。
  3. deletion_protection 被設定為 false,這表示在刪除時不保護這個表格。
  4. schema 定義了表格的結構,包括了名稱和類型。在這個例子中,表格有兩個欄位,一個是名稱(STRING 型別),另一個是年齡(INTEGER 型別)。

總之,這段程式碼通過 Terraform 配置定義了創建 BigQuery 資料集和表格的過程。程式碼中的 schema 部分定義了表格的結構,讓您可以指定表格的欄位和資料類型。

接下來的部分是代碼的輸出部分,用於將 bq 相關地址 ID 輸出為 Terraform 變數。具體來說:

  1. output "bq_dataset"output "bq_table":這兩個程式碼片段定義了兩個輸出變數,分別是 BigQuery 資料集的 ID 和 BigQuery 表格的 ID
  2. 這些變數將在執行 Terraform 時被記錄下來,以便在部署完成後,您可以輕鬆地找到創建的資料集和表格的相關資訊。

ㄐ執行 terraform apply -auto-approve 來部署對應的資源到雲端架構上,就可以得到下列的結果。

terraform apply -auto-approve
分析服務 BigQuery 產生的資料集與表格資料
分析服務 BigQuery 產生的資料集與表格資料

Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。

  1. 打開終端機中的 .bashrc or .zshrc 檔案
  2. 在文件最下方加入下列指令
  3. 執行 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 上傳資料

  1. --project_id 參數指定了Google Cloud專案的ID。
  2. 我們指定了資料表的位置(bq_tf_ch4_9_3.example_table)以及要上傳的資料來源(data.txt)。
  3. 我們定義了資料的欄位及其型別(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 上傳資料
BigQuery 上傳資料

BigQuery 查詢資料表的結構

  1. 這段程式碼用於顯示名為 bq_tf_ch4_9_3.example_table 的資料表的結構和模式。
  2. 它會列出資料表中的欄位以及每個欄位的型別和屬性。
# 查詢資料結構
bq show bq_tf_ch4_9_3.example_table
BigQuery 查詢資料表的結構
BigQuery 查詢資料表的結構

BigQuery 查詢資料

  1. 這段程式碼用於在 bq_tf_ch4_9_3.example_table 資料表中執行一個SQL查詢。
  2. 該查詢選擇了資料表中的 nameage 欄位,並限制結果返回的記錄數為最多5筆(LIMIT 5)。
# 查詢資料
bq query "SELECT name,age FROM bq_tf_ch4_9_3.example_table LIMIT 5"課程連結
BigQuery 查詢資料
BigQuery 查詢資料
BigQuery 使用Console查詢資料
BigQuery 使用Console查詢資料

課程連結

如果您覺得這篇文章對您有幫助,我誠摯地邀請您透過以下連結訂閱我的 Udemy 課程,進一步深入學習 Terraform 和 GCP 的知識:

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程

訂閱 Terraform 從零開始 — 10+實戰Lab打造GCP雲端自動化架構課程
https://devops-with-alex.com/go/terraform

相關連結

  1. Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
  2. Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
  3. GCP 分析服務 BigQuery

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *