Ngân hàng đề — Google Cloud Associate Data Practitioner

Tìm thấy 333 câu.

Câu 1 Data Preparation and Ingestion

You have a 100 MB CSV file on your local computer that you need to load into a new table in BigQuery. You want to use a command-line tool to perform this one-time load as directly as possible.

Which command should you use?

  1. A gcloud storage cp my_file.csv gs://my-bucket
  2. B bq query 'SELECT * FROM my_file.csv'
  3. C bq load my_dataset.my_table my_file.csv
  4. D gcloud dataflow jobs run my_job
Xem giải thích

Đáp án

C — bq load my_dataset.my_table my_file.csv

Vì sao đúng

Đề nêu ba điều kiện: tệp CSV nằm trên máy cục bộ, dùng công cụ dòng lệnh, và nạp trực tiếp nhất có thể. bq load nạp thẳng từ máy vào BigQuery, không qua bước trung gian nào.

⚠ Điểm mấu chốt — bq load nhận cả đường dẫn cục bộ:

bq load \
  --source_format=CSV \
  --autodetect \
  --skip_leading_rows=1 \
  my_dataset.my_table \
  my_file.csv
        ↓
    Nguồn là ĐƯỜNG DẪN TRÊN MÁY
    → không cần đưa lên Cloud Storage trước
        ↓
    100 MB nằm trong giới hạn nạp cục bộ

⚠ Khi nào thì phải qua Cloud Storage:

Tệp CỤC BỘ
    → bq load trực tiếp
    → giới hạn kích thước, chậm hơn với file to

Tệp LỚN, hoặc nạp NHIỀU LẦN
    → tải lên Cloud Storage trước
    → bq load ... gs://bucket/file.csv
    → nhanh hơn, song song hơn, có thể dùng
      ký tự đại diện gs://bucket/prefix-*.csv
        ↓
    Đề nói "MỘT LẦN" và "trực tiếp nhất"
    → nạp thẳng

⚠ Các cờ hay dùng của bq load:

--autodetect            tự đoán lược đồ
--skip_leading_rows=1   bỏ dòng tiêu đề
--source_format=CSV|NEWLINE_DELIMITED_JSON|
                PARQUET|AVRO|ORC
--replace               ghi đè bảng
--time_partitioning_field=ngay
--max_bad_records=10

