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

Tìm thấy 333 câu.

Câu 181 Data Analysis and Presentation

A data scientist needs to produce an in-depth report on customer churn. The report must include the complex SQL (Structured Query Language) and Python code used in the analysis, custom visualizations generated with the Matplotlib library, and detailed narrative text explaining the findings. The entire analysis must be packaged in a single document that can be easily re-run with updated data.

Which Google Cloud tool is designed for this type of reproducible, documented analytical workflow?

  1. A Looker Studio
  2. B Google Sheets
  3. C Colab Enterprise
  4. D BigQuery Studio
Xem giải thích

Đáp án

C — Colab Enterprise.

Vì sao đúng

Đề nêu năm yêu cầu, và chỉ một môi trường notebook đáp ứng được cả năm: mã SQL và Python, biểu đồ tuỳ chỉnh bằng Matplotlib, văn bản diễn giải, gói trong MỘT tài liệu duy nhất, và chạy lại được với dữ liệu mới.

⚠ Điểm mấu chốt — notebook gộp bốn thứ vào một tệp:

Một notebook chứa:
    ô MARKDOWN     → văn bản diễn giải
    ô SQL          → %%bigquery
    ô PYTHON       → pandas, scikit-learn
    ô ĐẦU RA       → biểu đồ Matplotlib
        ↓
    ⚠ Tất cả trong MỘT tệp .ipynb
    ⚠ Chạy lại toàn bộ → dữ liệu mới,
      biểu đồ mới, kết luận cập nhật
        ↓
    Đây chính là "phân tích LẶP LẠI ĐƯỢC
    và CÓ TÀI LIỆU"

⚠ Ví dụ cấu trúc một notebook báo cáo:

# Ô 1 — Markdown: mục tiêu và giả định

# Ô 2 — SQL
%%bigquery df_churn
SELECT khach_id, so_thang_su_dung, da_roi_bo
FROM `du_an.khach_hang`
WHERE ngay >= DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH)

# Ô 3 — Python
import matplotlib.pyplot as plt
df_churn.groupby('so_thang_su_dung')['da_roi_bo'] \
        .mean().plot.bar()
plt.title('Ti le roi bo theo tham nien')

# Ô 4 — Markdown: nhận định và khuyến nghị

⚠ Vì sao Colab Enterprise chứ không phải Jupyter tự cài:

Colab Enterprise
    → Jupyter ĐƯỢC QUẢN LÝ trong Vertex AI
    → chạy dưới SERVICE ACCOUNT
      (không cần khoá JSON)
    → kết nối BigQuery bằng một dòng
    → cộng tác như Google Docs
    → kiểm soát bằng IAM và VPC-SC
        ↓
    → không phải vá máy chủ, không phải
      tự lo bảo mật

Xem thêm câu #13029 (lô 135): cùng khoá Colab Enterprise cho môi trường notebook được quản lý. #13031 (lô 135): lợi ích chạy lại notebook cho báo cáo định kỳ. #13053 (lô 136): Matplotlib là thư viện vẽ. Bốn câu nhất quán, mô tả cùng một quy trình làm việc.

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

  • D (BigQuery Studio) — đây là phương án gần nhất và thật sự có hỗ trợ notebook, nhưng nó thiên về môi trường SQL và khám phá dữ liệu trong BigQuery; với báo cáo cần Python, Matplotlib và văn bản diễn giải dài, Colab Enterprise là môi trường notebook đầy đủ hơn.

  • A (Looker Studio) — công cụ dashboard trực quan, không chạy được Python hay hiển thị mã.

  • B (Google Sheets) — bảng tính; không phải môi trường lập trình.

Ghi nhớ

⚠ Chọn công cụ theo kiểu sản phẩm cần tạo — bảng phải thuộc: | Sản phẩm | Công cụ | |---|---| | Báo cáo có mã + biểu đồ + diễn giải, chạy lại được | Colab Enterprise / Vertex AI Notebooks | | Dashboard tương tác cho người dùng nghiệp vụ | Looker Studio | | Chỉ số thống nhất toàn công ty | Looker | | Khám phá bằng SQL | BigQuery Studio | | Phân tích trong bảng tính | Connected Sheets |

Từ khoá nhận diện:

"mã + biểu đồ + văn bản trong một tài liệu" → notebook "chạy lại với dữ liệu mới" → notebook "dashboard tương tác không cần mã" → Looker Studio "khám phá bằng SQL" → BigQuery Studio "Matplotlib, pandas" → môi trường Python

Notebook cho báo cáo lặp lại — thói quen tốt Thói quen
Tham số hoá ngày báo cáo không hard-code
Restart & Run All phải thành công kiểm chứng tính lặp lại
Ô Markdown ghi rõ giả định người đọc hiểu ngữ cảnh
Lưu notebook trong Git có lịch sử
Ghi kết quả ra bảng hoặc tệp không chỉ nằm trong notebook
Lên lịch chạy notebook executor của Vertex AI
Colab Enterprise — điều cần nhớ Nội dung
Jupyter được quản lý trong Vertex AI
Service account không cần khoá JSON
%%bigquery chạy SQL, trả về DataFrame
Cộng tác như Google Docs
Tự động tắt khi rảnh cấu hình quan trọng nhất về chi phí
IAM + VPC-SC kiểm soát truy cập
Khi nào notebook KHÔNG phải lựa chọn đúng Trường hợp
Nhiều người nghiệp vụ cần xem → Looker Studio
Cần lọc và tương tác → BI
Pipeline sản xuất quan trọng → tách mã thành module
Người xem không muốn thấy mã → BI
Notebook hợp với phân tích sâu, có diễn giải, cho đội kỹ thuật
Đọc dữ liệu lớn vào notebook Lưu ý
to_dataframe() nạp vào RAM bảng lớn sẽ tràn
Nên LIMIT, TABLESAMPLE, lọc theo phân vùng
bigframes xử lý ở phía BigQuery, cú pháp pandas
--dry_run biết trước sẽ quét bao nhiêu
Chi phí mỗi ô SQL là một truy vấn tính tiền

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Notebook chạy lại được không | Restart & Run All | | Có ngày hard-code không | tìm chuỗi ngày trong mã | | Runtime có tự tắt không | cấu hình idle shutdown |

Và một phép thử đơn giản quyết định báo cáo có thật sự "chạy lại được" hay không: Restart & Run All trên máy của người khác. Rất nhiều notebook chỉ chạy đúng trong môi trường của tác giả — thiếu một thư viện, dựa vào một biến còn sót, hoặc trỏ vào một bảng tạm đã bị xoá — và đó là lúc "tài liệu lặp lại được" trở thành một tệp không ai mở lại được.

Câu 182 Data Pipeline Orchestration

A developer needs to quickly upload a 5 MB (megabyte) configuration file from their local computer to a Cloud Storage bucket. The task is a one-off, manual action and does not require scheduling or complex migration features.

Which tool is the most direct and suitable for this ad-hoc transfer?

  1. A Storage Transfer Service
  2. B Cloud Storage FUSE
  3. C The gcloud storage cp command
  4. D Transfer Appliance
Xem giải thích

Đáp án

C — Lệnh gcloud storage cp.

Vì sao đúng

Đề nêu ba điều: 5 MB, một lần duy nhất, làm thủ công, và KHÔNG cần lịch chạy hay tính năng di chuyển phức tạp. Công cụ dòng lệnh là mức vừa đủ.

⚠ Điểm mấu chốt — một dòng lệnh cho một việc nhỏ:

gcloud storage cp cau-hinh.yaml \
  gs://bucket/cau-hinh/
        ↓
    ⚠ 5 MB → xong trong vài giây
    ⚠ Không dựng gì, không cấu hình gì
    ⚠ Không có dịch vụ nào phải quản lý

⚠ Bảng quy mô — chọn công cụ theo con số:

Vài MB – vài GB, một lần
    → gcloud storage cp

Vài TB, có lịch, cần thử lại tự động
    → Storage Transfer Service

