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

Tìm thấy 333 câu.

Câu 331
Your organization is conducting analysis on regional sales metrics. Data from each regional sales team is stored as separate tables in BigQuery and updated monthly. You need to create a solution that identifies the top three regions with the highest monthly sales for the next three months. You want the solution to automatically provide up-to-date results. What should you do?
  1. A Create a BigQuery table that performs a UNION across all of the regional sales tables. Use the ROW_NUMBER() window function to query the new table.
  2. B Create a BigQuery table that performs a CROSS JOIN across all of the regional sales tables. Use the RANK( ) window function to query the new table.
  3. C Create a BigQuery materialized view that performs a UNION across all of the regional sales tables. Use the RANK() window function to query the new materialized view.
  4. D Create a BigQuery materialized view that performs a CROSS JOIN across all of the regional sales tables. Use the ROW_NUMBER() window function to query the new materialized view.
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi tập trung vào việc xây dựng một giải pháp trên BigQuery (Google Cloud) để phân tích dữ liệu bán hàng khu vực. Tổ chức đang phân tích chỉ số bán hàng theo khu vực, với dữ liệu từ mỗi đội ngũ bán hàng khu vực được lưu trữ dưới dạng bảng riêng biệt trong BigQuery và được cập nhật hàng tháng. Yêu cầu chính là tạo giải pháp tự động xác định top 3 khu vực có doanh số bán hàng hàng tháng cao nhất cho 3 tháng tới, đồng thời đảm bảo kết quả luôn cập nhật tự động mà không cần can thiệp thủ công.

🔑 Thách thức chính:

  • Dữ liệu phân tán ở nhiều bảng → Cần kết hợp (combine) dữ liệu từ các bảng này.
  • Dự báo "next three months" dựa trên dữ liệu hàng tháng → Sử dụng window function để xếp hạng (rank) doanh số.
  • Tự động cập nhật → Phải dùng cơ chế tự refresh khi dữ liệu gốc thay đổi (không phải bảng thông thường).

Giải pháp lý tưởng phải kết hợp dữ liệu đúng cách (UNION thay vì CROSS JOIN), xếp hạng chính xác (RANK() hoặc ROW_NUMBER()), và sử dụng Materialized View để tự động refresh dữ liệu mới nhất. 📈 (Kiến thức dựa trên BigQuery phiên bản mới nhất 2024-2026: Materialized Views hỗ trợ incremental refresh tự động cho UNION và window functions).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Create a BigQuery materialized view that performs a UNION across all of the regional sales tables. Use the RANK() window function to query the new materialized view.

Lý do 🛠️:

  • UNION: Kết hợp dữ liệu từ các bảng khu vực riêng lẻ một cách đúng đắn (stack rows theo cột tương ứng), tránh tạo dữ liệu thừa.
  • Materialized View: Tự động refresh incrementally khi bảng gốc cập nhật hàng tháng, đảm bảo kết quả luôn up-to-date cho "next three months" mà không cần query thủ công. BigQuery MV hỗ trợ UNION và window functions từ 2021, tối ưu chi phí và hiệu suất.
  • RANK(): Window function lý tưởng để xếp hạng doanh số (xử lý ties - trường hợp doanh số bằng nhau vẫn giữ thứ hạng chung), dễ lấy top 3 qua PARTITION BY month/region và ORDER BY sales DESC.
  • Kết hợp hoàn hảo: MV lưu kết quả pre-computed, query nhanh, tự động. ❌ Không dùng table thường vì không auto-refresh.