Vì sao các phương án khác sai

  • A (gcloud storage cp my_file.csv gs://my-bucket) — đây là phương án gần nhất và là bước đầu của cách đi vòng, nhưng nó chỉ tải tệp lên Cloud Storage, chưa hề nạp gì vào BigQuery. Vẫn cần thêm một lệnh bq load nữa — nên không phải "trực tiếp nhất".

  • B (bq query 'SELECT * FROM my_file.csv') — BigQuery không truy vấn được tệp trên máy cục bộ. Muốn truy vấn tệp tại chỗ thì phải là bảng ngoài (external table) trỏ vào Cloud Storage.

  • D (gcloud dataflow jobs run my_job) — Dataflow là quá nặng cho một lần nạp 100 MB, và lệnh này cần một template có sẵn.

Ghi nhớ

⚠ Các cách đưa dữ liệu vào BigQuery — bảng phải thuộc: | Cách | Dùng khi | |---|---| | bq load từ tệp cục bộ | nạp một lần, tệp nhỏ | | bq load từ gs:// | tệp lớn, nạp lặp lại, nhiều tệp | | BigQuery Data Transfer Service | nạp theo lịch từ nguồn có sẵn | | Storage Write API | nạp luồng, thời gian thực | | Dataflow | cần biến đổi phức tạp | | External table | truy vấn tại chỗ, không nạp |

Từ khoá nhận diện:

"nạp tệp cục bộ, một lần, dòng lệnh" → bq load "nạp theo lịch từ Google Ads, S3..." → Data Transfer Service "dữ liệu luồng thời gian thực" → Storage Write API hoặc Dataflow "truy vấn tệp mà không nạp" → external table "biến đổi phức tạp trên đường nạp" → Dataflow

Bốn công cụ dòng lệnh của GCP — nhắc lại Dùng cho
bq BigQuery
gcloud hầu hết dịch vụ
gcloud storage / gsutil Cloud Storage
kubectl GKE
Bẫy dùng nhầm công cụ là phương án sai kinh điển
Các lệnh bq hay dùng Lệnh
bq load nạp dữ liệu
bq query --use_legacy_sql=false 'SELECT ...' chạy truy vấn
bq mk --dataset <ten> tạo dataset
bq show <dataset>.<bang> xem lược đồ và siêu dữ liệu
bq ls liệt kê
bq extract xuất bảng ra Cloud Storage
bq cp sao chép bảng
--autodetect — tiện nhưng cần cẩn thận Nội dung
Cơ chế đọc mẫu vài dòng đầu để đoán kiểu
Rủi ro mã bưu chính có số 0 đầu → đoán thành INTEGER
Rủi ro ngày tháng định dạng lạ → thành STRING
An toàn hơn khai lược đồ tường minh bằng tệp JSON
Kiểm tra sau khi nạp bq show --schema
Sau khi nạp — ba việc nên làm Việc
Kiểm số dòng SELECT COUNT(*) so với tệp gốc
Kiểm kiểu dữ liệu bq show --schema <dataset>.<bang>
Kiểm giá trị null bất thường cột bị đoán sai kiểu thường sinh null
Nếu sai bq load --replace với lược đồ tường minh
Ghi nhớ nạp dữ liệu vào BigQuery MIỄN PHÍ — chỉ trả tiền lưu và truy vấn

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bảng đã có dữ liệu chưa | bq show my_dataset.my_table → Num Rows | | Lược đồ đúng chưa | bq show --schema --format=prettyjson | | Job nạp có lỗi gì | bq show -j <job_id> |

Và một thói quen đáng có với mọi lần nạp CSV: đừng tin --autodetect với dữ liệu định danh. Mã khách hàng, mã bưu chính, số điện thoại — những cột trông như số nhưng thực chất là chuỗi — rất hay bị đoán thành INTEGER, và số 0 ở đầu biến mất lặng lẽ. Khai lược đồ tường minh mất thêm vài phút, nhưng nó tránh được một lớp lỗi dữ liệu mà về sau rất khó truy ngược.

Câu 2 Data Pipeline Orchestration

You want to automate a simple, serverless task. Whenever a new .txt file is uploaded to a specific Cloud Storage bucket, you need to trigger a piece of code that reads the file's content and writes it to Cloud Logging.

Which combination of services provides the most direct and efficient way to achieve this?

  1. A Cloud Storage and a persistent Compute Engine VM
  2. B

    Cloud Storage and a Cloud Run function

  3. C Cloud Storage and Cloud Composer
  4. D Cloud Storage and BigQuery
Xem giải thích

Đáp án

B — Cloud Storage và một Cloud Run function.

Vì sao đúng

Đề mô tả đúng khuôn mẫu sự kiện → hàm nhỏ: tệp .txt được tải lên thì chạy một đoạn mã ngắn đọc nội dung và ghi vào Cloud Logging. Đây là bài toán mẫu của hàm không máy chủ.

⚠ Điểm mấu chốt — luồng sự kiện:

Tải file .txt lên bucket
        ↓
    Cloud Storage phát sự kiện
    google.cloud.storage.object.v1.finalized
        ↓
    Eventarc chuyển tới
        ↓
    Cloud Run function
        ↓
    Đọc nội dung, ghi ra Cloud Logging
        ↓
    ⚠ Không có máy chủ nào phải nuôi
    ⚠ Không có request thì KHÔNG TÍNH TIỀN

⚠ Triển khai:

gcloud functions deploy xu-ly-txt \
  --gen2 --runtime=python312 \
  --region=asia-southeast1 \
  --trigger-event-filters="type=google.cloud.storage.object.v1.finalized" \
  --trigger-event-filters="bucket=ten-bucket" \
  --entry-point=xu_ly
        ↓
    Trong hàm: lọc theo đuôi .txt
    (bộ lọc trigger không lọc theo đuôi tệp)

⚠ Vì sao ba phương án kia đều "quá tay":

VM luôn chạy
    → trả tiền 24/7 cho việc thỉnh thoảng mới xảy ra
    → phải tự vá, tự giám sát

Cloud Composer
    → điều phối luồng công việc PHỨC TẠP
    → chi phí nền RẤT LỚN cho một tác vụ nhỏ

BigQuery
    → kho dữ liệu phân tích
    → không phải nơi chạy mã theo sự kiện

Vì sao các phương án khác sai

  • C (Cloud Composer) — đây là phương án gần nhất về mặt "tự động hoá", nhưng Composer là Airflow được quản lý, dành cho điều phối luồng công việc nhiều bước có phụ thuộc. Nó chạy một môi trường thường trực, chi phí nền lớn hơn nhiều lần công việc này.

  • A (VM thường trực) — ngược hẳn yêu cầu "không máy chủ": trả tiền liên tục, phải tự vận hành.

  • D (BigQuery) — là kho phân tích, không phải nơi chạy mã phản ứng theo sự kiện.

Ghi nhớ

⚠ Chọn công cụ tự động hoá theo độ phức tạp — bảng phải thuộc: | Nhu cầu | Công cụ | |---|---| | Một đoạn mã nhỏ phản ứng theo sự kiện | Cloud Run function | | Dịch vụ container, xử lý dài hơn | Cloud Run | | Nhiều bước có phụ thuộc, cần điều phối | Cloud Composer (Airflow) | | Luồng nhẹ, ít bước, không cần Airflow | Workflows | | Chạy theo lịch đơn giản | Cloud Scheduler | | Xử lý dữ liệu quy mô lớn | Dataflow |

Từ khoá nhận diện:

"file lên bucket thì chạy đoạn mã nhỏ" → Cloud Run function "nhiều bước, phụ thuộc lẫn nhau, DAG" → Cloud Composer "điều phối nhẹ, gọi vài API" → Workflows "chạy đúng giờ mỗi ngày" → Cloud Scheduler "biến đổi dữ liệu luồng lớn" → Dataflow

Các sự kiện của Cloud Storage Sự kiện
object.v1.finalized tệp mới được ghi xong — hay dùng nhất
object.v1.deleted tệp bị xoá
object.v1.archived phiên bản bị lưu trữ
object.v1.metadataUpdated metadata đổi
Lưu ý finalized cũng phát khi GHI ĐÈ tệp cũ
Cloud Run function — điều cần nhớ Nội dung
Thế hệ 2 chạy trên nền Cloud Run, mạnh hơn hẳn
Thời gian tối đa tới 60 phút (gen2)
Bộ nhớ tới 32 GiB
Kích hoạt HTTP, Pub/Sub, Cloud Storage, Firestore, Eventarc
Co về 0 không dùng thì không tính tiền
--min-instances giảm khởi động nguội
Ba điều dễ sai với hàm theo sự kiện Nội dung
Sự kiện có thể tới NHIỀU LẦN xử lý phải bất biến (idempotent)
Không lọc được theo đuôi tệp ở trigger lọc trong mã
Hàm ghi lại vào chính bucket đó → VÒNG LẶP VÔ TẬN
Cách tránh vòng lặp ghi sang bucket KHÁC, hoặc kiểm tra tiền tố
Tệp lớn cân nhắc Cloud Run thay vì hàm
Chi phí — vì sao phương án không máy chủ thắng Nội dung
Cloud Run function trả theo lần gọi và thời gian chạy
VM thường trực trả 24/7 dù không có việc
Cloud Composer môi trường thường trực, chi phí nền cao
Với tần suất thấp chênh lệch hàng chục lần
Với tần suất rất cao, liên tục VM hoặc GKE có thể rẻ hơn

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Hàm có được gọi không | Logs Explorer, lọc theo tên hàm | | Trigger cấu hình đúng chưa | gcloud functions describe <ten> --gen2 | | Có bị gọi lặp không | đếm số lần gọi trên một tệp trong log |

Và một cái bẫy khiến hoá đơn tăng vọt trong im lặng: hàm ghi kết quả trở lại chính bucket đã kích hoạt nó. Mỗi lần ghi lại phát ra một sự kiện finalized mới, gọi lại chính hàm đó, và vòng lặp chạy cho tới khi ai đó nhận ra. Luôn ghi kết quả sang bucket khác, hoặc kiểm tra tiền tố ngay ở dòng đầu của hàm.

Câu 3 Data Preparation and Ingestion

Your company's security policy requires that all sensitive data extracted from an on-premises database must have its personally identifiable information (PII) masked before it is loaded into your BigQuery data warehouse in the cloud.

Which data manipulation methodology does this process describe?

  1. A ELT (Extract, Load, Transform)
  2. B Data Virtualization
  3. C Reverse ETL
  4. D ETL (Extract, Transform, Load)
Xem giải thích

Đáp án

D — ETL (Extract, Transform, Load — trích xuất, biến đổi, nạp).

Vì sao đúng

Chính sách trong đề nói rõ: PII phải được che TRƯỚC KHI nạp vào BigQuery. Thứ tự "biến đổi trước, nạp sau" chính là định nghĩa của ETL.

⚠ Điểm mấu chốt — thứ tự các chữ cái chính là câu trả lời:

ETL = Extract → Transform → LOAD
        ↓
    Trích xuất từ CSDL tại chỗ
        ↓
    CHE PII (transform)         ← xảy ra TRƯỚC
        ↓
    Nạp vào BigQuery
        ↓
    ⚠ Dữ liệu nhạy cảm CHƯA BAO GIỜ
      chạm tới kho đích

ELT = Extract → LOAD → Transform
        ↓
    Nạp dữ liệu THÔ vào kho trước
        ↓
    ⚠ PII đã nằm trong BigQuery rồi
    → VI PHẠM chính sách trong đề

⚠ Vì sao ELT phổ biến hơn nhưng vẫn không dùng được ở đây:

ELT hợp thời vì kho hiện đại rất mạnh
        ↓
    BigQuery biến đổi nhanh và rẻ
    Giữ được dữ liệu thô để làm lại
        ↓
    NHƯNG:
    ELT đòi hỏi dữ liệu THÔ được phép
    nằm trong kho
        ↓
    ⚠ Đề nói PII KHÔNG ĐƯỢC vào kho
    → bắt buộc ETL

⚠ Công cụ thực hiện ETL trên Google Cloud:

Dataflow          → biến đổi luồng và theo lô
Cloud Data Fusion → giao diện kéo thả, không cần lập trình
Dataproc          → Spark/Hadoop
Datastream + Dataflow → CDC từ CSDL tại chỗ
Cloud DLP (Sensitive Data Protection)
                  → PHÁT HIỆN và CHE PII

Vì sao các phương án khác sai

  • A (ELT) — đây là phương án gần nhất và là kiểu kiến trúc rất phổ biến với BigQuery, nhưng nó nạp dữ liệu THÔ vào kho trước rồi mới biến đổi — nghĩa là PII đã vào BigQuery, vi phạm chính sách.

  • B (Data Virtualization) — truy vấn dữ liệu tại nguồn mà không di chuyển nó; đề rõ ràng có bước nạp vào BigQuery.

  • C (Reverse ETL) — đưa dữ liệu TỪ kho NGƯỢC RA các hệ thống nghiệp vụ (CRM, công cụ marketing). Hướng ngược với đề.

Ghi nhớ

⚠ Bốn kiểu luồng dữ liệu — bảng phải thuộc: | Kiểu | Thứ tự | Dùng khi | |---|---|---| | ETL | trích xuất → BIẾN ĐỔI → nạp | phải làm sạch/che PII trước khi vào kho | | ELT | trích xuất → nạp → biến đổi | kho mạnh, muốn giữ dữ liệu thô | | Reverse ETL | kho → hệ thống nghiệp vụ | đẩy phân khúc khách hàng sang CRM | | Data Virtualization | truy vấn tại nguồn | không muốn sao chép dữ liệu |

Từ khoá nhận diện:

"che/làm sạch TRƯỚC KHI nạp" → ETL "nạp thô rồi biến đổi trong kho" → ELT "đưa dữ liệu từ kho ra CRM" → Reverse ETL "không di chuyển dữ liệu" → data virtualization, hoặc BigQuery external table / BigLake "phát hiện PII tự động" → Sensitive Data Protection (Cloud DLP)

Cách che PII trên Google Cloud Cách
Sensitive Data Protection (DLP) phát hiện và che, mã hoá giữ định dạng
Dynamic data masking của BigQuery che theo vai trò người xem
Column-level security policy tag của Data Catalog
Row-level security lọc dòng theo người dùng
Tokenization / hashing thay giá trị thật bằng token
Chọn ETL khi PII không được phép tồn tại trong kho
Ưu và nhược của ETL Nội dung
Ưu kho chỉ chứa dữ liệu đã sạch, đáp ứng tuân thủ
Ưu giảm dung lượng lưu trong kho
Nhược mất dữ liệu thô — không làm lại được
Nhược đổi logic biến đổi phải chạy lại từ nguồn
Nhược cần hạ tầng xử lý riêng
Ưu và nhược của ELT Nội dung
Ưu giữ dữ liệu thô, biến đổi lại lúc nào cũng được
Ưu tận dụng sức mạnh của BigQuery
Ưu triển khai nhanh hơn
Nhược dữ liệu nhạy cảm nằm trong kho
Nhược chi phí lưu trữ và truy vấn có thể cao hơn
Công cụ trên Google Cloud theo vai trò Công cụ
Dataflow biến đổi lô và luồng, Apache Beam
Cloud Data Fusion kéo thả, không cần lập trình
Dataproc Spark, Hadoop — chuyển từ tại chỗ lên
Datastream CDC từ CSDL quan hệ
Cloud Composer điều phối các bước
Dataform biến đổi bằng SQL trong BigQuery (ELT)

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Kho có còn PII không | quét bằng Sensitive Data Protection | | Bước che có chạy không | log của Dataflow / Data Fusion | | Ai xem được cột nhạy cảm | policy tag và IAM của BigQuery |

Và một điều nên cân nhắc khi thiết kế theo ETL vì lý do tuân thủ: hãy giữ lại dữ liệu thô ở một nơi có kiểm soát chặt — một bucket riêng, mã hoá bằng khoá của bạn, quyền truy cập rất hẹp. ETL bảo vệ kho, nhưng nếu logic che bị lỗi và bạn không còn nguồn để chạy lại, việc sửa sẽ phải bắt đầu bằng một lần trích xuất mới từ hệ thống tại chỗ.

Câu 4 Data Preparation and Ingestion

You are migrating an on-premises transactional MySQL database to Google Cloud. The application that uses this database requires very low latency and strong transactional consistency. Your team wants a fully managed solution that minimizes operational overhead.

Which Google Cloud database service is the most direct equivalent to a traditional, on-premises MySQL database?

  1. A BigQuery
  2. B Firestore
  3. C Cloud SQL for MySQL
  4. D Cloud Spanner
Xem giải thích

Đáp án

C — Cloud SQL for MySQL.

Vì sao đúng

Đề hỏi "tương đương trực tiếp nhất của một CSDL MySQL tại chỗ", kèm ba ràng buộc: giao dịch, độ trễ thấp, được quản lý hoàn toàn. Cloud SQL for MySQL đúng nghĩa là MySQL do Google vận hành.

⚠ Điểm mấu chốt — cùng một động cơ, khác người vận hành:

MySQL tại chỗ
        ↓
    Bạn lo: máy chủ, hệ điều hành, vá lỗi,
             sao lưu, nhân bản, chuyển đổi dự phòng

Cloud SQL for MySQL
        ↓
    CHÍNH LÀ MySQL — cùng giao thức,
    cùng SQL, cùng trình điều khiển
        ↓
    Google lo: hạ tầng, vá lỗi, sao lưu,
                HA, nhân bản
        ↓
    → ứng dụng thường CHỈ CẦN ĐỔI CHUỖI KẾT NỐI

⚠ Vì sao đây là kiểu chuyển đổi ít rủi ro nhất:

"Lift and shift" ở tầng dữ liệu
        ↓
    Không đổi mô hình dữ liệu
    Không viết lại truy vấn
    Không đổi thư viện kết nối
        ↓
    → dùng Database Migration Service
      chuyển với thời gian ngừng rất ngắn

⚠ Vì sao KHÔNG chọn Spanner ở câu này:

Spanner cũng có giao dịch và nhất quán mạnh
        ↓
    Nhưng nó KHÔNG phải MySQL:
      - động cơ riêng của Google
      - phải chỉnh lược đồ và truy vấn
      - chi phí tối thiểu cao hơn nhiều
        ↓
    Đề hỏi "TƯƠNG ĐƯƠNG TRỰC TIẾP"
    và "giảm công vận hành"
        ↓
    → Cloud SQL

Xem thêm câu #12563 (cùng lô): ở đó khoá là Cloud Spanner vì đề yêu cầu người dùng ở NHIỀU REGION và nhất quán mọi lúc. Câu này không có ràng buộc đa Region, lại nhấn mạnh "tương đương trực tiếp của MySQL". Hai khoá khác nhau vì ràng buộc khác nhau, không mâu thuẫn.

Vì sao các phương án khác sai

  • D (Cloud Spanner) — đây là phương án gần nhất và thoả được yêu cầu giao dịch, nhưng nó không phải MySQL: phải chỉnh lược đồ, chỉnh truy vấn, và chi phí tối thiểu cao hơn nhiều. Chỉ chọn khi cần quy mô toàn cầu.

  • A (BigQuery) — kho dữ liệu PHÂN TÍCH, không phục vụ giao dịch độ trễ thấp.

  • B (Firestore) — NoSQL dạng tài liệu, mô hình dữ liệu khác hẳn CSDL quan hệ.

Ghi nhớ

⚠ Chọn CSDL trên Google Cloud — bảng phải thuộc: | Nhu cầu | Dịch vụ | |---|---| | MySQL / PostgreSQL / SQL Server tại chỗ chuyển lên | Cloud SQL | | PostgreSQL hiệu năng cao, một Region | AlloyDB | | Quan hệ, NHIỀU REGION, nhất quán mạnh | Cloud Spanner | | NoSQL tài liệu, ứng dụng di động, thời gian thực | Firestore | | NoSQL khoá-giá trị, ghi cực lớn, chuỗi thời gian | Bigtable | | Phân tích, kho dữ liệu | BigQuery | | Bộ nhớ đệm | Memorystore (Redis, Valkey) |

Từ khoá nhận diện:

"tương đương trực tiếp của MySQL tại chỗ" → Cloud SQL for MySQL "nhiều Region + nhất quán mọi lúc" → Cloud Spanner "phân tích hàng tỉ dòng" → BigQuery "ứng dụng di động, đồng bộ thời gian thực" → Firestore "IoT, chuỗi thời gian, ghi hàng triệu điểm/giây" → Bigtable

Cloud SQL — điều cần nhớ Nội dung
Động cơ MySQL, PostgreSQL, SQL Server
HA cấu hình regional — máy dự phòng ở zone khác
Read replica cùng Region hoặc Region khác
Sao lưu tự động + point-in-time recovery
Kết nối riêng tư Private Service Access, hoặc Cloud SQL Auth Proxy
Bảo trì đặt cửa sổ bảo trì để chủ động
Chuyển MySQL lên Cloud SQL — công cụ Nội dung
Database Migration Service miễn phí, hỗ trợ chuyển liên tục
Cách sao chép ban đầu + CDC → thời gian ngừng rất ngắn
Kiểm tra trước phiên bản MySQL, engine bảng, plugin
Không hỗ trợ một số tính năng cần SUPER privilege
Sau khi chuyển so số dòng, chạy kiểm thử hiệu năng
Sẵn sàng cao cho Cloud SQL Nội dung
Cấu hình HA máy dự phòng đồng bộ ở zone khác
Chuyển đổi dự phòng tự động, thường dưới 60 giây
Read replica giảm tải đọc, có thể thăng cấp
Cross-region replica phòng sự cố cả Region
Chi phí HA gần như GẤP ĐÔI — cân nhắc theo môi trường
Khi nào NÊN rời Cloud SQL Dấu hiệu
Vượt trần ghi của một node → Spanner
Cần nhất quán mạnh đa Region → Spanner
Cần hiệu năng PostgreSQL cao hơn → AlloyDB
Khối lượng phân tích nặng → tách sang BigQuery
Nếu không có dấu hiệu nào Cloud SQL là lựa chọn rẻ và đủ

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Instance có bật HA không | gcloud sql instances describe <ten> → availabilityType: REGIONAL | | Có replica nào | cùng lệnh trên → replicaNames | | Sao lưu và PITR | → backupConfiguration.pointInTimeRecoveryEnabled |

Và một cấu hình rất nên bật ngay từ đầu với CSDL sản xuất: point-in-time recovery. Sao lưu hằng ngày chỉ đưa bạn về mốc gần nhất, còn PITR cho phép quay về đúng thời điểm trước một lệnh DELETE chạy nhầm — và loại sự cố đó xảy ra thường xuyên hơn sự cố phần cứng rất nhiều.

Câu 5 Data Preparation and Ingestion

A team of business analysts needs to build a data pipeline to clean and transform a CSV file. The team has strong SQL skills but is not proficient with programming languages like Java or Python. They want to use a tool that provides a graphical, no-code interface to build, visualize, and run their ETL pipeline.

Which service should they use?

  1. A Dataproc
  2. B Cloud Data Fusion
  3. C Cloud Composer
  4. D Dataflow
Xem giải thích

Đáp án

B — Cloud Data Fusion.

Vì sao đúng

Đề nêu ba đặc điểm của đội: giỏi SQL, không thạo Java hay Python, và cần giao diện đồ hoạ không phải viết mã để dựng, xem và chạy luồng ETL. Cloud Data Fusion sinh ra đúng cho nhóm người này.

⚠ Điểm mấu chốt — kéo thả thay vì viết mã:

Cloud Data Fusion
        ↓
    Giao diện WEB kéo thả
        ↓
    Kéo các "node":
      Nguồn → Wrangler → Biến đổi → Đích
        ↓
    Xem trực quan toàn bộ luồng
    Xem trước dữ liệu ở từng bước
        ↓
    ⚠ KHÔNG cần viết Java hay Python

⚠ Wrangler — thứ khiến người giỏi SQL thấy quen:

Nạp mẫu dữ liệu lên
        ↓
    Bấm vào cột để:
      tách, gộp, đổi kiểu,
      lọc, chuẩn hoá, che dữ liệu
        ↓
    Mỗi thao tác thành một BƯỚC trong công thức
        ↓
    → giống thao tác trên bảng tính
    → nhưng chạy được ở quy mô lớn

⚠ Bên dưới vẫn là hạ tầng thật:

Data Fusion (giao diện, dựa trên CDAP)
        ↓
    Sinh ra pipeline
        ↓
    Chạy trên DATAPROC (Spark) tạm thời
        ↓
    → đội không cần biết Spark
    → nhưng vẫn có quy mô của Spark
        ↓
    ⚠ Có chi phí instance thường trực
      của chính Data Fusion

Vì sao các phương án khác sai

  • D (Dataflow) — đây là phương án gần nhất về mục đích (đều là ETL), nhưng Dataflow đòi viết pipeline bằng Apache Beam trong Java hoặc Python — đúng thứ đội này không làm được. (Có template dựng sẵn, nhưng không phải môi trường dựng luồng bằng giao diện.)

  • A (Dataproc) — Spark/Hadoop được quản lý, vẫn phải viết mã Spark.

  • C (Cloud Composer) — điều phối các bước, không phải công cụ dựng phép biến đổi bằng giao diện.

Ghi nhớ

⚠ Bốn công cụ xử lý dữ liệu — bảng phải thuộc: | Công cụ | Bản chất | Đòi hỏi kỹ năng | |---|---|---| | Cloud Data Fusion | kéo thả, không cần mã | giao diện đồ hoạ | | Dataflow | Apache Beam, lô và luồng | Java / Python | | Dataproc | Spark, Hadoop được quản lý | Spark / Hadoop | | Cloud Composer | Airflow — ĐIỀU PHỐI | Python (DAG) | | Dataform | biến đổi bằng SQL trong BigQuery | SQL |

Từ khoá nhận diện:

"không cần lập trình, giao diện kéo thả" → Cloud Data Fusion "biến đổi luồng thời gian thực quy mô lớn" → Dataflow "đã có sẵn job Spark/Hadoop" → Dataproc "điều phối nhiều bước phụ thuộc" → Cloud Composer "chỉ dùng SQL, biến đổi trong BigQuery" → Dataform

Cloud Data Fusion — điều cần nhớ Nội dung
Nền tảng CDAP mã nguồn mở
Wrangler làm sạch dữ liệu trực quan
Hơn 150 plugin nguồn và đích dựng sẵn
Chạy trên Dataproc tạm thời
Ba phiên bản Developer, Basic, Enterprise
⚠ Chi phí instance chạy thường trực — không rẻ
Dataform — lựa chọn đáng cân nhắc cho đội giỏi SQL Nội dung
Bản chất quản lý các phép biến đổi SQL trong BigQuery
Mô hình ELT — nạp thô rồi biến đổi bằng SQL
Có phụ thuộc giữa bảng, kiểm thử chất lượng, phiên bản
Miễn phí chỉ trả tiền cho truy vấn BigQuery
So với Data Fusion rẻ hơn nhiều, nhưng phải viết SQL
Đề này chọn Data Fusion vì yêu cầu rõ giao diện đồ hoạ, no-code
Chọn công cụ theo kỹ năng của đội Đội
Nhà phân tích, không lập trình Data Fusion
Đội giỏi SQL, chấp nhận viết SQL Dataform, BigQuery
Kỹ sư dữ liệu Python/Java Dataflow
Đã có hệ sinh thái Spark Dataproc
Cần điều phối nhiều hệ thống Cloud Composer
Chi phí — điều nên biết trước Nội dung
Data Fusion tính theo GIỜ CHẠY của instance, kể cả khi rảnh
Dataflow theo tài nguyên job thật sự dùng
Dataproc theo VM; cụm tạm thời rẻ hơn nhiều
Composer môi trường thường trực — chi phí nền cao
Dataform miễn phí, chỉ trả tiền truy vấn
Lời khuyên tắt instance Data Fusion khi không dùng ở môi trường dev

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Pipeline chạy có lỗi không | giao diện Data Fusion → Pipeline runs | | Cụm Dataproc bên dưới thế nào | xem Compute profile của pipeline | | Chi phí thực tế | billing export, lọc SKU Data Fusion và Dataproc |

Và một điều nên nói rõ với đội trước khi chốt Data Fusion: instance của nó tính tiền theo giờ chạy, kể cả khi không có pipeline nào hoạt động. Với đội chỉ chạy vài luồng mỗi ngày, khoản này có thể lớn hơn cả chi phí xử lý dữ liệu — nên hãy tắt instance ở môi trường phát triển, và nếu đội thật sự thoải mái với SQL, Dataform đáng được đặt lên bàn cân.

Câu 6 Data Analysis and Presentation

You have just been given access to a new project with a very large BigQuery table named product_sales_2024. Before you write any complex analytical queries, you want to quickly inspect the table's structure and see a small sample of the data to understand the content of its columns.

Which query would be the most efficient way to see the first 10 rows of the table?

  1. A SELECT * FROM product_sales_2024 WHERE date < CURRENT_DATE();
  2. B SELECT * FROM product_sales_2024 LIMIT 10;
  3. C SELECT COUNT(*) FROM product_sales_2024;
  4. D SELECT * FROM product_sales_2024;
Xem giải thích

Đáp án

B — SELECT * FROM product_sales_2024 LIMIT 10;

Vì sao đúng

Trong bốn phương án, đây là câu duy nhất trả về đúng thứ cần: mười dòng đầu, đủ mọi cột, để xem cấu trúc bảng và nội dung mẫu.

⚠ Điểm mấu chốt — so sánh bốn truy vấn:

B: SELECT * ... LIMIT 10
    → 10 dòng, đủ cột
    → đúng yêu cầu

D: SELECT * (không LIMIT)
    → trả về TOÀN BỘ bảng rất lớn
    → kết quả khổng lồ, chờ lâu

C: SELECT COUNT(*)
    → chỉ ra MỘT SỐ
    → không thấy cột nào, không thấy dữ liệu

A: SELECT * WHERE date < CURRENT_DATE()
    → vẫn có thể trả hàng triệu dòng
    → thêm điều kiện không cần thiết

⚠ ⚠ Nhưng phải biết: LIMIT KHÔNG làm giảm chi phí quét:

BigQuery tính tiền theo
    SỐ BYTE ĐƯỢC QUÉT
        ↓
    SELECT * ... LIMIT 10
        ↓
    ⚠ Vẫn quét TOÀN BỘ các cột được chọn
    ⚠ LIMIT chỉ cắt bớt KẾT QUẢ TRẢ VỀ
        ↓
    → với bảng rất lớn, câu này vẫn tốn tiền

⚠ Ba cách xem mẫu dữ liệu MIỄN PHÍ hoàn toàn:

1. TABLE PREVIEW trong console
    → tab "Preview" — KHÔNG quét, KHÔNG tính tiền

2. bq head
    bq head -n 10 my_dataset.product_sales_2024
    → dùng API tabledata.list, MIỄN PHÍ

3. Xem lược đồ
    bq show --schema my_dataset.product_sales_2024
    → chỉ đọc metadata, MIỄN PHÍ

Vì sao các phương án khác sai

  • A (SELECT * ... WHERE date < CURRENT_DATE()) — đây là phương án gần nhất vì có lọc, nhưng điều kiện này không giới hạn số dòng — với bảng bán hàng cả năm, gần như toàn bộ dữ liệu đều thoả.

  • D (SELECT * không LIMIT) — trả về toàn bộ bảng rất lớn: chậm, kết quả không xem nổi.

  • C (SELECT COUNT(*)) — chỉ cho số dòng, không thấy cột nào, không đáp ứng yêu cầu xem cấu trúc và nội dung.

Ghi nhớ về chất lượng câu hỏi

Câu này đúng ở mức so sánh bốn phương án được cho, nhưng cần biết một điều quan trọng ngoài phạm vi đó: LIMIT KHÔNG giảm chi phí truy vấn của BigQuery. Chi phí tính theo số byte quét, và SELECT * buộc BigQuery đọc mọi cột.

Trong công việc thật, cách đúng để "xem nhanh dữ liệu mà không tốn tiền" là tab Preview của console hoặc bq head — cả hai đều miễn phí. Khoá B vẫn là đáp án đúng của câu này, chỉ là đừng mang thói quen "cứ LIMIT là rẻ" ra khỏi phòng thi.

Ghi nhớ

⚠ Xem nhanh dữ liệu BigQuery — bảng phải thuộc: | Cách | Chi phí | |---|---| | Tab Preview trong console | MIỄN PHÍ — không quét | | bq head -n 10 <bảng> | MIỄN PHÍ | | bq show --schema <bảng> | MIỄN PHÍ | | SELECT * ... LIMIT 10 | TÍNH TIỀN theo byte quét | | TABLESAMPLE SYSTEM (1 PERCENT) | quét ít hơn, có tính tiền |

Từ khoá nhận diện:

"xem mẫu dữ liệu" → Preview hoặc bq head (miễn phí) "xem cấu trúc bảng" → bq show --schema, hoặc INFORMATION_SCHEMA.COLUMNS "giảm chi phí truy vấn" → chọn ít cột + lọc theo cột PHÂN VÙNG "LIMIT giảm chi phí" → SAI "ước lượng chi phí trước" → --dry_run

Cách thật sự giảm chi phí BigQuery Cách
Chọn đúng cột, tránh SELECT * hiệu quả nhất — BigQuery lưu theo CỘT
Lọc theo cột PHÂN VÙNG cắt hẳn phần dữ liệu phải đọc
Phân cụm (clustering) giảm thêm khi lọc theo cột phân cụm
--dry_run biết trước sẽ quét bao nhiêu byte
maximum_bytes_billed đặt trần an toàn
Materialized view cho truy vấn lặp lại
Vì sao lưu theo cột lại quan trọng Nội dung
BigQuery lưu theo CỘT, không theo dòng
Chọn 2/50 cột chỉ đọc 2 cột → rẻ hơn nhiều
SELECT * đọc HẾT 50 cột
Vì vậy liệt kê cột tường minh là thói quen quan trọng nhất
LIMIT không thay đổi số cột phải đọc
Tìm hiểu một bảng lạ — quy trình Bước
1 bq show <dataset>.<bảng> — số dòng, dung lượng, phân vùng
2 bq show --schema — tên và kiểu cột
3 Preview — nhìn dữ liệu thật, miễn phí
4 INFORMATION_SCHEMA.COLUMNS — tra bằng SQL
5 Khi đã hiểu, viết truy vấn chọn đúng cột
Hai loại giá của BigQuery Nội dung
On-demand trả theo byte quét — mặc định
Editions / capacity trả theo slot — hợp với khối lượng lớn, ổn định
1 TiB quét đầu mỗi tháng miễn phí
Lưu trữ tính riêng; bảng không sửa 90 ngày rẻ hơn
Nạp dữ liệu theo lô miễn phí

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn sẽ quét bao nhiêu | bq query --dry_run, hoặc chỉ báo trong console | | Bảng có phân vùng không | bq show → Time Partitioning | | Ai đang tốn nhiều nhất | INFORMATION_SCHEMA.JOBS |

Và một cài đặt nên bật cho mọi người mới vào dự án: maximum_bytes_billed. Một câu SELECT * gõ vội trên bảng vài trăm TiB có thể sinh hoá đơn đáng nhớ trong vài giây, và trần này biến sự cố đó thành một thông báo lỗi vô hại.

Câu 7 Data Pipeline Orchestration

A marketing manager has asked you to generate a report of the previous day's campaign performance. The report is based on a single SQL query that runs on a table in BigQuery. They need this report to be updated every morning at 8 AM automatically. You want to accomplish this with minimal setup and without writing custom code.

What is the most straightforward way to meet this requirement?

  1. A

    Use the "Scheduled queries" feature directly within the BigQuery UI.

  2. B Create a Cloud Function triggered by Cloud Scheduler to run the query.
  3. C Use Cloud Composer to build a DAG that executes the query.
  4. D Write a script on a Compute Engine VM and use a cron job to execute it.
Xem giải thích

Đáp án

A — Dùng tính năng "Scheduled queries" (truy vấn theo lịch) ngay trong giao diện BigQuery.

Vì sao đúng

Đề nêu rõ hai ràng buộc: thiết lập tối thiểu và không viết mã. Yêu cầu chỉ là một câu SQL chạy mỗi sáng 8 giờ — đúng phạm vi của scheduled query.

⚠ Điểm mấu chốt — tất cả nằm trong BigQuery:

Trong giao diện BigQuery:
    Viết truy vấn
        ↓
    Bấm "Schedule"
        ↓
    Đặt: lặp lại hằng ngày, 08:00,
         múi giờ, bảng đích, chế độ ghi
        ↓
    ⚠ KHÔNG cần hàm, không cần Airflow,
      không cần máy chủ, không cần mã

⚠ Bên dưới là BigQuery Data Transfer Service:

Scheduled query
        ↓
    Chạy trên nền BigQuery Data Transfer Service
        ↓
    → có LỊCH SỬ CHẠY và log
    → có thử lại
    → có thông báo qua Pub/Sub khi hỏng
        ↓
    Bản thân dịch vụ MIỄN PHÍ
    → chỉ trả tiền cho chính truy vấn

⚠ Ba lựa chọn cấu hình quan trọng:

Chế độ ghi bảng đích:
    WRITE_TRUNCATE  → ghi đè — báo cáo "ảnh chụp"
    WRITE_APPEND    → nối thêm — dữ liệu lịch sử

Múi giờ:
    ⚠ mặc định UTC — 8 giờ sáng giờ nào?

Tham số thời gian chạy:
    @run_date, @run_time
    → dùng để lấy "dữ liệu ngày hôm qua"

Vì sao các phương án khác sai

  • B (Cloud Function + Cloud Scheduler) — đây là phương án gần nhất và hoàn toàn chạy được, nhưng cần viết mã, triển khai hàm, cấu hình quyền và một job lịch riêng — nhiều bước hơn hẳn cho cùng một kết quả.

  • C (Cloud Composer) — Airflow được quản lý, phải viết DAG bằng Python và duy trì một môi trường thường trực tốn kém. Quá nặng cho một truy vấn.

  • D (script trên VM + cron) — công vận hành cao nhất: máy phải luôn chạy, phải vá lỗi, phải tự lo giám sát và thử lại.

Ghi nhớ

⚠ Chạy SQL theo lịch — chọn công cụ theo độ phức tạp: | Nhu cầu | Công cụ | |---|---| | Một truy vấn, lịch cố định | BigQuery scheduled query | | Vài bước SQL có phụ thuộc | Dataform | | Nhiều hệ thống, phụ thuộc phức tạp | Cloud Composer | | Kích hoạt mã tuỳ ý theo giờ | Cloud Scheduler + Cloud Run | | Nạp định kỳ từ nguồn ngoài | Data Transfer Service |

Từ khoá nhận diện:

"một truy vấn, mỗi sáng, không viết mã" → scheduled query "DAG, phụ thuộc, nhiều hệ thống" → Cloud Composer "chuỗi phép biến đổi SQL có kiểm thử" → Dataform "gọi API theo giờ" → Cloud Scheduler "nạp từ Google Ads, YouTube, S3 theo lịch" → Data Transfer Service

Scheduled query — điều cần nhớ Nội dung
Nền tảng BigQuery Data Transfer Service
Chi phí dịch vụ miễn phí — chỉ trả tiền truy vấn
Tần suất tối thiểu 15 phút một lần
Múi giờ đặt được — mặc định UTC
Chạy dưới danh nghĩa tài khoản người tạo, hoặc service account
Thông báo qua Pub/Sub hoặc email khi hỏng
Tham số thời gian chạy Tham số
@run_date ngày chạy, dạng YYYY-MM-DD
@run_time dấu thời gian chạy
Dùng để lấy đúng dữ liệu "ngày hôm qua"
Ví dụ WHERE ngay = DATE_SUB(@run_date, INTERVAL 1 DAY)
Với bảng phân vùng _TABLE_SUFFIX cho bảng theo ngày
Thực hành tốt cho báo cáo hằng ngày Nội dung
Chạy dưới service account không phụ thuộc tài khoản cá nhân
Bật thông báo khi hỏng qua Pub/Sub → cảnh báo
Ghi vào bảng đích có PHÂN VÙNG theo ngày báo cáo
WRITE_TRUNCATE cho ảnh chụp WRITE_APPEND cho lịch sử
Đặt múi giờ tường minh tránh lệch 7 giờ
Nối tiếp Looker Studio đọc bảng đích
Vì sao "chạy dưới danh nghĩa cá nhân" là rủi ro Nội dung
Người tạo rời công ty tài khoản bị vô hiệu → job hỏng
Người tạo bị thu hồi quyền job hỏng lặng lẽ
Khắc phục dùng service account ngay từ đầu
Cần roles/iam.serviceAccountUser trên SA đó
Kiểm tra định kỳ lịch sử chạy của các scheduled query

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Job đã chạy chưa | BigQuery → Scheduled queries → Run history | | Chạy dưới danh nghĩa ai | xem cấu hình của scheduled query | | Bảng đích có dữ liệu mới không | SELECT MAX(<cột ngày>) FROM <bảng đích> |

Và một chi tiết rất hay gây sự cố sau vài tháng: scheduled query mặc định chạy dưới danh nghĩa người tạo ra nó. Khi người đó đổi vai trò hoặc rời công ty, báo cáo dừng chạy mà không ai được báo — và thường phải tới lúc có người hỏi "sao số liệu vẫn là của tuần trước" thì mới phát hiện ra. Chuyển sang service account ngay từ đầu là cách tránh gọn nhất.

Câu 8 Data Management

Your team is setting up a Cloud Storage bucket to store application log files. These logs are generated continuously and need to be analyzed immediately upon creation by a dashboarding tool. Performance and quick access are the top priorities.

Which storage class should you choose for this bucket?

  1. A Archive
  2. B Coldline
  3. C Standard
  4. D Nearline
Xem giải thích

Đáp án

C — Standard.

Vì sao đúng

Đề nói log được sinh liên tục và phải phân tích NGAY khi tạo ra, với ưu tiên hàng đầu là hiệu năng và truy cập nhanh. Đó chính là mô tả của dữ liệu nóng — lớp Standard.

⚠ Điểm mấu chốt — chọn lớp theo TẦN SUẤT TRUY CẬP:

Truy cập THƯỜNG XUYÊN, liên tục
    → STANDARD                    ← đề này

Khoảng 1 lần/tháng
    → NEARLINE

Khoảng 1 lần/quý
    → COLDLINE

Dưới 1 lần/năm
    → ARCHIVE

⚠ Vì sao ba lớp lạnh đều sai ở đây — hai lý do:

LÝ DO 1 — PHÍ TRUY XUẤT
    Lớp lạnh tính tiền MỖI LẦN ĐỌC
        ↓
    Dashboard đọc liên tục
        ↓
    → phí truy xuất VƯỢT XA
      phần tiết kiệm được khi lưu

LÝ DO 2 — THỜI GIAN LƯU TỐI THIỂU
    Nearline 30 ngày, Coldline 90, Archive 365
        ↓
    Log mới ghi mà xoá hoặc đổi lớp sớm
        ↓
    → bị tính PHÍ XOÁ SỚM

⚠ Một điều thường bị hiểu lầm:

Cả bốn lớp đều có:
    - CÙNG độ bền (11 số 9)
    - CÙNG độ trễ truy cập (mili giây)
        ↓
    ⚠ Lớp lạnh KHÔNG chậm hơn khi đọc
    → khác biệt nằm ở GIÁ, không ở TỐC ĐỘ
        ↓
    Nhưng với dữ liệu đọc liên tục,
    giá mới là thứ quyết định

Xem thêm câu #12923 (cùng lô): cùng chủ đề lớp lưu trữ nhưng đề nói dữ liệu cũ truy cập vài lần MỖI THÁNG → khoá là Nearline. Và #12588 (cùng lô) đổi sang Coldline cho dữ liệu lạnh hơn nữa. Ba khoá khác nhau vì tần suất truy cập khác nhau — hoàn toàn nhất quán.

Vì sao các phương án khác sai

  • D (Nearline) — đây là phương án gần nhất trong nhóm lạnh, nhưng nó dành cho dữ liệu truy cập khoảng một lần mỗi tháng, có phí truy xuất và tối thiểu 30 ngày. Log đọc liên tục sẽ đắt hơn hẳn Standard.

  • B (Coldline) — cho dữ liệu khoảng một lần mỗi quý; phí truy xuất cao hơn nữa.

  • A (Archive) — cho dữ liệu dưới một lần mỗi năm; đắt nhất khi đọc, tối thiểu 365 ngày.

Ghi nhớ

⚠ Bốn lớp lưu trữ — bảng phải thuộc: | Lớp | Tần suất truy cập | Tối thiểu | Phí truy xuất | |---|---|---|---| | Standard | liên tục, thường xuyên | không có | không có | | Nearline | ~1 lần/tháng | 30 ngày | có | | Coldline | ~1 lần/quý | 90 ngày | cao hơn | | Archive | <1 lần/năm | 365 ngày | cao nhất | | Điểm chung | cùng độ bền, cùng độ trễ mili giây |

Từ khoá nhận diện:

"phân tích ngay, hiệu năng ưu tiên" → Standard "vài lần mỗi tháng" → Nearline "vài lần mỗi quý" → Coldline "lưu trữ tuân thủ, hầu như không đọc" → Archive "không đoán được mẫu truy cập" → Autoclass

Bốn kiểu vị trí bucket Nội dung
Region một Region — độ trễ thấp nhất, rẻ nhất
Dual-region hai Region cụ thể, nhân bản
Multi-region phục vụ người dùng phân tán
Lưu ý vị trí KHÔNG đổi được sau khi tạo
Chi phí multi-region đắt hơn
Vòng đời điển hình của log Bước
0–30 ngày Standard — dashboard đọc liên tục
30–90 ngày Nearline — thỉnh thoảng tra cứu
90–365 ngày Coldline — điều tra sự cố hiếm hoi
> 1 năm Archive — giữ để tuân thủ
Thực hiện lifecycle rule tự động, không làm tay
Với log — cân nhắc thêm lựa chọn khác Nội dung
Cloud Logging log bucket giữ, tìm kiếm, cảnh báo ngay trong Logging
Sink sang BigQuery phân tích bằng SQL
Sink sang Cloud Storage lưu lâu, rẻ
Log Analytics truy vấn SQL trên chính log bucket
Với dashboard BigQuery + Looker Studio thường tiện hơn đọc file thô
Ba con số về chi phí nên nhớ Nội dung
Standard giá lưu cao nhất, không phí đọc
Archive giá lưu rẻ nhất, phí đọc cao nhất
Điểm hoà vốn phụ thuộc số lần đọc mỗi tháng
Quy tắc thực dụng đọc nhiều hơn 1 lần/tháng → cân nhắc Standard
Công cụ Pricing Calculator, và billing export

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket đang ở lớp nào | gcloud storage buckets describe gs://b | | Dữ liệu thật sự được đọc bao nhiêu | Monitoring, chỉ số request của bucket | | Chi phí chia theo lớp | billing export, nhóm theo SKU |

Và một điều cần tính trước khi chuyển log sang lớp lạnh cho "tiết kiệm": hãy đo số lần đọc thật trước đã. Với dữ liệu mà dashboard quét đều đặn, phí truy xuất của Nearline hay Coldline có thể vượt xa phần tiết kiệm được ở giá lưu — và bạn sẽ trả nhiều hơn để đổi lấy cảm giác đang tối ưu.

Câu 9 Data Analysis and Presentation

A financial services company has a dataset of customer transactions in BigQuery. They want to create a model to predict which customers are likely to default on a loan. The data science team wants to build, train, and evaluate this model using only SQL queries directly within BigQuery.

Which Google Cloud technology is designed for this?

  1. A Vertex AI Pipelines
  2. B Looker
  3. C AutoML Tables
  4. D BigQuery ML (BQML)
Xem giải thích

Đáp án

D — BigQuery ML (BQML).

Vì sao đúng

Đề nói rõ: dữ liệu đã nằm trong BigQuery, và đội muốn dựng, huấn luyện và đánh giá mô hình CHỈ BẰNG SQL, ngay trong BigQuery. Đó là toàn bộ lý do BigQuery ML tồn tại.

⚠ Điểm mấu chốt — huấn luyện bằng một câu SQL:

CREATE OR REPLACE MODEL `du_an.du_doan_vo_no`
OPTIONS(
  model_type = 'LOGISTIC_REG',
  input_label_cols = ['vo_no']
) AS
SELECT thu_nhap, so_du, so_lan_tre_han, vo_no
FROM `du_an.giao_dich_khach_hang`;
        ↓
    ⚠ Dữ liệu KHÔNG rời khỏi BigQuery
    ⚠ Không cần Python, không cần hạ tầng

⚠ Đánh giá và dự đoán cũng bằng SQL:

-- đánh giá
SELECT * FROM ML.EVALUATE(MODEL `du_an.du_doan_vo_no`);

-- dự đoán
SELECT * FROM ML.PREDICT(
  MODEL `du_an.du_doan_vo_no`,
  (SELECT * FROM `du_an.khach_hang_moi`));

-- giải thích
SELECT * FROM ML.EXPLAIN_PREDICT(...);

⚠ Vì sao "dữ liệu không phải di chuyển" lại quan trọng:

Cách truyền thống:
    Xuất dữ liệu khỏi kho
        ↓
    Đưa vào môi trường huấn luyện
        ↓
    ⚠ Với dữ liệu tài chính: thêm một
      bản sao dữ liệu nhạy cảm cần bảo vệ
      + thời gian + quyền truy cập

BQML:
    Mô hình chạy TẠI CHỖ trong BigQuery
        ↓
    → ít rủi ro tuân thủ hơn hẳn

Vì sao các phương án khác sai

  • C (AutoML Tables) — đây là phương án gần nhất vì cũng huấn luyện mô hình trên dữ liệu bảng ít cần viết mã, nhưng nó là giao diện của Vertex AI, không phải "chỉ dùng SQL trong BigQuery". (Chức năng này nay đã gộp vào Vertex AI, và BQML cũng gọi được AutoML qua model_type='AUTOML_CLASSIFIER'.)

  • A (Vertex AI Pipelines) — điều phối luồng công việc học máy, cần viết mã Python và định nghĩa pipeline.

  • B (Looker) — nền tảng trực quan hoá và BI, không huấn luyện mô hình.

Ghi nhớ

⚠ Chọn công cụ học máy trên Google Cloud — bảng phải thuộc: | Nhu cầu | Công cụ | |---|---| | Dữ liệu đã ở BigQuery, chỉ dùng SQL | BigQuery ML | | Toàn bộ vòng đời ML, viết mã Python | Vertex AI | | Điều phối các bước huấn luyện | Vertex AI Pipelines | | Mô hình dựng sẵn: ảnh, ngôn ngữ, giọng nói | API của Vertex AI | | Trực quan hoá, BI | Looker, Looker Studio |

Từ khoá nhận diện:

"chỉ dùng SQL, ngay trong BigQuery" → BigQuery ML "đội giỏi Python, cần kiểm soát chi tiết" → Vertex AI "nhận dạng ảnh, dịch, chuyển giọng nói" → API dựng sẵn "điều phối nhiều bước ML" → Vertex AI Pipelines "báo cáo, biểu đồ" → Looker Studio

Các loại mô hình của BQML Loại
LOGISTIC_REG phân loại — như dự đoán vỡ nợ
LINEAR_REG dự báo giá trị số
BOOSTED_TREE_CLASSIFIER/REGRESSOR XGBoost — thường mạnh nhất với dữ liệu bảng
KMEANS phân cụm khách hàng
ARIMA_PLUS dự báo chuỗi thời gian
MATRIX_FACTORIZATION hệ gợi ý
AUTOML_CLASSIFIER gọi AutoML từ trong SQL
TENSORFLOW / ONNX nhập mô hình có sẵn
Các hàm ML. hay dùng Hàm
ML.EVALUATE độ chính xác, AUC, precision, recall
ML.PREDICT dự đoán
ML.EXPLAIN_PREDICT giải thích từng dự đoán
ML.FEATURE_IMPORTANCE đặc trưng nào quan trọng
ML.CONFUSION_MATRIX ma trận nhầm lẫn
ML.TRAINING_INFO quá trình huấn luyện
Với bài toán tín dụng — điều phải cẩn thận Nội dung
Công bằng và thiên lệch mô hình có thể phân biệt đối xử gián tiếp
Khả năng giải thích nhiều nơi bắt buộc giải thích lý do từ chối
Dùng ML.EXPLAIN_PREDICT để trả lời "vì sao"
Tránh đặc trưng nhạy cảm và cả các biến thay thế cho chúng
Giám sát trôi dữ liệu mô hình cũ đi theo thời gian
Chi phí của BQML Nội dung
Huấn luyện tính theo byte xử lý, hoặc slot
ML.PREDICT như một truy vấn thường
Mô hình AutoML trong BQML đắt hơn đáng kể
Mẹo huấn luyện trên mẫu dữ liệu trước
Trần an toàn maximum_bytes_billed

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Mô hình tốt tới đâu | ML.EVALUATE — xem AUC, precision, recall | | Đặc trưng nào quan trọng | ML.FEATURE_IMPORTANCE | | Mô hình đang dùng dữ liệu nào | ML.TRAINING_INFO và định nghĩa mô hình |

Và một cạm bẫy rất dễ rơi vào với bài toán vỡ nợ: dữ liệu mất cân bằng nặng. Nếu chỉ 2% khách hàng vỡ nợ, một mô hình dự đoán "không ai vỡ nợ" đã đạt 98% độ chính xác mà hoàn toàn vô dụng. Hãy đọc AUC, precision và recall trong ML.EVALUATE thay vì nhìn con số accuracy — đó là khác biệt giữa một mô hình dùng được và một con số đẹp.

Câu 10 Data Pipeline Orchestration

A Dataflow pipeline job has failed. To begin your investigation, you need to find the specific error messages and stack traces generated by the pipeline workers.

Which Google Cloud service should you navigate to in order to find these detailed logs?

  1. A Cloud Profiler
  2. B Cloud Logging
  3. C Cloud Trace
  4. D Cloud Debugger
Xem giải thích

Đáp án

B — Cloud Logging.

Vì sao đúng

Đề cần thông báo lỗi và stack trace do worker của Dataflow sinh ra. Đó là log, và mọi log của Google Cloud đều đổ về Cloud Logging.

⚠ Điểm mấu chốt — bốn công cụ quan sát, mỗi cái một loại dữ liệu:

CLOUD LOGGING
    → LOG: dòng chữ, thông báo lỗi,
      STACK TRACE                     ← đề này

CLOUD MONITORING
    → CHỈ SỐ: CPU, độ trễ, thông lượng

CLOUD TRACE
    → DẤU VẾT: một request đi qua các
      dịch vụ mất bao lâu ở đâu

CLOUD PROFILER
    → HỒ SƠ HIỆU NĂNG: hàm nào tốn CPU,
      tốn bộ nhớ

⚠ Tìm log của Dataflow ở đâu:

Giao diện Dataflow → chọn job → tab "Logs"
        ↓
    Có hai nhóm:
      JOB LOGS    → thông điệp của dịch vụ
      WORKER LOGS → mã của bạn, STACK TRACE

Trong Logs Explorer:
  resource.type="dataflow_step"
  resource.labels.job_id="<job id>"
  severity>=ERROR

⚠ Quy trình gỡ lỗi một job Dataflow hỏng:

1. Đọc thông báo lỗi ở tab Job Logs
2. Lọc severity>=ERROR trong Worker Logs
       → tìm stack trace đầu tiên
3. Xem "Job graph" — bước nào dừng
4. Xem chỉ số worker trong Monitoring
       → có phải hết bộ nhớ không
5. Nếu chậm chứ không lỗi → Profiler

Vì sao các phương án khác sai

  • A (Cloud Profiler) — đây là phương án dễ nhầm nhất khi nghĩ tới "công cụ chẩn đoán", nhưng nó cho biết hàm nào tốn CPU và bộ nhớ, không phải nơi đọc thông báo lỗi.

  • C (Cloud Trace) — theo dõi độ trễ của một request qua nhiều dịch vụ, dùng để tìm nút thắt, không phải để đọc stack trace của job thất bại.

  • D (Cloud Debugger) — cho phép đặt điểm chụp trạng thái trên ứng dụng đang chạy, không phải nơi lưu log. Ngoài ra xem phần ghi chú bên dưới.

Ghi nhớ về chất lượng câu hỏi

Cloud Debugger (phương án D) là dịch vụ ĐÃ NGỪNG HOẠT ĐỘNG — Google tắt vào 31/05/2023, thay bằng Cloud Debugger trong Snapshot Debugger nguồn mở và các công cụ khác của Cloud Observability.

Điều này KHÔNG làm thay đổi khoá đáp án: D vốn đã là phương án sai, và B (Cloud Logging) vẫn đúng. Chỉ cần biết rằng nếu gặp Cloud Debugger như một đáp án đúng trong đề nào đó, đó là dấu hiệu câu hỏi đã cũ so với dịch vụ thực tế.

Ghi nhớ

⚠ Bốn trụ cột quan sát của Google Cloud — bảng phải thuộc: | Công cụ | Dữ liệu | Trả lời câu hỏi | |---|---|---| | Cloud Logging | log, stack trace | chuyện gì đã xảy ra, lỗi gì | | Cloud Monitoring | chỉ số, cảnh báo | hệ thống khoẻ không | | Cloud Trace | dấu vết phân tán | thời gian đi đâu mất | | Cloud Profiler | hồ sơ CPU/bộ nhớ | hàm nào tốn tài nguyên | | Error Reporting | gom nhóm lỗi | lỗi nào xảy ra nhiều nhất |

Từ khoá nhận diện:

"stack trace, thông báo lỗi" → Cloud Logging "CPU, bộ nhớ, cảnh báo" → Cloud Monitoring "request chậm ở bước nào" → Cloud Trace "hàm nào ngốn CPU" → Cloud Profiler "gom các lỗi giống nhau lại" → Error Reporting

Lọc log của Dataflow Bộ lọc
resource.type="dataflow_step" log của các bước
resource.labels.job_id="<id>" đúng job cần xem
severity>=ERROR chỉ lỗi
jsonPayload.message=~"..." tìm theo nội dung
Mẹo sắp xếp TĂNG dần theo thời gian để thấy lỗi ĐẦU TIÊN
Nguyên nhân job Dataflow hỏng hay gặp Nguyên nhân
Hết bộ nhớ worker OutOfMemoryError — tăng loại máy
Dữ liệu lệch (hot key) một khoá chiếm phần lớn dữ liệu
Thiếu quyền service account của worker không đọc được nguồn/đích
Lược đồ không khớp ghi vào BigQuery bị từ chối
Phụ thuộc thiếu thư viện không đóng gói vào
Quota hết CPU hoặc IP ở Region
Cấu hình nên có cho pipeline sản xuất Nội dung
Dead-letter đẩy bản ghi hỏng ra nơi riêng thay vì làm chết job
Ghi log có cấu trúc dễ lọc
Cảnh báo dựa trên log log-based metric + alert
Streaming Engine / Dataflow Prime giảm tài nguyên worker
Service account riêng quyền tối thiểu
Log-based metric — biến log thành cảnh báo Bước
1 Viết bộ lọc bắt đúng dòng log lỗi
2 Tạo log-based metric từ bộ lọc đó
3 Tạo alerting policy trên chỉ số
4 Gắn kênh thông báo: email, Pub/Sub, PagerDuty
Lợi ích biết job hỏng trước khi người dùng hỏi

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lỗi đầu tiên là gì | Logs Explorer, sắp xếp tăng dần, severity>=ERROR | | Bước nào dừng | Job graph trong giao diện Dataflow | | Worker có hết bộ nhớ không | chỉ số worker trong Monitoring |

Và một thói quen giúp gỡ lỗi Dataflow nhanh hơn hẳn: tìm dòng lỗi ĐẦU TIÊN, không phải dòng cuối. Một bước hỏng thường kéo theo hàng loạt lỗi phái sinh ở các bước sau, và phần cuối của log gần như luôn là hậu quả chứ không phải nguyên nhân.