Hàng trăm TB, băng thông không đủ
    → Transfer Appliance
        ↓
    ⚠ Dùng công cụ nặng cho việc nhẹ
      là mất thời gian, không phải
      cẩn thận

⚠ Vài cờ hữu ích:

gcloud storage cp -r ./thu-muc gs://bucket/
    → chép cả thư mục

gcloud storage rsync -r ./thu-muc gs://bucket/
    → đồng bộ, chỉ chép phần khác

gcloud storage cp gs://bucket/tep .
    → tải xuống

gcloud storage ls -l gs://bucket/
    → kiểm tra sau khi chép

Xem thêm câu #13074 (lô 136): cùng tình huống, cùng khoá gcloud storage cho 0,9 GB một lần. Hai câu hoàn toàn nhất quán. Và #13082, #13089 (cùng lô): cùng bộ tiêu chí cho quy mô lớn hơn.

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

  • A (Storage Transfer Service) — đây là phương án gần nhất và là dịch vụ chuyển dữ liệu được quản lý, nhưng nó sinh ra cho khối lượng lớn, chạy theo lịch, cần thử lại và báo cáo. Với một tệp 5 MB, dựng một job là nhiều bước hơn hẳn giá trị mang lại.

  • D (Transfer Appliance) — thiết bị vật lý cho hàng trăm TB; gửi ổ cứng cho 5 MB là vô lý.

  • B (Cloud Storage FUSE) — gắn bucket như hệ thống tệp cho ứng dụng đọc ghi liên tục; không phải công cụ chép một lần.

Ghi nhớ

⚠ Chọn công cụ theo khối lượng — bảng phải thuộc: | Khối lượng và tần suất | Công cụ | |---|---| | MB tới vài GB, một lần | gcloud storage cp / rsync | | TB, theo lịch, được quản lý | Storage Transfer Service | | Nguồn tại chỗ, băng thông đủ | STS + agent pool | | Hàng trăm TB, băng thông kém | Transfer Appliance | | Ứng dụng đọc bucket như thư mục | Cloud Storage FUSE |

Từ khoá nhận diện:

"một tệp nhỏ, một lần, thủ công" → gcloud storage cp "theo lịch, khối lượng lớn" → Storage Transfer Service "mất nhiều tháng nếu truyền mạng" → Transfer Appliance "gắn bucket như thư mục" → Cloud Storage FUSE "đồng bộ hai bên" → rsync

gcloud storage ↔ gsutil Nội dung
gcloud storage thế hệ mới, NHANH HƠN đáng kể
gsutil công cụ cũ, vẫn dùng được
Khuyến nghị gcloud storage cho việc mới
Đề thi vẫn hỏi cả hai
Lệnh tương đương cp, ls, rsync, rm, du
cp ↔ rsync Nội dung
cp chép, ghi đè nếu đã có
rsync chỉ chép phần KHÁC NHAU
Dùng rsync khi đồng bộ lặp lại, hoặc chạy lại sau khi đứt
-d xoá ở đích cái không còn ở nguồn — rất nguy hiểm
Trước khi dùng -d thử với -n (dry run)
Xác thực cho lệnh CLI Cách
Máy cá nhân gcloud auth login
Trong script tự động service account
Trên VM của GCP danh tính gắn sẵn — không cần gì
CI/CD ngoài GCP Workload Identity Federation
Tránh khoá JSON dài hạn
Sau khi chép — kiểm tra Việc
gcloud storage ls -l tệp có ở đó và đúng kích thước
gsutil stat xem metadata và checksum
Mã thoát của lệnh trong script
Content-Type nếu tệp sẽ phục vụ qua web
Với tệp cấu hình kiểm tra quyền của bucket

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tệp đã lên chưa | gcloud storage ls -l gs://bucket/cau-hinh/ | | Kích thước có khớp không | so với ls -l cục bộ | | Ai đọc được tệp đó | gcloud storage buckets get-iam-policy |

Và một nguyên tắc đáng nhớ cho mọi câu hỏi dạng "chọn công cụ": đọc con số khối lượng trước tiên. Vài MB thì một lệnh CLI là đúng mức; vài TB mới cần dịch vụ được quản lý — và chọn công cụ nặng hơn mức cần thiết không phải là cẩn thận, mà là làm chậm chính mình.

Câu 183 Data Management

A company is building a new social media application that will have a global user base from day one. A critical requirement is that the database must be able to scale horizontally across multiple continents while providing strong transactional consistency to handle financial transactions like ad payments and user subscriptions.

Which Google Cloud database is uniquely designed to meet this need for global scale and strong consistency?

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

Đáp án

B — Spanner.

Vì sao đúng

Đề nêu ba yêu cầu đi cùng nhau, và chỉ Spanner đáp ứng được cả ba: người dùng toàn cầu ngay từ đầu, mở rộng NGANG qua nhiều châu lục, và nhất quán giao dịch MẠNH cho các giao dịch tài chính.

⚠ Điểm mấu chốt — Spanner là CSDL duy nhất có cả ba:

CSDL QUAN HỆ có giao dịch
    +
MỞ RỘNG NGANG không giới hạn
    +
NHẤT QUÁN MẠNH ở phạm vi TOÀN CẦU
        ↓
    ⚠ Ba thứ này thường loại trừ nhau
      trong lý thuyết CSDL phân tán
        ↓
    Spanner đạt được nhờ TRUETIME

⚠ TrueTime — cơ chế đằng sau:

Google đặt ĐỒNG HỒ NGUYÊN TỬ và GPS
trong các trung tâm dữ liệu
        ↓
    → biết chính xác thời gian với
      sai số rất nhỏ, có giới hạn
        ↓
    → sắp xếp được thứ tự giao dịch
      một cách TOÀN CỤC
        ↓
    → nhất quán mạnh mà vẫn
      mở rộng ngang được

⚠ Vì sao "giao dịch tài chính" là từ khoá quyết định:

Thanh toán quảng cáo, đăng ký thuê bao
        ↓
    ⚠ KHÔNG chấp nhận nhất quán cuối cùng
    ⚠ Không được trừ tiền hai lần
    ⚠ Không được đọc số dư cũ
        ↓
    → cần GIAO DỊCH ACID
    → và nhất quán MẠNH kể cả
      khi người dùng ở châu lục khác

Xem thêm câu #12563 (lô 133): cùng khoá Spanner cho yêu cầu nhiều Region + nhất quán mọi lúc. Và #13072 (lô 136): khoá Cloud SQL cho ứng dụng một khu vực, thông thường. #13076 (lô 136): khoá Firestore cho thời gian thực, lược đồ linh hoạt. Bốn câu, ba khoá, phân biệt bằng PHẠM VI và MÔ HÌNH — hoàn toàn nhất quán.

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

  • A (Firestore) — đây là phương án gần nhất về mặt "toàn cầu và mở rộng ngang", và Firestore có chế độ multi-region, nhưng nó là NoSQL tài liệu: không có giao dịch quan hệ đầy đủ ở quy mô mà giao dịch tài chính phức tạp đòi hỏi.

  • C (AlloyDB) — PostgreSQL hiệu năng cao nhưng phạm vi MỘT REGION; không mở rộng ngang qua nhiều châu lục.

  • D (Cloud SQL) — mở rộng theo chiều DỌC, nhân bản đa Region là BẤT ĐỒNG BỘ → không có nhất quán mạnh toàn cầu.

Ghi nhớ

⚠ Bốn CSDL và phạm vi của chúng — bảng phải thuộc: | Dịch vụ | Phạm vi | Nhất quán | |---|---|---| | Cloud SQL | một Region | mạnh trong Region; replica đa Region BẤT ĐỒNG BỘ | | AlloyDB | một Region | mạnh, hiệu năng cao | | Spanner | NHIỀU REGION, toàn cầu | MẠNH ở phạm vi toàn cầu | | Firestore | multi-region | mạnh cho tài liệu, không phải quan hệ | | Mở rộng | chỉ Spanner mở rộng NGANG cho ghi |