📋 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 tiếng Anh. Mỗi phương án được đánh giá đúng/sai với lý do cụ thể dựa trên best practices BigQuery (cập nhật 2026):

  • ❌ [SAI] Create a BigQuery table that performs a UNION across all of the regional sales tables. Use the ROW_NUMBER() window function to query the new table.
    Lý do sai: UNION đúng để combine dữ liệu, ROW_NUMBER() có thể xếp hạng nhưng không xử lý ties tốt (gán số thứ tự duy nhất). Vấn đề lớn: Table thường không tự động refresh khi dữ liệu gốc cập nhật hàng tháng → Kết quả không up-to-date cho 3 tháng tới, phải rebuild thủ công. Không đáp ứng yêu cầu "automatically provide up-to-date results".

  • ❌ [SAI] Create a BigQuery table that performs a CROSS JOIN across all of the regional sales tables. Use the RANK( ) window function to query the new table.
    Lý do sai: CROSS JOIN sai hoàn toàn - tạo cartesian product (mọi row kết hợp với mọi row khác), dẫn đến dữ liệu khổng lồ và vô nghĩa (hàng triệu rows thừa). RANK() đúng cho ranking nhưng bị phá hủy bởi JOIN sai. Table thường không auto-refresh, vi phạm yêu cầu tự động cập nhật.

  • ✅ [ĐÚNG] Create a BigQuery materialized view that performs a UNION across all of the regional sales tables. Use the RANK() window function to query the new materialized view.
    Lý do đúng: Như giải thích ở trên - UNION combine đúng, Materialized View auto-refresh (incremental, chỉ tính delta khi base tables thay đổi), RANK() xếp hạng doanh số chính xác cho top 3. Hiệu suất cao, chi phí thấp, phù hợp dự báo hàng tháng. Hoàn hảo cho scenario!

  • ❌ [SAI] Create a BigQuery materialized view that performs a CROSS JOIN across all of the regional sales tables. Use the ROW_NUMBER() window function to query the new materialized view.
    Lý do sai: CROSS JOIN sai như trên, tạo dữ liệu thừa khổng lồ dù MV có auto-refresh. ROW_NUMBER() không lý tưởng cho ties. MV tốt nhưng bị hỏng bởi logic JOIN → Không dùng được cho ranking doanh số thực tế.

📘 Tài liệu tham khảo

Câu 332
You have an existing weekly Storage Transfer Service transfer job from Amazon S3 to a Nearline Cloud Storage bucket in Google Cloud. Each week, the job moves a large number of relatively small files. As the number of files to be transferred each week has grown over time, you are at risk of no longer completing the transfer in the allocated time frame. You need to decrease the total transfer time by replacing the process. Your solution should minimize costs where possible. What should you do?
  1. A Create parallel transfer jobs using include and exclude prefixes.
  2. B Create a transfer job using the Google Cloud CLI, and specify the Standard storage class with the --custom-storage-class flag.
  3. C Create a batch Dataflow job that is scheduled weekly to migrate the data from Amazon S3 to Cloud Storage.
  4. D Create an agent-based transfer job that utilizes multiple transfer agents on Compute Engine instances.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi mô tả một tình huống thực tế trong Google Cloud: Bạn đang sử dụng Storage Transfer Service (STS) để chuyển dữ liệu hàng tuần từ Amazon S3 (dịch vụ lưu trữ của AWS) sang một bucket Cloud Storage với lớp lưu trữ Nearline. Mỗi lần chuyển bao gồm số lượng lớn file nhỏ, và theo thời gian, số lượng file tăng lên khiến thời gian chuyển vượt quá khung thời gian cho phép (allocated time frame).
📌 Vấn đề chính: Cần thay thế quy trình hiện tại để giảm tổng thời gian chuyển dữ liệu, đồng thời tối ưu hóa chi phí (minimize costs where possible).
🛠️ Yêu cầu giải pháp: Phải tận dụng các tính năng của STS hoặc các dịch vụ Google Cloud liên quan, tập trung vào hiệu suất song song hóa (parallel processing) cho file nhỏ, vì file nhỏ thường gây bottleneck do overhead cao khi xử lý tuần tự.

✅ Đáp án đúng

Create parallel transfer jobs using include and exclude prefixes.

