Ngân hàng đề — Google Cloud Professional Data Engineer
Tìm thấy 429 câu.
- A Use Dataform to build, manage, and schedule SQL pipelines.
- B Use Dataflow jobs to read data from Pub/Sub, transform the data, and load the data to BigQuery.
- C Use Data Fusion to build and execute ETL pipelines.
- D Use Cloud Composer to load data and run SQL pipelines by using the BigQuery job operators.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào việc thiết kế một giải pháp chuyển đổi dữ liệu (data transformation) cho BigQuery trên Google Cloud Platform (GCP). Các lập trình viên của bạn thành thạo SQL và ưu tiên sử dụng kỹ thuật ELT (Extract, Load, Transform) – nơi dữ liệu được tải trực tiếp vào kho dữ liệu trước khi chuyển đổi bằng SQL. Họ cần:
- Môi trường lập trình trực quan (intuitive coding environment) để viết và kiểm tra code dễ dàng.
- Khả năng quản lý SQL như code (SQL as code): Xem SQL như mã nguồn, hỗ trợ version control (Git), testing, và scheduling. Mục tiêu là chọn công cụ phù hợp nhất để xây dựng (build), quản lý (manage), và lập lịch (schedule) các pipeline SQL này. Đây là câu hỏi điển hình trong kỳ thi Google Cloud Professional Data Engineer, nhấn mạnh vào các dịch vụ GCP chuyên biệt cho ELT trên BigQuery (cập nhật đến 2026, Dataform vẫn là lựa chọn tối ưu theo docs GCP mới nhất).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Use Dataform to build, manage, and schedule SQL pipelines.
Lý do chi tiết:
- Dataform là dịch vụ GCP chuyên biệt cho ELT trên BigQuery, cho phép viết SQL workflows như code thực thụ (SQL as code).
- Nó cung cấp IDE trực quan tích hợp (web-based editor), hỗ trợ Git integration để version control, testing (unit tests cho SQL), compilation, và scheduling tự động.
- Hoàn hảo cho dev SQL: Hỗ trợ JavaScript để định nghĩa dependencies, incremental tables, và assertions. Pipelines chạy native trên BigQuery engine, tối ưu chi phí và hiệu suất.
- Theo docs GCP 2026, Dataform đã mature với features như release channels và enforcement rules, phù hợp 100% yêu cầu ELT + SQL proficiency.
📘 Tài liệu tham khảo:
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn, giữ nguyên nội dung gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai với lý do cụ thể dựa trên yêu cầu câu hỏi (SQL-centric, ELT, intuitive SQL coding).
-
✅ Use Dataform to build, manage, and schedule SQL pipelines.
Đúng vì: Đây là giải pháp lý tưởng cho ELT trên BigQuery. Dataform biến SQL thành pipelines có thể versioned, tested, và scheduled như code, với IDE thân thiện dành riêng cho SQL devs. Không cần code phức tạp, tập trung 100% vào SQL + JS nhẹ. -
❌ Use Dataflow jobs to read data from Pub/Sub, read the data, transform the data, and load the data to BigQuery.
Sai vì: Dataflow (Apache Beam) là dịch vụ batch/streaming processing mạnh cho ETL/ELT phức tạp, nhưng yêu cầu code Python/Java/Go – không intuitive cho SQL-only devs. Nó không hỗ trợ "SQL as code" native, và ví dụ ở đây nhấn mạnh Pub/Sub (streaming), lệch khỏi yêu cầu SQL-centric + BigQuery transformation. -
❌ Use Data Fusion to build and execute ETL pipelines.
Sai vì: Cloud Data Fusion là no-code/low-code ETL platform (dựa trên CDAP), phù hợp drag-and-drop pipelines, nhưng không ưu tiên SQL coding hay "SQL as code". Nó thiên về ETL (transform trước load), không khớp ELT + dev proficient SQL cần môi trường code trực quan kiểu IDE. -
❌ Use Cloud Composer to load data and run SQL pipelines by using the BigQuery job operators.
Sai vì: Cloud Composer (Managed Apache Airflow) là orchestrator DAGs, có thể chạy SQL qua BigQuery operators, nhưng không cung cấp intuitive coding environment cho SQL as code. Dev phải viết Python DAGs phức tạp để quản lý, không thân thiện với SQL-only, và thiếu built-in testing/versioning cho SQL pipelines.
🛠️ Lời khuyên thực tế: Trong dự án GCP thực tế (2026), kết hợp Dataform với GitHub Actions cho CI/CD để scale ELT pipelines hiệu quả! Nếu cần hybrid, xem xét BigQuery scripts cho simple cases.
-
A
1. Create a metrics column in the sensors table.
2. Set RECORD type and REPEATED mode for the metrics column.
3. Use an UPDATE statement every 30 seconds to add new metrics. -
B
1. Create a metrics column in the sensors table.
2. Set RECORD type and REPEATED mode for the metrics column.
3. Use an INSERT statement every 30 seconds to add new metrics. -
C
1. Create a metrics table partitioned by timestamp.
2. Create a sensorId column in the metrics table, that points to the id column in the sensors table.
3. Use an INSERT statement every 30 seconds to append new metrics to the metrics table.
4. Join the two tables, if needed, when running the analytical query. -
D
1. Create a metrics table partitioned by timestamp.
2. Create a sensorId column in the metrics table, which points to the id column in the sensors table.
3. Use an UPDATE statement every 30 seconds to append new metrics to the metrics table.
4. Join the two tables, if needed, when running the analytical query.
Xem giải thích
🧩 Giải thích chi tiết nội dung câu hỏi
Câu hỏi mô tả một công ty nông nghiệp sử dụng BigQuery (dịch vụ kho dữ liệu của Google Cloud) để quản lý dữ liệu từ 5000 cảm biến (sensors).
- 📊 Bảng sensors: Kích thước khoảng 500 MB, chứa thông tin cơ bản như
id,name,location. Bảng này được cập nhật mỗi giờ (update hourly). - 🔄 Dữ liệu metrics: Mỗi cảm biến tạo ra 1 metric mỗi 30 giây, kèm timestamp. Tổng dữ liệu metrics sẽ rất lớn (khoảng 5000 sensors × 2880 metrics/ngày = hàng triệu bản ghi/ngày).
- 🎯 Yêu cầu:
- Lưu trữ metrics vào BigQuery.
- Chạy analytical query mỗi tuần để giám sát (monitoring).
- Tối ưu chi phí (minimize costs): BigQuery tính phí dựa trên dữ liệu scan khi query, nên cần tránh update thường xuyên (rất đắt), ưu tiên partitioning và append-only (INSERT).
🛠️ Mục tiêu chọn data model: Phải hỗ trợ ingestion dữ liệu high-frequency (30s/lần), query hiệu quả hàng tuần, và tiết kiệm chi phí bằng cách tách bảng (normalization), partition theo timestamp, chỉ INSERT (không UPDATE).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng là phương án thứ 3:
- Create a metrics table partitioned by timestamp.
- Create a sensorId column in the metrics table, that points to the id column in the sensors table.
- Use an INSERT statement every 30 seconds to append new metrics to the metrics table.
- Join the two tables, if needed, when running the analytical query.
Lý do chọn 🏆:
- 📈 Tách bảng riêng (metrics table): Normalization tốt, bảng sensors nhỏ (500MB, update hourly) không bị phình to bởi metrics lớn.
- 🕐 Partitioned by timestamp: Tiết kiệm chi phí query (chỉ scan partition cần thiết khi analytical query hàng tuần), hỗ trợ ingestion nhanh.
- ➕ INSERT every 30s (append-only): BigQuery tối ưu cho streaming inserts (chi phí thấp ~$0.01/200MB), không cần UPDATE đắt đỏ.
- 🔗 Join khi cần: Query analytical weekly chỉ join 2 bảng nhỏ, hiệu quả cao.
- 💰 Tối ưu chi phí: Tránh UPDATE (scan toàn bảng, đắt gấp 10x so INSERT), phù hợp best practices BigQuery 2024-2026 (hỗ trợ streaming inserts lên đến 1M rows/s).
🔍 Giải thích tất cả các phương án (đúng/sai)
-
❌ Phương án 1 (SAI):
- Create a metrics column in the sensors table.
- Set RECORD type and REPEATED mode for the metrics column.
- Use an UPDATE statement every 30 seconds to add new metrics.
Giải thích sai 🚫: Thêm cộtmetrics(REPEATED RECORD) vào bảng sensors làm bảng phình to nhanh (hàng triệu metrics), update hourly sensors + metrics khó quản lý. UPDATE every 30s cực kỳ đắt (BigQuery charge full table scan mỗi UPDATE, chi phí ~$5/TB scanned), không scale cho high-frequency data. Vi phạm best practices "avoid mutations".
-
❌ Phương án 2 (SAI):
- Create a metrics column in the sensors table.
- Set RECORD type and REPEATED mode for the metrics column.
- Use an INSERT statement every 30 seconds to add new metrics.
Giải thích sai 🚫: Tương tự phương án 1, denormalize metrics vào sensors làm bảng lớn không kiểm soát. INSERT vào REPEATED column không khả thi trực tiếp (BigQuery không hỗ trợ append array mà không UPDATE row hiện có), vẫn cần UPDATE ngầm → đắt đỏ và lỗi-prone. Không tối ưu query/chi phí.
-
✅ Phương án 3 (ĐÚNG): (Đã giải thích chi tiết ở trên) 🏅 Hoàn hảo cho ingestion nhanh, partition pruning, join linh hoạt, chi phí thấp nhất.
-
❌ Phương án 4 (SAI):
- Create a metrics table partitioned by timestamp.
- Create a sensorId column in the metrics table, which points to the id column in the sensors table.
- Use an UPDATE statement every 30 seconds to append new metrics to the metrics table.
- Join the two tables, if needed, when running the analytical query.
Giải thích sai 🚫: Tách bảng + partition tốt, nhưng UPDATE every 30s để "append" là sai lầm lớn (BigQuery không khuyến khích UPDATE cho append; mỗi UPDATE scan partition lớn, chi phí cao ~$6.25/TB). Nên dùng INSERT append-only thay thế.
📘 Tài liệu tham khảo (cập nhật 2024-2026)
- BigQuery Best Practices: Loading Data & Ingestion → Khuyến nghị streaming INSERT, tránh DML mutations.
- Partitioning & Clustering: Partitioned Tables → Tiết kiệm 90% chi phí query.
- Pricing: BigQuery Pricing → INSERT streaming rẻ hơn UPDATE 10x.
- Schema Design: Logical Data Warehouse → Normalize tables cho IoT/sensor data.
- A Move the JSON and CSV files to the raw zone.
- B Enable auto-discovery of files for the curated zone.
- C Use the bg command-line tool to load the JSON and CSV files into BigQuery tables.
- D Grant object level access to the CSV and JSON files in Cloud Storage.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào Dataplex – một dịch vụ quản lý dữ liệu thông minh của Google Cloud Platform (GCP), giúp tổ chức dữ liệu theo các zone (vùng) khác nhau như raw zone (dữ liệu thô, chưa xử lý) và curated zone (dữ liệu đã được làm sạch, tinh chỉnh).
-
Tình huống vấn đề: Bạn đang quản lý môi trường Dataplex với raw và curated zones. Nhóm kỹ sư dữ liệu upload các file JSON và CSV (dữ liệu không cấu trúc hoặc bán cấu trúc) vào một bucket asset (tài nguyên bucket Cloud Storage) trong curated zone. Tuy nhiên, các file này không được Dataplex tự động phát hiện (discovered) – nghĩa là Dataplex không quét, phân tích metadata hoặc tạo entry trong catalog cho chúng.
-
Mục tiêu: Tìm giải pháp để Dataplex tự động discover các file này, giúp dễ dàng quản lý metadata, lineage và truy vấn dữ liệu.
Vấn đề cốt lõi nằm ở chính sách discovery của Dataplex:
- Raw zone hỗ trợ tự động discovery cho dữ liệu thô (unstructured/semi-structured như JSON, CSV, Parquet).
- Curated zone dành cho dữ liệu đã được curate (cấu trúc hóa, chất lượng cao), không hỗ trợ auto-discovery cho file thô. (Cập nhật đến 2026: Dataplex v2.x vẫn giữ nguyên quy tắc này theo docs GCP).
📘 Tài liệu tham khảo:
- Dataplex Zones Documentation (GCP official docs).
- Dataplex Discovery – Xác nhận auto-discovery chỉ áp dụng cho raw zone với unstructured data.
✅ Đáp án đúng: Move the JSON and CSV files to the raw zone.
Lý do lựa chọn:
- Đây là giải pháp chuẩn và hiệu quả nhất vì raw zone được thiết kế dành riêng cho dữ liệu thô như JSON/CSV. Khi di chuyển file vào raw zone, Dataplex sẽ tự động quét và discover chúng, tạo metadata, schema inference và tích hợp vào Dataplex Catalog.
- Không cần cấu hình thêm, phù hợp với best practice: Raw zone cho ingestion ban đầu, sau đó transform sang curated.
- 🛠️ Cách thực hiện: Sử dụng
gsutil mvhoặc console để di chuyển file/bucket asset từ curated sang raw zone.
📋 Giải thích tất cả các phương án (đúng/sai)
-
✅ Move the JSON and CSV files to the raw zone.
Đúng 🥇: Như đã giải thích, raw zone kích hoạt auto-discovery tự động cho file thô (JSON/CSV). Di chuyển file là cách đơn giản, không vi phạm kiến trúc zone-based của Dataplex. Kết quả: File được quét ngay lập tức, metadata sẵn sàng sử dụng. -
❌ Enable auto-discovery of files for the curated zone.
Sai 🚫: Curated zone không hỗ trợ auto-discovery cho unstructured files (JSON/CSV). Nó dành cho dữ liệu đã curate (như BigQuery tables hoặc structured formats). Bật tùy chọn này (nếu có) sẽ không hiệu quả, vì Dataplex giới hạn discovery theo zone type. -
❌ Use the bg command-line tool to load the JSON and CSV files into BigQuery tables.
Sai ❌: "bg" có lẽ là lỗi đánh máy của "bq" (BigQuery CLI tool). Việc load vào BigQuery tạo table structured, nhưng không giải quyết vấn đề discovery trong Dataplex. Discovery là về metadata scanning ở lake level, không phải load vào warehouse. Hơn nữa, curated zone ưu tiên BigQuery, nhưng file vẫn không được discover tự động. -
❌ Grant object level access to the CSV and JSON files in Cloud Storage.
Sai 🔒: Quyền truy cập (IAM/ACL) chỉ đảm bảo permission, không kích hoạt discovery. Dataplex cần quyền service account để scan, nhưng vấn đề gốc là zone không hỗ trợ auto-scan file thô ở curated. Thêm quyền không làm file "xuất hiện" trong catalog.
Kết luận 💡: Giải pháp đúng tuân thủ lakehouse architecture của Dataplex – phân tầng dữ liệu từ raw → curated. Nếu cần tùy chỉnh, xem xét manual tasks hoặc Dataplex Flex (cập nhật 2025+), nhưng move to raw là optimal!
- A Create a materialized view to aggregate the base table data. Include a filter clause to specify the last one year of partitions.
- B Create a materialized view to aggregate the base table data. Configure a partition expiration on the base table to retain only the last one year of partitions.
- C Create a view to aggregate the base table data. Include a filter clause to specify the last year of partitions.
- D Create a new table that aggregates the base table data. Include a filter clause to specify the last year of partitions. Set up a scheduled query to recreate the new table every hour.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi này thuộc về Amazon Redshift (dịch vụ data warehouse của AWS), tập trung vào việc tối ưu hóa truy vấn trên bảng lớn chứa hàng triệu dòng dữ liệu bán hàng (sales data), được phân vùng (partitioned) theo ngày (date). Các ứng dụng và người dùng truy vấn rất thường xuyên (many times a minute), thực hiện các phép tổng hợp AVG, MAX, SUM chỉ trên dữ liệu 1 năm gần nhất (past year), mà không cần join với bảng khác. Yêu cầu chính:
- ✅ Giữ toàn bộ dữ liệu lịch sử (full historical data) trong bảng gốc.
- ✅ Đảm bảo kết quả truy vấn luôn có dữ liệu mới nhất (latest data).
- ✅ Giảm chi phí tính toán (computation cost), chi phí bảo trì (maintenance overhead), và thời gian thực thi (duration).
Vấn đề cốt lõi: Truy vấn thường xuyên trên dữ liệu lớn → cần cơ chế pre-aggregate (tính toán trước) để tránh scan toàn bộ bảng mỗi lần, nhưng vẫn tự động cập nhật dữ liệu mới và giữ lịch sử đầy đủ. Giải pháp lý tưởng là Materialized View (MV) trong Redshift với filter clause trên phân vùng, hỗ trợ automatic refresh (tự động làm mới), đặc biệt incremental refresh cho dữ liệu phân vùng (cập nhật mới nhất 2024-2026).
📘 Tài liệu tham khảo:
- AWS Redshift Materialized Views: docs.aws.amazon.com/redshift/latest/dg/materialized-view-overview.html
- Incremental Refresh cho MV: docs.aws.amazon.com/redshift/latest/dg/materialized-view-incremental-refresh.html (hỗ trợ từ 2023, tối ưu cho partitioned tables đến 2026).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Create a materialized view to aggregate the base table data. Include a filter clause to specify the last one year of partitions.
Lý do 🛠️:
- Materialized View (MV) lưu trữ kết quả tổng hợp đã tính toán trước (AVG, MAX, SUM), giúp truy vấn siêu nhanh (giảm duration từ phút xuống giây), giảm chi phí compute (query chỉ đọc MV nhỏ thay vì scan hàng triệu rows).
- Filter clause giới hạn chỉ 1 năm partitions gần nhất → MV chỉ aggregate dữ liệu cần thiết, giữ nguyên bảng gốc với full history.
- Automatic refresh (hoặc incremental cho partitioned data) đảm bảo latest data mà không cần can thiệp thủ công, giảm maintenance overhead.
- Phù hợp hoàn hảo với truy vấn thường xuyên, không join, và phiên bản Redshift mới nhất (2026) hỗ trợ MV refresh hiệu quả cao.
❌ Phân tích tất cả các phương án (đúng/sai)
Dưới đây là phân tích từng lựa chọn một cách chi tiết. Tôi giữ nguyên văn bản gốc bằng tiếng Anh, chỉ giải thích bằng tiếng Việt với đánh dấu rõ ràng:
-
[ĐÚNG] Create a materialized view to aggregate the base table data. Include a filter clause to specify the last one year of partitions.
✅ Đúng hoàn toàn 🏆. Như đã giải thích ở trên: MV pre-aggregate dữ liệu, filter chỉ 1 năm partitions → nhanh, rẻ, tự động latest data, giữ full history. Incremental refresh chỉ cập nhật phần mới, tối ưu cost (Redshift tính phí dựa trên compute thực tế). -
[SAI] Create a materialized view to aggregate the base table data. Configure a partition expiration on the base table to retain only the last one year of partitions.
❌ Sai 🚫. MV đúng hướng nhưng partition expiration trên base table sẽ xóa dữ liệu cũ >1 năm → vi phạm yêu cầu "retain full historical data". Gây mất dữ liệu lịch sử, tăng rủi ro và không cần thiết vì MV có thể filter mà không xóa base table. -
[SAI] Create a view to aggregate the base table data. Include a filter clause to specify the last year of partitions.
❌ Sai ⚠️. Regular view chỉ là virtual query (không lưu trữ dữ liệu), mỗi lần truy vấn vẫn scan base table đầy đủ → không giảm computation cost hay duration (vẫn chậm với millions rows, many times/minute). Filter clause chỉ giới hạn logic, không pre-compute như MV. -
[SAI] Create a new table that aggregates the base table data. Include a filter clause to specify the last year of partitions. Set up a scheduled query to recreate the new table every hour.
❌ Sai ⏰. Tạo bảng mới aggregate đúng ý tưởng nhưng scheduled query hourly → không đảm bảo latest data (chậm 1 giờ, không phù hợp "many times a minute" và "always include latest"). Tăng maintenance overhead (quản lý schedule, error handling), cost cao (chạy query lớn hàng giờ), và không tự động như MV refresh.
Kết luận 🎯: Sử dụng Materialized View là giải pháp tối ưu nhất trong Redshift hiện đại, giúp cân bằng performance, cost và freshness dữ liệu! Nếu triển khai thực tế, hãy test với REFRESH MATERIALIZED VIEW command.
- A Setup a BigQuery Omni connection to the AWS S3 bucket data. Create BigLake tables over the Cloud Storage and S3 data and query the data using BigQuery directly.
- B Set up a BigQuery Omni connection to the AWS S3 bucket data. Create external tables over the Cloud Storage and S3 data and query the data using BigQuery directly.
- C Use the Storage Transfer Service to copy data from the AWS S3 buckets to Cloud Storage buckets. Create BigLake tables over the Cloud Storage data and query the data using BigQuery directly.
- D Use the Storage Transfer Service to copy data from the AWS S3 buckets to Cloud Storage buckets. Create external tables over the Cloud Storage data and query the data using BigQuery directly.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả một tình huống multi-cloud data storage: Tổ chức lưu trữ dữ liệu ở Cloud Storage (Google Cloud) và Amazon S3 (AWS), tất cả đều nằm trong các vùng US regions. Yêu cầu chính là:
- Query dữ liệu up-to-date (dữ liệu mới nhất, thời gian thực hoặc gần thực) bằng BigQuery, bất kể dữ liệu nằm ở cloud nào (GCP hay AWS).
- Người dùng chỉ query qua BigQuery tables, không cấp quyền truy cập trực tiếp vào storage buckets (Cloud Storage hoặc S3).
Mục tiêu: Tận dụng BigQuery làm lớp query thống nhất, federated query (truy vấn liên kết) mà không cần di chuyển dữ liệu, đảm bảo governance (quản lý quyền, metadata) và zero-ETL (không copy dữ liệu).
📘 Kiến thức cập nhật 2026: BigQuery hỗ trợ BigQuery Omni (cho query trực tiếp S3/AWS từ GCP) và BigLake (lớp metadata cho external tables trên multi-cloud, với ACLs, caching, columnar format). Không dùng copy data vì vi phạm "up-to-date" và tăng chi phí/latency. (Nguồn: BigQuery Omni docs, BigLake intro, phiên bản GA đầy đủ từ 2023-2026).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Setup a BigQuery Omni connection to the AWS S3 bucket data. Create BigLake tables over the Cloud Storage and S3 data and query the data using BigQuery directly.
Lý do 🛠️:
- BigQuery Omni thiết lập kết nối an toàn đến S3 (US regions), cho phép query trực tiếp mà không copy data, đảm bảo up-to-date.
- BigLake tables tạo lớp metadata (tables) trên cả Cloud Storage và S3, với fine-grained access control (IAM/ACLs), caching, và query engine BigQuery. Người dùng chỉ cần quyền BigQuery table, không direct access buckets.
- Hoàn hảo cho multi-cloud, zero-copy, low-latency. Không vi phạm yêu cầu.
📋 Giải thích tất cả các phương án (đúng/sai)
-
✅ Đúng: Setup a BigQuery Omni connection to the AWS S3 bucket data. Create BigLake tables over the Cloud Storage and S3 data and query the data using BigQuery directly.
🧩 Phân tích: Kết hợp Omni (connect S3) + BigLake (tables trên GCS/S3) là giải pháp native multi-cloud mới nhất. BigLake cung cấp governance đầy đủ (metadata catalog, permissions), query trực tiếp qua BigQuery SQL, up-to-date real-time. Lý tưởng cho US regions (hỗ trợ cross-region low-latency). (Nguồn: BigLake multi-cloud). -
❌ Sai: Set up a BigQuery Omni connection to the AWS S3 bucket data. Create external tables over the Cloud Storage and S3 data and query the data using BigQuery directly.
🧩 Phân tích: Omni đúng cho S3, nhưng external tables cơ bản thiếu governance (không có BigLake's ACLs, caching, metadata sharing). Người dùng có thể cần quyền bucket direct (CSVs/Parquet), vi phạm "no direct access". BigLake là upgrade cần thiết cho enterprise. -
❌ Sai: Use the Storage Transfer Service to copy data from the AWS S3 buckets to Cloud Storage buckets. Create BigLake tables over the Cloud Storage data and query the data using BigQuery directly.
🧩 Phân tích: Storage Transfer Service (STS) copy data định kỳ/batch, không up-to-date (delay, không real-time). Tăng chi phí storage kép (S3 + GCS), không multi-cloud native. BigLake trên GCS chỉ, bỏ qua lợi ích federated. -
❌ Sai: Use the Storage Transfer Service to copy data from the AWS S3 buckets to Cloud Storage buckets. Create external tables over the Cloud Storage data and query the data using BigQuery directly.
🧩 Phân tích: Tương tự trên, STS copy data vi phạm up-to-date. External tables trên GCS đơn giản nhưng duplicate storage, latency cao, không tận dụng multi-cloud. Không khuyến khích cho 2026 (Omni/BigLake ưu tiên zero-ETL).
Kết luận 🎯: Chọn giải pháp BigQuery Omni + BigLake để query thống nhất, an toàn, hiệu suất cao trên multi-cloud mà không di chuyển data! (Tham khảo thêm: BigQuery best practices multi-cloud).
What should you do?
- A Use Dataflow and the Cloud Data Loss Prevention API to mask sensitive data. Write the processed data in BigQuery.
- B Use customer-managed encryption keys (CMEK) to directly encrypt the data in Cloud Storage. Use federated queries from BigQuery. Share the encryption key by following the principle of least privilege.
- C Use the Cloud Data Loss Prevention API and Dataflow to detect and remove sensitive fields from the data in Cloud Storage. Write the filtered data in BigQuery.
- D Use Dataflow and Cloud KMS to encrypt sensitive fields and write the encrypted data in BigQuery. Share the encryption key by following the principle of least privilege.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào việc chuẩn bị một bộ dữ liệu (dataset) toàn tổ chức từ dữ liệu khách hàng được lưu trữ trong restricted bucket của Cloud Storage (một bucket bị hạn chế truy cập). Dữ liệu này cần được preprocess (xử lý trước) để sử dụng trong các phân tích người tiêu dùng (consumer analyses), đồng thời tuân thủ nghiêm ngặt các yêu cầu bảo mật dữ liệu riêng tư (data privacy requirements).
Mục tiêu chính là xử lý dữ liệu nhạy cảm (như thông tin cá nhân) một cách an toàn, không làm lộ thông tin, nhưng vẫn giữ nguyên giá trị phân tích. Đây là tình huống điển hình trong Google Cloud, sử dụng các dịch vụ như Dataflow (xử lý dữ liệu lớn theo batch/stream), Cloud Data Loss Prevention API (DLP API - phát hiện và bảo vệ dữ liệu nhạy cảm), và BigQuery (kho dữ liệu phân tích).
Vấn đề cốt lõi: Bucket bị restricted nên cần xử lý dữ liệu mà không cần cấp quyền truy cập rộng rãi, đồng thời áp dụng kỹ thuật de-identification (ẩn danh hóa) để tránh vi phạm quy định như GDPR hoặc CCPA. ✅ Kiến thức cập nhật đến 2026: Theo tài liệu Google Cloud mới nhất (DLP API v2 với hỗ trợ masking nâng cao, Dataflow Flex Templates cho DLP), masking là phương pháp khuyến nghị cho privacy-preserving analytics.
📘 Tài liệu tham khảo:
- Google Cloud DLP Documentation (De-identify & re-identify sensitive data).
- Dataflow DLP Templates (Flex Templates cho masking).
- BigQuery Data Privacy Best Practices (2025 updates).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Use Dataflow and the Cloud Data Loss Prevention API to mask sensitive data. Write the processed data in BigQuery.
Lý do chi tiết 🛠️:
- Dataflow + DLP API là sự kết hợp chuẩn để preprocess dữ liệu lớn: Dataflow xử lý scalable (batch/stream), DLP API tự động phát hiện (inspect) và mask (ẩn danh hóa) dữ liệu nhạy cảm như PII (Personally Identifiable Information: email, số điện thoại, tên...). Masking thay thế dữ liệu thật bằng giá trị giả (ví dụ: "john.doe@email.com" → "j***@e****.com") mà giữ nguyên cấu trúc dữ liệu, dễ dàng cho phân tích sau này.
- Write vào BigQuery: Dữ liệu đã mask an toàn lưu trữ trong BigQuery, hỗ trợ query nhanh, và không cần share key hay quyền truy cập bucket gốc (tuân thủ least privilege).
- Ưu điểm: Privacy-compliant, scalable, không mất dữ liệu phân tích. Đây là best practice theo Google Cloud (DLP Flex Templates tích hợp sẵn trong Dataflow đến 2026). ❌ Không encrypt/remove vì masking linh hoạt hơn cho analytics.
📋 Giải thích tất cả các phương án (đúng/sai)
Dưới đây là phân tích từng lựa chọn giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai với lý do cụ thể bằng tiếng Việt, dựa trên nguyên tắc privacy và best practices Google Cloud.
-
✅ Use Dataflow and the Cloud Data Loss Prevention API to mask sensitive data. Write the processed data in BigQuery.
Đúng 🏆: Như đã giải thích ở trên, đây là giải pháp tối ưu. Masking qua DLP giữ dữ liệu hữu ích cho analytics mà vẫn bảo vệ privacy. Dataflow đảm bảo xử lý lớn, BigQuery lưu trữ an toàn. (Best practice từ docs). -
❌ Use customer-managed encryption keys (CMEK) to directly encrypt the data in Cloud Storage. Use federated queries from BigQuery. Share the encryption key by following the principle of least privilege.
Sai 🚫: CMEK chỉ encrypt toàn bộ dữ liệu trong Storage, không preprocess hay de-identify sensitive fields. Federated queries từ BigQuery vẫn yêu cầu truy cập trực tiếp bucket (dù restricted), dễ rò rỉ nếu key bị share (dù least privilege). Không phù hợp privacy vì encrypt không hỗ trợ query analytics hiệu quả trên dữ liệu mã hóa. -
❌ Use the Cloud Data Loss Prevention API and Dataflow to detect and remove sensitive fields from the data in Cloud Storage. Write the filtered data in BigQuery.
Sai ⚠️: Dùng DLP + Dataflow để detect và remove (xóa) fields nhạy cảm là không lý tưởng. Remove làm mất cấu trúc dữ liệu, ảnh hưởng nghiêm trọng đến consumer analyses (ví dụ: xóa email → không join được dữ liệu). Masking tốt hơn remove theo khuyến nghị DLP docs (2026: prioritize de-identification over redaction). -
❌ Use Dataflow and Cloud KMS to encrypt sensitive fields and write the encrypted data in BigQuery. Share the encryption key by following the principle of least privilege.
Sai 🔒: Encrypt fields bằng KMS chỉ bảo vệ dữ liệu tại rest/transit, nhưng khó query/analyze trong BigQuery (cần decrypt mỗi lần). Share key vẫn rủi ro, không phải cách chuẩn cho privacy preprocessing. DLP masking hiệu quả hơn encrypt cho de-identification (theo BigQuery security guides).
Kết luận 🌟: Chọn masking với DLP + Dataflow là cách an toàn, hiệu quả nhất cho organization-wide dataset, đảm bảo compliance mà không hy sinh utility dữ liệu! Nếu cần code sample, tham khảo Dataflow DLP template trên console.
- A Add CIDR 0.0.0.0/0 network to Authorized Network. Use Identity and Access Management (IAM) to add users.
- B Add all application networks to Authorized Network and regularly update them.
- C Leave the Authorized Network empty. Use Cloud SQL Auth proxy on all applications.
- D Add CIDR 0.0.0.0/0 network to Authorized Network. Use Cloud SQL Auth proxy on all applications.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào việc kết nối an toàn nhiều ứng dụng có địa chỉ IP công khai động (dynamic public IP addresses) với một instance Cloud SQL (dịch vụ cơ sở dữ liệu quan hệ của Google Cloud).
-
Tình huống cụ thể:
- Các ứng dụng có IP công khai thay đổi thường xuyên (dynamic), nên không thể dự đoán hoặc cố định danh sách IP.
- Đã cấu hình users với mật khẩu mạnh và bắt buộc kết nối SSL (để mã hóa dữ liệu truyền).
- Yêu cầu sử dụng public IP của Cloud SQL (không dùng private IP qua VPC).
- Mục tiêu: Đảm bảo kết nối được bảo mật cao (secured connections), tránh rủi ro mở rộng truy cập không kiểm soát.
-
Thách thức chính: Với public IP, Cloud SQL yêu cầu cấu hình Authorized Networks (danh sách IP được phép kết nối trực tiếp qua port 3306/5432). Nhưng IP động làm việc này khó khăn, và mở rộng (như 0.0.0.0/0) sẽ kém an toàn. Giải pháp cần xác thực mạnh mẽ hơn, không phụ thuộc IP cố định.
-
Kiến thức cập nhật (đến 2026): Theo tài liệu Google Cloud mới nhất (Cloud SQL for MySQL/PostgreSQL/SQL Server v2.x), Cloud SQL Auth Proxy là phương pháp khuyến nghị chính thức cho kết nối public IP an toàn, sử dụng IAM authentication (dựa trên service account) thay vì IP whitelist. Proxy tạo tunnel mã hóa, xác thực qua Google OAuth, và không yêu cầu mở Authorized Networks. SSL được enforce tự động.
📘 Tài liệu tham khảo:
- Cloud SQL Auth Proxy Documentation (cập nhật 2025).
- Securing Cloud SQL Connections (best practices 2026).
- Google Cloud Skills Boost: Professional Data Engineer certification guide (module Cloud SQL security).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Leave the Authorized Network empty. Use Cloud SQL Auth proxy on all applications.
Lý do 🛠️:
- Để Authorized Network empty: Ngăn chặn mọi kết nối trực tiếp qua public IP (không whitelist bất kỳ IP nào), buộc tất cả kết nối phải qua proxy → Tăng bảo mật tối đa.
- Sử dụng Cloud SQL Auth Proxy trên tất cả ứng dụng: Proxy chạy local trên máy ứng dụng, kết nối tới Cloud SQL qua IAM service account (không dùng password/IP). Nó hỗ trợ IP động hoàn hảo, tự động mã hóa SSL/TLS, và xác thực 2 chiều (mutual TLS). Đây là best practice cho môi trường production với public IP, giảm tấn công brute-force hoặc IP spoofing.
- Phù hợp hoàn hảo với yêu cầu: Không cần quản lý IP động, vẫn dùng public IP, và đã có SSL enforced.
❌ Phân tích tất cả các phương án (đúng/sai)
Dưới đây là giải thích chi tiết từng lựa chọn, giữ nguyên văn bản gốc tiếng Anh:
-
[SAI] Add CIDR 0.0.0.0/0 network to Authorized Network. Use Identity and Access Management (IAM) to add users.
❌ Sai vì: Thêm0.0.0.0/0mở toàn bộ internet truy cập trực tiếp vào Cloud SQL (rủi ro cao, vi phạm nguyên tắc least privilege). IAM dùng cho quản lý quyền instance/user, không thay thế IP authorization cho kết nối public. Kết hợp với password/SSL vẫn dễ bị tấn công nếu IP không kiểm soát. -
[SAI] Add all application networks to Authorized Network and regularly update them.
❌ Sai vì: Với IP động, việc liệt kê và cập nhật thường xuyên không khả thi (phức tạp, lỗi thời nhanh, tốn công quản lý). Dễ bỏ sót IP mới, dẫn đến downtime hoặc lỗ hổng bảo mật. Không scale tốt cho "multiple applications". -
[ĐÚNG] Leave the Authorized Network empty. Use Cloud SQL Auth proxy on all applications.
✅ Đúng như đã giải thích ở trên: Proxy bypass Authorized Networks bằng IAM auth, lý tưởng cho IP động, bảo mật cao nhất mà không phức tạp. -
[SAI] Add CIDR 0.0.0.0/0 network to Authorized Network. Use Cloud SQL Auth proxy on all applications.
❌ Sai vì: Mở0.0.0.0/0vẫn cho phép kết nối trực tiếp không an toàn từ bất kỳ ai (vô hiệu hóa lợi ích proxy). Proxy chỉ cần thiết nếu Authorized empty; kết hợp thừa thãi và tăng rủi ro (ai cũng connect được qua IP, dù app dùng proxy).
- A Set up Cloud Storage FUSE, and mount the Cloud Storage bucket on a Compute Engine instance. Remove the completed files from the TSV file. Use a shell script to iterate through the TSV file and download the remaining URLs to the FUSE mount point.
- B Renew the TLS certificate of the HTTPS endpoint. Remove the completed files from the TSV file and rerun the Storage Transfer Service job.
- C Create a new TSV file for the remaining files by generating signed URLs with a longer validity period. Split the TSV file into multiple smaller files and submit them as separate Storage Transfer Service jobs in parallel.
- D Update the file checksums in the TSV file from using MD5 to SHA256. Remove the completed files from the TSV file and rerun the Storage Transfer Service job.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả tình huống di chuyển một lượng lớn file từ endpoint HTTPS công khai (bị bảo vệ bởi signed URLs) sang Cloud Storage bằng công cụ Storage Transfer Service (STS) của Google Cloud. Bạn đã tạo file TSV chứa danh sách các object URLs (signed URLs), khởi chạy job transfer, nhưng job chạy lâu rồi thất bại với lỗi HTTP 403 trên các file còn lại. Log cho thấy job chạy tốt ban đầu, sau đó fail đột ngột, và không có thay đổi nào trên source system.
Nguyên nhân cốt lõi (dựa trên kiến thức Google Cloud cập nhật đến 2026):
- Signed URLs có thời hạn validity period hữu hạn (thường vài giờ hoặc ngày). STS xử lý file theo thứ tự hoặc batch lớn, nên các URL ở cuối TSV hết hạn khi job đến lượt chúng, dẫn đến 403 Forbidden.
- STS không tự động renew signed URLs; nó chỉ dùng URLs đã cung cấp trong TSV.
- Job fail toàn bộ batch còn lại, không resume tự động cho từng file.
Mục tiêu: Fix vấn đề để resume migration mà không làm lại từ đầu, tận dụng các file đã transfer thành công.
📘 Tài liệu tham khảo:
- Storage Transfer Service overview (Google Cloud Docs, cập nhật 2024-2026).
- Troubleshoot STS jobs – Xác nhận vấn đề signed URL expiration.
- Signed URLs best practices – Khuyến nghị validity period dài hơn cho batch lớn và split jobs.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Create a new TSV file for the remaining files by generating signed URLs with a longer validity period. Split the TSV file into multiple smaller files and submit them as separate Storage Transfer Service jobs in parallel.
Lý do:
- 🛠️ Tạo signed URLs mới với validity period dài hơn: Fix trực tiếp vấn đề hết hạn (expiration), đảm bảo URLs sống đủ lâu cho job hoàn thành.
- 🧩 Loại bỏ file đã hoàn thành: Chỉ transfer remaining files, tránh duplicate và tiết kiệm thời gian.
- 🚀 Split TSV thành nhiều file nhỏ + parallel jobs: STS hỗ trợ multiple jobs chạy song song (parallelism lên đến hàng trăm), giảm thời gian xử lý batch lớn, tránh expiration trong job dài. Phiên bản STS mới (2024+) tối ưu hóa parallel transfers tốt hơn.
- Đây là best practice từ Google Cloud cho large-scale transfers với signed URLs.
📋 Giải thích tất cả các phương án (đúng/sai)
-
✅ [ĐÚNG] Create a new TSV file for the remaining files by generating signed URLs with a longer validity period. Split the TSV file into multiple smaller files and submit them as separate Storage Transfer Service jobs in parallel.
Như đã giải thích ở trên: Giải quyết chính xác expiration của signed URLs, hỗ trợ resume hiệu quả, tận dụng parallelism của STS. Hoàn hảo cho migration lớn! -
❌ [SAI] Set up Cloud Storage FUSE, and mount the Cloud Storage bucket on a Compute Engine instance. Remove the completed files from the TSV file. Use a shell script to iterate through the TSV file and download the remaining URLs to the FUSE mount point.
❌ Không fix vấn đề gốc: Signed URLs vẫn expire, script shell sẽ gặp 403 tương tự. FUSE (gcsfuse) chỉ mount bucket destination, không giúp transfer từ HTTPS source. Phức tạp, tốn tài nguyên Compute Engine, không scalable cho "large number of files", vi phạm best practice STS. -
❌ [SAI] Renew the TLS certificate of the HTTPS endpoint. Remove the completed files from the TSV file and rerun the Storage Transfer Service job.
❌ Sai nguyên nhân: Lỗi 403 là do signed URL authorization expire, không phải TLS cert (cert liên quan HTTPS handshake, không gây 403 sau khi chạy tốt ban đầu). Renew cert không ảnh hưởng signed URLs cũ trong TSV. Rerun toàn bộ sẽ fail lại tương tự vì URLs expire. -
❌ [SAI] Update the file checksums in the TSV file from using MD5 to SHA256. Remove the completed files from the TSV file and rerun the Storage Transfer Service job.
❌ Không liên quan: Checksum (MD5/SHA256) dùng để verify integrity sau transfer, không gây HTTP 403 (403 là access denied). STS hỗ trợ cả MD5/SHA256 (cập nhật 2023+ ưu tiên SHA256 cho security), nhưng thay đổi này không fix expiration. Rerun vẫn fail.
Kết luận 💡: Phương án đúng tận dụng native features của STS, an toàn và hiệu quả nhất cho Google Cloud Professional Data Engineer! Nếu implement, theo dõi job qua Console hoặc gcloud CLI để optimize thêm.
- A Create a BigQuery table where each record has an ingestion timestamp. Run a scheduled query to delete all the rows with an ingestion timestamp older than 30 days.
- B Create a BigQuery table partitioned by datetime value of the weather date. Set up partition expiration to 30 days.
- C Create a BigQuery table partitioned by ingestion time. Set up partition expiration to 30 days.
- D Create a BigQuery table with a datetime column for the day the weather data refers to. Run a scheduled query to delete rows with a datetime value older than 30 days.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi này thuộc lĩnh vực BigQuery (dịch vụ data warehouse của Google Cloud Platform - GCP), không phải AWS như đề cập ban đầu (có thể là nhầm lẫn). Bạn làm việc cho một hãng hàng không, cần lưu trữ dữ liệu thời tiết vào bảng BigQuery để làm đầu vào cho mô hình machine learning (ML). Mô hình chỉ sử dụng dữ liệu thời tiết của 30 ngày gần nhất. Mục tiêu là tránh lưu trữ dữ liệu không cần thiết và giảm thiểu chi phí.
Vấn đề cốt lõi:
- Dữ liệu thời tiết có ngày thời tiết (weather date) riêng biệt, không nhất thiết trùng với thời gian ingest (ingestion time).
- BigQuery hỗ trợ partitioning (phân vùng) để quản lý dữ liệu hiệu quả, tự động xóa partition hết hạn (partition expiration), giúp tiết kiệm chi phí lưu trữ và query mà không cần chạy query thủ công.
- Kiến thức cập nhật đến 2026: BigQuery vẫn ưu tiên date/timestamp partitioning cho dữ liệu thời gian-based như thế này (theo docs GCP 2024-2026, partitioning by ingestion time chỉ phù hợp khi dữ liệu ingest real-time chính xác).
📘 Tài liệu tham khảo:
- BigQuery Partitioned Tables (GCP Docs, cập nhật 2025).
- Managing Partition Expiration (GCP Docs).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Create a BigQuery table partitioned by datetime value of the weather date. Set up partition expiration to 30 days.
Lý do 🛠️:
- Phân vùng (partition) theo datetime value of the weather date (cột ngày thời tiết thực tế) đảm bảo dữ liệu được tổ chức chính xác theo thời gian logic của dữ liệu (không phụ thuộc vào thời gian ingest).
- Partition expiration 30 days sẽ tự động xóa các partition cũ hơn 30 ngày, phù hợp hoàn hảo với nhu cầu ML chỉ dùng 30 ngày gần nhất.
- Lợi ích: Tiết kiệm chi phí lưu trữ (chỉ giữ dữ liệu cần thiết), query nhanh hơn (pruning tự động), không tốn tài nguyên chạy query xóa thủ công. Đây là best practice cho dữ liệu time-series như weather data.
🔍 Giải thích tất cả các phương án (đúng/sai)
-
❌ [SAI] Create a BigQuery table where each record has an ingestion timestamp. Run a scheduled query to delete all the rows with an ingestion timestamp older than 30 days.
Lý do sai ❌: Việc thêm cột ingestion timestamp và chạy scheduled query xóa hàng (DELETE) là cách thủ công, tốn kém (chi phí query lớn, đặc biệt với dữ liệu lớn), không hiệu quả bằng partition expiration tự động. BigQuery không khuyến khích DELETE thường xuyên vì rewrite toàn bộ table, tăng latency và chi phí. -
✅ [ĐÚNG] Create a BigQuery table partitioned by datetime value of the weather date. Set up partition expiration to 30 days.
Lý do đúng ✅: Như đã giải thích ở trên. Phân vùng theo weather date (cột datetime trong dữ liệu) khớp chính xác với logic kinh doanh (30 ngày thời tiết gần nhất), tự động expire partition → tối ưu chi phí và hiệu suất (GCP best practice cho ML input). -
❌ [SAI] Create a BigQuery table partitioned by ingestion time. Set up partition expiration to 30 days.
Lý do sai ❌: Ingestion time partitioning dựa trên thời gian dữ liệu được load vào BigQuery (tự động), không phải ngày thời tiết thực tế. Nếu dữ liệu thời tiết cũ bị ingest muộn (ví dụ: dữ liệu 60 ngày trước ingest sau 40 ngày), partition sẽ expire sai → giữ dữ liệu không cần thiết hoặc xóa nhầm dữ liệu mới. Không phù hợp cho weather data lịch sử. -
❌ [SAI] Create a BigQuery table with a datetime column for the day the weather data refers to. Run a scheduled query to delete rows with a datetime value older than 30 days.
Lý do sai ❌: Thêm cột datetime (weather date) là tốt, nhưng dùng scheduled query DELETE vẫn thủ công và kém hiệu quả (tốn query slots, rewrite table). Không tận dụng partition expiration tự động → không minimize costs như yêu cầu.
🧩 Kết luận: Phương án đúng tận dụng time-unit column-based partitioning (cập nhật BigQuery 2025+ hỗ trợ flexible expiration), là giải pháp tối ưu nhất cho chi phí và scalability! Nếu cần code mẫu CREATE TABLE, hãy hỏi thêm nhé 🚀.
- A Run a scheduled query to pull the necessary data at specific intervals dally.
- B Use a cached query to accelerate time to results.
- C Limit the query columns being pulled in the final result.
- D Create a materialized view based off of the query being run.
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi mô tả tình huống bạn cần truy vấn dữ liệu từ một bảng BigQuery có kích thước rất lớn (vài petabyte - PB), và phải thực hiện truy vấn nhiều lần mỗi ngày. Các truy vấn này chủ yếu bao gồm lọc dữ liệu (filter) và tổng hợp đơn giản (simple aggregations) để cung cấp cho người dùng downstream. Mục tiêu chính là tăng tốc độ truy vấn và nhận insights cập nhật nhanh hơn.
📈 Vấn đề cốt lõi: Với bảng lớn PB, việc scan toàn bộ dữ liệu mỗi lần query sẽ rất chậm (có thể mất hàng giờ), ngay cả khi filter. Cần giải pháp tối ưu hóa truy vấn lặp lại mà vẫn giữ dữ liệu cập nhật (up-to-date). Đây là tình huống điển hình trong BigQuery khi xử lý dữ liệu lớn, yêu cầu cơ chế pre-computation để giảm thời gian scan.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Create a materialized view based off of the query being run.
🛠️ Lý do: Materialized View trong BigQuery (tính năng ra mắt từ 2020 và cập nhật liên tục đến 2026) là một bảng vật lý hóa lưu trữ kết quả của truy vấn đã được pre-computed (tính toán trước), bao gồm filter và aggregations.
- Nó tự động refresh (incremental refresh) dựa trên dữ liệu nguồn, đảm bảo up-to-date insights.
- Query trên Materialized View siêu nhanh (millisecond) vì không scan PB dữ liệu gốc, chỉ query trên view nhỏ gọn.
- Hoàn hảo cho truy vấn lặp lại nhiều lần/ngày trên dữ liệu lớn.
📘 Dẫn nguồn: BigQuery Materialized Views Documentation (cập nhật 2024-2026, hỗ trợ automatic refresh lên đến hàng giờ).
❌ Giải thích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai kèm lý do cụ thể dựa trên best practices BigQuery mới nhất (2026).
-
Phương án SAI: Run a scheduled query to pull the necessary data at specific intervals dally.
🕒 Giải thích sai: Scheduled Query (trong BigQuery Scheduled Queries) chỉ chạy truy vấn định kỳ (daily ở đây, "dally" có lẽ lỗi chính tả của "daily") và lưu kết quả vào bảng mới. Tuy nhiên, nó không tăng tốc query gốc – mỗi lần chạy vẫn phải scan toàn bộ PB dữ liệu, dẫn đến chậm và tốn chi phí. Không phù hợp cho "multiple times a day" vì không on-demand và không tự động refresh real-time. ❌ -
Phương án SAI: Use a cached query to accelerate time to results.
💾 Giải thích sai: Query Cache trong BigQuery cache kết quả cho truy vấn giống hệt (exact match), expire sau 24 giờ. Nó không xử lý dữ liệu mới (không refresh tự động), nên không đảm bảo "up-to-date insights". Với PB data và aggregations/filter thay đổi nhẹ, cache thường miss, vẫn chậm. Không lý tưởng cho truy vấn lặp lại hàng ngày. ❌
📘 Dẫn nguồn: BigQuery Query Caching (giới hạn 24h, không incremental). -
Phương án SAI: Limit the query columns being pulled in the final result.
📊 Giải thích sai: Giới hạn cột (SELECT cụ thể) giúp giảm dữ liệu output và slot usage, nhưng vẫn scan toàn bộ rows trong PB bảng để filter/aggregate – thời gian query vẫn lâu (giờ thay vì phút). Không giải quyết gốc rễ "several petabytes" và không pre-compute cho downstream users. Chỉ là optimization nhỏ, không đủ cho "run queries faster". ❌ -
Phương án ĐÚNG: Create a materialized view based off of the query being run.
🔄 Giải thích đúng: Như đã nêu ở trên, đây là giải pháp tối ưu nhất. Materialized View pre-aggregate và filter dữ liệu lớn, query trên view chỉ mất giây, tự động sync với base table (hỗ trợ base table lên PB). Tiết kiệm 90-99% thời gian và chi phí cho truy vấn lặp lại. Hoàn toàn phù hợp yêu cầu! ✅
🛠️ Lưu ý thực tế: Tạo bằngCREATE MATERIALIZED VIEW, query như bảng thường.