Từ khoá nhận diện:

"toàn cầu + nhất quán mạnh + giao dịch" → Spanner "một Region, ứng dụng thông thường" → Cloud SQL "PostgreSQL cần nhanh hơn" → AlloyDB "thời gian thực, di động, tài liệu" → Firestore "phân tích" → BigQuery

Spanner — điều cần thuộc Nội dung
Nhất quán MẠNH, phạm vi toàn cầu
Cơ chế TrueTime — đồng hồ nguyên tử và GPS
Mở rộng thêm node hoặc processing unit
Cấu hình regional, dual-region, multi-region
SLA tới 99,999% với multi-region
Giao diện GoogleSQL và tương thích PostgreSQL
Đơn vị nhỏ nhất 100 processing units
Thiết kế lược đồ Spanner — khác CSDL thường Điểm khác
Tránh khoá chính TĂNG DẦN ĐỀU → hotspot
Nên dùng UUID hoặc bit-reverse sequence
Interleaved table lưu bảng con VẬT LÝ cạnh bảng cha
Split Spanner tự chia dữ liệu
Chỉ mục phụ có — khác Bigtable
Công cụ Key Visualizer phát hiện hotspot
Cái giá của Spanner Cái giá
Chi phí tối thiểu CAO so với Cloud SQL
Thiết kế lược đồ khắt khe hơn
Không phải PostgreSQL/MySQL thuần dù có giao diện tương thích
Một số tính năng SQL hạn chế
Vì vậy chỉ chọn khi thật sự cần quy mô toàn cầu
Khi nào thật sự cần Spanner Dấu hiệu
Người dùng nhiều châu lục cần nhất quán mạnh như đề này
Vượt trần ghi của một node Cloud SQL không mở rộng ghi
Cần SLA 99,999%
Giao dịch phân tán quy mô lớn tài chính, đặt chỗ toàn cầu
Không cần khi một Region, tải vừa phải → Cloud SQL rẻ hơn nhiều

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Instance cấu hình thế nào | gcloud spanner instances describe <ten> → config | | Có hotspot không | Key Visualizer | | CPU có đủ không | chỉ số cpu/utilization — nên dưới 65% với multi-region |

Và một điều đáng cân nhắc kỹ ngay cả khi Spanner là câu trả lời đúng về kỹ thuật: chi phí tối thiểu của nó cao hơn Cloud SQL rất nhiều. Với một ứng dụng mới chưa có người dùng, bắt đầu bằng Cloud SQL rồi chuyển sang Spanner khi thật sự đạt quy mô toàn cầu thường là quyết định kinh tế hơn — miễn là lược đồ được thiết kế sao cho việc chuyển đổi về sau không phải viết lại từ đầu.

Câu 184 Data Analysis and Presentation

A data analyst needs to run a few immediate, exploratory SQL (Structured Query Language) queries on a large collection of raw log files located in a Cloud Storage bucket. The goal is to quickly investigate the data's structure and content without setting up a formal ingestion pipeline or moving the data.

Which BigQuery feature is designed for this "query-in-place" scenario?

  1. A An external table pointing to the Cloud Storage location
  2. B The BigQuery Data Transfer Service
  3. C A Dataflow streaming pipeline
  4. D A BigQuery managed table
Xem giải thích

Đáp án

A — Một external table trỏ tới vị trí trong Cloud Storage.

Vì sao đúng

Đề nêu ba điều: vài truy vấn khám phá tức thời, trên tệp log thô trong Cloud Storage, và KHÔNG dựng pipeline nạp, KHÔNG di chuyển dữ liệu. External table là cơ chế "truy vấn tại chỗ" đơn giản nhất.

⚠ Điểm mấu chốt — tạo một lần, truy vấn ngay:

CREATE EXTERNAL TABLE `du_an.log_tho`
OPTIONS (
  format = 'CSV',
  uris = ['gs://bucket/logs/*.csv'],
  skip_leading_rows = 1
);

SELECT * FROM `du_an.log_tho` LIMIT 100;
        ↓
    ⚠ KHÔNG nạp dữ liệu
    ⚠ KHÔNG sao chép gì
    ⚠ BigQuery đọc thẳng tệp khi truy vấn
        ↓
    → dựng xong trong một phút

⚠ Đánh đổi — nhanh để dựng, chậm để chạy:

EXTERNAL TABLE
    Ưu:  dựng tức thì, không di chuyển dữ liệu
         không tốn thêm dung lượng
    Nhược: ⚠ CHẬM HƠN bảng thường nhiều
           ⚠ không có phân vùng, phân cụm
           ⚠ không có thống kê để tối ưu
           ⚠ không cache kết quả
        ↓
    → hợp với KHÁM PHÁ, không hợp
      với truy vấn lặp lại hằng ngày

⚠ Khi nào chuyển sang cách khác:

Chỉ khám phá vài lần
    → EXTERNAL TABLE          ← đề này

Cần bảo mật cấp dòng/cột trên data lake
    → BIGLAKE TABLE

Truy vấn thường xuyên, cần hiệu năng
    → NẠP vào bảng quản lý
        ↓
    ⚠ Ba mức, chọn theo tần suất và
      yêu cầu quản trị

Xem thêm câu #13069 (lô 136): khoá BigLake table vì ở đó cần row-level và column-level security trên data lake. Câu này chỉ cần khám phá nhanh → external table là đủ. Hai khoá khác nhau vì yêu cầu quản trị khác nhau — hoàn toàn nhất quán.

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

  • D (bảng quản lý của BigQuery) — đây là phương án gần nhất và cho hiệu năng tốt nhất, nhưng nó đòi NẠP dữ liệu vào BigQuery — trái yêu cầu "không di chuyển dữ liệu, không dựng pipeline".

  • B (BigQuery Data Transfer Service) — nạp dữ liệu theo lịch; đúng thứ đề muốn tránh.

  • C (pipeline luồng Dataflow) — quá tay: dựng cả một pipeline cho vài truy vấn khám phá.

Ghi nhớ

⚠ Ba cách để BigQuery đọc dữ liệu trong GCS — bảng phải thuộc: | Cách | Hiệu năng | Bảo mật chi tiết | Dùng khi | |---|---|---|---| | External table | chậm nhất | KHÔNG có | khám phá tuỳ hứng | | BigLake table | trung bình (có cache) | ĐẦY ĐỦ | data lake có quản trị | | Nạp vào bảng quản lý | nhanh nhất | đầy đủ | truy vấn thường xuyên |

Từ khoá nhận diện:

"truy vấn tại chỗ, khám phá nhanh" → external table "data lake + row/column-level security" → BigLake "truy vấn thường xuyên, cần hiệu năng" → nạp vào bảng "nạp theo lịch" → Data Transfer Service "tệp phi cấu trúc: ảnh, video" → object table

External table — điều cần nhớ Nội dung
Định dạng hỗ trợ CSV, JSON, Avro, Parquet, ORC, Google Sheets
Ký tự đại diện gs://bucket/prefix-*.csv
--autodetect tự đoán lược đồ
Hive partitioning đọc được cấu trúc thư mục nam=/thang=
⚠ KHÔNG có phân vùng, phân cụm, thống kê, cache kết quả
Người dùng cần quyền trên BUCKET khác BigLake
Vì sao external table chậm Lý do
Phải LIỆT KÊ tệp mỗi lần truy vấn với nhiều tệp thì rất tốn
Không có thống kê trình tối ưu thiếu thông tin
Không cache kết quả mỗi lần chạy là đọc lại
CSV/JSON phải phân tích cú pháp chậm hơn Parquet nhiều
Khắc phục một phần dùng Parquet và BigLake có cache
Khám phá dữ liệu thô — quy trình gợi ý Bước
1 Tạo external table với --autodetect
2 SELECT * LIMIT 100 — xem cấu trúc
3 bq show --schema — kiểm kiểu đoán được
4 Chạy vài truy vấn khám phá
5 Nếu sẽ dùng lâu dài → NẠP vào bảng quản lý
6 Nếu cần quản trị → chuyển sang BigLake
Chi phí của external table Nội dung
Không tốn dung lượng BigQuery dữ liệu vẫn ở GCS
Truy vấn tính theo byte quét như bảng thường
Nhưng quét nhiều hơn không có phân vùng để cắt
Thao tác liệt kê tệp tính vào chi phí GCS
Kết luận rẻ để dựng, đắt nếu chạy nhiều

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lược đồ đoán được thế nào | bq show --schema --format=prettyjson | | Truy vấn quét bao nhiêu | --dry_run — với external table, ước tính kém chính xác | | Có bao nhiêu tệp | gcloud storage ls gs://bucket/logs/ \| wc -l |