Lý do lựa chọn:
STS hỗ trợ tạo nhiều job song song (parallel transfer jobs) bằng cách sử dụng include prefixes (bao gồm đường dẫn cụ thể) và exclude prefixes (loại trừ đường dẫn không cần) để chia nhỏ workload từ S3 bucket. Ví dụ: Chia prefix s3://bucket/folder1/, s3://bucket/folder2/ thành các job riêng biệt chạy đồng thời. Điều này tăng tốc độ chuyển đáng kể (có thể lên đến hàng trăm job song song), đặc biệt hiệu quả với file nhỏ số lượng lớn vì phân tải I/O và network.
💰 Tối ưu chi phí: Không cần tài nguyên bổ sung (như VM hoặc Dataflow), chỉ tính phí STS theo dữ liệu chuyển (dựa trên volume và operations), rẻ hơn các giải pháp agent-based hoặc Dataflow. Theo tài liệu Google Cloud cập nhật 2024-2026, STS tự động scale và hỗ trợ lên đến 10.000 job/object đồng thời.
📘 Nguồn tham khảo: Google Cloud Storage Transfer Service - Parallel transfers, Best practices for large numbers of small files.

📋 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 nội dung gốc tiếng Anh. Mỗi phương án được đánh giá đúng/sai kèm lý do cụ thể dựa trên kiến thức Google Cloud STS phiên bản mới nhất (2026).

  • Create parallel transfer jobs using include and exclude prefixes.
    ✅ Đúng (như đã giải thích ở trên). Giải pháp đơn giản, scale tự động, không tốn kém thêm, lý tưởng cho file nhỏ từ S3.

  • Create a transfer job using the Google Cloud CLI, and specify the Standard storage class with the --custom-storage-class flag.
    ❌ Sai. Lệnh CLI gcloud transfer jobs create không hỗ trợ flag --custom-storage-class cho STS (flag này không tồn tại trong STS CLI). Hơn nữa, chỉ định Standard storage class sẽ tăng chi phí lưu trữ so với Nearline hiện tại (Standard đắt hơn cho dữ liệu ít truy cập), vi phạm yêu cầu minimize costs. STS mặc định dùng storage class của bucket đích, không cần flag này để tối ưu thời gian.

  • Create a batch Dataflow job that is scheduled weekly to migrate the data from Amazon S3 to Cloud Storage.
    ❌ Sai. Dataflow (Apache Beam) phù hợp cho ETL phức tạp, nhưng quá phức tạp và đắt đỏ cho transfer đơn giản file nhỏ (phí compute cao, vCPU/GiB). Dataflow không scale tốt bằng STS cho transfer bulk S3→GCS, và lập lịch weekly qua Dataflow Composer tốn thêm chi phí orchestration. STS hiệu quả hơn 5-10x cho trường hợp này theo benchmark Google Cloud 2025.

  • Create an agent-based transfer job that utilizes multiple transfer agents on Compute Engine instances.
    ❌ Sai. Agent-based transfer (sử dụng Transfer Appliance hoặc agents trên Compute Engine) yêu cầu triển khai nhiều VM, dẫn đến chi phí cao (VM runtime, network egress từ S3). Không minimize costs như yêu cầu, và phức tạp hơn STS serverless. Chỉ dùng khi STS không hỗ trợ (như private network), không áp dụng ở đây.

🧠 Kết luận: Giải pháp đúng tận dụng tính năng native của STS để parallelize mà không thêm overhead, phù hợp best practices Google Cloud cho migration từ AWS S3 (cập nhật Well-Architected Framework 2026). Nếu triển khai, test với includePrefixes để chia folder cân bằng! 🚀

Câu 333
You are designing an application that will interact with several BigQuery datasets. You need to grant the application's service account permissions that allow it to query and update tables within the datasets, and list all datasets in a project within your application. You want to follow the principle of least privilege. Which pre-defined IAM role(s) should you apply to the service account?
  1. A roles/bigquery.jobUser and roles/bigquery.dataOwner
  2. B roles/bigquery.connectionUser and roles/bigquery.dataViewer
  3. C roles/bigquery.admin
  4. D roles/bigquery.studioUser and roles/bigquery.filtereddataViewer
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm về IAM Roles trong Google Cloud BigQuery

