it

BigQuery Scheduled Query 12 Factor App

bigquery scheduled query 12 factor app
BigQuery Scheduled Query 12 Factor App

BigQuery Scheduled Query 12 Factor App คืออะไร

BigQuery Scheduled Query 12 Factor App

BigQuery เป็น serverless data warehouse จาก Google Cloud ที่ประมวลผล SQL queries บน petabytes ของข้อมูลได้ในวินาที Scheduled Queries คือการตั้งเวลารัน SQL อัตโนมัติ เช่น ETL jobs, reports, aggregations 12-Factor App เป็นหลักการออกแบบ cloud-native applications 12 ข้อจาก Heroku การรวมสามแนวคิดนี้ช่วยสร้าง data pipelines บน BigQuery ที่ maintainable, scalable และ production-ready ตามหลัก 12-Factor

Terraform Infrastructure as Code

BigQuery Scheduled Query 12 Factor App
# terraform.tf — Terraform config for BigQuery scheduled queries

# Factor III (Config) + Factor V (Build, Release, Run)



# main.tf

resource "google_bigquery_data_transfer_config" "daily_metrics" {

  display_name           = "Daily User Metrics"

  location               = var.region

  data_source_id         = "scheduled_query"

  schedule               = "every day 02:00"

  destination_dataset_id = google_bigquery_dataset.analytics.dataset_id



  params = {

    query                 = file("/queries/daily_user_metrics.sql")

    destination_table_name_template = "user_metrics_daily"

    write_disposition     = "WRITE_APPEND"

  }



  service_account_name = google_service_account.bq_scheduler.email



  email_preferences {

    enable_failure_email = true

  }

}



resource "google_bigquery_data_transfer_config" "hourly_kpi" {

  display_name           = "Hourly KPI Report"

  location               = var.region

  data_source_id         = "scheduled_query"

  schedule               = "every 1 hours"

  destination_dataset_id = google_bigquery_dataset.analytics.dataset_id



  params = {

    query = templatefile("/queries/hourly_kpi.sql", {

      project = var.project_id

      dataset = var.dataset_id

    })

  }



  service_account_name = google_service_account.bq_scheduler.email

}



# variables.tf

variable "project_id" {

  description = "GCP Project ID"

  type        = string

}



variable "dataset_id" {

  description = "BigQuery Dataset ID"

  type        = string

  default     = "analytics"

}



variable "region" {

  description = "BigQuery region"

  type        = string

  default     = "asia-southeast1"

}



# environments/prod.tfvars

# project_id = "my-prod-project"

# dataset_id = "prod_analytics"



# environments/dev.tfvars

# project_id = "my-dev-project"

# dataset_id = "dev_analytics"

FAQ - คำถามที่พบบ่อย

Q: BigQuery Scheduled Query กับ Cloud Composer (Airflow) อันไหนดี?

A: Scheduled Query: ง่าย, ฟรี (จ่ายแค่ query cost), เหมาะ simple ETL/aggregation Cloud Composer: ซับซ้อนกว่า, dependencies, branching, retry logic, multi-step pipelines ใช้ Scheduled Query: SQL-only jobs, simple scheduling ใช้ Composer: complex DAGs, cross-service orchestration, conditional logic

Q: ค่าใช้จ่าย BigQuery Scheduled Query เท่าไหร่?

A: Scheduling: ฟรี (ไม่มีค่า scheduling fee) Query cost: $6.25/TB processed (on-demand) หรือ flat-rate slots ลดค่า: ใช้ partitioned tables, clustering, materialized views Cache: repeated queries ไม่เสียค่า (ถ้า result cached) ประมาณ: daily query scan 100GB = $0.625/day = ~$19/month

Q: Idempotent queries สำคัญอย่างไร?

A: Idempotent = รัน query ซ้ำกี่ครั้งก็ได้ผลเหมือนเดิม สำคัญมากสำหรับ scheduled queries เพราะ: retry ได้โดยไม่สร้าง duplicate data, backfill ได้ง่าย Patterns: MERGE (upsert), CREATE OR REPLACE, INSERT OVERWRITE หลีกเลี่ยง: INSERT INTO (สร้าง duplicates ถ้ารันซ้ำ)

Q: 12-Factor App เหมาะกับ data pipelines ไหม?

A: เหมาะมาก โดยเฉพาะ: Config in environment (ไม่ hardcode project IDs), Codebase in Git, Dev/Prod parity (แยก datasets), Logs as event streams, Disposability (idempotent queries) ช่วยให้ pipelines maintainable, testable, deployable ข้าม environments

XM Legend · เทรดเดอร์ & ผู้สอน Forex 13 ปี

ผู้ก่อตั้ง SiamCafe ตั้งแต่ปี 1997 · เทรดเดอร์สาย Forex มากกว่า 13 ปี ได้รับการยกย่องเป็น XM Legend · แบ่งปันความรู้ Forex, ไอที, AI และการเทรด จากประสบการณ์จริงในตลาดจริง