Và một dấu hiệu cho biết đã đến lúc rời khỏi external table: cùng một truy vấn được chạy nhiều lần mỗi ngày. External table sinh ra cho việc nhìn qua dữ liệu lần đầu; khi nó trở thành nguồn của một báo cáo định kỳ, chi phí và độ chậm sẽ vượt xa công sức của một lần nạp vào bảng quản lý.

Câu 185 Data Preparation and Ingestion

A data engineer attempts to load a CSV (Comma-Separated Values) file into BigQuery. The goal is to create a table with a nested structure where customer details are grouped under a customer record. Despite configuring the load job, the resulting table is completely flat.

Why did this happen?

  1. A The BigQuery Data Transfer Service must be used to load nested CSV (Comma-Separated Values) files.
  2. B CSV (Comma-Separated Values) is an inherently flat file format and cannot be loaded directly into BigQuery to create a nested schema.
  3. C The engineer forgot to use the --autodetect flag in the load command.
  4. D The data must first be converted to XML (eXtensible Markup Language) to support nesting.
Xem giải thích

Đáp án

B — CSV vốn là định dạng PHẲNG và không thể nạp trực tiếp vào BigQuery để tạo ra lược đồ lồng nhau.

Vì sao đúng

CSV không có khái niệm cấu trúc lồng: mỗi dòng là một danh sách giá trị ngăn cách bằng dấu phẩy, không có cách nào diễn đạt một đối tượng con hay một mảng.

⚠ Điểm mấu chốt — giới hạn nằm ở CHÍNH ĐỊNH DẠNG:

CSV
    khach_id,ten,thanh_pho,tuoi
    1,An,Ha Noi,30
        ↓
    ⚠ Không có cú pháp nào để nói
      "ten và thanh_pho thuộc về
       một record tên là khach"
        ↓
    → nạp CSV LUÔN cho ra bảng PHẲNG
    → không cấu hình nào đổi được điều đó

⚠ Ba định dạng hỗ trợ lồng nhau:

JSON (NDJSON)
    {"id":1,"khach":{"ten":"An","tp":"Ha Noi"}}
        ↓
    → BigQuery tạo STRUCT tự động

AVRO
    → lược đồ nhúng, hỗ trợ record lồng

PARQUET / ORC
    → hỗ trợ cấu trúc lồng đầy đủ
        ↓
    ⚠ Ba định dạng này giữ được
      cấu trúc; CSV thì không

⚠ Nếu buộc phải bắt đầu từ CSV — hai cách:

CÁCH 1 — nạp phẳng rồi dựng lại bằng SQL
CREATE TABLE `du_an.bang_long` AS
SELECT
  khach_id,
  STRUCT(ten, thanh_pho, tuoi) AS khach
FROM `du_an.bang_phang`;
        ↓
    → dùng STRUCT() và ARRAY_AGG()

CÁCH 2 — chuyển CSV sang JSON/Avro trước
    → bằng Dataflow, Data Fusion, hoặc script
    → rồi nạp

Xem thêm câu #13063 (lô 136): khoá nạp NDJSON THẲNG vào BigQuery vì định dạng đó hỗ trợ sẵn cấu trúc lồng. Câu này giải thích vì sao CSV KHÔNG làm được. Hai câu là hai mặt của cùng một kiến thức — hoàn toàn nhất quán.

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

  • C (quên dùng cờ --autodetect) — đây là phương án gần nhất vì --autodetect thật sự ảnh hưởng tới lược đồ, nhưng nó chỉ đoán KIỂU DỮ LIỆU của các cột phẳng; nó không thể tạo ra cấu trúc lồng từ CSV.

  • A (phải dùng BigQuery Data Transfer Service) — DTS không thay đổi được giới hạn của định dạng CSV.

  • D (phải chuyển sang XML) — BigQuery KHÔNG hỗ trợ nạp XML; và đây không phải cách giải quyết.

Ghi nhớ

⚠ Định dạng và khả năng lồng nhau — bảng phải thuộc: | Định dạng | Hỗ trợ lồng nhau | Ghi chú | |---|---|---| | CSV | KHÔNG | phẳng hoàn toàn | | JSON (NDJSON) | CÓ | STRUCT và ARRAY | | Avro | CÓ | lược đồ nhúng | | Parquet / ORC | CÓ | theo cột, nén tốt | | XML | — | BigQuery không nạp trực tiếp |

Từ khoá nhận diện:

"CSV cho ra bảng phẳng" → giới hạn của định dạng "muốn lược đồ lồng" → JSON, Avro, Parquet "đã có CSV, muốn lồng" → nạp phẳng rồi STRUCT() "--autodetect" → chỉ đoán KIỂU, không tạo cấu trúc "XML" → BigQuery không hỗ trợ nạp

Kiểu lồng nhau của BigQuery Kiểu
STRUCT (RECORD) nhóm các trường liên quan
ARRAY (REPEATED) nhiều giá trị trong một dòng
ARRAY<STRUCT> mảng đối tượng — mẫu phổ biến nhất
UNNEST trải mảng thành dòng
Lợi ích tránh JOIN, dữ liệu cha–con nằm cùng dòng
Dựng cấu trúc lồng từ bảng phẳng Hàm
STRUCT(a, b, c) AS nhom gom các cột thành một record
ARRAY_AGG(STRUCT(...)) gom nhiều DÒNG thành một mảng
GROUP BY khoa_cha đi kèm ARRAY_AGG
UNNEST làm ngược lại — trải ra
Mẫu thường dùng phẳng → GROUP BY + ARRAY_AGG → lồng
Vì sao BigQuery ưa cấu trúc lồng Lý do
Tránh JOIN dữ liệu liên quan nằm cùng dòng
Vẫn lưu theo cột nén và quét chọn lọc tốt
Nhanh hơn nhiều so với join hai bảng lớn
Khác CSDL quan hệ ở đó phải chuẩn hoá thành nhiều bảng
Đây là cách BigQuery khuyến khích mô hình hoá
Vì sao CSV vẫn phổ biến dù nhiều hạn chế Lý do
Mọi công cụ đều đọc được
Con người đọc được
Xuất từ hệ thống cũ dễ
Nhược không kiểu, không lồng, không nén, dễ hỏng
Lời khuyên CSV để TRAO ĐỔI, không để LƯU TRỮ hay phân tích

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lược đồ có lồng không | bq show --schema --format=prettyjson — tìm RECORD, REPEATED | | Định dạng nguồn là gì | kiểm tra tệp thật, không tin phần mở rộng | | Có cần lồng không | xem cách truy vấn thực tế |

Và một câu hỏi nên đặt ra trước khi bỏ công dựng cấu trúc lồng: truy vấn thực tế có được lợi từ nó không? Cấu trúc lồng giúp tránh JOIN và rất hiệu quả khi dữ liệu cha–con luôn được đọc cùng nhau — nhưng nếu các báo cáo chủ yếu tổng hợp trên phần cha, một bảng phẳng đơn giản vừa dễ viết vừa dễ hiểu hơn cho cả đội.

Câu 186 Data Management

