Ngân hàng đề — Google Cloud Associate Data Practitioner
Tìm thấy 333 câu.
A developer is building a downstream application that processes change events generated by Datastream. When an `UPDATE` event occurs in the source database, the application needs to access the new values for the columns in the modified row.
In which part of the Datastream event message is this row data contained?
- A The message header
- B The `payload` section
- C The metadata section
- D A Dead-Letter Topic (DLT)
Xem giải thích
Đáp án
B — Trong phần payload.
Vì sao đúng
Mỗi sự kiện thay đổi mà Datastream sinh ra được chia thành hai phần rõ ràng: payload chứa DỮ LIỆU của dòng, và phần metadata chứa thông tin về chính sự kiện đó.
⚠ Điểm mấu chốt — cấu trúc một sự kiện Datastream:
{
"payload": {
"khach_id": 123,
"ten": "Nguyen Van An",
"email": "an@congty.com",
"cap_nhat_luc": "2026-09-02T10:00:00Z"
},
"source_metadata": {
"table": "khach_hang",
"schema": "public",
"change_type": "UPDATE",
"is_deleted": false,
"log_position": "...",
"primary_keys": ["khach_id"]
},
"read_timestamp": "...",
"source_timestamp": "..."
}
↓
⚠ payload = GIÁ TRỊ MỚI của các cột
⚠ source_metadata = thông tin VỀ sự kiện
⚠ Ứng dụng hạ nguồn cần cả hai phần:
payload
→ giá trị mới để ghi vào đích
source_metadata.change_type
→ INSERT / UPDATE / DELETE
→ quyết định làm gì
source_metadata.is_deleted
→ có phải bản ghi bị xoá không
source_metadata.primary_keys
→ biết dùng khoá nào để MERGE
source_timestamp
→ thứ tự sự kiện, xử lý dữ liệu tới muộn
⚠ Mẫu xử lý điển hình — MERGE vào bảng đích:
MERGE `du_an.khach_hang` T
USING (SELECT * FROM su_kien_moi_nhat) S
ON T.khach_id = S.khach_id
WHEN MATCHED AND S.is_deleted THEN DELETE
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT ...
↓
⚠ Chỉ lấy sự kiện MỚI NHẤT cho mỗi khoá
→ dùng ROW_NUMBER() theo source_timestamp
Xem thêm câu #13059 (lô 136): về CDC — cơ chế mà Datastream dùng để sinh ra chính các sự kiện này. Hai câu bổ sung nhau: một về cơ chế, một về cấu trúc dữ liệu đầu ra.
Vì sao các phương án khác sai
-
C (phần metadata) — đây là phương án gần nhất và là một phần thật sự của sự kiện, nhưng nó chứa thông tin VỀ sự kiện (bảng nào, loại thay đổi, vị trí trong nhật ký), không chứa GIÁ TRỊ các cột.
-
A (message header) — chứa thông tin vận chuyển của Pub/Sub, không phải dữ liệu dòng.
-
D (Dead-Letter Topic) — nơi chứa thông điệp THẤT BẠI, không phải nơi chứa dữ liệu của sự kiện bình thường.
Ghi nhớ
⚠ Cấu trúc sự kiện Datastream — bảng phải thuộc: | Phần | Nội dung | |---|---| | payload | GIÁ TRỊ các cột của dòng | | source_metadata.table / schema | nguồn gốc | | source_metadata.change_type | INSERT / UPDATE / DELETE | | source_metadata.is_deleted | cờ xoá | | source_metadata.primary_keys | khoá để MERGE | | source_timestamp | thời điểm ở NGUỒN — dùng để sắp thứ tự | | read_timestamp | thời điểm Datastream đọc được |
Từ khoá nhận diện:
"giá trị các cột sau khi thay đổi" →
payload"loại thay đổi, tên bảng" →source_metadata"thứ tự sự kiện" →source_timestamp"thông điệp thất bại" → dead-letter topic "gộp thay đổi vào bảng đích" →MERGE
| Datastream — điều cần nhớ | Nội dung |
|---|---|
| Nguồn | Oracle, MySQL, PostgreSQL, SQL Server |
| Đích | BigQuery (trực tiếp), Cloud Storage |
| Cơ chế | CDC — đọc nhật ký giao dịch |
| Độ trễ | tính bằng phút |
| Không cần mã | với đích BigQuery |
| Định dạng ra GCS | Avro hoặc JSON |
| Ghi thẳng vào BigQuery — hai chế độ | Chế độ |
|---|---|
| Merge | giữ bảng đích GIỐNG nguồn — áp UPDATE/DELETE |
| Append-only | giữ TOÀN BỘ lịch sử thay đổi |
| Chọn merge khi | cần bản sao hiện trạng |
| Chọn append khi | cần phân tích lịch sử thay đổi |
| Append cũng hữu ích | dựng bảng slowly changing dimension |
| Xử lý sự kiện tới lộn xộn | Cách |
|---|---|
Sắp theo source_timestamp |
không phải theo thời điểm nhận |
ROW_NUMBER() OVER (PARTITION BY khoa ORDER BY source_timestamp DESC) |
lấy bản mới nhất |
QUALIFY rn = 1 |
lọc gọn |
| Rồi mới | MERGE vào bảng đích |
| Nếu bỏ bước này | bản ghi cũ có thể ghi đè bản mới |
| Điều kiện phía nguồn | Điều kiện |
|---|---|
| Bật nhật ký giao dịch | binlog ROW, WAL logical, ARCHIVELOG |
| Tài khoản có quyền đọc nhật ký | |
| MỌI BẢNG CÓ KHOÁ CHÍNH | bắt buộc cho CDC |
| Giữ nhật ký đủ lâu | tránh mất thay đổi |
| Đường mạng riêng | VPN, Interconnect, hoặc Private Connectivity |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Sự kiện trông thế nào | đọc một thông điệp mẫu từ Pub/Sub hoặc tệp trong GCS | | Độ trễ bao nhiêu | chỉ số của Datastream stream | | Bảng đích có khớp nguồn không | so COUNT(*) và vài bản ghi cụ thể |
Và một chi tiết quyết định tính đúng đắn của mọi pipeline CDC: sắp thứ tự theo source_timestamp, không theo thời điểm nhận được. Sự kiện có thể tới lộn xộn, và nếu bạn áp chúng theo thứ tự đến, một lần cập nhật cũ có thể ghi đè lên giá trị mới — sai lệch âm thầm và rất khó truy ngược.
Which of the following activities is a core part of the "Transform" stage in a data pipeline?
- A Loading the final data into a BigQuery data warehouse.
- B Setting up a daily schedule for the pipeline to run.
- C Standardizing date formats and joining data from multiple sources.
- D Extracting raw data from a source application's database.
Xem giải thích
Đáp án
C — Chuẩn hoá định dạng ngày tháng và nối dữ liệu từ nhiều nguồn.
Vì sao đúng
Cả hai việc trong phương án này đều thay đổi hình dạng và nội dung dữ liệu để nó dùng được cho phân tích — đúng định nghĩa của bước Transform.
⚠ Điểm mấu chốt — Transform làm gì cụ thể:
CHUẨN HOÁ ĐỊNH DẠNG
"02/09/2026", "2026-09-02", "Sep 2 2026"
↓ đều thành
DATE '2026-09-02'
↓
→ dữ liệu từ nhiều nguồn so sánh được
NỐI DỮ LIỆU TỪ NHIỀU NGUỒN
đơn hàng + hồ sơ khách + danh mục sản phẩm
↓
→ một bảng phân tích hoàn chỉnh
↓
⚠ CẢ HAI đều là biến đổi
⚠ Vì sao ba phương án kia thuộc bước KHÁC:
"Nạp dữ liệu cuối vào BigQuery"
→ bước LOAD (chữ L)
"Đặt lịch chạy hằng ngày cho pipeline"
→ ĐIỀU PHỐI (orchestration)
→ Cloud Scheduler, Composer
"Trích xuất dữ liệu thô từ CSDL nguồn"
→ bước EXTRACT (chữ E)
↓
⚠ Ba việc này đều CẦN THIẾT,
nhưng KHÔNG phải Transform
⚠ Danh sách các phép biến đổi thường gặp:
CHUẨN HOÁ → định dạng ngày, mã quốc gia
LÀM SẠCH → bỏ khoảng trắng, sửa lỗi
ÉP KIỂU → chuỗi → số, chuỗi → ngày
LOẠI TRÙNG → giữ bản ghi đúng
LÀM GIÀU → nối với nguồn khác
TỔNG HỢP → gộp theo nhóm
ĐỊNH HÌNH → phi chuẩn hoá, nested/repeated
ẨN DANH HOÁ → che PII
Xem thêm câu #13067 (lô 136): hỏi MỤC TIÊU của bước Transform → biến dữ liệu thô thành dạng dùng được. Câu này hỏi HOẠT ĐỘNG cụ thể. Hai câu bổ sung nhau — hoàn toàn nhất quán. Và #12953 (lô 134): nhận diện chuẩn hoá mã quốc gia là biến đổi.
Vì sao các phương án khác sai
-
A (nạp dữ liệu cuối vào BigQuery) — đây là phương án gần nhất vì cũng là một bước của pipeline, nhưng đó là LOAD, không phải Transform.
-
D (trích xuất dữ liệu thô từ CSDL nguồn) — là bước EXTRACT.
-
B (đặt lịch chạy hằng ngày) — thuộc về ĐIỀU PHỐI, một phạm trù khác hẳn.
Ghi nhớ
⚠ Các bước của pipeline và việc của chúng — bảng phải thuộc: | Bước | Việc | |---|---| | Extract | lấy dữ liệu ra khỏi nguồn | | Transform | chuẩn hoá, làm sạch, join, tổng hợp | | Load | đưa dữ liệu vào đích | | Assess quality | PHÁT HIỆN vấn đề — không sửa | | Orchestrate | quản lý thứ tự, lịch chạy, phụ thuộc | | Govern | quyền, phân loại, dòng dõi |
Từ khoá nhận diện:
"chuẩn hoá, join, tổng hợp, ép kiểu" → Transform "lấy ra / đưa vào" → Extract / Load "đặt lịch, quản lý phụ thuộc" → điều phối "kiểm tra rỗng, đúng định dạng" → đánh giá chất lượng "ai được truy cập" → quản trị
| Chuẩn hoá ngày tháng — vì sao quan trọng | Lý do |
|---|---|
| Mỗi nguồn một định dạng | DD/MM/YYYY, MM/DD/YYYY, ISO |
| Nhầm ngày và tháng | 02/09 là 2 tháng 9 hay 9 tháng 2 |
| Múi giờ khác nhau | báo cáo lệch một ngày ở phần biên |
| Cách làm | ép về DATE hoặc TIMESTAMP chuẩn ngay ở tầng staging |
| Hàm | PARSE_DATE, PARSE_TIMESTAMP, SAFE.PARSE_DATE |
| Nối dữ liệu nhiều nguồn — cạm bẫy | Cạm bẫy |
|---|---|
| Khoá không khớp | mã khách khác nhau giữa hai hệ thống |
| Nhân bản dòng | khoá bên phải không duy nhất |
| Mất dòng | dùng INNER JOIN khi cần LEFT JOIN |
| Kiểu dữ liệu lệch | STRING vs INT64 |
| Phòng ngừa | so COUNT(*) trước và sau |
| Công cụ biến đổi trên GCP | Công cụ |
|---|---|
| BigQuery SQL | đơn giản nhất khi dữ liệu đã ở đó |
| Dataform | quản lý chuỗi SQL, có kiểm thử |
| Dataflow | lô và luồng quy mô lớn |
| Cloud Data Fusion | kéo thả, nhiều plugin |
| Dataprep | khám phá và làm sạch trực quan |
| Dataproc | Spark |
| Biến đổi tốt cần gì | Yếu tố |
|---|---|
| LẶP LẠI ĐƯỢC | chạy lại ra cùng kết quả |
| BẤT BIẾN | chạy hai lần không sinh sai lệch |
| Có KIỂM THỬ | assertion về chất lượng |
| Dựng lại được từ dữ liệu thô | nguyên tắc nền của ELT |
| Xử lý được giá trị bất thường | không âm thầm bỏ qua |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Biến đổi có mất dòng không | so COUNT(*) trước và sau | | Ngày tháng có bị hiểu sai không | kiểm tra vài bản ghi ở phần biên tháng | | Kết quả có lặp lại được không | chạy lại và so |
Và một hàm rất đáng dùng khi chuẩn hoá ngày tháng từ nguồn không tin cậy: SAFE.PARSE_DATE. Nó trả về NULL thay vì làm hỏng cả truy vấn khi gặp một giá trị sai định dạng — và một cột NULL đếm được là tín hiệu rõ ràng hơn nhiều so với một job thất bại không rõ nguyên nhân.
An operations team is responsible for maintaining a critical Dataflow streaming pipeline. They need a tool to create a dashboard that tracks key performance metrics like CPU utilization and system lag. They also need to configure an alert that will automatically send a notification if the job fails.
Which Google Cloud service is the primary tool for these monitoring and alerting tasks?
- A Cloud Monitoring
- B BigQuery
- C Cloud Logging
- D Data Catalog
Xem giải thích
Đáp án
A — Cloud Monitoring.
Vì sao đúng
Đề nêu hai nhu cầu: dựng dashboard theo dõi CHỈ SỐ (CPU, system lag) và cấu hình CẢNH BÁO tự động khi job thất bại. Cả hai đều là việc của Cloud Monitoring.
⚠ Điểm mấu chốt — bốn trụ cột quan sát, mỗi cái một loại dữ liệu:
CLOUD MONITORING ← đề này
→ CHỈ SỐ (metrics)
→ DASHBOARD
→ ALERTING POLICY
→ trả lời: "hệ thống có khoẻ không"
CLOUD LOGGING
→ LOG, thông báo lỗi, stack trace
→ trả lời: "chuyện gì đã xảy ra"
CLOUD TRACE
→ dấu vết một request qua các dịch vụ
CLOUD PROFILER
→ hàm nào tốn CPU và bộ nhớ
⚠ Các chỉ số Dataflow đáng đưa lên dashboard:
job/system_lag → độ trễ hệ thống
job/data_watermark_age → DATA FRESHNESS
job/current_num_vcpus → số worker
CPU utilization → worker có bận không
job/element_count → thông lượng theo bước
job/user_counter → chỉ số tuỳ chỉnh của bạn
⚠ Cảnh báo khi job thất bại — dùng log-based metric:
1. Trong Cloud Logging, tạo bộ lọc bắt
sự kiện job chuyển sang FAILED
↓
2. Tạo LOG-BASED METRIC từ bộ lọc đó
↓
3. Trong Cloud Monitoring, tạo
ALERTING POLICY trên chỉ số ấy
↓
4. Gắn kênh thông báo:
email, Slack, PagerDuty, Pub/Sub
↓
⚠ Logging và Monitoring làm việc
CÙNG NHAU — nhưng công cụ
TẠO CẢNH BÁO là Monitoring
Xem thêm câu #12920 (lô 133) và #13081 (lô 136): cùng về Dataflow nhưng hỏi nơi tìm LOG và stack trace → khoá là Cloud Logging. Câu này hỏi dashboard chỉ số và cảnh báo → Cloud Monitoring. Ba câu khoá khác nhau vì hỏi hai loại dữ liệu khác nhau — hoàn toàn nhất quán.
Vì sao các phương án khác sai
-
C (Cloud Logging) — đây là phương án gần nhất và cung cấp dữ liệu cho log-based metric, nhưng bản thân nó dành cho log dạng chữ; dashboard chỉ số và alerting policy nằm ở Cloud Monitoring.
-
B (BigQuery) — kho phân tích; có thể lưu log xuất ra, nhưng không phải công cụ giám sát và cảnh báo.
-
D (Data Catalog / Dataplex) — lập danh mục dữ liệu, hoàn toàn không liên quan tới giám sát vận hành.
Ghi nhớ
⚠ Bốn trụ cột quan sát — bảng phải thuộc: | Công cụ | Dữ liệu | Trả lời câu hỏi | |---|---|---| | Cloud Monitoring | chỉ số, dashboard, CẢNH BÁO | hệ thống có khoẻ không | | Cloud Logging | log, stack trace | chuyện gì đã xảy ra | | Cloud Trace | dấu vết phân tán | thời gian đi đâu mất | | Cloud Profiler | hồ sơ CPU/bộ nhớ | hàm nào tốn tài nguyên | | Error Reporting | gom nhóm lỗi | lỗi nào xảy ra nhiều nhất |
Từ khoá nhận diện:
"dashboard chỉ số, cảnh báo" → Cloud Monitoring "stack trace, thông báo lỗi" → Cloud Logging "request chậm ở bước nào" → Cloud Trace "hàm nào ngốn CPU" → Cloud Profiler "gom các lỗi giống nhau" → Error Reporting
| Log-based metric — cầu nối giữa hai công cụ | Bước |
|---|---|
| 1 | Viết bộ lọc log bắt đúng sự kiện |
| 2 | Tạo log-based metric từ bộ lọc |
| 3 | Tạo alerting policy trên chỉ số đó |
| 4 | Gắn kênh thông báo |
| Lợi ích | cảnh báo dựa trên nội dung LOG |
| Ví dụ | job FAILED, lỗi lược đồ, tỉ lệ lỗi vượt ngưỡng |
| Cảnh báo nên đặt cho pipeline luồng | Cảnh báo |
|---|---|
| Data freshness / system lag vượt ngưỡng | quan trọng nhất |
| Job chuyển sang FAILED | log-based metric |
| Backlog Pub/Sub tăng | |
| Số bản ghi vào dead-letter tăng | |
| CPU worker cao liên tục | thiếu tài nguyên |
| Vì sao | job "Running" mà dữ liệu ngừng chảy là tình huống hay gặp |
| Thành phần của một alerting policy | Thành phần |
|---|---|
| Condition | chỉ số, ngưỡng, khoảng thời gian |
| Notification channel | email, Slack, PagerDuty, Pub/Sub, webhook |
| Documentation | hướng dẫn xử lý — rất nên viết |
| Auto-close | tự đóng khi hết bất thường |
| Severity | mức độ nghiêm trọng |
| Dựng dashboard cho pipeline | Nội dung |
|---|---|
| Chỉ số sức khoẻ: lag, freshness, throughput | |
| Chỉ số tài nguyên: CPU, bộ nhớ, số worker | |
| Chỉ số chất lượng: tỉ lệ bản ghi hỏng | |
| Chỉ số chi phí: byte xử lý | |
| Mẹo | một dashboard cho mỗi pipeline quan trọng |
| Dashboard mẫu | Google cung cấp sẵn cho Dataflow |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chỉ số có sẵn không | Metrics Explorer, tìm dataflow.googleapis.com | | Cảnh báo có gửi được không | thử gửi test tới kênh thông báo | | Ngưỡng có hợp lý không | so với dữ liệu lịch sử vài tuần |
Và một phần của alerting policy rất đáng viết cẩn thận dù dễ bị bỏ qua: ô Documentation. Người nhận cảnh báo lúc hai giờ sáng cần biết ngay chỉ số này nghĩa là gì, ảnh hưởng tới đâu, và bước đầu tiên nên làm — và một dòng hướng dẫn viết sẵn khi đầu óc còn tỉnh táo có giá trị hơn nhiều so với việc phải tự suy luận lúc đó.
A company needs to migrate 50 TB (terabytes) of data from its on-premises NFS (Network File System) to Cloud Storage over a period of several weeks. The migration must run continuously but should not consume more than 20% of the network bandwidth during peak business hours to avoid impacting critical operations. The migration team also requires detailed logs and status reports to monitor the transfer's progress.
Which Google Cloud tool is designed to meet all these requirements?
- A The gcloud storage command-line tool
- B Storage Transfer Service
- C Cloud Storage FUSE
- D Transfer Appliance
Xem giải thích
Đáp án
B — Storage Transfer Service.
Vì sao đúng
Đề nêu bốn yêu cầu, và chỉ Storage Transfer Service có đủ cả bốn: 50 TB từ NFS tại chỗ, chạy liên tục trong nhiều tuần, GIỚI HẠN BĂNG THÔNG trong giờ cao điểm, và nhật ký cùng báo cáo chi tiết.
⚠ Điểm mấu chốt — ba tính năng chỉ STS có:
1. GIỚI HẠN BĂNG THÔNG
→ agent pool đặt được bandwidth limit
→ không làm nghẽn mạng văn phòng
2. CHẠY LIÊN TỤC, TỰ THỬ LẠI
→ đứt mạng thì tiếp tục, không bắt đầu lại
→ chạy nhiều tuần không cần trông
3. NHẬT KÝ VÀ BÁO CÁO
→ biết tệp nào đã chuyển, tệp nào lỗi
→ xuất được sang Cloud Logging
⚠ Nguồn là NFS tại chỗ → cần AGENT:
Storage Transfer Service với nguồn tại chỗ
↓
Chạy AGENT (container Docker)
trên máy chủ trong mạng nội bộ
↓
Agent thuộc một AGENT POOL
↓
⚠ Agent pool là nơi đặt
GIỚI HẠN BĂNG THÔNG
↓
Nhiều agent → tăng thông lượng,
chịu lỗi tốt hơn
⚠ Vì sao 50 TB không cần Transfer Appliance:
50 TB, kế hoạch VÀI TUẦN
↓
Nếu có 100 Mbps dành cho việc này
→ ~1 TB/ngày → 50 ngày
Nếu có 500 Mbps
→ ~5 TB/ngày → 10 ngày
↓
⚠ Đề nói "trong vài tuần" —
hoàn toàn khả thi qua mạng
⚠ Và đề yêu cầu GIỚI HẠN BĂNG THÔNG,
tức là mạng vẫn dùng được
Xem thêm câu #13082 (cùng lô): nêu tiêu chí dung lượng và băng thông. #13089 (cùng lô): khoá Transfer Appliance vì mất hơn một năm. #13010 (lô 135): cùng khoá STS với agent pool. Bốn câu, một quy tắc — hoàn toàn nhất quán.
Vì sao các phương án khác sai
-
D (Transfer Appliance) — đây là phương án gần nhất về mặt "khối lượng lớn", nhưng đề nói rõ kế hoạch là vài tuần và cần giới hạn băng thông — nghĩa là mạng vẫn dùng được. Thiết bị vật lý cũng không có nhật ký tiến độ liên tục như đề yêu cầu.
-
A (
gcloud storage) — không có giới hạn băng thông tích hợp, không tự thử lại khi đứt, và không có báo cáo. -
C (Cloud Storage FUSE) — gắn bucket như hệ thống tệp, không phải công cụ di chuyển dữ liệu quy mô lớn.
Ghi nhớ
⚠ Storage Transfer Service — tính năng cần thuộc: | Tính năng | Nội dung | |---|---| | Nguồn | S3, Azure Blob, HTTP, GCS khác, hệ thống tệp TẠI CHỖ | | Agent pool | cần cho nguồn tại chỗ, có REGION | | Giới hạn băng thông | đặt ở agent pool | | Chạy theo lịch hoặc liên tục | | | Tự thử lại | không cần trông | | Kiểm tra toàn vẹn | so checksum | | Nhật ký và báo cáo | xuất được sang Cloud Logging | | Thông báo | qua Pub/Sub |
Từ khoá nhận diện:
"giới hạn băng thông, chạy liên tục, có báo cáo" → Storage Transfer Service "nguồn tại chỗ" → STS + agent pool "mất nhiều tháng nếu truyền mạng" → Transfer Appliance "vài GB một lần" →
gcloud storage"gắn bucket như thư mục" → Cloud Storage FUSE
| Agent pool — điều cần nhớ | Nội dung |
|---|---|
| Nhóm các agent làm việc cùng nhau | |
| Có REGION | ảnh hưởng nơi điều phối và tuân thủ |
| Nhiều agent | tăng thông lượng và chịu lỗi |
| Giới hạn băng thông | đặt cho cả pool |
| Chạy agent | docker run với thông tin service account |
| Theo dõi | trạng thái agent trong console |
| Tuỳ chọn của một transfer job | Tuỳ chọn |
|---|---|
--overwrite-when |
different, always, never |
--delete-from |
xoá ở nguồn hoặc ở đích |
--include-prefixes / --exclude-prefixes |
chuyển một phần |
| Lọc theo thời gian sửa | chỉ tệp mới |
| Lịch chạy | một lần hoặc lặp lại |
--notification-topic |
báo qua Pub/Sub |
| Chuyển 50 TB — kế hoạch nên có | Bước |
|---|---|
| 1 | Đo băng thông thật khả dụng |
| 2 | Kiểm kê — có phần nào không cần chuyển |
| 3 | Dựng agent pool, đặt giới hạn băng thông |
| 4 | Chạy thử một thư mục nhỏ |
| 5 | Chạy đầy đủ, theo dõi tiến độ |
| 6 | Đối chiếu số tệp và dung lượng |
| 7 | Chạy lại lần cuối để bắt tệp mới phát sinh |
| Đừng quên tệp thay đổi trong lúc chuyển | Nội dung |
|---|---|
| Chuyển kéo dài vài tuần | dữ liệu nguồn vẫn thay đổi |
| STS chạy lại chỉ chuyển phần KHÁC | so theo thời gian sửa và checksum |
| Kế hoạch | chạy lần cuối ngay trước khi cắt chuyển |
| Với tệp bị xoá ở nguồn | tuỳ chọn --delete-from=destination-if-unique |
| Kiểm chứng | so danh sách tệp hai bên |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Job chạy tới đâu | console → Storage Transfer → job → Runs | | Băng thông có bị vượt không | theo dõi trên thiết bị mạng của bạn | | Dữ liệu đã đủ chưa | so số tệp và tổng dung lượng |
Và một tính năng của Storage Transfer Service thường quyết định việc dự án có được phê duyệt hay không: giới hạn băng thông. Đội mạng gần như luôn phản đối một luồng chuyển dữ liệu kéo dài nhiều tuần, và khả năng cam kết "không quá 20% băng thông trong giờ làm việc" là điều biến cuộc tranh luận đó thành một cấu hình đơn giản.
When troubleshooting a Pub/Sub to BigQuery pipeline, what is the key factor that determines whether you should check Cloud Logging or a Dead-Letter Topic (DLT) to find the cause of message delivery failures?
- A The region where the Pub/Sub topic is located.
- B Whether the data being sent is in JSON (JavaScript Object Notation) or Avro format.
- C Whether the subscriber is a custom service (like Dataflow) or the managed 'Write to BigQuery' subscription type.
- D The volume of messages being published to the topic.
Xem giải thích
Đáp án
C — Việc bên nhận là một dịch vụ TỰ VIẾT (như Dataflow) hay là loại subscription 'Write to BigQuery' ĐƯỢC QUẢN LÝ.
Vì sao đúng
Nơi tìm nguyên nhân lỗi phụ thuộc vào có mã của bạn đang chạy hay không — vì chỉ mã của bạn mới sinh ra log ứng dụng.
⚠ Điểm mấu chốt — có worker thì có log, không có worker thì không:
SUBSCRIBER TỰ VIẾT (Dataflow, Cloud Run,
Cloud Function)
↓
→ có WORKER chạy mã của bạn
→ mã ném ngoại lệ, ghi log
↓
⚠ CLOUD LOGGING có stack trace
và thông báo lỗi chi tiết
SUBSCRIPTION ĐƯỢC QUẢN LÝ
(BigQuery / Cloud Storage subscription)
↓
→ Pub/Sub tự ghi, KHÔNG có worker
nào của bạn
↓
⚠ KHÔNG có log ứng dụng để đọc
⚠ Backlog tăng mà không có lỗi nào
↓
→ phải bật DEAD-LETTER TOPIC
mới bắt được thông điệp hỏng
⚠ Bảng quyết định:
Bên nhận là gì?
↓
Dataflow / Cloud Run / Cloud Function
→ CLOUD LOGGING
→ lọc theo resource và job_id
BigQuery subscription
Cloud Storage subscription
→ DEAD-LETTER TOPIC
→ đọc thông điệp và thuộc tính
ghi lý do thất bại
⚠ Nhưng dead-letter hữu ích cho CẢ HAI:
Ngay cả với Dataflow tự viết
↓
Vẫn nên có dead-letter
↓
→ Cloud Logging cho biết LÝ DO
→ dead-letter giữ CHÍNH BẢN GHI hỏng
↓
⚠ Hai thứ bổ sung nhau:
log để chẩn đoán,
dead-letter để phân tích và nạp lại
⚠ Đây là câu CHỐT cho một cặp đã gặp: #13081 (lô 136) khoá Cloud Logging vì đó là pipeline Dataflow tự viết; #13090 (cùng lô) khoá Dead-Letter Topic vì đó là BigQuery subscription được quản lý. Câu này nêu chính tiêu chí phân biệt giữa hai trường hợp ấy. Ba câu tạo thành một bộ hoàn chỉnh, hoàn toàn nhất quán.
Vì sao các phương án khác sai
-
B (dữ liệu là JSON hay Avro) — đây là phương án gần nhất về mặt "liên quan tới lỗi lược đồ", nhưng định dạng ảnh hưởng NỘI DUNG lỗi, không quyết định NƠI tìm log.
-
A (Region của topic) — không liên quan tới nơi ghi log.
-
D (số lượng thông điệp) — ảnh hưởng backlog và hiệu năng, không đổi nơi tìm nguyên nhân.
Ghi nhớ
⚠ Chẩn đoán Pub/Sub → BigQuery theo KIẾN TRÚC — bảng phải thuộc: | Kiến trúc | Nơi tìm nguyên nhân | |---|---| | Dataflow tự viết | Cloud Logging — stack trace | | Cloud Run / Cloud Function subscriber | Cloud Logging — log của dịch vụ | | BigQuery subscription (quản lý) | DEAD-LETTER TOPIC | | Cloud Storage subscription | dead-letter topic | | Mọi kiến trúc | Monitoring cho backlog và cảnh báo |
Từ khoá nhận diện:
"subscription được quản lý, không thấy log" → dead-letter topic "pipeline tự viết, cần stack trace" → Cloud Logging "backlog tăng" →
num_undelivered_messages"dashboard và cảnh báo" → Cloud Monitoring "bản ghi hỏng để phân tích" → dead-letter
| Vì sao subscription được quản lý không có log | Lý do |
|---|---|
| Không có mã của bạn chạy | Pub/Sub tự ghi vào BigQuery |
| Lỗi xảy ra bên trong dịch vụ của Google | |
| Không có worker để ném ngoại lệ | |
| Hệ quả | thông điệp thất bại nằm im trong subscription |
| Khắc phục | dead-letter topic là cách DUY NHẤT bắt được |
| Cấu hình dead-letter | Tham số |
|---|---|
--dead-letter-topic |
topic nhận thông điệp thất bại |
--max-delivery-attempts |
5 tới 100 |
| Cần subscription trên DLT | để đọc |
| Quyền cho service agent | publish vào DLT, subscribe vào sub gốc |
| Thuộc tính thêm | lý do thất bại kèm theo thông điệp |
| Ba chỉ số cần theo dõi cho MỌI kiến trúc | Chỉ số |
|---|---|
num_undelivered_messages |
backlog |
oldest_unacked_message_age |
thông điệp cũ nhất |
| Số thông điệp vào DLT | dấu hiệu lược đồ đổi |
| Cảnh báo | đặt cho cả ba |
| Vì sao | dữ liệu ngừng chảy mà không có lỗi là tình huống hay gặp nhất |
| Nên dùng subscription được quản lý hay tự viết | Chọn |
|---|---|
| KHÔNG cần biến đổi | BigQuery subscription — rẻ, đơn giản |
| Cần biến đổi, che PII, tổng hợp | Dataflow |
| Logic nhỏ, thông lượng thấp | Cloud Run function |
| Đánh đổi | subscription đơn giản hơn nhưng ít khả năng chẩn đoán hơn |
| Vì vậy | luôn bật dead-letter cho subscription được quản lý |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Subscription thuộc loại nào | gcloud pubsub subscriptions describe <sub> | | Có DLT chưa | cùng lệnh → deadLetterPolicy | | Có log của worker không | Logs Explorer, lọc theo dịch vụ tương ứng |
Và một câu hỏi nên đặt ra đầu tiên mỗi khi gỡ lỗi một luồng Pub/Sub: ai đang thực sự ghi dữ liệu — mã của tôi hay chính Pub/Sub? Câu trả lời quyết định bạn nên mở Logs Explorer hay đi tìm dead-letter topic, và đặt sai câu hỏi đó có thể khiến bạn mất hàng giờ tìm những dòng log không bao giờ tồn tại.
A data analyst has several large CSV (Comma-Separated Values) files in Cloud Storage. The business requirement is to store this data in a single BigQuery table with a nested schema to improve query performance.
What is a mandatory step in the data pipeline to achieve this?
- A Rename the files from .csv to .json to trick BigQuery into creating a nested structure.
- B Use a transformation tool like Cloud Data Fusion or Dataflow to parse the flat data and build the nested structure before loading.
- C Compress the CSV (Comma-Separated Values) files using GZIP before loading.
- D Use the bq load command with a manually defined nested schema.
Xem giải thích
Đáp án
B — Dùng một công cụ biến đổi như Cloud Data Fusion hoặc Dataflow để phân tích dữ liệu phẳng và DỰNG cấu trúc lồng TRƯỚC KHI nạp.
Vì sao đúng
CSV không thể diễn đạt cấu trúc lồng, nên muốn có bảng lồng nhau, bắt buộc phải có một bước biến đổi ở giữa để dựng cấu trúc đó.
⚠ Điểm mấu chốt — cần một bước dựng cấu trúc:
CSV phẳng trong Cloud Storage
↓
⚠ Nạp thẳng → LUÔN cho bảng PHẲNG
↓
BƯỚC BIẾN ĐỔI (bắt buộc)
- Dataflow: dựng đối tượng lồng trong mã
- Data Fusion: dùng node biến đổi
- hoặc nạp phẳng rồi dùng SQL
↓
BigQuery với lược đồ LỒNG
⚠ Ba cách thực hiện bước biến đổi:
CÁCH 1 — Dataflow
Đọc CSV → gom theo khoá cha
→ dựng TableRow lồng → ghi BigQuery
CÁCH 2 — Cloud Data Fusion
Plugin đọc CSV → node Group By / Joiner
→ sink BigQuery với lược đồ lồng
CÁCH 3 — nạp phẳng rồi dựng bằng SQL
CREATE TABLE ... AS
SELECT khach_id,
ARRAY_AGG(STRUCT(ma_don, tien)) AS don_hang
FROM bang_phang
GROUP BY khach_id;
↓
⚠ Cách 3 thường ĐƠN GIẢN NHẤT
nếu dữ liệu đã vào được BigQuery
⚠ Vì sao bq load với lược đồ lồng khai tay vẫn không đủ:
Khai lược đồ lồng trong tệp JSON
rồi nạp CSV
↓
⚠ VẪN THẤT BẠI
→ CSV không có cấu trúc để ánh xạ vào
các trường lồng
↓
→ giới hạn nằm ở ĐỊNH DẠNG NGUỒN,
không phải ở cách khai lược đồ
Xem thêm câu #13095 (cùng lô): giải thích VÌ SAO CSV không tạo được lược đồ lồng — vì nó vốn phẳng. Câu này nêu PHẢI LÀM GÌ để vẫn đạt được mục tiêu. Hai câu bổ sung nhau hoàn hảo. Và #13063 (lô 136): với NDJSON thì nạp thẳng được.
Vì sao các phương án khác sai
-
D (dùng
bq loadvới lược đồ lồng khai tay) — đây là phương án gần nhất và nghe rất hợp lý, nhưng khai lược đồ không tạo ra cấu trúc từ dữ liệu phẳng: CSV không có cách nào chỉ ra trường nào thuộc record nào. -
A (đổi tên tệp từ
.csvthành.json) — đổi tên không đổi nội dung; BigQuery sẽ báo lỗi phân tích cú pháp. -
C (nén bằng GZIP trước khi nạp) — ảnh hưởng kích thước và tốc độ, không liên quan tới cấu trúc.
Ghi nhớ
⚠ Muốn lược đồ lồng — bảng phải thuộc: | Nguồn | Cách làm | |---|---| | JSON (NDJSON), Avro, Parquet | nạp THẲNG — giữ nguyên cấu trúc | | CSV | BẮT BUỘC có bước biến đổi | | Công cụ biến đổi | Dataflow, Data Fusion, hoặc SQL trong BigQuery | | Cách gọn nhất | nạp phẳng rồi ARRAY_AGG(STRUCT(...)) | | Không làm được bằng | khai lược đồ, đổi tên tệp, nén |
Từ khoá nhận diện:
"CSV nhưng muốn lược đồ lồng" → bắt buộc có bước biến đổi "NDJSON lồng nhau" → nạp thẳng được "gom nhiều dòng thành mảng" →
ARRAY_AGG(STRUCT(...))"trải mảng thành dòng" →UNNEST"khai lược đồ là đủ" → SAI với CSV
| Dựng cấu trúc lồng bằng SQL | Hàm |
|---|---|
STRUCT(a, b, c) AS nhom |
gom CỘT thành record |
ARRAY_AGG(STRUCT(...)) |
gom DÒNG thành mảng |
GROUP BY khoa_cha |
đi kèm ARRAY_AGG |
ARRAY_AGG(... ORDER BY ... LIMIT n) |
giữ thứ tự và giới hạn |
UNNEST |
làm ngược lại |
| Mẫu | phẳng → GROUP BY + ARRAY_AGG → lồng |
| Vì sao lồng nhau lại tăng hiệu năng | Lý do |
|---|---|
| Tránh JOIN | dữ liệu cha–con nằm cùng dòng |
| Vẫn lưu theo cột | nén và quét chọn lọc tốt |
| Ít shuffle hơn | không phải trộn dữ liệu giữa các node |
| Đổi lại | truy vấn phức tạp hơn một chút (UNNEST) |
| Đây là | cách BigQuery khuyến khích mô hình hoá |
| Chọn công cụ cho bước biến đổi | Chọn |
|---|---|
| Dữ liệu đã vào được BigQuery | SQL — đơn giản và rẻ nhất |
| Cần biến đổi phức tạp trên đường | Dataflow |
| Đội không lập trình | Cloud Data Fusion |
| Khối lượng rất lớn, một lần | Dataflow |
| Lời khuyên | thử cách SQL trước |
| Khi nào KHÔNG cần lồng nhau | Trường hợp |
|---|---|
| Truy vấn chủ yếu ở mức cha | bảng phẳng đơn giản hơn |
Đội chưa quen UNNEST |
dễ viết sai |
| Dữ liệu con rất ít | lợi ích không đáng kể |
| Nguyên tắc | mô hình theo CÁCH TRUY VẤN THỰC TẾ |
| Đừng | lồng nhau chỉ vì "BigQuery hỗ trợ" |
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 | | Số bản ghi cha có đúng không | so với COUNT(DISTINCT khoa_cha) của bảng phẳng | | Truy vấn có nhanh hơn không | so total_bytes_billed trước và sau |
Và một cách tiếp cận thường đơn giản hơn nhiều so với việc dựng pipeline biến đổi riêng: nạp CSV vào một bảng staging phẳng, rồi dùng ARRAY_AGG(STRUCT(...)) để tạo bảng lồng. Nạp theo lô vào BigQuery là miễn phí, câu SQL chỉ vài dòng, và bạn không phải vận hành thêm một engine nào cả.
Which statement best describes a key architectural principle that makes BigQuery a "serverless" data warehouse?
- A It separates storage and compute, allowing each to scale independently and automatically without user intervention.
- B It can only be accessed through a command-line interface (CLI).
- C It guarantees that all queries will complete in under one second, regardless of complexity.
- D It requires users to pre-provision and manage a cluster of a fixed size for all queries.
Xem giải thích
Đáp án
A — BigQuery TÁCH BIỆT lưu trữ và tính toán, cho phép mỗi bên co giãn độc lập và tự động mà không cần người dùng can thiệp.
Vì sao đúng
Đây là nguyên lý kiến trúc nền tảng khiến BigQuery được gọi là kho dữ liệu không máy chủ: bạn không khai báo, không cấp phát, không quản lý bất kỳ máy chủ nào.
⚠ Điểm mấu chốt — hai tầng độc lập:
TẦNG LƯU TRỮ (Colossus)
→ dữ liệu lưu theo CỘT, nén, nhân bản
→ trả tiền theo DUNG LƯỢNG
↓
⚠ TÁCH RỜI khỏi
↓
TẦNG TÍNH TOÁN (Dremel + slot)
→ hàng nghìn worker chạy truy vấn
→ trả tiền theo BYTE QUÉT hoặc SLOT
↓
Nối bằng JUPITER — mạng petabit của Google
↓
⚠ Thêm dữ liệu KHÔNG cần thêm máy
⚠ Truy vấn nặng KHÔNG cần mở rộng lưu trữ
⚠ So với kho dữ liệu truyền thống:
KHO TRUYỀN THỐNG
→ cụm máy chủ cố định
→ lưu trữ và tính toán GẮN CHẶT
↓
⚠ Hết dung lượng → phải thêm node
⚠ Truy vấn chậm → phải thêm node
⚠ Node nhàn rỗi vẫn tính tiền
⚠ Phải dự báo công suất trước
BIGQUERY
→ thêm dữ liệu: chỉ trả phí lưu
→ truy vấn nặng: Google tự cấp slot
→ không truy vấn: không trả phí tính toán
⚠ Vì sao "không máy chủ" không có nghĩa là "luôn nhanh":
Truy vấn quét 100 TB
↓
→ vẫn mất thời gian và tiền
→ BigQuery không phá vỡ vật lý
↓
⚠ "Serverless" nghĩa là KHÔNG PHẢI
QUẢN LÝ HẠ TẦNG
→ không có nghĩa là mọi truy vấn
chạy dưới một giây
Xem thêm câu #13062 (lô 136): về data warehouse và vì sao BigQuery phù hợp. Câu này giải thích nguyên lý kiến trúc bên dưới. Hai câu bổ sung nhau.
Vì sao các phương án khác sai
-
D (phải cấp phát và quản lý cụm cố định) — đây là phương án mô tả kho dữ liệu TRUYỀN THỐNG, chính là điều BigQuery loại bỏ. (Mô hình reservation có mua slot, nhưng đó là cách tính tiền, không phải cụm bạn phải vận hành.)
-
C (bảo đảm mọi truy vấn xong dưới một giây) — không có bảo đảm nào như vậy; truy vấn quét nhiều dữ liệu vẫn mất thời gian.
-
B (chỉ truy cập được qua CLI) — sai: có giao diện web, API, thư viện client, và nhiều công cụ BI.
Ghi nhớ
⚠ Kiến trúc BigQuery — bảng phải thuộc: | Thành phần | Vai trò | |---|---| | Colossus | hệ thống lưu trữ phân tán — dữ liệu theo cột | | Dremel | engine thực thi truy vấn | | Jupiter | mạng petabit nối lưu trữ và tính toán | | Borg | điều phối tài nguyên | | Slot | đơn vị năng lực tính toán | | Nguyên lý | TÁCH BIỆT lưu trữ và tính toán |
Từ khoá nhận diện:
"tách lưu trữ và tính toán, co giãn độc lập" → nguyên lý serverless của BigQuery "không quản lý hạ tầng" → serverless "bảo đảm dưới một giây" → không có bảo đảm như vậy "cụm cố định" → mô hình truyền thống "trả tiền theo byte quét" → on-demand pricing
| Hệ quả thực tế của việc tách hai tầng | Hệ quả |
|---|---|
| Lưu dữ liệu rất lớn mà không tốn tính toán | |
| Nhiều người truy vấn cùng lúc | slot tự phân bổ |
| Không có "cụm nhàn rỗi" | với mô hình on-demand |
| Chia sẻ dữ liệu không cần sao chép | Analytics Hub |
| Long-term storage | giảm giá lưu, không ảnh hưởng tính toán |
| Hai mô hình tính tiền tính toán | Mô hình |
|---|---|
| On-demand | trả theo BYTE QUÉT — mặc định |
| Editions / reservation | trả theo SLOT — chi phí đoán trước được |
| Chọn on-demand khi | khối lượng thất thường, chưa lớn |
| Chọn reservation khi | khối lượng lớn, ổn định |
| 1 TiB quét đầu mỗi tháng | miễn phí |
| "Serverless" nghĩa là gì và KHÔNG nghĩa là gì | Nội dung |
|---|---|
| CÓ nghĩa là | không cấp phát, không vá, không co giãn thủ công |
| CÓ nghĩa là | trả tiền theo mức dùng thật |
| KHÔNG nghĩa là | miễn phí |
| KHÔNG nghĩa là | luôn nhanh bất kể truy vấn |
| KHÔNG nghĩa là | không cần tối ưu |
| Vẫn cần | phân vùng, phân cụm, chọn ít cột |
| Vì sao vẫn phải tối ưu dù serverless | Lý do |
|---|---|
| Tính tiền theo byte quét | quét ít = trả ít |
| Phân vùng và phân cụm | cắt dữ liệu phải đọc |
| Chọn cột tường minh | tránh SELECT * |
| Materialized view | tránh tính lại |
| Nguyên tắc | serverless bỏ việc VẬN HÀNH, không bỏ việc THIẾT KẾ |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn quét bao nhiêu | --dry_run | | Slot có bị thiếu không | INFORMATION_SCHEMA.JOBS → total_slot_ms | | Chi phí chia theo ai | INFORMATION_SCHEMA.JOBS nhóm theo user |
Và một hiểu lầm rất phổ biến về "serverless" đáng làm rõ với đội mới dùng BigQuery: nó bỏ việc vận hành, không bỏ việc thiết kế. Không ai phải cấp phát máy chủ nữa, nhưng một bảng không phân vùng và một thói quen SELECT * vẫn tạo ra hoá đơn lớn hơn nhiều lần so với cùng dữ liệu đó được thiết kế đúng.
In a typical data analytics team, which of the following activities is primarily performed by a data engineer?
- A Using statistical methods to interpret data and provide business insights.
- B Designing and building a robust ETL (Extract, Transform, Load) pipeline to move data from a source system into a data warehouse.
- C Creating interactive dashboards to visualize sales trends for business stakeholders.
- D Developing a machine learning model to predict customer behavior.
Xem giải thích
Đáp án
B — Thiết kế và xây dựng pipeline ETL vững chắc để đưa dữ liệu từ hệ thống nguồn vào kho dữ liệu.
Vì sao đúng
Đây là mô tả cốt lõi của kỹ sư dữ liệu (data engineer): người xây và vận hành hạ tầng đưa dữ liệu tới nơi cần đến, để những người khác dùng được.
⚠ Điểm mấu chốt — bốn vai trò trong một đội dữ liệu:
DATA ENGINEER ← đề này
→ xây pipeline, hạ tầng dữ liệu
→ bảo đảm dữ liệu ĐÚNG, ĐỦ, ĐÚNG GIỜ
→ công cụ: Dataflow, Composer, SQL
DATA ANALYST
→ phân tích, tìm hiểu ý nghĩa
→ dựng dashboard cho nghiệp vụ
→ công cụ: SQL, Looker Studio
DATA SCIENTIST
→ mô hình dự đoán, thống kê
→ công cụ: Python, BigQuery ML, Vertex AI
ANALYTICS ENGINEER
→ giữa engineer và analyst
→ mô hình hoá dữ liệu bằng SQL
→ công cụ: Dataform, dbt
⚠ Kỹ sư dữ liệu làm gì cụ thể mỗi ngày:
- Dựng và bảo trì pipeline nạp dữ liệu
- Thiết kế lược đồ và mô hình dữ liệu
- Bảo đảm CHẤT LƯỢNG và ĐỘ TIN CẬY
- Tối ưu chi phí và hiệu năng
- Điều phối luồng công việc
- Giám sát và xử lý sự cố pipeline
- Quản trị: quyền, phân loại, dòng dõi
⚠ Ba phương án kia thuộc về ai:
"Dùng phương pháp thống kê để diễn giải
dữ liệu và đưa ra nhận định nghiệp vụ"
→ DATA ANALYST
"Dựng dashboard tương tác cho lãnh đạo"
→ DATA ANALYST (hoặc BI developer)
"Phát triển mô hình học máy dự đoán
hành vi khách hàng"
→ DATA SCIENTIST
Xem thêm câu #13097 (cùng lô): dashboard cho lãnh đạo — công việc của analyst. Và #13091 (cùng lô): báo cáo phân tích có mã — thiên về data scientist. Ba câu vẽ nên bức tranh phân vai của một đội dữ liệu.
Vì sao các phương án khác sai
-
C (dựng dashboard tương tác cho lãnh đạo) — đây là phương án gần nhất vì cũng thuộc lĩnh vực dữ liệu, nhưng đó là công việc của data analyst: diễn giải và trình bày, không phải xây hạ tầng.
-
A (dùng thống kê để diễn giải và đưa ra nhận định) — công việc của data analyst.
-
D (phát triển mô hình học máy) — công việc của data scientist.
Ghi nhớ
⚠ Bốn vai trò trong đội dữ liệu — bảng phải thuộc: | Vai trò | Công việc chính | Công cụ tiêu biểu | |---|---|---| | Data engineer | xây PIPELINE và hạ tầng dữ liệu | Dataflow, Composer, Dataform | | Data analyst | phân tích, dashboard, nhận định | SQL, Looker Studio | | Data scientist | mô hình dự đoán, thống kê | Python, BigQuery ML, Vertex AI | | Analytics engineer | mô hình hoá dữ liệu bằng SQL | Dataform, dbt | | Data steward | quản trị, chất lượng, phân loại | Dataplex |
Từ khoá nhận diện:
"xây pipeline, ETL, hạ tầng" → data engineer "dashboard, nhận định nghiệp vụ" → data analyst "mô hình dự đoán, học máy" → data scientist "mô hình hoá bằng SQL, dbt/Dataform" → analytics engineer "quản trị và chất lượng dữ liệu" → data steward / governance
| Kỹ năng của kỹ sư dữ liệu | Kỹ năng |
|---|---|
| SQL | nền tảng bắt buộc |
| Python hoặc Java | cho pipeline |
| Mô hình hoá dữ liệu | star schema, nested/repeated |
| Điều phối | Airflow/Composer |
| Hiểu chi phí đám mây | tối ưu byte quét, tài nguyên |
| Giám sát và xử lý sự cố | quan trọng hơn người ta tưởng |
| Trách nhiệm hay bị bỏ quên của kỹ sư dữ liệu | Trách nhiệm |
|---|---|
| Chất lượng dữ liệu | assertion, kiểm tra tự động |
| Tài liệu và mô tả | để analyst hiểu bảng |
| Chi phí | pipeline tốn kém là vấn đề của bạn |
| Bảo mật và PII | che, phân loại |
| Độ tin cậy | cảnh báo, chạy lại được |
| Nguyên tắc | dữ liệu đúng và đúng giờ là sản phẩm |
| Ranh giới giữa các vai trò ngày càng mờ | Nội dung |
|---|---|
| BigQuery ML | analyst làm được ML bằng SQL |
| Dataform | analyst dựng được pipeline biến đổi |
| Looker Studio | ai cũng dựng được dashboard |
| Analytics engineer | vai trò mới lấp khoảng giữa |
| Kết quả | phân vai theo TRÁCH NHIỆM, không theo công cụ |
| Ai chịu trách nhiệm gì khi số liệu sai | Trách nhiệm |
|---|---|
| Dữ liệu không tới đúng giờ | data engineer |
| Dữ liệu tới nhưng sai giá trị | engineer + nguồn |
| Định nghĩa chỉ số không thống nhất | analytics engineer / BI |
| Diễn giải sai kết quả | analyst |
| Mô hình dự đoán lệch | data scientist |
| Thực tế | phần lớn sự cố nằm ở tầng pipeline |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Pipeline có chạy đúng giờ không | lịch sử chạy trong Composer/Dataform | | Dữ liệu có đủ và đúng không | assertion và kiểm tra chất lượng | | Chi phí có hợp lý không | INFORMATION_SCHEMA.JOBS và billing export |
Và một điều đáng nói về vai trò của kỹ sư dữ liệu mà bản mô tả công việc thường bỏ sót: phần lớn thời gian không dành cho việc xây pipeline mới, mà cho việc giữ những pipeline cũ chạy đúng. Nguồn đổi lược đồ, dữ liệu tới muộn, chi phí tăng bất thường — đó mới là công việc thực tế, và nó quyết định đội phân tích có tin vào số liệu hay không.
A multinational retailer stores data across BigQuery and Cloud Storage in multiple projects and regions and needs a centralized way to discover assets, track lineage, profile data, run automated data quality checks, and manage business glossary terms—all without moving the data.
Which Google Cloud service should they use?
-
A
Use Looker to build explores and enforce data quality across storage systems.
-
B
Use Dataplex Universal Catalog to register sources and apply governance, lineage, profiling, and data quality across BigQuery and Cloud Storage.
-
C
Use Dataflow templates to consolidate data into a single BigQuery dataset for governance.
-
D
Use Cloud Asset Inventory to list resources and export inventory to BigQuery.
Xem giải thích
Đáp án
B — Dùng Dataplex Universal Catalog để đăng ký các nguồn và áp quản trị, dòng dõi, lập hồ sơ và kiểm tra chất lượng dữ liệu trên cả BigQuery lẫn Cloud Storage.
Vì sao đúng
Đề liệt kê năm nhu cầu, và Dataplex Universal Catalog là dịch vụ duy nhất gộp cả năm: phát hiện tài sản, theo dõi dòng dõi, lập hồ sơ dữ liệu, kiểm tra chất lượng tự động, và quản lý từ điển thuật ngữ nghiệp vụ — tất cả KHÔNG di chuyển dữ liệu.
⚠ Điểm mấu chốt — một lớp quản trị cho nhiều kho, nhiều project, nhiều Region:
Dataplex Universal Catalog
↓
Đăng ký nguồn:
- dataset BigQuery ở nhiều project
- bucket Cloud Storage ở nhiều Region
↓
⚠ DỮ LIỆU KHÔNG DI CHUYỂN
→ chỉ siêu dữ liệu được thu thập
↓
Áp lên đó:
- danh mục và tìm kiếm
- data lineage
- data profiling
- data quality rules
- business glossary
- policy tag
⚠ Năm nhu cầu ánh xạ vào năm tính năng:
"phát hiện tài sản"
→ tự động quét và lập danh mục
"theo dõi dòng dõi"
→ DATA LINEAGE — dữ liệu đến từ đâu
"lập hồ sơ dữ liệu"
→ DATA PROFILING — thống kê phân phối cột
"kiểm tra chất lượng tự động"
→ DATA QUALITY — quy tắc, chấm điểm, lịch chạy
"từ điển thuật ngữ nghiệp vụ"
→ BUSINESS GLOSSARY
⚠ Cấu trúc logic của Dataplex:
LAKE
→ ranh giới logic, ví dụ theo phòng ban
↓
ZONE
- RAW zone: dữ liệu thô
- CURATED zone: dữ liệu đã xử lý
↓
ASSET
→ trỏ tới bucket hoặc dataset THẬT
↓
⚠ Tổ chức LOGIC chồng lên
dữ liệu VẬT LÝ đang nằm rải rác
Xem thêm câu #13028 (lô 135): cùng khoá Data Catalog / Dataplex Universal Catalog cho nhu cầu phát hiện và quản lý siêu dữ liệu. Hai câu hoàn toàn nhất quán. Và #12965/#12980 (lô 134): policy tag — một tính năng của chính Dataplex.
Vì sao các phương án khác sai
-
D (Cloud Asset Inventory) — đây là phương án gần nhất vì cũng "kiểm kê toàn tổ chức", nhưng nó lập danh mục TÀI NGUYÊN HẠ TẦNG (VM, bucket, chính sách IAM) cho mục đích quản trị và bảo mật; nó không lập hồ sơ dữ liệu, không theo dõi dòng dõi, không có từ điển nghiệp vụ.
-
C (Dataflow gom dữ liệu về một dataset) — DI CHUYỂN dữ liệu — đúng thứ đề nói phải tránh; và nó không phải công cụ quản trị.
-
A (Looker) — nền tảng BI và mô hình ngữ nghĩa cho báo cáo; không quản trị dữ liệu trên Cloud Storage và không có các tính năng đề nêu.
Ghi nhớ
⚠ Ba công cụ "kiểm kê" hay bị nhầm — bảng phải thuộc: | Công cụ | Lập danh mục gì | |---|---| | Dataplex Universal Catalog | DỮ LIỆU: bảng, tệp, lược đồ, thuật ngữ, chất lượng, dòng dõi | | Cloud Asset Inventory | TÀI NGUYÊN HẠ TẦNG: VM, bucket, IAM, firewall | | INFORMATION_SCHEMA | siêu dữ liệu của riêng BigQuery | | Security Command Center | rủi ro và lỗ hổng bảo mật | | Phân biệt | Catalog cho người dùng DỮ LIỆU; Asset Inventory cho quản trị HẠ TẦNG |
Từ khoá nhận diện:
"phát hiện, dòng dõi, chất lượng, từ điển nghiệp vụ" → Dataplex Universal Catalog "kiểm kê VM, IAM, firewall" → Cloud Asset Inventory "policy tag, phân loại nhạy cảm" → Dataplex Catalog "quét tìm PII" → Sensitive Data Protection "gom dữ liệu về một chỗ" → trái yêu cầu "không di chuyển"
| Dataplex — các tính năng chính | Tính năng |
|---|---|
| Tự động phát hiện | quét BigQuery, GCS, và nhiều nguồn |
| Tìm kiếm | theo tên, mô tả, tag, thuật ngữ |
| Business glossary | từ điển thuật ngữ nghiệp vụ |
| Data lineage | dòng dõi tự động cho BigQuery, Dataflow |
| Data profiling | thống kê phân phối từng cột |
| Data quality | quy tắc, chấm điểm, chạy theo lịch |
| Taxonomy và policy tag | nền của column-level security |
| Data profiling — vì sao hữu ích | Lý do |
|---|---|
| Thống kê tự động từng cột | min, max, null, giá trị phổ biến |
| Phát hiện bất thường | tỉ lệ null tăng đột ngột |
| Gợi ý quy tắc chất lượng | từ chính hồ sơ dữ liệu |
| Hiểu bảng lạ nhanh | không phải tự viết truy vấn thăm dò |
| Chạy | theo lịch hoặc theo yêu cầu |
| Data lineage — vì sao đáng quan tâm | Lý do |
|---|---|
| Phân tích tác động | đổi bảng này thì hỏng báo cáo nào |
| Truy vết lỗi số liệu | con số sai đến từ đâu |
| Tuân thủ | chứng minh nguồn gốc dữ liệu |
| Onboarding | người mới hiểu hệ thống nhanh hơn |
| Tự động | thu thập cho BigQuery, Dataflow, Composer |
| Làm quản trị dữ liệu thành công cần gì | Yếu tố |
|---|---|
| Bắt buộc mô tả khi tạo bảng | đưa vào quy trình |
| Chỉ định CHỦ SỞ HỮU cho từng dataset | |
| Từ điển thuật ngữ thống nhất | "doanh thu thuần" nghĩa là gì |
| Quy tắc chất lượng cho bảng quan trọng | |
| Rà soát định kỳ | |
| Thất bại thường gặp | bật công cụ rồi không ai điền mô tả |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | Catalog đã quét được gì | Dataplex → Search | | Bảng nào chưa có mô tả | lọc tài sản thiếu siêu dữ liệu | | Điểm chất lượng dữ liệu | Dataplex → Data quality scans |
Và một sự thật quyết định giá trị của mọi dự án quản trị dữ liệu: phần đắt nhất không phải công nghệ, mà là những mô tả do con người viết. Dataplex tự quét lược đồ trong vài phút và tự dựng dòng dõi, nhưng câu trả lời cho "bảng này dùng để làm gì và hỏi ai khi số liệu sai" thì phải có người điền — và một danh mục đầy bảng không mô tả chỉ là một danh sách tên bảng dài hơn.
A data engineering team is building a pipeline where raw data is first cleaned and its schema is validated (first transformation). The processed data is then loaded into a BigQuery data warehouse. After loading, another set of transformations is applied to create aggregated tables for specific business intelligence reports.
Which data manipulation methodology does this process represent?
-
A
Reverse ETL
-
B
ETLT (Extract, Transform, Load, Transform)
-
C
ETL (Extract, Transform, Load)
-
D
ELT (Extract, Load, Transform)
Xem giải thích
Đáp án
B — ETLT (Extract, Transform, Load, Transform).
Vì sao đúng
Đề mô tả biến đổi ở CẢ HAI phía: làm sạch và kiểm tra lược đồ TRƯỚC khi nạp, rồi lại tổng hợp SAU khi nạp để dựng bảng báo cáo. Đó là mô hình lai.
⚠ Điểm mấu chốt — đọc kỹ thứ tự trong đề:
E — Trích xuất dữ liệu thô
↓
T (thứ nhất) — làm sạch, KIỂM TRA LƯỢC ĐỒ
↓ (ở ngoài kho)
L — Nạp vào BigQuery
↓
T (thứ hai) — tổng hợp thành bảng báo cáo
(bằng SQL, trong kho)
↓
⚠ CÓ HAI chữ T → ETLT
⚠ Vì sao mô hình lai này rất phổ biến trong thực tế:
Biến đổi TRƯỚC khi nạp (T1)
→ chỉ những gì BẮT BUỘC:
- che PII
- khử độc dữ liệu không tin cậy
- kiểm tra lược đồ, loại bản ghi hỏng
↓
Biến đổi SAU khi nạp (T2)
→ phần còn lại, bằng SQL:
- tổng hợp, join, mô hình hoá
- dựng bảng báo cáo
↓
⚠ Vừa đáp ứng ràng buộc bảo mật,
vừa giữ được sự linh hoạt của ELT
⚠ So ba mô hình:
ETL → biến đổi CHỈ trước khi nạp
ELT → biến đổi CHỈ sau khi nạp
ETLT → biến đổi ở CẢ HAI phía ← đề này
↓
T1 thường NHẸ: bảo mật, chất lượng
T2 thường NẶNG: mô hình hoá nghiệp vụ
⚠ Xem thêm câu #12993 (lô 135): ở đó ETLT là phương án SAI, vì câu hỏi là "khác biệt CƠ BẢN giữa ETL và ELT" — ETLT không trả lời câu hỏi ấy. Câu này MÔ TẢ một luồng cụ thể có hai lần biến đổi nên ETLT là đúng. Hai câu không mâu thuẫn: cùng một khái niệm, hai vai trò khác nhau trong hai câu hỏi khác nhau. Và #13085 (cùng lô) khoá ETL vì ở đó chỉ nêu biến đổi TRƯỚC khi nạp.
Vì sao các phương án khác sai
-
C (ETL) — đây là phương án gần nhất vì vế đầu đúng (có biến đổi trước khi nạp), nhưng nó bỏ qua lần biến đổi THỨ HAI sau khi nạp mà đề mô tả rõ.
-
D (ELT) — cũng chỉ đúng một nửa: bỏ qua bước làm sạch và kiểm tra lược đồ trước khi nạp.
-
A (Reverse ETL) — đưa dữ liệu TỪ kho NGƯỢC RA các hệ thống nghiệp vụ; hướng hoàn toàn khác.
Ghi nhớ
⚠ Bốn mô hình luồng dữ liệu — bảng phải thuộc: | Mô hình | Thứ tự | Đặc điểm | |---|---|---| | ETL | E → T → L | biến đổi chỉ trước khi nạp | | ELT | E → L → T | biến đổi chỉ sau khi nạp | | ETLT | E → T → L → T | biến đổi ở CẢ HAI phía | | Reverse ETL | kho → hệ thống nghiệp vụ | hướng ngược | | Nhận diện | đếm số lần biến đổi và vị trí của chúng |
Từ khoá nhận diện:
"làm sạch trước khi nạp RỒI tổng hợp sau khi nạp" → ETLT "chỉ biến đổi trước khi nạp" → ETL "nạp thô rồi biến đổi bằng SQL" → ELT "kho → CRM" → Reverse ETL "khác biệt cơ bản giữa ETL và ELT" → câu hỏi khác, trả lời bằng thứ tự T
| Nên đặt gì vào T1 (trước khi nạp) | Việc |
|---|---|
| Che PII | nếu quy định cấm PII vào kho |
| Khử độc dữ liệu không tin cậy | nguồn công khai |
| Kiểm tra lược đồ | loại bản ghi hỏng ra dead-letter |
| Lọc bớt dữ liệu không cần | giảm chi phí lưu |
| Nguyên tắc | T1 chỉ làm những gì BẮT BUỘC phải làm trước |
| Nên đặt gì vào T2 (sau khi nạp) | Việc |
|---|---|
| Tổng hợp, join nhiều bảng | |
| Mô hình hoá nghiệp vụ | star schema, bảng mart |
| Tính chỉ số | |
| Loại trùng | |
| Lý do | SQL trong BigQuery nhanh và rẻ, và chạy lại được |
| Công cụ cho từng phía | Phía |
|---|---|
| T1 (ngoài kho) | Dataflow, Cloud Data Fusion |
| T2 (trong kho) | BigQuery SQL, Dataform, dbt |
| L | Storage Write API, LOAD DATA, subscription |
| Điều phối cả luồng | Cloud Composer |
| Mẫu phổ biến | Dataflow cho T1, Dataform cho T2 |
| Vì sao ETLT là mô hình thực tế nhất | Lý do |
|---|---|
| Ràng buộc bảo mật buộc phải có T1 | |
| Sự linh hoạt của ELT nằm ở T2 | |
| Giữ được dữ liệu thô (đã che PII) trong kho | chạy lại được |
| Không phải chọn một trong hai | |
| Thực tế | phần lớn hệ thống trưởng thành đều là ETLT |
Ba việc kiểm chứng: | Việc | Cách | |---|---| | T1 có che hết PII không | quét bảng staging bằng DLP | | T2 có chạy lại được không | chạy lại và so kết quả | | Bản ghi hỏng đi đâu | kiểm tra dead-letter của bước T1 |
Và một nguyên tắc thiết kế giúp mô hình ETLT không phình to: T1 chỉ làm những gì bắt buộc phải làm trước khi nạp. Mỗi phép biến đổi đặt vào T1 là một thứ bạn không thể sửa lại mà không trích xuất lại từ nguồn — nên hãy để bảo mật và chất lượng ở đó, còn mọi logic nghiệp vụ thì đẩy sang T2, nơi bạn chạy lại được bất cứ lúc nào.