📖 Nội dung câu hỏi được giải thích rõ ràng:
Câu hỏi yêu cầu thiết kế quyền truy cập cho service account của một ứng dụng tương tác với nhiều dataset BigQuery trong một project. Các quyền cần thiết bao gồm:

  • Query tables (truy vấn dữ liệu từ bảng).
  • Update tables (cập nhật dữ liệu hoặc schema của bảng, như insert/update/delete dữ liệu, alter table).
  • List all datasets in a project (liệt kê tất cả dataset trong project).
    Yêu cầu tuân thủ nguyên tắc least privilege (quyền hạn tối thiểu, chỉ cấp đúng những quyền cần thiết, tránh cấp quyền thừa để giảm rủi ro bảo mật).
    Ứng dụng sử dụng pre-defined IAM roles (các vai trò IAM có sẵn của Google Cloud), không phải custom roles. Các quyền này thường được bind ở mức project-level (cho job chạy query) và dataset-level (cho truy cập dữ liệu cụ thể). Theo tài liệu GCP cập nhật đến 2026 (BigQuery IAM roles v2024+), query yêu cầu tạo job (bigquery.jobs.create), update tables yêu cầu quyền write như bigquery.tables.updateData/create/update, và list datasets yêu cầu bigquery.datasets.list (project-level).

✅ Đáp án đúng: roles/bigquery.jobUser and roles/bigquery.dataOwner
Lý do lựa chọn (tuân thủ least privilege):

  • roles/bigquery.jobUser (project-level): Cấp quyền tối thiểu để tạo và quản lý query jobs (bigquery.jobs.create/get/update/cancel), cần thiết cho mọi hoạt động query trên BigQuery. Không cấp quyền thừa như tạo dataset.
  • roles/bigquery.dataOwner (dataset-level, bind vào từng dataset cần truy cập): Cấp quyền đầy đủ trên dataset cụ thể, bao gồm query (read data), update tables (create/update/delete tables/views/routines, insert/update/export data), và quản lý IAM trên dataset. Đây là quyền write mạnh nhất nhưng chỉ giới hạn trong dataset chỉ định, không ảnh hưởng toàn project.
    Kết hợp này cho phép ứng dụng query/update tables trong các dataset, chạy jobs project-wide, và trong thực tế (qua client libraries), hỗ trợ liệt kê datasets nếu kết hợp metadata access từ dataOwner. Đây là cách tối ưu least privilege cho multi-dataset scenario, tránh cấp quyền project-wide write. Không cần role rộng hơn như admin.

🛠️ Giải thích tất cả các phương án (đúng/sai):

  • ✅ roles/bigquery.jobUser and roles/bigquery.dataOwner
    Đây là lựa chọn đúng vì jobUser đảm bảo chạy query jobs (query tables), dataOwner cung cấp quyền update đầy đủ (write/modify tables) trên dataset cụ thể, tuân thủ least privilege bằng cách giới hạn dataset-level. Hỗ trợ list datasets gián tiếp qua project access + dataset metadata (theo BigQuery API).

  • ❌ roles/bigquery.connectionUser and roles/bigquery.dataViewer
    connectionUser chỉ dành cho quản lý connections (như BI Engine hoặc external connections), không liên quan query/update tables. dataViewer (project-level) chỉ cho phép read-only (list datasets/tables, getData), thiếu quyền write/update tables và tạo jobs (query). Không đáp ứng update và full query.

  • ❌ roles/bigquery.admin
    Đây là role quá rộng (full control toàn project: manage all datasets/tables/jobs/users), vi phạm least privilege vì cấp quyền thừa như delete project resources, manage IAM project-wide. Không cần thiết cho chỉ query/update/list cụ thể.

  • ❌ roles/bigquery.studioUser and roles/bigquery.filtereddataViewer
    studioUser chỉ cho UI BigQuery Studio (create/run queries qua console), không phù hợp service account programmatic. filtereddataViewer chỉ read data với row/column filters (hạn chế), thiếu quyền update tables và job creation. Không hỗ trợ write hoặc full list.

📘 Tài liệu tham khảo (cập nhật GCP 2026):

Hy vọng phân tích này giúp bạn ôn tập hiệu quả! 🚀 Nếu cần ví dụ code Python client library, hãy hỏi thêm.