Which of the following statements correctly distinguishes between an OLTP (Online Transaction Processing) and an OLAP (Online Analytical Processing) workload?

  1. A Processing a customer's online order is an OLAP task, while analyzing quarterly sales trends is an OLTP task.
  2. B Both processing an order and analyzing sales trends are considered OLTP tasks.
  3. C Both processing an order and analyzing sales trends are considered OLAP tasks.
  4. D Processing a customer's online order is an OLTP task, while analyzing quarterly sales trends is an OLAP task.
Xem giải thích

Đáp án

D — Xử lý đơn hàng trực tuyến của khách là tác vụ OLTP; phân tích xu hướng doanh số theo quý là tác vụ OLAP.

Vì sao đúng

Hai ví dụ trong đề là hai đại diện kinh điển của hai loại khối lượng công việc hoàn toàn khác nhau.

⚠ Điểm mấu chốt — phân biệt bằng ĐẶC ĐIỂM TRUY VẤN:

OLTP — Online Transaction Processing
        ↓
    "Xử lý một đơn hàng"
        ↓
    - RẤT NHIỀU giao dịch NHỎ
    - đọc/ghi VÀI DÒNG
    - độ trễ mili giây
    - nhất quán mạnh, có khoá
    - tối ưu cho GHI
        ↓
    → Cloud SQL, Spanner, AlloyDB

OLAP — Online Analytical Processing
        ↓
    "Phân tích xu hướng doanh số quý"
        ↓
    - ÍT truy vấn, mỗi truy vấn QUÉT RẤT NHIỀU
    - tổng hợp hàng triệu tới hàng tỉ dòng
    - lưu theo CỘT
    - tối ưu cho ĐỌC PHÂN TÍCH
        ↓
    → BigQuery

⚠ Vì sao phải tách hai loại này ra hai hệ thống:

Chạy truy vấn phân tích trên CSDL giao dịch
        ↓
    ⚠ Quét bảng lớn → dùng hết CPU và I/O
    ⚠ Tranh chấp khoá với ứng dụng
    ⚠ Khách hàng thấy ứng dụng chậm đi
        ↓
    → tách sang kho phân tích riêng
    → nối bằng Datastream hoặc federated query

⚠ Bảng so sánh nhanh:

                OLTP            OLAP
Số truy vấn     rất nhiều       ít
Dữ liệu/truy vấn vài dòng       hàng triệu dòng
Lưu trữ         theo DÒNG       theo CỘT
Mô hình         chuẩn hoá       phi chuẩn hoá
Tối ưu cho      GHI             ĐỌC
Ví dụ           đặt hàng        báo cáo quý

Xem thêm câu #13057 (lô 136): ánh xạ giao dịch → Cloud SQL, phân tích → BigQuery. Và #13062 (lô 136): data warehouse cho phân tích. Ba câu nhất quán, cùng một nguyên tắc tách OLTP khỏi OLAP.

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

  • A (đảo ngược hai vế) — đây là phương án gần nhất vì dùng đúng hai thuật ngữ, nhưng gán nhầm: xử lý đơn hàng là OLTP, phân tích xu hướng là OLAP.

  • B (cả hai đều là OLTP) và C (cả hai đều là OLAP) — gộp hai loại khác hẳn nhau vào một; sai về bản chất.

Ghi nhớ

⚠ OLTP ↔ OLAP — bảng phải thuộc: | | OLTP | OLAP | |---|---|---| | Mục đích | vận hành nghiệp vụ | phân tích, ra quyết định | | Truy vấn | nhiều, nhỏ, nhanh | ít, lớn, quét nhiều | | Lưu trữ | theo DÒNG | theo CỘT | | Mô hình dữ liệu | chuẩn hoá | phi chuẩn hoá, star schema | | Tối ưu cho | GHI | ĐỌC | | Trên GCP | Cloud SQL, Spanner, AlloyDB | BigQuery |

Từ khoá nhận diện:

"đặt hàng, thanh toán, cập nhật hồ sơ" → OLTP "báo cáo, xu hướng, tổng hợp theo quý" → OLAP "vài dòng, độ trễ mili giây" → OLTP "quét hàng tỉ dòng" → OLAP "chạy báo cáo trên CSDL sản xuất" → dấu hiệu sai kiến trúc

Vì sao lưu theo cột hợp với OLAP Lý do
Truy vấn phân tích dùng ÍT CỘT trên NHIỀU DÒNG
Lưu theo cột chỉ đọc cột cần
Nén cùng cột = cùng kiểu → nén rất tốt
Predicate pushdown bỏ qua khối không thoả
Kết quả quét ít byte hơn nhiều lần
Vì sao lưu theo dòng hợp với OLTP Lý do
Giao dịch đọc/ghi TOÀN BỘ một bản ghi
Lưu theo dòng cả bản ghi nằm liền nhau
Ghi một dòng = một thao tác không phải cập nhật N cột rời rạc
Chỉ mục truy cập điểm rất nhanh
Kết quả độ trễ mili giây cho từng giao dịch
Nối OLTP và OLAP trên GCP Cách
Datastream CDC từ Cloud SQL vào BigQuery
DMS + BQDTS nhân bản rồi nạp
Federated query BigQuery truy vấn thẳng Cloud SQL — bảng nhỏ
Dataflow nếu cần biến đổi
Nguyên tắc đừng để báo cáo chạm vào CSDL sản xuất
Dấu hiệu sai kiến trúc Dấu hiệu
Báo cáo chạy trên CSDL giao dịch ứng dụng chậm mỗi sáng thứ Hai
Dùng BigQuery cho đọc ghi từng dòng độ trễ cao, chi phí lạ
Chuẩn hoá quá mức trong kho phân tích quá nhiều JOIN
Phi chuẩn hoá trong CSDL giao dịch dữ liệu không nhất quán
Cách chữa đặt mỗi loại tải vào đúng hệ thống

Ba việc kiểm chứng: | Việc | Cách | |---|---| | CSDL giao dịch có bị dùng để phân tích không | xem truy vấn chậm trong log | | BigQuery có bị dùng cho tra cứu điểm không | xem truy vấn WHERE id = ... chạy liên tục | | Độ trễ đồng bộ giữa hai hệ thống | chỉ số của Datastream |

Và một câu hỏi rất hữu ích khi rà soát kiến trúc dữ liệu của một hệ thống đang chạy: báo cáo lấy dữ liệu từ đâu? Nếu câu trả lời là "từ CSDL của ứng dụng", bạn vừa tìm ra nguyên nhân của phần lớn những lần hệ thống chậm bất thường — và cách chữa là tách sang kho phân tích, không phải mua thêm CPU.

Câu 187 Data Analysis and Presentation

A business leadership team requires a self-service tool to monitor key sales metrics daily. They need a live, interactive dashboard with filters that allow them to drill down into data by region and product category without writing any code.

Which combination of Google Cloud services is the standard and most appropriate workflow for this requirement?

  1. A Using Cloud Functions to email a daily summary of data.
  2. B Querying data in BigQuery Studio and visualizing it in Looker Studio.
  3. C Exporting BigQuery data to Google Sheets to create charts.
  4. D Writing a Python script in Colab Enterprise to generate a static HTML (HyperText Markup Language) report.
Xem giải thích

Đáp án

B — Truy vấn dữ liệu trong BigQuery Studio và trực quan hoá bằng Looker Studio.

Vì sao đúng

Đề nêu bốn yêu cầu: công cụ tự phục vụ cho lãnh đạo, dashboard TRỰC TIẾP và TƯƠNG TÁC, có bộ lọc để đi sâu theo vùng và danh mục, và KHÔNG viết mã. Cặp BigQuery + Looker Studio là quy trình chuẩn.

⚠ Điểm mấu chốt — mỗi công cụ một vai trò:

BIGQUERY (Studio)
    → nơi DỮ LIỆU nằm
    → nơi viết truy vấn, dựng bảng tổng hợp
        ↓
LOOKER STUDIO
    → nơi TRỰC QUAN HOÁ
    → kéo thả tạo biểu đồ
    → bộ lọc, drill-down, chia sẻ
        ↓
    ⚠ Lãnh đạo chỉ chạm vào Looker Studio
    ⚠ Không cần biết SQL

