# 《Google Data Engineering Professional - GCP PDE 考試心得》 ## 前言 這份筆記是我在準備 GCP Professional Data Engineer 證照時所做的小整理。我的背景是在雲端代理商擔任 AWS 架構師,因工作需求開始接觸 GCP,因此決定挑戰這張證照。雖然之前沒考過 GCP 的任何證照,但透過這次準備也建立起不少知識架構,希望對未來想考這張的朋友有幫助。 ### 難度 • 難度大約 介於 AWS Associate 和 Professional 之間,比 AWS DEA 再難一點。 • 題型偏向理解 GCP 的數據處理服務與架構設計選擇。 • 如果你有 AWS 或其他雲端經驗,會很快上手。 ### 準備方法 我花了大約 1 個月準備,方式如下: 1. 前兩週:快速把手邊找到的 ExamTopics 考古題刷 1~2 遍。 2. 後兩週:每天隨機抽 50 題複習,並記錄錯題與不熟的知識點。 3. 考前三天:針對錯誤率高的題目重練,理解知識點優先,真的看不懂的就先記下來。 4. 有爭議的題目不用糾結,太深的情境題不一定有單一正解,保持彈性思維。  **👆自己做的錯題本** ### 考試當天經驗 • 題數:共 50 題 • 語言:英文版 • 時間:最多考兩個小時,這次約 30 分鐘寫完 • 題型:大多是單選題,僅 2~3 題是多選 • 題目長度:不會太長,多是簡單情境題問你最佳解法 • 唯一不習慣的是字體很小,需要注意閱讀疲勞 ### 小結建議 如果你有 AWS 或其他雲經驗,這張 GCP 證照可以作為擴展知識版圖的好機會。關鍵是把考古題寫熟、錯題整理清楚,配合每日練習與理解架構設計原則,基本上可以輕鬆通過!  下面是我準備時的小小筆記,用來整理常錯的題目與不熟悉的服務,效果很好,也幫助我理清知識盲點,這邊就提供給大家參考。 ## 📒 GCP 服務 ### 📙如何按照情境選擇GCP資料庫  [SOURCE](https://medium.com/data-scientists-playground/google-data-engineer-%E8%AD%89%E7%85%A7%E5%88%86%E4%BA%AB-88f0dbf7c01b) 👆從前輩文章中找到的圖,蠻實用的,這張圖可以簡潔的告訴你選擇資料庫的情境與條件 ### 📙 BigQuery (BQ) 這是一個GCP上的資料倉儲服務,對應的是AWS redshift,可以吸收多種資料源並用SQL語法管理,同時在銜接上後續ML和BI上也非常方便。可以說是GCP在資料處理議題上最重要的服務之一 #### 📘 內建小工具 * `BigQuery Streaming Inserts`:是一種可以即時將資料寫入 BigQuery 表格的功能。它不像傳統的批次上傳(batch load)需要等幾分鐘或幾小時,可以在幾秒內讓資料可查詢。 * `BigQuery 的 AEAD 加密`是 透過內建 AEAD.ENCRYPT 與 AEAD.DECRYPT 函數使用金鑰安全地在表內加密與解密資料,以支援欄位級保護。 * `BigQuery snapshot` 為表內部快照,僅在同一區域內生效。 * `BigQuery Omni` 可在 AWS、Azure 上直接查詢資料,利用 Google Cloud 控制面並在當地區域運行計算,以減少跨雲資料移動。 * `ML.EVALUATE Clause` 用於評估機器學習模型的效能 * `TRANSFORM Clause` 則用於在推論前進行資料前處理與轉換。 * `Turbo Replication` 可在幾分鐘內自動將資料從主要地區同步到跨地區的備份,滿足嚴格的 RPO(恢復點目標)需求。 * `BigQuery Time Travel ` 可查詢表格在過去某時間點的狀態(預設最多 7 天) * `BigQuery Reservations` 是一種讓你預先購買處理資源(slots)來執行查詢,以實現固定費率、可預測成本的 BigQuery 計費模式替代方案。 #### 📘 可串聯的其他服務 * `Analytics Hub` 是 BigQuery 的資料分享平台,讓組織可安全且高效地在 BigQuery 中分享及交換分析資料集。 * `Dataform` 是一個讓你在 BigQuery 等資料倉儲上,**以 SQL 管理、排程及監控 ELT pipeline** 與資料品質驗證的工具。 * `Datastream` 是全代管資料複製CDC服務,支援從資料庫(如 MySQL/PostgreSQL)串流同步資料到 BigQuery 或 Cloud Storage,不會對 Cloud SQL 資料庫造成查詢負載。 * `Connected Sheets` 是 Google Sheets + BigQuery 的整合工具 #### 📘 其他考點 * BigQuery 是 `append-only` 儲存系統,最佳寫入方式是 `INSERT`,並不適合頻繁使用 UPDATE 或 MERGE → 成本高、效能差 * `Wildcard Tables`:允許你一次查詢多個表,只要它們名字有共同前綴 * BQ不適合ACID架構,在GCP上適合的有`cloud spanner`、`cloud SQL` * 雖然 BigQuery 是理想的分析引擎,但不適合高頻 API 查詢因為會慢且昂貴。一般推薦的做法會是`冷數據用 BigQuery,熱資料走 SQL` * `Ad-hoc queries` 是使用者即時撰寫並執行的臨時查詢,通常用於探索或快速分析資料,而非預先排定或自動化執行。 * BigQuery 為分析型資料倉儲,設計偏向`去正規化 (denormalization)`,以提升查詢速度、減少 join 成本。 ### 📙 Dataflow Google Cloud Dataflow 是一個**全託管**的資料處理服務,基於 Apache Beam 架構,支援**批次與串流資料處理**,並能以相同的程式碼邏輯處理兩者。 #### :blue_book: 相關考點 * `fromQuery` 操作允許直接將 **BigQuery SQL 查詢結果** 作為資料來源,輸出為一個 PCollection。 * `PCollections` 是一種**不可變的分散式資料集**,用來在資料處理管線的各階段之間傳遞資料。 * `Flatten 轉換操作` 可將多個 PCollection 合併為一個,方便統一處理。 * 使用 `-drain` 旗標可讓串流處理流程**優雅地關閉**,會處理所有尚未完成的資料後才終止。 * `Dataflow Prime` 是進階功能,提供 **Right Fitting** 機制,自動選擇最適合的 VM 類型以優化效能與成本。 * `Limited-data-loss` 模式允許在**有限資料遺失風險下繼續執行資料管線** ;`Force-data-loss` 模式則是優先考量完成管線任務,即使可能會**遺失部分資料**。 * `Reshuffle` 是一個特殊的轉換(Transform),用途是 打斷資料處理階段(fusion),使資料能在不同的工作節點間重新分配,以提升處理彈性與效能。 * `DoFn` 是在 Apache Beam 中用來定義單一處理元件的抽象介面,Dataflow pipeline 執行後,`DoFn` 會在 worker 上執行以處理資料元素。 * `Dataflow network tag` 是 Google Cloud 建議用於 Dataflow worker VM 的標籤,以便透過防火牆規則精準控制 Dataflow worker 間互相通信所需的網路存取權限(如 TCP 12345-12346),實現安全且符合最佳實務的網路管理。 * 在 Dataflow 的 DoFn 中加入 `exception handling block`,表示你在處理每筆資料時使用 try/except 區塊捕捉錯誤,避免整個 pipeline 因單筆異常而失敗 #### :blue_book: 針對stream資料處理 * Dataflow 提供原生 Kafka 資料來源支援**,可直接從 Kafka 擷取串流資料。 * `Watermarks` 是用來表示事件時間(event time)進度的指標,能夠協助偵測延遲抵達的資料。 * 在處理無界(unbounded)資料的串流管線中,必須使用 **Windowing**,將資料依時間區段分片(例如每小時一批)。預設為 Global Window(無限制累積)。 #### :blue_book: Window(視窗) 在資料處理的機制中,Window 是用來將資料根據「事件時間」切分成一段段時間範圍(視窗)的機制,以便對流式資料進行分段統計或聚合。 它能將無界(Unbounded)資料流轉換為有界的可處理區塊,使每段時間的資料可以各自統計、計算與觸發輸出。 | 視窗類型 | 功能 | 補充說明 | | --------------------------- | ------------------------------ | ------------------------------------------------- | | **Global Window** | 所有資料都被當作一個不分時間的單一視窗來處理。 | 預設視窗策略,無時間分段,需搭配 trigger 才會產生輸出。 | | **Fixed (Tumbling) Window** | 每隔固定時間切出不重疊的視窗來統計資料。 | 例如每 5 分鐘產出一個結果(5:00-5:05、5:05-5:10...) | | **Sliding Window** | 每隔一段時間產出一個視窗,視窗可重疊,資料可能落入多個視窗。 | 例如每 1 分鐘統計最近 5 分鐘的資料。 | | **Hopping Window** | 以固定的間隔移動視窗,視窗大小與跳躍間隔可不同,會部分重疊。 | 滑動類似 Sliding,但定義較嚴謹(常與 Sliding 混用) | | **Session Window** | 當資料流有間隔一段時間沒出現時,就結束一個視窗。 | 適合追蹤使用者行為的 session,例如「15 分鐘內無操作就視為一個 Session 結束」。 |  👆**表格圖解** ### 📙 Bigtable v.s. Datastore | 特性 | Cloud Bigtable | Cloud Datastore | |--------------------------|-------------------------------------------------------------------------------|---------------------------------------------------------------------| | 資料庫類型 | 高性能、橫向擴展的 NoSQL 資料庫 | 可擴展的 NoSQL 文件資料庫 | | 資料儲存方式 | 儲存數十億筆列(rows),PB 等級資料 | 每筆資料以文件(document)存在,儲存在集合(collection)中 | | 適用場景 | 大規模、高吞吐量、低延遲的時間序列或交易型數據儲存;IoT、點擊流分析 | 需要強交易一致性的應用,如 POS 系統 | | ACID | 有限支援 | 支援 | | 適合用途 | 低延遲 NoSQL,時間序列、IoT、點擊流分析 | 強交易一致性需求,如 POS 系統 | ### 📙 Dataproc vs Dataprep vs Dataflow | **項目** | **Cloud Dataproc** | **Cloud Dataprep** | **Cloud Dataflow** | | -------- | -------------------------------------------- | ------------------------- | ----------------------------------- | | **定位** | 託管型 Hadoop / Spark / Hive 叢集服務 | **No-Code**資料清理與準備工具 | 可程式化批次與串流資料處理 | | **使用方式** | 自行管理叢集,提交 Spark / Hadoop / Hive Job | GUI 拖拉產生轉換 Recipe | 撰寫 Apache Beam/Python/Java pipeline | | **適用對象** | 大數據工程師(Spark / Hadoop 經驗者) | 分析師 / 無程式背景資料清理 | 資料工程師 | | **資料規模** | 大 (TB-PB) 、Batch | 小~中規模探索與清洗 | 大規模Batch+Streaming | | **支援模式** | 批次(Spark Streaming 可處理串流) | 批次 | 批次 + 實時串流 | | **擴充性** | 高,但需要管理叢集資源與費用 | 中,視 Dataflow 運算資源而定 | 高,完全 serverless | | **使用場景** | - 現有 Spark / Hadoop 作業遷移<br>- Hive/Presto 報表 | - 無程式碼快速清洗資料<br>- 互動式資料探索 | - 建立穩定 ETL 管線<br>- 實時串流運算與窗口處理 | * `Dataproc Metastore (DPMS)` 是 Google Cloud 上的全代管 Hive Metastore,讓 Spark、Hive、Presto 等服務能共用表格與分區 metadata,簡化在雲端管理資料湖的 schema 與目錄管理。 * `ParDo` 是 Apache Beam 的核心轉換,用於對 PCollection 中每個元素套用自訂處理邏輯,支援彈性拆分、條件邏輯與 side outputs。 ### 📙 Big Lake #### :blue_book: 基本介紹 BigLake 是 Google Cloud 上的 統一儲存表格層,可同時支援在 Cloud Storage、BigQuery、或外部儲存中的資料進行統一查詢與控管。 * 為跨格式與跨儲存系統設計的表格層(支援 BigQuery、Cloud Storage、Spark 同時處理) * 統一的表格層,支援跨儲存(GCS/BQ)與跨引擎查詢(BQ/Spark/Trino) * 儲存格式:Parquet / ORC / Avro(強調非結構化結構化皆可) #### :blue_book: 與BQ差別 * BigQuery:是 完整的數據倉儲系統,所有資料需先載入進去,擁有最佳效能、完整治理能力。 * BigLake:是一種 延伸功能,讓你可以像用 BigQuery 一樣查詢 GCS 中的資料,但資料不必載入,且可透過 BigQuery 的權限與治理系統控管。 ### 📙 Google Cloud Datalab * Google Cloud Datalab 是一個互動式的開發工具,基於 Jupyter Notebook,讓使用者能在 Google Cloud 上進行資料探索、視覺化與機器學習實驗。 * 支援與 BigQuery、Cloud Storage、TensorFlow 等 GCP 服務整合,讓資料科學家與工程師能快速撰寫 Python 程式、進行資料分析與模型訓練。不過,Datalab 現已逐步被 Vertex AI Notebook 等更現代的工具取代。 ### 📙 Google Cloud Dataproc 是一項由 Google 提供的全託管型服務,可讓你在 Google Cloud 上快速部署、管理和擴展 Apache Hadoop、Spark、Hive 和其他大數據工具。 * 簡化了傳統Cluster的建立與維運,只需數分鐘即可啟動一個完整的處理Cluster * 支援使用 Cloud Storage 做為主要儲存空間,避免 HDFS 的容量限制。 * Dataproc 適合處理像是 ETL、資料轉換、機器學習訓練與資料分析等工作,且具備彈性計費、與 BigQuery、Cloud Composer 等服務整合良好,是雲端環境中處理分散式大數據工作的高效選擇。 * ### 📙 Cloud Composer Cloud Composer 是 Google Cloud 上用來「排程與管理資料處理工作流程」的工具,底層是用 Apache Airflow 打造的。簡單說,它就像「智慧排程大師」,幫你 自動依照時間或條件,定時執行 ETL、資料清洗、機器學習訓練等流程。 * 雲端排程工具:Cloud Composer 用來自動排程與執行資料處理工作流程,不用手動每天跑流程。 * 底層是 Airflow:用 DAG(流程圖)定義先做什麼再做什麼,方便管理多步驟資料流程。 * 自動化工作流程:例如每天自動跑資料清洗、匯入 BigQuery、跑分析、寄報表。 * 視覺化監控:可在網頁介面看執行進度、錯誤重跑,不怕流程漏跑。 * 整合 Google 生態:和 BigQuery、Cloud Storage、Dataflow 等服務無縫串接,提升資料工程效率。 * Cloud Composer 是用於編排多步驟工作流程(如 ETL pipeline)的託管 Airflow,而 Cloud Scheduler 是類似 cron 的時間驅動排程服務,用於觸發單一任務或 HTTP/Pub/Sub 呼叫。 * Cloud Composer 是託管型服務,不需要或不應直接部署容器到其 GKE cluster * Cloud Composer 2 支援 Airflow REST API,用來觸發 DAG、查詢狀態等 * 因為 Composer 在 private VPC,需透過 Private Service Connect (PSC) 暴露 web server API 端點給 VPC 內部 ### 📙Cloud Spanner vs BigQuery vs Cloud SQL 對比速記表 | 項目 | BigQuery | Cloud Spanner | Cloud SQL | |------------------|--------------------------------|-----------------------------|--------------------------------| | 定位 | 分析型 OLAP 資料倉儲 | 全球分布式 OLTP DB | 區域型 OLTP RDBMS | | 主要用途 | 大數據分析、BI 報表 | 全球高一致交易、事務型應用 | 中小型交易應用 | | 擴充性 | 幾乎無限水平擴充 | 橫向擴充(高寫入/讀取吞吐) | 垂直擴充為主,橫向有限 | | SQL 支援 | ANSI SQL | ANSI SQL | 完整 SQL (Postgres, MySQL) | | 適合工作負載 | TB~PB 分析查詢 | 高寫入速率、全球交易 | 網站後端 DB | | 地理分布 | 儲存地區選擇後固定 | 全球多區域自動同步 | 區域限定 | | 延遲 | 秒級至分鐘級 | 毫秒級 | 毫秒級 | | 常見使用情境 | 分析 IoT/應用產生的大數據 | 全球金融/遊戲交易系統 | CMS、ERP、電商中小型站點 | * Cloud SQL 適合處理 OLTP 即時交易寫入,但不適合高吞吐量串流資料 ingestion,建議串流使用 Pub/Sub + BigQuery 或 Bigtable。 * 出現跨區域(Global)的應用情境更偏向用`cloud spanner` 而不是 `cloud SQL` * `Cloud SQL` 不支援 `cascading replicas`,通常在 `PostgreSQL` 開源環境中用 ### 📙 Dataplex Dataplex 是 Google Cloud 的資料湖管理與治理平台,用於統一管理跨 Cloud Storage、BigQuery 等資料資產,提供治理、自動分類、資料品質監控、資料目錄與安全存取控制,協助企業打造可治理的資料湖和 Data Mesh。 * 1️⃣ Lake (虛擬湖) * Dataplex 中最高層管理單位。 * 通常對應一個 Domain 或 Data Product。 * 2️⃣ Zone (分區) * Lake 內的邏輯分層: * Landing Zone:原始進來的原始資料。 * Raw Zone:輕微清洗的資料。 * Curated Zone:已加工整理好的資料可供分析。 * 可套用不同的治理規則和資料品質規則。 * 3️⃣ Asset (資產) * Zone 中掛載的實際資源,如: * Cloud Storage Bucket 路徑 * BigQuery Dataset * 資料存放的實體位置。 ### 📙 Cloud Vision v.s. Looker Studio | 工具 | 功能類型 | 適合對象 | 主要用途 | | ----------------- | ------- | ------------ | ---------------- | | **Cloud Vision** | AI 圖片分析 | 開發者、AI 應用 | 圖像辨識、OCR、標籤、安全審查 | | **Looker Studio** | 資料視覺化 | 商業分析師、非技術使用者 | 建立報表、儀表板、視覺化資料探索 | ### 📙 其他GCP服務 * Google Cloud Pub/Sub: 一個即時訊息傳遞服務,讓資料可以從發送端可靠地傳遞到接收端,即使兩邊不在同一時間運作也沒問題。 * Google Cloud Logging(原 Stackdriver Logging): 集中管理與分析 GCP 各服務的日誌,能即時搜尋、監控與觸發警示,是 DevOps 團隊追蹤系統行為的好幫手。 * Google App Engine Application: 一個全託管、無需管理伺服器的應用平台,開發者只需專注寫程式,系統自動處理擴展、流量與安全。 * Google Data Studio 360: 一個資料視覺化工具,可整合多個資料來源製作互動式報表與儀表板,幫助企業做出更快的資料決策。 * User vs. Service Account: User 是給人用來登入管理資源的帳號,而 Service Account 則是給系統與程式用來自動執行任務的帳號,方便權限控管與自動化操作。 * Analytics Hub: BigQuery 的資料分享平台,允許第三方查詢你的資料集而不需複製資料,維持效能同時降低儲存成本。 ### 📙 Cloud Data Loss Prevention (Cloud DLP) Google Cloud Data Loss Prevention (Cloud DLP) 是一項強大的**資料保護與敏感資料辨識服務**,可用於**發現、分類、遮罩、加密、刪除或轉換敏感資料**,如個資 (PII)、信用卡、政府識別號碼等。 #### 使用方式: * **API (即時分析)**:適用於 Web app / API server 資料檢查與處理。,可處理文字、JSON、資料欄位等。 * **DLP Job (批次掃描)**:支援 GCS、BigQuery、Datastore **批次掃描**。適用於資料湖、倉儲掃描敏感資料的分類與稽核。 * **與 Dataflow 結合**:搭配 Apache Beam,可處理大型串流或批次資料。 `支援 FPE(format-preserving encryption):加密後長得像原始資料(例如:9 位數字仍是 9 位數) (可還原加密)` #### 敏感資料處理: * **🔍 資料偵測**:自動掃描資料並偵測內建資訊類型 (infoTypes),例如:姓名、電子郵件、電話、信用卡、SSN 等。 * **🕵️ 敏感度評分**: 根據偵測到的敏感資料,提供風險指標 (likelihood score) * **🎭 遮罩 (Redaction)**:例如把 `123-45-6789` 變成 `***-**-6789`。 * 🔐 加密 / FPE (格式保留加密):加密資料,同時保留格式,方便資料在系統中繼續使用。 ### 📙 -- GCP相關的零碎考點 * Google Cloud Pub/Sub 中「acknowledgement deadline」是指 subscriber 必須在此時間內回覆 ack(確認收到)的時間限制。 * pub/sub中 dead-letter queue 僅捕捉「未被 ack」且超過最大重試的訊息;如果遇到ack錯誤的情境,在部署前建立 snapshot再使用 Seek 操作回到 snapshot 時間點是較推薦的做法。 * Pub/Sub 的 pull 是由訂閱者主動拉資料,push 則是由 Pub/Sub 自動把訊息送到指定的 endpoint。而 Push 使用 HTTP 並行發送,無法保證訊息處理順序 * 壓縮(如 Avro) 通常BigQuery 不會直接讓查詢變更快。 * BQ 查詢效能主要取決於: 1. 列式儲存設計(Columnar Storage) 2. 分區與分桶設計(Partitioning / Clustering) 3. 掃描資料量(bytes scanned) * 壓縮檔案(如 Avro)的優點在於: 1. 減少上傳時所需頻寬和儲存空間 2. 上傳至 BQ 時較有效率(因為支援列式壓縮格式) `Avro file`:一種支援資料壓縮與 schema 嵌入的二進位列式儲存格式,適合大數據管線高效傳輸與儲存。 * Cloud Composer 用於管理和自動化複雜的工作流程,Cloud Scheduler 則用於定時觸發單一任務或作業。 * Storage Transfer Service 是 透過網路將資料從雲端或 HTTP 移轉到 Cloud Storage 的線上服務,而 Transfer Appliance 是 透過實體設備離線搬移大量資料到 Google Cloud 的硬體解決方案。 * `Cloud Storage FUSE` 是一種工具,讓你可以將 Google Cloud Storage bucket 掛載成類似本地磁碟的檔案系統,用傳統檔案操作方式(如 cp, ls)讀寫雲端資料。 * gsutil(適合大型檔案搬遷,直接到 Cloud Storage); Storage Transfer Service,但針對來源是其他雲或 HTTP URL 比較有優勢。 * Cloud Interconnect 是 從本地資料中心到 Google Cloud 的專線連接服務,可提供穩定且低延遲的私有網路通道。 * Cloud Deployment Manager 是 Google Cloud 的基礎設施即程式碼(IaC)服務,用於以 YAML/模板方式自動化建立和管理 GCP 資源。 * Firebase Cloud Messaging 是 Google 提供的免費推播服務,可讓你向 iOS、Android 和 Web 應用即時傳送通知與資料訊息。 * **VPC Service Control**: Google Cloud 的資料邊界保護機制,用來防止敏感資料被未授權的專案或外部來源存取,即使 IAM 設定錯誤也能防止資料外洩。 ``` ╔════════════════════════════════════╗ ║ **VPC Service Controls** ║ ← 安全「邊界 perimeter」 ║ ╔═══════════════╗ ╔════════════╗ ║ ║ ║ Project A ║ ║ Project B ║ ║ ║ ║ [Pub/Sub] ║ ║ [Compute] ║ ║ ║ ║ [BigQuery] ║ ║ ║ ║ ║ ╚═══════════════╝ ╚════════════╝ ║ ╚════════════════════════════════════╝ ↑ ↑ │ └───── 外部專案、使用者、API CALL │ ✅ **只有 Project A 內部服務能互相存取** ❌ **Project B、外部無法 API 調用、跨專案讀取資料** ``` * `Google Cloud network tag` 是用來套用防火牆規則或路由規則的自訂標籤,可指定給特定 VM 實例,實現精細化網路控管。 * GCS的四種類型:Standard 適合頻繁存取,Nearline 適合每月存取,Coldline 適合每季存取,Archive 則適合備份與幾乎不取用的長期保存資料。 * `Private Google Access` :允許 無外部 IP 的 VM 在 VPC 中存取 Google APIs 和服務(例如:BigQuery、Cloud Storage),而無需透過公網。 * `PSC (Private Service Connect)` 是 Google Cloud 的私有連線機制,允許在 VPC 內安全地存取 Google APIs 或第三方服務,而不經由公共網路。 * `Data Fusion` 是 Google Cloud 上的可視化資料整合工具,可讓你透過拖拉介面輕鬆設計 ETL/ELT 資料管線,無需撰寫程式碼。 ## 📒 資料處理觀念 ### 📙 資料科學相關名詞 * Side-outputs 就是讓同一個流程可以同時輸出多條不同用途的資料流 ; Side-inputs 就是讓處理流程在處理每筆資料時,同時讀取額外的小資料(例如參考表、參數值)。 * TABLE_DATE_RANGE() 是 Legacy SQL 專用的函數,用來查詢一段時間內命名為 date-suffixed 的多個表 ```sql= SELECT * FROM TABLE_DATE_RANGE([project.dataset.app_events_], TIMESTAMP('2025-05-23'), TIMESTAMP('2025-06-22')) ``` * Global Unique Identifier (GUID 全域唯一識別碼)是一種用來唯一識別資料物件的字串識別碼,通常以 128 位元的格式存在,例如 3f2504e0-4f89-11d3-9a0c-0305e82c3301。GUID 被廣泛應用於分散式系統中,因為它能確保即使不同系統、不同地點產生的識別碼也不會重複 * **熱點集中**:固定row key(A01、A02)會導致bigtable大量讀取或寫入操作都集中在單一Node造成負載過高,效能下降。因此應該分散在不同節點(A#A01、F#A02) ### 📙分區的適用場景 #### 1. 時間分區(DATE/TIMESTAMP) - 最常用於事件資料、日誌、交易紀錄等。 - 適合查詢「最近 7 天」、「最近 30 天」、「過去 1 年」等時間範圍的場景。 #### 2. 整數範圍分區(Integer Range Partitioning) - 適用於以數值 ID(如 user_id、region_code)進行範圍查詢的需求。 - 例如:經常查詢 ID 在 1000–2000 之間的資料。 #### 3. 載入時間分區(Ingestion-time Partitioning) - 當沒有可用欄位可作為分區時,使用資料載入到 BigQuery 的時間作為分區依據。 * Partition 是根據「1個」欄位將資料表拆分成多個分區以減少掃描資料量,適合按時間或範圍查詢;Clustering 則是在分區內根據「多個」常被過濾的欄位進行排序,以進一步加速查詢和減少掃描成本。 ### 📙 Data Mech 資料網格(Data Mesh)是一種架構方法,旨在解決集中式數據架構(如數據倉庫和數據湖)在擴展性和數據管理方面遇到的挑戰。 它強調將數據所有權和管理權下放給各個業務領域,並鼓勵建立自助式數據基礎設施,讓各個領域的團隊能夠獨立地訪問和使用數據,從而提高數據的可用性和價值。 ### 📙 資料處理其他考點 * `Avro` 是一種由 Apache 開發的資料序列化格式(BigQuery適合用),廣泛應用於大數據處理框架(如 Apache Hadoop、Spark、Google Dataflow)。它支援結構化資料的高效編碼與內嵌 schema(模式)定義,讓資料傳輸與儲存既節省空間,又保有結構資訊。(可隨時間修改欄位定義) * `tape archive (TAR) file.` :TAR 是一種檔案打包格式,用來將多個檔案集合成一個單一檔案,方便傳輸或備份,內容本身未壓縮但可再結合 gzip 等壓縮工具使用。 * 在 `Bigtable` 或類似 NoSQL 資料庫中: * rowkey 是用來唯一識別每一列資料的鍵 * column data 是資料欄位的名稱與值組合, * data point 通常指的是每筆實際儲存的觀測或測量資料。 ```bash sensorA-0001#20250724T060000Z #由 裝置 ID(sensorA-0001) 與 ISO 8601 時間戳(20250724T060000Z) ``` ### 📙 -- 資料處理其他觀念 * `Pig` 是為處理複雜 ETL 工作設計的高階平台,執行在 Hadoop 上 * 需要自主管理、長期保留與完整控制用 Kafka,需要無維運、自動擴充與快速上線用 Pub/Sub。 * `retain-acked-messages` 是 Pub/Sub 訂閱設定,用來指定即使訊息已被確認(acked),仍保留訊息供日後查詢或重播。 * `ParDo transform` 可在 pipeline 中平行處理每個元素進行轉換,而 SideInput 是讓 ParDo 在處理時能讀取額外的輔助靜態資料作參考。 * `JDBC driver` 是 Java Database Connectivity 的驅動程式,用於在 Java 應用中透過標準 SQL 與資料庫進行連線與互動。 * `Crypto-deletion`(加密刪除):不是直接刪除資料,而是透過銷毀加密金鑰使資料無法被還原解密,以達到「刪除效果」 * `TPT` 是 Teradata 的高效資料匯入匯出工具,可支援並行作業以加速資料在 Teradata 與其他系統之間的搬移。 * `Pseudonym(偽名化)`是將敏感資料(如姓名、Email)轉換為不可辨識但可重複對應的代碼,以保護隱私同時保留資料的可關聯性(如可做 JOIN)。 * `Normalization(正規化)` 是資料庫設計的基本原則,目的是:消除資料重複、改善查詢效率、提升彈性與資料一致性 * 資料處理瓶頸問題: * | 資源瓶頸類型 | 解法 | | ----------------------- | ------------------------ | | 磁碟 I/O 慢(shuffle、spill) | 使用 PD/HDFS 儲存中繼資料,增加磁碟大小 | | 網路 I/O 慢(GCS 或跨區) | 增加 vCPU,改用高網速機型(如 N2、C2) | * `DDL`是資料定義語言(Data Definition Language)的縮寫,是SQL語言中的一部分,用於定義資料庫結構和物件,例如建立、修改或刪除資料表、檢視、索引等。 * `Stale reads` 是指使用「過去某個時間點的資料快照」,來提升效能與降低延遲。優點是速度快,但缺點是:資料可能不是最新的 * `Batch the job into ten-second increments.`表示將工作資料在管線中每 10 秒收集成一批再處理,以減少服務呼叫頻率並降低系統壓力。  [**SOURCE**](https://blog.algomaster.io/p/sharding-vs-partitioning) 👆**Partitioning跟Sharding的差別** * `reverse timestamp` 表示 讓最新資料排在前面 * `Partitioned table` 是在**同一張表中依特定欄位自動分區**以提升查詢效率,而 `sharded table` 則是依時間等規則**手動建立多張表**(如 `table_20240722`),管理與查詢更複雜。 * Sharded tables 是按照日期或規則分成多張獨立資料表; single partitioned table 是一張表中根據欄位(如日期)分區,更利於查詢與管理大型時間序列資料 * `Cascading replica` 是指從一個 read replica 再建立另一個 read replica,而不是直接從 primary 複製,形成多層複製鏈。 ### 📙 串流資料處理 #### 📘 Apache Kafka * Apache Kafka 是一個 分散式、高吞吐量、可擴展的事件串流平台, 用於: * 即時接收、儲存、發布和處理大量串流資料(如日誌、事件、交易流) * 作為 事件驅動架構和串流資料管線的核心組件 * 廣泛應用於 即時分析、監控、事件驅動微服務 * 📗:一個電商網站可以使用 Kafka 收集用戶點擊事件、訂單資料等即時推送到分析平台進行即時推薦或監控。 ##### 📘 相關服務 * `Kafka I/O` 是 Apache Beam / Dataflow 的一個內建連接器,可讓 Dataflow 直接從 Apache Kafka 讀取(consume)或寫入(produce)資料流,實現流式處理與管線串接。 ## 📒 ML & Big Data相關概念 ### 📙 GCP 在這個AI/ML的相關服務 #### 📘 Dialogflow Dialogflow 是 Google Cloud 提供的 對話式 AI 平台,用於構建 聊天機器人 (Chatbot) 和 語音助理 (Voice Assistant),可解析使用者自然語言輸入(文字或語音)並根據使用者意圖提供回應或觸發後端動作。 * 自然語言理解 (NLU): 解析使用者輸入文字或語音,提取 意圖 (Intent) 與 參數 (Entities)。 * 多語言支援: 支援超過 20 種語言與方言。 * 多平台整合:可直接部署至 Google Assistant、LINE、Facebook Messenger、Telegram、網站嵌入 等。 #### 📘 Vertex AI 是 Google Cloud 的機器學習平台,專門設計來訓練與部署基於 TensorFlow、PyTorch、XGBoost 等框架 的模型,並整合了 AutoML、Jupyter Notebook、模型管理與 MLOps 功能。 * 並不支援直接執行 Spark ML pipeline #### 📘 HDFS (Hadoop Distributed File System) (大數據相關) * HDFS 是 Hadoop 分散式檔案系統,專為: * 儲存與管理超大型資料集(PB 級) * 在多台伺服器上分散儲存資料 * 與 Hadoop MapReduce / Spark 等大數據運算框架搭配運作 * 適合 批次處理資料(Batch Processing) 場景,如 ETL、統計分析 * 📗:一家電信公司每天收集數十億條通話記錄,會將資料存放在 HDFS 上,再利用 Hadoop/Spark 進行批次統計分析和報表生成。 * Standard Persistent Disk 提供較低成本與穩定效能,適合順序 I/O;SSD Persistent Disk 則提供更高 IOPS 和低延遲,適合高效能、隨機存取工作負載。 #### 📘 其他 * `Cloud Vision AutoML (AutoML Vision) `可直接上傳 有標記資料 進行模型訓練,無需撰寫程式即可建立客製化影像分類模型。 * `Cloud Vision API` 提供通用的影像分析(標籤偵測、物件偵測、文字辨識) * `Cloud TPUs `是 Google 為加速 TensorFlow 等深度學習訓練與推論設計的專用硬體,而 GPU 則是可通用於各類運算加速(深度學習、影像處理等),支援 TensorFlow 完整運作,包括 GPU 與 CPU 混合計算 * 可將 Spark 處理後的資料匯出(例如 CSV 或 TFRecord) * 可以使用 Vertex AI 訓練 TensorFlow / PyTorch 模型 ### 📙 AI/ML/BigData零碎觀念 * `強化學習(Reinforcement Learning)`:透過「不斷與環境互動」來學習哪種行動能帶來最大獎勵,類似訓練動物或玩遊戲。 * `Synthetic feature` 是從現有特徵中經過轉換、組合或計算而產生的衍生特徵,用來提高機器學習模型的表現。 * `Spark MLlib` 是 Apache Spark 提供的分散式機器學習函式庫,支援分類、回歸、群集、降維等模型訓練與預測。 * `HiveQL` 類似 SQL,設計目的是讓使用者以類 SQL 方式查詢大數據 * `Entity Analysis` :能從一段文字中擷取出具體的實體(Entity):如人物、地點、組織、主題、產品等 * `L1` 與` L2 正規化`是防止模型過度記憶訓練資料(過擬合)的方法。L1 正規化會讓部分參數變成0,用於做特徵篩選;而 L2 正規化則是讓參數變小但不會變成零,平均分散權重大小。簡單來說,L1 幫你挑出關鍵特徵,L2 讓每個特徵都保持適當影響力。 * `Multi-cluster routing(多叢集路由)` 是指讓資料請求可以自動分配到多個叢集(cluster)處理,以提升服務穩定性與可用性的技術 * `One-hot encoding`:將分類變數轉換為多個二進位欄位,當資料屬於該類別時該欄為 1,否則為 0,用於讓模型能處理文字類別資料。 * `過擬合(Overfitting)`:模型在Train資料表現很好,但在新資料表現差,因為學到了太多訓練資料中的雜訊;`欠擬合(Underfitting)`:模型在訓練資料和新資料上表現都不好,因為模型太簡單無法捕捉資料中的重要模式。 * Overfitting(過擬合):訓練誤差 << 測試誤差;Underfitting(欠擬合):訓練誤差 ≈ 測試誤差且都很高 * `Train-serving skew`: 訓練資料與預測時使用資料的特徵處理不一致,導致模型表現不佳。 * `Feedforward Neural Network(前饋神經網路)`:資料只向前流動,沒有記憶過去的輸入;`Recurrent Neural Network(RNN,循環神經網路)`:資料會循環流動,有記憶性,可處理時間序列或有順序關係的資料。 * 大數據處理是為了清理、轉換與分析大量資料以快速取用洞見,支持即時決策與機器學習應用,而非儲存資料。 * Snapshot 是資料在相同地區(region)內的邏輯快照。若地區發生故障,snapshot 資料仍會無法存取 → 不符合容災需求 ## 📒 零碎知識點 * `BigQuery` 本身不保證去重(除非透過特定查詢處理) * `BigQuery`是一個分析型資料倉儲服務,不適合做即時交易處理(OLTP) * 把資料拆分到不同的 table 或 dataset,有助於設計細粒度權限(例如 Dataset A 是 HR 用,Dataset B 是 Finance 用) * `SFTP`:SFTP(Secure File Transfer Protocol)是一種透過 SSH 加密通道安全傳輸檔案的協定,常用於將資料安全地從本地端傳送到遠端伺服器。 * `S3-compatible storage endpoint`:S3-compatible storage endpoint 是一種模仿 AWS S3 API 的儲存服務介面,可讓工具或應用程式使用相同協定存取非 AWS 儲存系統。 * `ACID`:資料庫交易處理的四大特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),用來確保資料處理的可靠性與正確性。 * `Data skew` 指的是資料分佈極度不平均的情況,常導致某些工作節點負載過重、處理效率下降。 * Table 是實際儲存資料的實體,而 view 是查詢語句的虛擬結果集,不儲存資料,只是查詢邏輯的封裝。 * ` Materialized View` 是具備快取查詢結果的實體化視圖,查詢速度快;View 則是每次查詢都即時執行原始 SQL,沒有快取,速度較慢。 * `ANSI SQL` 是由美國國家標準協會制定的結構化查詢語言標準,用來查詢與操作關聯式資料庫,是許多 SQL 實作的共同基礎。 * `Flat-rate pricing` 模式:是專為解決「on-demand slots 不足」而設計的,允許你購買固定數量的 專用查詢槽(slots) * `Data Studio` 預設會啟用「快取 (Caching)」來加快查詢速度與減少 BigQuery 查詢成本。預設快取時間:最多 1 小時 * `LAG()` 在當前資料列中 取得同一分組內「前 N 筆資料」的欄位值 ; `ROW_NUMBER()`在當前資料列中 計算同一分組內依排序順序產生的「流水號」 * `Interactive BQ Queries`(互動式查詢):執行時會立即排入 BigQuery 排程並馬上開始執行Batch BQ Queries(批次查詢):將查詢排入佇列,系統會在 24 小時內自動執行 * 在 `BigQuery` 中,「專用查詢槽(slots)」可以想像成資料庫的工作席位,每個 slot 就像一個負責計算的工人,會幫你處理查詢計算的工作。`2K concurrent on-demand slots`是指 BigQuery 在按量計價(on-demand)模式下,當你送出查詢,BQ 會盡量幫你在後台分配最多 2000 個計算資源同時幫你拆解計算。 * `Forceful decommissioning` 是立即中斷並下線資源不管進行中的工作,而 Graceful decommissioning 則會讓當前進程完成後再下線資源以避免中斷服務。 * `Cloud EKM` 可讓金鑰僅儲存在 on-prem HSM,透過 API 與 Google Cloud(如 BigQuery)整合進行加解密,實現資料加密控制不出雲。 ## Reference * https://medium.com/data-scientists-playground/-data-engineer-%E8%AD%89%E7%85%A7%E5%88%86%E4%BA%AB-88f0dbf7c01b * https://medium.com/data-scientists-playground/google-professional-data-engineer-%E8%AD%89%E7%85%A7%E5%BF%83%E5%BE%97-225d80ad09fc * https://vocus.cc/article/66e7b4d1fd89780001b2594d * https://dongdonggcp.com/2024/10/01/how-to-pass-gcp-data-engineer-certification-test/ * https://medium.com/@ghoshsiddharth25/ultimate-guide-to-clear-the-google-cloud-professional-data-engineer-certification-exam-december-f4e8dbd1272f
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up