⚠ Bộ lọc và drill-down trong Looker Studio:

Filter control
    → hộp chọn vùng, danh mục sản phẩm
    → áp cho toàn trang hoặc từng biểu đồ

Drill down
    → khai cấp phân cấp: vùng → tỉnh → cửa hàng
    → người xem bấm để đi sâu

Date range control
    → chọn khoảng thời gian
        ↓
    ⚠ Tất cả cấu hình bằng giao diện,
      không viết mã

⚠ Điều phải chú ý về CHI PHÍ:

Mỗi lần làm mới biểu đồ
    = một TRUY VẤN BigQuery
        ↓
    Dashboard 10 biểu đồ × nhiều người xem
    × nhiều lần mỗi ngày
        ↓
    ⚠ Hoá đơn có thể lớn
        ↓
    Cách giảm:
      - BẬT CACHE của Looker Studio
      - dựng BẢNG TỔNG HỢP nhỏ để đọc
      - BI Engine
      - đặt maximum_bytes_billed

Xem thêm câu #12947 (lô 134): cùng khoá Looker Studio cho dashboard miễn phí, kéo thả. Và #13045 (lô 136): phân biệt xem trực tiếp với gửi báo cáo theo lịch trong Looker. Ba câu nhất quán.

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

  • C (xuất dữ liệu BigQuery sang Google Sheets để vẽ biểu đồ) — đây là phương án gần nhất vì cũng cho ra biểu đồ, nhưng nó tạo bản sao tĩnh, không tự cập nhật, và giới hạn số ô của Sheets. (Connected Sheets thì khác — nhưng vẫn không phải dashboard tương tác cho lãnh đạo.)

  • D (viết script Python trong Colab tạo báo cáo HTML tĩnh) — cần viết mã và cho ra báo cáo TĨNH, không tương tác.

  • A (Cloud Function gửi email tóm tắt hằng ngày) — không phải dashboard, không tương tác, không lọc được.

Ghi nhớ

⚠ Chọn công cụ theo người dùng và nhu cầu — bảng phải thuộc: | Người dùng và nhu cầu | Công cụ | |---|---| | Lãnh đạo, dashboard tương tác, miễn phí | Looker Studio | | Doanh nghiệp, chỉ số thống nhất, quản trị | Looker | | Nhà phân tích, khám phá bằng SQL | BigQuery Studio | | Nhà khoa học dữ liệu, Python | Colab Enterprise | | Người quen bảng tính | Connected Sheets |

Từ khoá nhận diện:

"dashboard tương tác, không cần mã, miễn phí" → Looker Studio "chỉ số thống nhất toàn công ty, LookML" → Looker "khám phá bằng SQL" → BigQuery Studio "báo cáo có mã và diễn giải" → notebook "gửi email tóm tắt" → không phải dashboard

Looker Studio — điều cần nhớ Nội dung
Bản cơ bản MIỄN PHÍ Looker Studio Pro có phí
Trình kết nối BigQuery, Sheets, Cloud SQL và hàng trăm nguồn
Chia sẻ như Google Docs
Cache rất quan trọng để giảm chi phí
Hai chế độ xác thực owner's và viewer's credentials
Nhúng vào trang nội bộ
Tăng tốc và giảm chi phí dashboard Cách
Bảng TỔNG HỢP nhỏ báo cáo đọc bảng đã gộp sẵn
Materialized view tự làm mới, BigQuery tự dùng
BI Engine bộ nhớ đệm trong RAM
Bật và kéo dài cache ít truy vấn lặp
Lọc theo cột phân vùng giảm byte quét
maximum_bytes_billed trần an toàn
Hai chế độ xác thực — chú ý bảo mật Chế độ
Owner's credentials người xem KHÔNG cần quyền BigQuery
→ truy vấn tính cho chủ báo cáo
Viewer's credentials mỗi người dùng quyền của chính mình
Dùng viewer khi cần row-level security theo từng người
⚠ Cẩn thận owner's credentials có thể lộ dữ liệu
Khi nào cần lên Looker (không phải Studio) Dấu hiệu
Cùng chỉ số ra nhiều con số khác nhau
Cần quản lý phiên bản định nghĩa chỉ số
Cần phân quyền theo dòng phức tạp
Cần nhúng vào sản phẩm bán cho khách
Nếu chưa có dấu hiệu nào Looker Studio là đủ và rẻ hơn nhiều

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Dashboard tốn bao nhiêu | INFORMATION_SCHEMA.JOBS, lọc theo nhãn Looker Studio | | Cache có hoạt động không | làm mới nhiều lần, xem số job phát sinh | | Ai xem được báo cáo | menu chia sẻ của chính báo cáo |

Và một bước nên làm trước khi mở dashboard cho ban lãnh đạo: dựng một bảng tổng hợp nhỏ để báo cáo đọc, thay vì trỏ thẳng vào bảng giao dịch nhiều terabyte. Mỗi bộ lọc mà lãnh đạo bấm sẽ sinh một truy vấn mới — và với một bảng tổng hợp vài trăm nghìn dòng, chi phí đó gần như bằng không thay vì tăng theo mỗi lượt xem.

Câu 188 Data Management

A company has a legal requirement to delete all user-related log data from a BigQuery table named user_activity exactly 3 years (1095 days) after the data was generated. They need an automated solution that requires no manual intervention.

What should the data administrator configure?

  1. A A Dataflow pipeline to rewrite the table.
  2. B A table partition expiration setting of 1095 days.
  3. C A Cloud Function that deletes old rows.
  4. D A daily scheduled query that runs a DELETE statement.
Xem giải thích

Đáp án

B — Đặt partition expiration 1095 ngày cho bảng.

Vì sao đúng

Yêu cầu là xoá dữ liệu đúng 3 năm sau khi phát sinh, tự động, không cần can thiệp thủ công. BigQuery có sẵn cơ chế xoá phân vùng theo tuổi.

⚠ Điểm mấu chốt — một dòng cấu hình, chạy mãi:

ALTER TABLE `du_an.user_activity`
SET OPTIONS (
  partition_expiration_days = 1095
);
        ↓
    BigQuery TỰ XOÁ mọi phân vùng
    quá 1095 ngày
        ↓
    ⚠ Không có job nào phải chạy
    ⚠ Không có mã nào phải bảo trì
    ⚠ Không có gì để quên

⚠ Vì sao xoá theo PHÂN VÙNG rẻ hơn DELETE:

DELETE FROM ... WHERE ngay < ...
        ↓
    → là thao tác DML
    → phải QUÉT dữ liệu để tìm dòng cần xoá
    → TỐN TIỀN theo byte quét
    → chậm với bảng lớn

XOÁ PHÂN VÙNG
        ↓
    → bỏ đi cả một khối siêu dữ liệu
    → gần như tức thì
    → MIỄN PHÍ

⚠ Điều kiện tiên quyết — bảng phải PHÂN VÙNG:

Không phân vùng
        ↓
    ⚠ KHÔNG có partition expiration
    → buộc phải DELETE thủ công
        ↓
    Vì vậy bảng log nên:
      PARTITION BY DATE(thoi_diem)
      OPTIONS(partition_expiration_days = 1095)
        ↓
    ⚠ Khai ngay khi TẠO bảng

Xem thêm câu #13039 (lô 136): cùng tình huống xoá tự động, cùng khoá partition expiration (48 tháng). Và #13044 (lô 136): nêu chính điều kiện tiên quyết là phân vùng. Ba câu hoàn toàn nhất quán.

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

  • D (scheduled query chạy DELETE hằng ngày) — đây là phương án gần nhất và cũng tự động, nhưng nó tốn tiền theo byte quét mỗi ngày, chậm hơn, và thêm một thứ phải theo dõi khi hỏng.

  • C (Cloud Function xoá dòng cũ) — phải viết mã, phải xử lý lỗi và phân trang; nhiều công hơn hẳn.

  • A (pipeline Dataflow ghi lại bảng) — cực kỳ tốn kém cho một việc mà một dòng cấu hình làm được.

Ghi nhớ

⚠ Vòng đời dữ liệu trong BigQuery — bảng phải thuộc: | Cơ chế | Việc | |---|---| | partition_expiration_days | tự XOÁ phân vùng quá tuổi | | expiration_timestamp của bảng | xoá cả BẢNG vào thời điểm định trước | | default_partition_expiration_days của dataset | áp cho bảng mới | | Long-term storage | tự giảm ~50% GIÁ, không xoá | | bq extract + xoá | giữ bản sao ở GCS | | Time travel | khôi phục trong 7 ngày |

Từ khoá nhận diện:

"xoá tự động sau N ngày" → partition expiration "giữ N năm để tuân thủ" → GCS Archive + retention policy "giảm chi phí dữ liệu cũ, vẫn truy vấn được" → long-term storage (tự động) "DELETE hằng ngày" → tốn kém, không phải cách tốt nhất "Dataflow ghi lại bảng" → quá tay

Đặt expiration ở ba mức Mức
Cấp DATASET default_partition_expiration_days — áp cho bảng mới
Cấp BẢNG partition_expiration_days
Cấp BẢNG (cả bảng) expiration_timestamp
Ưu tiên cấp bảng ghi đè cấp dataset
Khai lúc tạo trong CREATE TABLE ... OPTIONS(...)
Xoá là VĨNH VIỄN — nhưng có lưới an toàn Nội dung
Time travel khôi phục trong 7 ngày (cấu hình 2–7)
Fail-safe thêm 7 ngày, chỉ Google truy cập được
Sau đó mất vĩnh viễn
Trước khi đặt expiration kiểm tra không còn ai truy vấn dữ liệu cũ
Kiểm tra bằng INFORMATION_SCHEMA.JOBS
Tuân thủ "quyền được xoá" — bức tranh rộng hơn Nội dung
Dữ liệu thường ở NHIỀU NƠI BigQuery, GCS, log, bản sao
Partition expiration chỉ lo BigQuery
Cloud Storage cần lifecycle rule Delete riêng
Cloud Logging thời gian giữ của log bucket
Bảng phái sinh dễ bị bỏ sót nhất
Vì vậy lập bản đồ mọi nơi dữ liệu đi qua
Kiểm chứng chính sách đã có hiệu lực Việc
bq show xem partitionExpirationMs
SELECT MIN(<cột ngày>) phân vùng cũ nhất còn lại
INFORMATION_SCHEMA.PARTITIONS liệt kê phân vùng
Quét các bảng phái sinh chúng có kế thừa chính sách không
Định kỳ kiểm lại mỗi quý

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chính sách đã đặt chưa | bq show --format=prettyjson <bảng> → partitionExpirationMs | | Dữ liệu cũ nhất còn lại | SELECT MIN(thoi_diem) FROM ... | | Có bảng nào giữ dữ liệu cũ không | rà soát bảng tổng hợp và bản sao |

Và một chỗ rất hay bị bỏ sót khi thực thi yêu cầu pháp lý về xoá dữ liệu: các bảng phái sinh. Bảng gốc được dọn đúng hạn, nhưng bảng tổng hợp, bảng staging và bản sao tạo ra từ nó vẫn giữ nguyên dữ liệu cũ — nên hãy lập bản đồ toàn bộ đường đi của dữ liệu trước khi báo cáo rằng chính sách đã được thực thi.

Câu 189 Data Preparation and Ingestion

An enterprise needs to build a data pipeline that integrates data from several disparate sources, including an on-premises Oracle database, a Salesforce cloud instance, and an SAP system. The primary challenge is the complexity of connecting to these varied systems. The team wants a solution that offers pre-built, certified connectors to accelerate this integration process.

Which service is designed with this priority in mind?

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

Đáp án

D — Cloud Data Fusion.

Vì sao đúng

Đề nêu rõ thách thức chính là độ phức tạp của việc KẾT NỐI tới các hệ thống rất khác nhau (Oracle tại chỗ, Salesforce, SAP), và đội muốn trình kết nối DỰNG SẴN, ĐÃ CHỨNG NHẬN để rút ngắn thời gian tích hợp.

⚠ Điểm mấu chốt — giá trị nằm ở PLUGIN dựng sẵn:

Cloud Data Fusion
        ↓
    Hơn 150 PLUGIN dựng sẵn, gồm:
      - JDBC (Oracle, SQL Server, MySQL...)
      - Salesforce
      - SAP (bộ plugin chứng nhận riêng)
      - ServiceNow, Workday, Marketo
      - Kafka, S3, Azure Blob
        ↓
    ⚠ Không phải tự viết mã gọi API
    ⚠ Không phải tự lo OAuth, phân trang,
      giới hạn tần suất, ánh xạ kiểu

⚠ Vì sao SAP và Salesforce là từ khoá quyết định:

SAP và Salesforce
        ↓
    API rất phức tạp, có đặc thù riêng
        ↓
    Tự viết pipeline
      → hàng tuần tới hàng tháng
      → và phải bảo trì khi API đổi

    Plugin chứng nhận
      → cấu hình vài trường là chạy
        ↓
    ⚠ Đây chính là "rút ngắn quá trình
      tích hợp" mà đề nói tới

⚠ Vì sao Dataflow không phải câu trả lời ở đây:

Dataflow
        ↓
    Rất mạnh, nhưng phải VIẾT MÃ Beam
        ↓
    ⚠ Kết nối tới SAP, Salesforce
      → phải tự viết I/O connector
      → hoặc dùng thư viện bên thứ ba
        ↓
    → không giải quyết được
      "thách thức chính" của đề

Xem thêm câu #13012 và #13021 (lô 135), #13020 (lô 135): cùng khoá Cloud Data Fusion, cùng lý do plugin dựng sẵn và không cần lập trình. Bốn câu hoàn toàn nhất quán. Và #13038 (lô 136): nêu tiêu chí phân biệt với Dataflow.

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

  • B (Dataflow) — đây là phương án gần nhất về năng lực xử lý, nhưng nó đòi viết mã Beam và không có trình kết nối chứng nhận cho SAP hay Salesforce — đúng thách thức mà đề nêu.

  • C (Cloud Functions) — chạy đoạn mã ngắn; tích hợp ba hệ thống doanh nghiệp bằng hàm là tự viết lại toàn bộ.

  • A (BigQuery) — là kho dữ liệu ĐÍCH, không phải công cụ kết nối và tích hợp.

Ghi nhớ

⚠ Chọn công cụ theo THÁCH THỨC CHÍNH — bảng phải thuộc: | Thách thức chính | Công cụ | |---|---| | Kết nối tới nhiều hệ thống lạ | Cloud Data Fusion (plugin sẵn) | | Logic biến đổi phức tạp, có kỹ sư | Dataflow | | Đã có mã Spark | Dataproc | | Chỉ biến đổi SQL trong BigQuery | Dataform | | Nguồn SaaS của Google → BigQuery | BigQuery Data Transfer Service | | CSDL → Cloud SQL | Database Migration Service |

Từ khoá nhận diện:

"nhiều nguồn khác nhau, cần trình kết nối sẵn" → Cloud Data Fusion "SAP, Salesforce, ServiceNow" → plugin chứng nhận của Data Fusion "logic tuỳ biến phức tạp" → Dataflow "Google Ads → BigQuery" → Data Transfer Service "Oracle → Cloud SQL" → DMS

Cloud Data Fusion — điều cần nhớ Nội dung
Nền tảng CDAP mã nguồn mở
Hơn 150 plugin Hub để tải thêm
Wrangler làm sạch trực quan
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
Plugin SAP có bộ riêng, cần cấu hình phía SAP
Kết nối tới hệ thống tại chỗ Việc
Cloud VPN hoặc Interconnect đường mạng riêng
JDBC driver Oracle phải tự tải lên (không phân phối lại được)
Tài khoản chỉ đọc quyền tối thiểu
Đọc từ REPLICA tránh ảnh hưởng hệ thống sản xuất
Đọc gia tăng theo cột dấu thời gian
Tích hợp SaaS — điều cần lưu ý Nội dung
Giới hạn tần suất API Salesforce, SAP đều có
Xác thực OAuth plugin xử lý sẵn
Phân trang plugin xử lý sẵn
Lược đồ thay đổi SaaS cập nhật API định kỳ
Chi phí gọi API một số nền tảng tính phí
Đây là những thứ tự viết sẽ rất tốn công
Khi nào Data Fusion KHÔNG đáng Trường hợp
Chỉ một nguồn, đã có plugin ở dịch vụ khác → DTS, DMS
Vài pipeline đơn giản chi phí nền không đáng
Cần hiệu năng và tối ưu sâu → Dataflow
Đội mạnh về lập trình, ít nguồn lạ → Dataflow
Đề này ba hệ thống phức tạp → plugin sẵn rất đáng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Nguồn có plugin sẵn không | Data Fusion Hub | | Pipeline chạy có lỗi không | Pipeline runs trong giao diện | | Nguồn có bị ảnh hưởng không | theo dõi tải trên Oracle và giới hạn API của SaaS |

Và một khoản công sức thường bị đánh giá thấp khi tích hợp SAP hay Salesforce: phần cấu hình ở PHÍA HỆ THỐNG NGUỒN. Plugin của Data Fusion lo phần kết nối, nhưng bạn vẫn cần quyền phù hợp, đôi khi cần cài thành phần phụ trên SAP, và cần đội quản trị hệ thống đó phối hợp — hãy đưa việc đó vào kế hoạch từ đầu thay vì coi là chi tiết kỹ thuật nhỏ.

Câu 190 Data Management

A developer needs to provide a client with temporary, time-limited read-only access to a specific private object in a Cloud Storage bucket without changing any IAM policies. The client will be using this access to download the object directly from their web browser.

Which access control mechanism is best suited for this requirement?

  1. A Create a Signed URL for the object.
  2. B Grant the client's user account the Storage Object Viewer role.
  3. C Make the object publicly accessible.
  4. D Place the object in a separate public bucket.
Xem giải thích

Đáp án

A — Tạo một Signed URL cho đối tượng đó.

Vì sao đúng

Đề nêu bốn điều: quyền TẠM THỜI, có giới hạn thời gian, chỉ đọc, cho một đối tượng cụ thể, KHÔNG đổi chính sách IAM, và người nhận tải trực tiếp từ trình duyệt. Signed URL làm đúng cả năm.

⚠ Điểm mấu chốt — URL mang sẵn chữ ký và hạn dùng:

gcloud storage sign-url gs://bucket/tep.pdf \
  --duration=1h \
  --private-key-file=key.json
        ↓
    Sinh ra một URL dài chứa:
      - đường dẫn đối tượng
      - thời điểm HẾT HẠN
      - CHỮ KÝ mã hoá
        ↓
    ⚠ Ai có URL đều tải được
    ⚠ Hết hạn thì URL vô hiệu
    ⚠ KHÔNG đụng tới IAM
    ⚠ Người nhận KHÔNG cần tài khoản Google

⚠ Vì sao cấp IAM role là không phù hợp ở đây:

Cấp roles/storage.objectViewer
        ↓
    ⚠ Khách hàng phải CÓ TÀI KHOẢN GOOGLE
    ⚠ Quyền TỒN TẠI VĨNH VIỄN tới khi thu hồi
    ⚠ Phải nhớ gỡ quyền sau đó
    ⚠ Áp cho cả bucket hoặc phải cấu hình riêng
        ↓
    → trái yêu cầu "tạm thời, không đổi IAM"

⚠ Vì sao "công khai đối tượng" là sai nghiêm trọng:

Đặt allUsers:objectViewer
        ↓
    ⚠ AI TRÊN INTERNET cũng tải được
    ⚠ Có thể bị lập chỉ mục bởi công cụ tìm kiếm
    ⚠ Không có hạn dùng
    ⚠ Không biết ai đã tải
        ↓
    → lỗ hổng bảo mật, không phải giải pháp

Xem thêm câu #12937 (lô 134): về uniform bucket-level access. Signed URL hoạt động bình thường với uniform access, vì nó không phải ACL — đây là lý do nó là cách chia sẻ đúng đắn khi đã tắt ACL từng đối tượng.

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

  • B (cấp Storage Object Viewer cho tài khoản khách hàng) — đây là phương án gần nhất và đúng về mặt quyền đọc, nhưng nó đổi chính sách IAM (trái yêu cầu), không tự hết hạn, và đòi khách hàng có tài khoản Google.

  • C (đặt đối tượng thành công khai) — lỗ hổng bảo mật: ai cũng truy cập được, vô thời hạn.

  • D (chuyển đối tượng sang bucket công khai) — cũng công khai, và còn phải di chuyển dữ liệu.

Ghi nhớ

⚠ Các cách chia sẻ đối tượng trong Cloud Storage — bảng phải thuộc: | Cách | Đặc điểm | |---|---| | Signed URL | tạm thời, có hạn, KHÔNG cần tài khoản Google | | Signed policy document | cho phép TẢI LÊN có kiểm soát | | IAM role | lâu dài, cần tài khoản Google | | IAM condition | quyền có điều kiện thời gian hoặc tiền tố | | allUsers | CÔNG KHAI — rất cẩn thận | | Cloud CDN + signed cookie | nhiều đối tượng, một phiên |

Từ khoá nhận diện:

"tạm thời, có hạn, không đổi IAM" → Signed URL "cho phép tải LÊN" → signed policy document "nhiều tệp trong một phiên" → signed cookie "lâu dài, người trong tổ chức" → IAM role "công khai cho tiện" → luôn là phương án SAI

Signed URL — điều cần nhớ Nội dung
Thời hạn tối đa 7 ngày với khoá service account
Ký bằng khoá của service account, hoặc IAM SignBlob API
Không cần khoá JSON dùng --impersonate-service-account
Hoạt động với uniform access không phải ACL
Không thu hồi được trước khi hết hạn
Phương thức GET (tải), PUT (tải lên), DELETE
Ký mà không cần khoá JSON Cách
gcloud storage sign-url --impersonate-service-account=<sa>
Cần roles/iam.serviceAccountTokenCreator
Trong mã dùng IAM Credentials API signBlob
Lợi ích không có khoá dài hạn nào tồn tại
Đây là cách khuyến nghị hiện nay
Rủi ro của Signed URL và cách giảm Rủi ro
Ai có URL đều tải được → đặt thời hạn NGẮN
Không thu hồi được → thời hạn ngắn là biện pháp chính
URL có thể bị chuyển tiếp → chấp nhận, hoặc dùng signed cookie kèm xác thực
Lộ trong log hoặc lịch sử trình duyệt → tránh nhúng vào email công khai
Theo dõi Data Access audit log
Signed policy document — cho tải LÊN Nội dung
Cho phép người dùng tải tệp LÊN bucket
Giới hạn được kích thước, content-type, tiền tố tên
Dùng cho form tải lên trên web
Lợi ích tệp đi thẳng lên GCS, không qua máy chủ của bạn
Kết hợp với xác thực của ứng dụng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | URL còn hạn không | tham số X-Goog-Expires trong URL | | Ai đã tải tệp | Data Access audit log của bucket | | Bucket có công khai không | get-iam-policy, tìm allUsers |

Và một tham số nên đặt cẩn thận hơn người ta thường làm: thời hạn của Signed URL. Vì không thu hồi được trước khi hết hạn, một URL bảy ngày cho một tệp nhạy cảm nghĩa là bảy ngày bạn không kiểm soát được ai đang giữ nó — hãy đặt đủ dùng cho lần tải đó, thường là vài giờ, chứ không phải mức tối đa.