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

Tìm thấy 333 câu.

Câu 151 Data Management

A security architect is explaining a company's data protection policy. The policy states that all data must be scrambled and unreadable while it is being transferred from a user's machine to a Cloud Storage bucket, and also unreadable while it is being stored on the disk drives in Google's data center.

Which two concepts does this policy describe?

  1. A Network firewall rules and IAM policies
  2. B Encryption in transit and Encryption at rest
  3. C Authentication and Authorization
  4. D Data masking and Data tokenization
Xem giải thích

Đáp án

B — Mã hoá khi TRUYỀN (encryption in transit) và mã hoá khi LƯU (encryption at rest).

Vì sao đúng

Chính sách trong đề mô tả hai tình huống: dữ liệu đang được chuyển từ máy người dùng lên bucket, và dữ liệu đang nằm trên đĩa trong trung tâm dữ liệu của Google. Đó là hai trạng thái có tên riêng.

⚠ Điểm mấu chốt — ba trạng thái của dữ liệu:

IN TRANSIT (khi truyền)
        ↓
    Đang đi trên mạng
    → mã hoá bằng TLS
    → MẶC ĐỊNH, tự động

AT REST (khi lưu)
        ↓
    Nằm trên đĩa
    → mã hoá AES-256
    → MẶC ĐỊNH, không tắt được

IN USE (khi đang xử lý)
        ↓
    Đang trong BỘ NHỚ, đang tính toán
    → cần CONFIDENTIAL COMPUTING

⚠ Điều quan trọng nhất — cả hai đều MẶC ĐỊNH BẬT:

Google Cloud mã hoá TỰ ĐỘNG:
    - mọi dữ liệu khi lưu
    - mọi dữ liệu khi truyền qua
      hạ tầng của Google
        ↓
    ⚠ Bạn KHÔNG phải bật gì
    ⚠ Cũng KHÔNG tắt được
        ↓
    → chính sách trong đề được thoả
      NGAY TỪ ĐẦU
        ↓
    Câu hỏi thật sự chỉ còn: AI GIỮ KHOÁ

⚠ Các lớp mã hoá khi truyền:

Người dùng → Google
    → TLS, thường kèm HSTS

Giữa các trung tâm dữ liệu của Google
    → mã hoá tự động

VM → VM trong VPC
    → mã hoá ở tầng hạ tầng

Muốn kiểm soát thêm
    → mTLS, VPN, Interconnect
    → Private Google Access

Xem thêm câu #12927 (lô 133): cùng câu hỏi, cùng khoá — at rest và in transit. Hai câu hoàn toàn nhất quán. Và #13060, #13065 (cùng lô): đi tiếp một bước — ai quản lý khoá.

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

  • D (data masking và tokenization) — đây là phương án gần nhất trong nhóm bảo vệ dữ liệu, nhưng cả hai đều là kỹ thuật biến đổi giá trị để che thông tin nhạy cảm, không mô tả trạng thái truyền hay lưu.

  • A (firewall và IAM policy) — kiểm soát AI được truy cập, không phải dữ liệu có được mã hoá hay không.

  • C (xác thực và uỷ quyền) — cũng về danh tính và quyền, không phải mã hoá.

Ghi nhớ

⚠ Ba trạng thái dữ liệu — bảng phải thuộc: | Trạng thái | Ở đâu | Bảo vệ bằng | |---|---|---| | At rest | trên đĩa | AES-256, MẶC ĐỊNH | | In transit | trên mạng | TLS, MẶC ĐỊNH | | In use | trong bộ nhớ khi xử lý | Confidential Computing | | Hai cái đầu | luôn bật, không tắt được | | Câu hỏi còn lại | ai giữ khoá: GMEK / CMEK / CSEK / EKM |

Từ khoá nhận diện:

"trên đường truyền + trên đĩa" → in transit và at rest "mã hoá cả khi đang xử lý trong RAM" → Confidential VM "ai được truy cập" → IAM — câu hỏi khác "che giá trị nhạy cảm" → masking, tokenization "ai giữ khoá" → GMEK / CMEK / CSEK

Mã hoá khi lưu hoạt động thế nào Nội dung
Dữ liệu chia thành khối mỗi khối một DEK
DEK được mã hoá bằng KEK khoá mã hoá khoá
KEK nằm trong KMS với CMEK là khoá của bạn
Thuật toán AES-256
Thu hồi KEK → dữ liệu không giải mã được
Confidential Computing — trạng thái thứ ba Nội dung
Bảo vệ dữ liệu trong BỘ NHỚ khi đang xử lý
Công nghệ AMD SEV / SEV-SNP, Intel TDX
Bật bằng --confidential-compute
Có ở Confidential VM, Confidential GKE, Confidential Space
Dùng khi xử lý dữ liệu cực nhạy cảm, hoặc tính toán nhiều bên
Lớp bảo vệ quan trọng hơn mã hoá Lớp
IAM đúng và hẹp nguyên nhân rò rỉ phổ biến nhất
Uniform bucket-level access tắt ACL đối tượng
Public Access Prevention chặn bucket công khai
VPC Service Controls vành đai chống rò rỉ
Audit log phát hiện bất thường
Thực tế dữ liệu lộ vì QUYỀN SAI, hiếm khi vì thiếu mã hoá
Trả lời kiểm toán về mã hoá Việc
Mã hoá at rest và in transit mặc định, có chứng nhận ISO/SOC
Muốn tự quản khoá → CMEK, có audit log của KMS
Khoá phải ngoài GCP → Cloud EKM
Chứng minh tài liệu tuân thủ của Google + cấu hình của bạn
Đừng dựng hệ thống mã hoá riêng khi chưa cần

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bucket dùng khoá gì | gcloud storage buckets describe gs://b → defaultKmsKeyName | | Kết nối có dùng TLS không | kiểm tra https:// và HSTS | | Có bucket nào công khai không | Security Command Center |

Và một điều nên nói rõ khi trình bày chính sách này với bộ phận tuân thủ: cả hai yêu cầu đã được đáp ứng ngay từ lúc tạo bucket, không cần dự án nào để triển khai. Công sức nên dồn vào phần thực sự hay gây rò rỉ — quyền truy cập quá rộng và bucket vô tình để công khai — chứ không phải vào việc chứng minh lại một cơ chế vốn luôn bật.

Câu 152 Data Analysis and Presentation

A business intelligence team is responsible for creating the official company sales reports and dashboards. To ensure consistency and fast query performance, the data they use must be pre-cleaned, structured into a well-defined schema, and optimized for analytical queries.

Which type of system is specifically designed to store this kind of processed, structured data for business analytics?

  1. A A data warehouse
  2. B A transactional database
  3. C A data lake
  4. D An object storage system
Xem giải thích

Đáp án

A — Một DATA WAREHOUSE (kho dữ liệu).

Vì sao đúng

Đề mô tả đúng bốn đặc điểm của kho dữ liệu: dữ liệu đã được làm sạch trước, có cấu trúc theo lược đồ rõ ràng, tối ưu cho truy vấn phân tích, và phục vụ báo cáo chính thức của công ty.

⚠ Điểm mấu chốt — data warehouse ↔ data lake:

DATA WAREHOUSE                    ← đề này
    → dữ liệu ĐÃ XỬ LÝ, đã làm sạch
    → LƯỢC ĐỒ rõ ràng, định trước
    → "schema-on-WRITE"
    → tối ưu cho TRUY VẤN PHÂN TÍCH
    → Google Cloud: BIGQUERY

DATA LAKE
    → dữ liệu THÔ, mọi định dạng
    → lược đồ áp KHI ĐỌC
    → "schema-on-READ"
    → linh hoạt, rẻ, nhưng chưa dùng ngay được
    → Google Cloud: CLOUD STORAGE

⚠ Vì sao "nhất quán" đòi hỏi kho dữ liệu:

Báo cáo CHÍNH THỨC của công ty
        ↓
    Mọi người phải ra CÙNG một con số
        ↓
    → cần lược đồ thống nhất
    → cần dữ liệu đã làm sạch, đã loại trùng
    → cần một nguồn sự thật duy nhất
        ↓
    ⚠ Data lake với dữ liệu thô
      không bảo đảm được điều đó

⚠ Kiến trúc hiện đại thường có CẢ HAI:

CLOUD STORAGE (data lake)
    → dữ liệu thô, mọi định dạng
        ↓
    Xử lý và làm sạch
        ↓
BIGQUERY (data warehouse)
    → dữ liệu đã sạch, có cấu trúc
        ↓
    Báo cáo và dashboard
        ↓
    ⚠ "Data lakehouse" = kết hợp cả hai
      → BigLake, Iceberg

Xem thêm câu #13057 (cùng lô): ánh xạ ba loại nhu cầu vào Cloud SQL / Cloud Storage / BigQuery. Và #12940 (lô 134): chọn kho cho dữ liệu có cấu trúc và phi cấu trúc. Ba câu nhất quán.

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

  • C (data lake) — đây là phương án gần nhất và cũng lưu dữ liệu quy mô lớn, nhưng nó chứa dữ liệu THÔ, chưa xử lý, chưa có lược đồ chặt — trái yêu cầu "đã làm sạch, có cấu trúc rõ ràng".

  • B (CSDL giao dịch) — tối ưu cho giao dịch nhỏ, nhanh (OLTP), không tối ưu cho truy vấn phân tích quét hàng tỉ dòng.

  • D (hệ thống lưu trữ đối tượng) — chỉ lưu tệp; không có lược đồ, không truy vấn phân tích trực tiếp hiệu quả.

Ghi nhớ

⚠ Bốn loại hệ thống lưu dữ liệu — bảng phải thuộc: | Loại | Dữ liệu | Ví dụ trên GCP | |---|---|---| | Data warehouse | đã xử lý, có lược đồ, cho PHÂN TÍCH | BigQuery | | Data lake | thô, mọi định dạng, schema-on-read | Cloud Storage | | CSDL giao dịch (OLTP) | có cấu trúc, cho ứng dụng | Cloud SQL, Spanner | | Kho đối tượng | tệp phi cấu trúc | Cloud Storage | | Data lakehouse | kết hợp lake và warehouse | BigLake, Iceberg |

Từ khoá nhận diện:

"đã làm sạch, có lược đồ, cho phân tích" → data warehouse (BigQuery) "dữ liệu thô, mọi định dạng" → data lake (Cloud Storage) "giao dịch, đọc ghi từng dòng" → CSDL giao dịch "ảnh, video, tệp" → kho đối tượng "truy vấn tại chỗ trên data lake, có bảo mật" → BigLake

Schema-on-write ↔ schema-on-read Nội dung
Schema-on-WRITE định lược đồ TRƯỚC khi ghi — kho dữ liệu
Ưu nhất quán, truy vấn nhanh, kiểu chặt
Nhược kém linh hoạt khi nguồn đổi
Schema-on-READ áp lược đồ KHI ĐỌC — data lake
Ưu linh hoạt, nhận mọi thứ
Nhược chất lượng không bảo đảm
Vì sao BigQuery là kho dữ liệu tốt Lý do
Lưu theo CỘT quét ít, phân tích nhanh
Tách lưu trữ khỏi tính toán co giãn độc lập
Không máy chủ không quản lý hạ tầng
SQL chuẩn ai cũng dùng được
Phân vùng và phân cụm tối ưu chi phí
Tích hợp ML, BI, streaming một nền tảng
Mô hình dữ liệu trong kho Mô hình
Star schema bảng fact + bảng dimension
Snowflake schema dimension được chuẩn hoá thêm
Phi chuẩn hoá / bảng rộng BigQuery thường ưa cách này
Nested/repeated (STRUCT, ARRAY) tránh JOIN — rất hiệu quả trên BigQuery
Chọn theo cách truy vấn thực tế
Ba tầng thường thấy trong kho Tầng
Raw / Bronze y hệt nguồn
Staging / Silver đã làm sạch, loại trùng
Mart / Gold mô hình nghiệp vụ, bảng báo cáo
Báo cáo chính thức đọc tầng Gold
Quản lý bằng Dataform hoặc dbt

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Báo cáo đọc tầng nào | rà soát nguồn dữ liệu của dashboard | | Lược đồ có ổn định không | bq show --schema và lịch sử thay đổi | | Số liệu có nhất quán không | đối chiếu hai báo cáo cùng chỉ số |

Và một điều quyết định kho dữ liệu có thật sự mang lại "sự nhất quán" hay không: báo cáo chính thức phải đọc từ tầng đã được kiểm duyệt, không đọc thẳng bảng thô. Khi ai cũng được tự viết truy vấn trên bảng staging, bạn có một kho dữ liệu về mặt kỹ thuật nhưng vẫn có nhiều con số khác nhau cho cùng một chỉ số.

Câu 153 Data Preparation and Ingestion

A developer has a data file in newline-delimited JSON (JavaScript Object Notation) format where each line is a complex object with nested fields and arrays.

What is the most direct and efficient way to load this data into a BigQuery table while preserving the complex structure?

  1. A Use Cloud Data Fusion or Dataflow to manually reconstruct the nested schema before loading.
  2. B Load the file directly into BigQuery, as it natively supports nested structures in newline-delimited JSON (JavaScript Object Notation).
  3. C Write a Cloud Function to parse each line and insert it row by row.
  4. D First, flatten the JSON (JavaScript Object Notation) into a CSV (Comma-Separated Values) file, then load it into BigQuery.
Xem giải thích

Đáp án

B — Nạp tệp THẲNG vào BigQuery, vì BigQuery hỗ trợ sẵn cấu trúc lồng nhau trong newline-delimited JSON.

Vì sao đúng

BigQuery hiểu trực tiếp JSON lồng nhau: nó ánh xạ đối tượng lồng thành STRUCT và mảng thành ARRAY, giữ nguyên cấu trúc mà không cần bước trung gian nào.

⚠ Điểm mấu chốt — cấu trúc lồng được giữ nguyên:

{"id": 1, "khach": {"ten": "An", "tp": "Ha Noi"},
 "don_hang": [{"ma": "A1", "tien": 250000},
              {"ma": "A2", "tien": 480000}]}
        ↓
    bq load --source_format=NEWLINE_DELIMITED_JSON \
      --autodetect du_an.bang gs://bucket/du-lieu.json
        ↓
    Lược đồ sinh ra:
      id            INTEGER
      khach         RECORD (STRUCT)
        khach.ten     STRING
        khach.tp      STRING
      don_hang      RECORD REPEATED (ARRAY<STRUCT>)
        don_hang.ma    STRING
        don_hang.tien  INTEGER

⚠ Truy vấn dữ liệu lồng — dùng UNNEST:

SELECT
  t.id,
  t.khach.ten,
  d.ma,
  d.tien
FROM `du_an.bang` AS t,
UNNEST(t.don_hang) AS d;
        ↓
    ⚠ UNNEST trải mảng thành DÒNG
    → mỗi đơn hàng một dòng

⚠ Vì sao "làm phẳng thành CSV" là phương án tệ nhất:

Làm phẳng JSON lồng thành CSV
        ↓
    ⚠ MẤT cấu trúc quan hệ cha–con
    ⚠ Hoặc phải LẶP dữ liệu cha
      cho mỗi phần tử mảng
    ⚠ Thêm một bước xử lý phải bảo trì
    ⚠ CSV không có kiểu dữ liệu
        ↓
    → tự tạo ra vấn đề rồi tự giải

Xem thêm câu #12960 (lô 134): nhận dạng định dạng JSON. Câu này về cách NẠP JSON lồng vào BigQuery. Hai câu bổ sung nhau. Và #12959 (lô 134), #13064 (cùng lô) về các cách nạp khác.

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

  • A (dùng Data Fusion hoặc Dataflow để dựng lại lược đồ lồng trước khi nạp) — đây là phương án gần nhất và chạy được, nhưng hoàn toàn không cần thiết: BigQuery đã hỗ trợ sẵn, thêm engine chỉ thêm chi phí và độ phức tạp.

  • D (làm phẳng thành CSV rồi nạp) — mất cấu trúc, mất kiểu dữ liệu, và thêm một bước phải bảo trì.

  • C (viết Cloud Function chèn từng dòng) — cực kỳ chậm và tốn kém với tệp lớn; streaming insert từng dòng đắt hơn nhiều so với nạp theo lô.

Ghi nhớ

⚠ Kiểu dữ liệu lồng của BigQuery — bảng phải thuộc: | Kiểu | Nội dung | |---|---| | STRUCT (RECORD) | nhóm các trường liên quan — đối tượng JSON lồng | | ARRAY (REPEATED) | nhiều giá trị trong một dòng — mảng JSON | | ARRAY<STRUCT> | mảng đối tượng — mẫu phổ biến nhất | | UNNEST | trải mảng thành DÒNG | | Kiểu JSON gốc | giữ nguyên JSON, lược đồ động |

Từ khoá nhận diện:

"NDJSON lồng nhau vào BigQuery" → nạp thẳng, giữ nguyên cấu trúc "truy vấn mảng" → UNNEST "lược đồ hay thay đổi" → kiểu JSON gốc "làm phẳng thành CSV" → thường là phương án SAI "chèn từng dòng bằng hàm" → chậm và đắt

Vì sao cấu trúc lồng lại HIỆU QUẢ trên BigQuery Lý do
Tránh JOIN dữ liệu cha–con nằm cùng một dòng
Lưu theo cột vẫn nén và quét chọn lọc tốt
Nhanh hơn nhiều so với join hai bảng
Đây là cách BigQuery khuyến khích mô hình hoá
Khác CSDL quan hệ ở đó phải chuẩn hoá thành nhiều bảng
--autodetect — tiện nhưng cần cẩn thận Nội dung
Cơ chế đọc mẫu vài trăm dòng đầu để đoán
Rủi ro trường xuất hiện muộn có thể bị bỏ sót
Rủi ro mã bưu chính, số điện thoại đoán thành số
An toàn hơn khai lược đồ tường minh bằng tệp JSON
Kiểm tra sau khi nạp bq show --schema
Lược đồ JSON thay đổi theo thời gian Cách xử lý
--schema_update_option=ALLOW_FIELD_ADDITION cho phép thêm trường mới
ALLOW_FIELD_RELAXATION REQUIRED → NULLABLE
Kiểu JSON gốc không cần đổi lược đồ khi nguồn đổi
Truy cập JSON_VALUE, JSON_QUERY
Chọn kiểu JSON khi lược đồ rất động, không đoán trước được
Ba cách nạp JSON vào BigQuery Cách
bq load --source_format=NEWLINE_DELIMITED_JSON dòng lệnh
LOAD DATA bằng SQL trong script hoặc scheduled query
Giao diện Create Table thao tác một lần
⚠ Phải là NDJSON — mỗi dòng một đối tượng
Mảng lớn bọc cả tệp phải chuyển đổi trước (ví dụ jq -c '.[]')

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Lược đồ có giữ cấu trúc không | bq show --schema --format=prettyjson — tìm RECORD, REPEATED | | Truy vấn mảng có ra đúng không | thử UNNEST trên vài dòng | | Có trường nào bị bỏ sót không | so danh sách khoá trong tệp với lược đồ |

Và một cạm bẫy rất hay gặp khi nạp NDJSON lần đầu: tệp thực ra là một mảng JSON lớn chứ không phải NDJSON. Trình nạp báo lỗi phân tích cú pháp ngay dòng đầu tiên, và thông báo nghe như tệp bị hỏng — trong khi tệp hoàn toàn hợp lệ, chỉ là ở dạng mà BigQuery không nhận.

Câu 154 Data Pipeline Orchestration

A data engineer is building an automated nightly pipeline. As the final step, a script needs to programmatically load a new CSV (Comma-Separated Values) file from a Cloud Storage bucket into an existing BigQuery table.

Which SQL (Structured Query Language) command is designed for this specific, script-based data ingestion task?

  1. A The LOAD DATA statement.
  2. B The gcloud storage cp command.
  3. C Creating an external table.
  4. D Using the 'Create table' button in the BigQuery GUI (Graphical User Interface).
Xem giải thích

Đáp án

A — Câu lệnh LOAD DATA.

Vì sao đúng

Đề hỏi rõ: lệnh SQL dùng để nạp tệp từ Cloud Storage vào bảng BigQuery đã có, trong một script tự động. LOAD DATA là câu lệnh SQL được thiết kế cho đúng việc đó.

⚠ Điểm mấu chốt — cú pháp:

LOAD DATA INTO `du_an.bang_hien_co`
FROM FILES (
  format = 'CSV',
  uris = ['gs://bucket/du-lieu-*.csv'],
  skip_leading_rows = 1
);
        ↓
    ⚠ Là một câu SQL → chạy được ở
      MỌI NƠI chạy được SQL:
        - bq query
        - thư viện client
        - SCHEDULED QUERY
        - stored procedure

⚠ Vì sao LOAD DATA hợp với script hơn là bq load:

bq load
    → lệnh CLI, cần cài gcloud SDK

LOAD DATA
    → câu SQL, gọi qua API BigQuery
        ↓
    → dùng được trong stored procedure
    → dùng được trong scheduled query
    → gộp chung với các bước SQL khác
      trong CÙNG một script
        ↓
    ⚠ Cả hai đều đúng về mặt kỹ thuật,
      nhưng đề hỏi "câu lệnh SQL"

⚠ Ba biến thể đáng nhớ:

LOAD DATA INTO      → NỐI THÊM vào bảng
LOAD DATA OVERWRITE → GHI ĐÈ toàn bộ bảng
LOAD DATA INTO ... PARTITIONS(...)
                    → ghi đè MỘT phân vùng
        ↓
    ⚠ Biến thể thứ ba rất hữu ích:
      nạp lại đúng một ngày mà không
      đụng tới các ngày khác

Xem thêm câu #12911 (lô 133): khoá bq load vì đề hỏi công cụ DÒNG LỆNH. Và #12959 (lô 134): khoá luồng giao diện Create Table vì đề hỏi thao tác trên web UI. Ba câu, ba khoá, phân biệt bằng ngữ cảnh sử dụng — hoàn toàn nhất quán.

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

  • C (tạo external table) — đây là phương án gần nhất về mặt "làm dữ liệu GCS truy vấn được", nhưng external table KHÔNG nạp dữ liệu vào bảng: nó chỉ trỏ tới tệp, truy vấn chậm hơn và không phải "nạp vào bảng đã có".

  • B (gcloud storage cp) — không phải lệnh SQL, và nó chỉ sao chép tệp giữa các nơi, không đưa gì vào BigQuery.

  • D (nút 'Create table' trên giao diện) — thao tác thủ công, không dùng được trong script tự động.

Ghi nhớ

⚠ Các cách nạp dữ liệu vào BigQuery — bảng phải thuộc: | Cách | Ngữ cảnh | |---|---| | LOAD DATA (SQL) | script, scheduled query, stored procedure | | bq load (CLI) | script shell, dòng lệnh | | Giao diện Create Table | thao tác một lần | | Thư viện client | trong ứng dụng | | Storage Write API | nạp luồng, thời gian thực | | BigQuery Data Transfer Service | nạp theo LỊCH từ nguồn định sẵn | | External table | truy vấn tại chỗ, KHÔNG nạp |

Từ khoá nhận diện:

"câu lệnh SQL để nạp" → LOAD DATA "dòng lệnh" → bq load "giao diện web" → Create Table "nạp theo lịch, không cần mã" → Data Transfer Service "truy vấn mà không nạp" → external table / BigLake

LOAD DATA — các tuỳ chọn Tuỳ chọn
format CSV, JSON, PARQUET, AVRO, ORC
uris hỗ trợ ký tự đại diện gs://b/prefix-*.csv
skip_leading_rows bỏ dòng tiêu đề
field_delimiter dấu ngăn cách
max_bad_records bỏ qua N dòng hỏng
OVERWRITE ghi đè thay vì nối thêm
PARTITIONS(...) ghi đè đúng một phân vùng
Nạp theo lô — điều nên biết Nội dung
Nạp theo lô vào BigQuery MIỄN PHÍ chỉ trả tiền lưu và truy vấn
Streaming insert thì CÓ PHÍ dùng Storage Write API cho luồng
Định dạng tốt nhất Avro, Parquet — nhanh, giữ kiểu
CSV nén gzip không chia nhỏ được → chậm
Ký tự đại diện nạp nhiều tệp song song
Đưa LOAD DATA vào pipeline tự động Cách
Scheduled query chạy theo lịch, không cần mã
Stored procedure gộp nạp + biến đổi trong một thủ tục
Cloud Composer BigQueryInsertJobOperator
Cloud Run function gọi API BigQuery
Kết hợp nạp → kiểm tra chất lượng → biến đổi trong cùng script
Sau khi nạp — ba việc kiểm Việc
Số dòng so với tệp gốc
Lược đồ bq show --schema — kiểm cột bị đoán sai kiểu
Dòng bị bỏ bq show -j <job_id>
Nếu sai nạp lại với lược đồ tường minh
Nên đặt max_bad_records = 0 và sửa dữ liệu nguồn

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bảng đã có dữ liệu mới chưa | SELECT COUNT(*) trước và sau | | Job nạp có lỗi gì | bq show -j <job_id> | | Kiểu cột có đúng không | bq show --schema --format=prettyjson |

Và một biến thể của LOAD DATA rất đáng dùng cho pipeline hằng đêm: LOAD DATA OVERWRITE ... PARTITIONS(...). Nó ghi đè đúng phân vùng của ngày đang xử lý, nên chạy lại một ngày bị lỗi là an toàn tuyệt đối — không sinh dữ liệu trùng và không đụng tới các ngày khác.

Câu 155 Data Management

A global financial firm is migrating its data to Cloud Storage. They have a strict, non-negotiable regulatory requirement that the encryption keys used to protect their data must be generated, stored, and managed entirely within their own on-premises hardware security module, completely outside of Google Cloud's infrastructure.

Which key management option is the only one that meets this requirement?

  1. A CMEK (Customer-Managed Encryption Keys)
  2. B CSEK (Customer-Supplied Encryption Keys)
  3. C Default Encryption
  4. D IAM (Identity and Access Management) permissions
Xem giải thích

Đáp án

B — CSEK (Customer-Supplied Encryption Keys — khoá do khách hàng tự cung cấp).

Vì sao đúng

Yêu cầu tuyệt đối trong đề là: khoá phải được tạo, lưu và quản lý HOÀN TOÀN trong HSM tại chỗ của công ty, NGOÀI hạ tầng Google Cloud. Trong bốn phương án, chỉ CSEK giữ khoá ở ngoài.

⚠ Điểm mấu chốt — khoá không bao giờ được Google lưu:

CSEK
        ↓
    Bạn tạo khoá trong HSM của mình
        ↓
    Gửi khoá KÈM THEO MỖI YÊU CẦU
    (trong header của lời gọi API)
        ↓
    Google dùng khoá đó để mã hoá/giải mã
        ↓
    ⚠ Google KHÔNG LƯU khoá
    ⚠ Chỉ giữ một mã băm để xác minh
        ↓
    → khoá luôn ở trong hạ tầng của bạn

⚠ Vì sao CMEK KHÔNG đủ ở đây:

CMEK
        ↓
    Khoá do BẠN quản lý — nhưng
    NẰM TRONG CLOUD KMS
        ↓
    ⚠ Cloud KMS là hạ tầng của GOOGLE
        ↓
    → vi phạm yêu cầu "hoàn toàn ngoài
      hạ tầng Google Cloud"
        ↓
    (Cloud EKM giữ khoá ở hệ thống ngoài,
     nhưng không có trong phương án)

⚠ Cái giá rất lớn của CSEK:

- Phải gửi khoá TRONG MỖI yêu cầu API
- MẤT KHOÁ = MẤT DỮ LIỆU VĨNH VIỄN,
  Google không khôi phục được
- Chỉ MỘT SỐ dịch vụ hỗ trợ
  (Cloud Storage, Compute Engine)
  → BigQuery KHÔNG hỗ trợ CSEK
- Ứng dụng phức tạp hơn nhiều
- Không dùng được nhiều tính năng
  tích hợp sẵn

Xem thêm câu #13060 (cùng lô): khoá CMEK vì ở đó yêu cầu là quản lý khoá trong Cloud KMS và trong suốt với người dùng. #12984 (lô 135): khoá GMEK vì không muốn cấu hình gì. Ba câu, ba mức kiểm soát — hoàn toàn nhất quán.

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

  • A (CMEK) — đây là phương án gần nhất và cho mức kiểm soát cao, nhưng khoá nằm trong Cloud KMS, tức là trong hạ tầng Google — vi phạm yêu cầu "hoàn toàn bên ngoài".

  • C (mã hoá mặc định) — Google quản lý toàn bộ khoá; ngược hẳn yêu cầu.

  • D (quyền IAM) — kiểm soát ai được truy cập, hoàn toàn không liên quan tới việc quản lý khoá mã hoá.

Ghi nhớ

⚠ Bốn mức quản lý khoá — bảng phải thuộc: | Mức | Khoá nằm ở đâu | Google có lưu khoá không | |---|---|---| | GMEK | hệ thống của Google | có | | CMEK | Cloud KMS (của Google) | có, nhưng bạn kiểm soát | | Cloud EKM | hệ thống đối tác NGOÀI GCP | không | | CSEK | HSM/hệ thống của bạn | KHÔNG — gửi theo từng yêu cầu | | Mức kiểm soát tăng dần | GMEK → CMEK → EKM → CSEK |

Từ khoá nhận diện:

"khoá hoàn toàn ngoài Google Cloud, tự cung cấp" → CSEK "khoá ở hệ thống ngoài nhưng vẫn trong suốt" → Cloud EKM "tự quản khoá bằng Cloud KMS" → CMEK "không cấu hình gì" → GMEK "phải gọi hàm giải mã trong SQL" → AEAD

CSEK — giới hạn phải biết Giới hạn
Chỉ một số dịch vụ hỗ trợ Cloud Storage, Compute Engine (đĩa)
BigQuery KHÔNG hỗ trợ CSEK dùng CMEK hoặc AEAD thay thế
Gửi khoá trong header mỗi yêu cầu ứng dụng phức tạp hơn
Mất khoá = mất dữ liệu Google không giúp được
Xoay khoá phải tự ghi lại dữ liệu
Nhiều tính năng tích hợp không dùng được
Cloud EKM — lựa chọn cân bằng hơn Nội dung
Khoá nằm ở hệ thống quản lý khoá NGOÀI Google (Thales, Fortanix...)
Google KHÔNG lưu khoá chỉ gọi ra để dùng
Trong suốt với người dùng như CMEK
Hỗ trợ nhiều dịch vụ hơn CSEK BigQuery, Cloud Storage, Compute Engine
Với yêu cầu trong đề EKM thường là lựa chọn thực tế hơn CSEK
Nhưng EKM không có trong bốn phương án
Chọn mức khoá theo yêu cầu tuân thủ Yêu cầu
Không có yêu cầu cụ thể GMEK
Phải tự xoay và thu hồi khoá CMEK
Khoá không được nằm ở nhà cung cấp đám mây EKM hoặc CSEK
Dữ liệu phải là bản mã trong bảng AEAD
Nguyên tắc chọn mức thấp nhất mà quy định chấp nhận
Rủi ro vận hành theo mức Mức
GMEK gần như không có
CMEK thiếu quyền service agent → job hỏng
EKM hệ thống ngoài chết → dữ liệu không đọc được
CSEK mất khoá = mất dữ liệu, ứng dụng phức tạp
Nguyên tắc kiểm soát càng cao, trách nhiệm càng lớn

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đối tượng dùng khoá nào | gsutil stat gs://b/obj → dòng về CSEK/KMS | | Dịch vụ có hỗ trợ CSEK không | kiểm tra tài liệu từng dịch vụ | | Có kế hoạch khôi phục khoá chưa | quy trình sao lưu khoá trong HSM |

Và một điều nên đặt lên bàn cân trước khi chọn CSEK để đáp ứng quy định: Cloud EKM thường thoả cùng yêu cầu mà rẻ hơn nhiều về vận hành. Nó giữ khoá ở hệ thống ngoài Google, nhưng vẫn trong suốt với ứng dụng và hỗ trợ nhiều dịch vụ hơn — trong khi CSEK buộc mọi lời gọi API phải mang theo khoá và loại bỏ phần lớn tính năng tích hợp sẵn.

Câu 156 Data Management

A high-traffic financial services application built on PostgreSQL is experiencing performance bottlenecks. The company wants to migrate to a fully-managed Google Cloud database that is 100% PostgreSQL-compatible but offers significantly higher performance, availability, and scalability for their demanding OLTP (Online Transaction Processing) workload.

Which service is designed as this high-performance option for PostgreSQL?

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

Đáp án

A — AlloyDB.

Vì sao đúng

Đề nêu bốn điều: đang dùng PostgreSQL, gặp nút thắt hiệu năng, cần tương thích PostgreSQL 100%, và cần hiệu năng, sẵn sàng, khả năng mở rộng cao hơn hẳn cho khối lượng công việc OLTP đòi hỏi. AlloyDB được thiết kế cho đúng khoảng trống đó.

⚠ Điểm mấu chốt — AlloyDB nằm giữa Cloud SQL và Spanner:

CLOUD SQL for PostgreSQL
    → PostgreSQL tiêu chuẩn được quản lý
    → mặc định tốt cho hầu hết ứng dụng
    → mở rộng theo chiều DỌC

ALLOYDB                          ← đề này
    → 100% tương thích PostgreSQL
    → hiệu năng giao dịch cao hơn nhiều
    → phân tích nhanh hơn RẤT nhiều
      nhờ COLUMNAR ENGINE
    → mở rộng đọc bằng nhiều read pool

SPANNER
    → KHÔNG phải PostgreSQL thuần
      (có giao diện tương thích)
    → nhiều Region, nhất quán mạnh toàn cầu

⚠ Điều làm AlloyDB nhanh hơn:

- Tách lưu trữ khỏi tính toán
  → lớp lưu trữ thông minh, phân tán
- COLUMNAR ENGINE trong bộ nhớ
  → truy vấn phân tích nhanh hơn
    nhiều lần so với PostgreSQL thường
- Tự động phân tầng bộ nhớ đệm
- Read pool mở rộng ngang cho ĐỌC
- Bảo trì không gián đoạn

⚠ Vì sao "tương thích 100%" lại quan trọng:

Ứng dụng PostgreSQL hiện có
        ↓
    Chuyển sang AlloyDB
        ↓
    → giữ nguyên SQL, extension,
      driver, công cụ
    → thường chỉ đổi CHUỖI KẾT NỐI
        ↓
    ⚠ Chuyển sang một CSDL khác hẳn
      sẽ phải viết lại truy vấn và
      kiểm thử lại toàn bộ

Xem thêm câu #12914 (lô 133) và #13072 (cùng lô): khoá Cloud SQL vì ở đó là ứng dụng thông thường, không nêu vấn đề hiệu năng. Và #12563 (lô 133): khoá Spanner vì cần nhiều Region, nhất quán mọi lúc. Bốn câu, ba khoá, phân biệt bằng YÊU CẦU cụ thể — hoàn toàn nhất quán.

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

  • D (Cloud SQL for PostgreSQL) — đây là phương án gần nhất và cũng là PostgreSQL được quản lý, nhưng công ty đang gặp nút thắt hiệu năng; chuyển sang cùng một mức dịch vụ không giải quyết được vấn đề.

  • C (Spanner) — cho quy mô toàn cầu và nhất quán mạnh, nhưng không phải PostgreSQL thuần: cần chỉnh lược đồ và truy vấn, và chi phí tối thiểu cao hơn nhiều.

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

Ghi nhớ

⚠ Bốn CSDL quan hệ của Google Cloud — bảng phải thuộc: | Dịch vụ | Dùng khi | |---|---| | Cloud SQL | mặc định — MySQL, PostgreSQL, SQL Server, một Region | | AlloyDB | PostgreSQL cần HIỆU NĂNG CAO HƠN, vẫn một Region | | Spanner | NHIỀU REGION, nhất quán mạnh, mở rộng ngang | | BigQuery | phân tích, không phải giao dịch | | Thứ tự cân nhắc | Cloud SQL → AlloyDB → Spanner khi quy mô tăng |

Từ khoá nhận diện:

"PostgreSQL nhưng cần hiệu năng cao hơn" → AlloyDB "MySQL/PostgreSQL thông thường" → Cloud SQL "nhiều Region + nhất quán mọi lúc" → Spanner "NoSQL tài liệu, thời gian thực" → Firestore "phân tích hàng tỉ dòng" → BigQuery

AlloyDB — điểm mạnh cụ thể Điểm mạnh
100% tương thích PostgreSQL giữ nguyên SQL và extension
Columnar engine phân tích nhanh hơn nhiều lần
Read pool mở rộng ĐỌC theo chiều ngang
Tách lưu trữ khỏi tính toán khôi phục nhanh
SLA 99,99% với cấu hình HA
AlloyDB Omni chạy được ngoài Google Cloud
Vì sao columnar engine đáng chú ý Nội dung
PostgreSQL thường lưu theo DÒNG — tốt cho giao dịch
Truy vấn phân tích quét nhiều dòng, ít cột → chậm
AlloyDB giữ thêm bản sao theo CỘT trong bộ nhớ
Kết quả truy vấn phân tích nhanh hơn đáng kể
Lợi ích giảm nhu cầu tách sang kho riêng cho báo cáo nhẹ
Chuyển từ Cloud SQL sang AlloyDB Bước
Database Migration Service hỗ trợ đích là AlloyDB
Kiểm tra extension phần lớn tương thích
Đo hiệu năng trước và sau xác nhận cải thiện thật
Cấu hình read pool cho khối lượng đọc lớn
Chi phí cao hơn Cloud SQL — cân nhắc theo nhu cầu thật
Khi nào AlloyDB vẫn KHÔNG đủ Dấu hiệu
Cần GHI ở nhiều Region cùng lúc → Spanner
Cần nhất quán mạnh toàn cầu → Spanner
Khối lượng phân tích rất lớn → tách sang BigQuery
Cần SLA 99,999% → Spanner multi-region
Nếu chỉ là hiệu năng OLTP một Region AlloyDB là điểm dừng hợp lý

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Nút thắt thật sự ở đâu | pg_stat_statements, chỉ số CPU và I/O | | Columnar engine có được dùng không | xem query plan | | Chi phí so với Cloud SQL | Pricing Calculator với cấu hình thật |

Và một bước nên làm trước khi chuyển sang AlloyDB vì lý do hiệu năng: xác định nút thắt thật sự nằm ở đâu. Rất nhiều "vấn đề hiệu năng PostgreSQL" thực ra là thiếu chỉ mục, truy vấn N+1, hoặc kết nối không dùng pool — và những thứ đó sẽ theo bạn sang bất kỳ CSDL mới nào, dù nó nhanh tới đâu.

Câu 157 Data Management

What is the primary goal of the "Transform" stage in an ETL (Extract, Transform, Load) or ELT (Extract, Load, Transform) data pipeline?

  1. A To move the raw data from the source to the destination as quickly as possible.
  2. B To control who has permission to access the final, processed data.
  3. C To store the data in its original, unaltered format in a data lake.
  4. D To convert raw data into a structured, consistent, and useful state that meets the requirements for analysis.
Xem giải thích

Đáp án

D — Chuyển dữ liệu thô thành trạng thái CÓ CẤU TRÚC, NHẤT QUÁN và HỮU DỤNG, đáp ứng yêu cầu phân tích.

Vì sao đúng

Đây là định nghĩa của bước "Transform" trong cả ETL lẫn ELT: nó biến dữ liệu ở dạng nguồn thành dạng dùng được cho phân tích.

⚠ Điểm mấu chốt — biến đổi làm gì cụ thể:

CHUẨN HOÁ
    "US", "USA", "United States" → "US"

LÀM SẠCH
    bỏ khoảng trắng thừa, sửa lỗi định dạng

ÉP KIỂU
    chuỗi "2026-09-02" → DATE

LOẠI TRÙNG
    giữ bản ghi mới nhất cho mỗi khoá

LÀM GIÀU
    nối với dữ liệu từ nguồn khác

TỔNG HỢP
    gộp theo ngày, theo vùng

ĐỊNH HÌNH LẠI
    phi chuẩn hoá cho truy vấn nhanh

⚠ Vì sao ba phương án kia mô tả bước KHÁC:

"di chuyển dữ liệu thô nhanh nhất có thể"
    → mô tả bước EXTRACT và LOAD

"kiểm soát ai được truy cập dữ liệu"
    → mô tả QUẢN TRỊ và BẢO MẬT
    → IAM, policy tag, row-level security

"lưu dữ liệu ở dạng gốc trong data lake"
    → mô tả tầng RAW của data lake
    → chính là thứ chưa được biến đổi

⚠ Transform ở đâu — khác nhau giữa ETL và ELT:

ETL: Transform TRƯỚC khi nạp
    → chạy trên Dataflow, Data Fusion
    → chỉ dữ liệu sạch vào kho

ELT: Transform SAU khi nạp
    → chạy bằng SQL trong BigQuery
    → giữ được dữ liệu thô
        ↓
    ⚠ MỤC TIÊU của bước Transform
      là GIỐNG NHAU trong cả hai

Xem thêm câu #12953 (lô 134): nhận diện việc chuẩn hoá mã quốc gia là biến đổi dữ liệu. Và #12943 (lô 134): phân biệt với đánh giá chất lượng — bước phát hiện vấn đề chứ không sửa. Ba câu nhất quán.

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

  • A (di chuyển dữ liệu thô từ nguồn tới đích nhanh nhất) — đây là phương án gần nhất về mặt "cũng là một bước của pipeline", nhưng nó mô tả Extract và Load, không phải Transform.

  • C (lưu dữ liệu ở dạng gốc trong data lake) — mô tả tầng RAW, tức là dữ liệu chưa được biến đổi.

  • B (kiểm soát ai được truy cập dữ liệu đã xử lý) — mô tả quản trị và bảo mật, một khía cạnh hoàn toàn khác.

Ghi nhớ

⚠ Các bước của pipeline dữ liệu — bảng phải thuộc: | Bước | Mục tiêu | |---|---| | Extract | lấy dữ liệu ra khỏi nguồn | | Load | đưa dữ liệu vào đích | | Transform | biến dữ liệu thô thành dạng DÙNG ĐƯỢC | | Assess quality | PHÁT HIỆN vấn đề — không sửa | | Orchestrate | quản lý thứ tự và phụ thuộc | | Govern | quyền, phân loại, dòng dõi |

Từ khoá nhận diện:

"biến dữ liệu thô thành dạng dùng được" → Transform "lấy ra / đưa vào" → Extract / Load "kiểm tra rỗng, đúng định dạng" → đánh giá chất lượng "ai được truy cập" → quản trị, IAM "lưu nguyên dạng gốc" → tầng raw của data lake

Các phép biến đổi thường gặp Phép
Chuẩn hoá (standardization) đưa về cùng một dạng
Làm sạch (cleansing) bỏ khoảng trắng, sửa lỗi
Ép kiểu (casting) chuỗi → số, chuỗi → ngày
Loại trùng (de-duplication) giữ bản ghi đúng
Làm giàu (enrichment) nối với nguồn khác
Tổng hợp (aggregation) gộp theo nhóm
Ẩn danh hoá che PII
Định hình lại phi chuẩn hoá, nested/repeated
Công cụ biến đổi trên Google Cloud 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 biến đổi lô và luồng quy mô lớn
Cloud Data Fusion kéo thả, có Wrangler
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 phải ra cùng kết quả
BẤT BIẾN (idempotent) chạy hai lần không sinh sai lệch
Có KIỂM THỬ assertion về chất lượng
Ghi lại quy tắc mã chính là tài liệu
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 tầng và vai trò của Transform Tầng
Raw chưa biến đổi
Staging làm sạch, ép kiểu, loại trùng
Mart mô hình nghiệp vụ, tổng hợp
Transform xuất hiện giữa mỗi cặp tầng
Quản lý bằng Dataform hoặc dbt

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 | | Kết quả có lặp lại được không | chạy lại và so kết quả | | Còn giá trị bất thường không | thống kê phân phối từng cột |

Và một phép kiểm chứng nên gắn vào mọi bước biến đổi ngay từ khi viết: so số dòng trước và sau. Một phép JOIN nhân bản dòng hay một điều kiện lọc quá rộng đều cho ra bảng trông hoàn toàn bình thường — và số dòng là tín hiệu rẻ nhất, nhanh nhất để phát hiện cả hai.

Câu 158 Data Management

A large organization wants to enable its central data analytics team to securely share curated BigQuery datasets with various other departments. The goal is to create a centralized platform where departments can discover and subscribe to these datasets for read-only analysis without the data being copied or moved from the analytics team's project.

Which Google Cloud service is designed to be this type of governed data exchange?

  1. A Analytics Hub (BigQuery sharing)
  2. B BigQuery Data Transfer Service
  3. C Data Catalog
  4. D IAM (Identity and Access Management)
Xem giải thích

Đáp án

A — Analytics Hub (cơ chế chia sẻ của BigQuery).

Vì sao đúng

Đề nêu bốn yêu cầu: nền tảng TẬP TRUNG, các phòng ban KHÁM PHÁ và ĐĂNG KÝ dataset, chỉ đọc để phân tích, và KHÔNG sao chép hay di chuyển dữ liệu khỏi project của đội phân tích. Analytics Hub được thiết kế cho đúng bộ yêu cầu này.

⚠ Điểm mấu chốt — chia sẻ bằng CON TRỎ, không phải bản sao:

Đội phân tích tạo LISTING trong EXCHANGE
        ↓
    Phòng ban khác ĐĂNG KÝ
        ↓
    Nhận LINKED DATASET trong project họ
        ↓
    ⚠ Linked dataset chỉ là CON TRỎ
    → dữ liệu vẫn nằm ở MỘT chỗ duy nhất
    → cập nhật ở nguồn là thấy ngay
    → THU HỒI được bất cứ lúc nào

⚠ Ba khái niệm của Analytics Hub:

EXCHANGE (sàn trao đổi)
    → nơi chứa các listing
    → riêng cho tổ chức, hoặc công khai

LISTING (mục chia sẻ)
    → một dataset được công bố
    → kèm mô tả, tài liệu, điều kiện dùng

SUBSCRIPTION (đăng ký)
    → bên nhận đăng ký
    → sinh ra LINKED DATASET

⚠ Ai trả tiền cho gì — điểm rất hợp lý:

ĐỘI PHÂN TÍCH (bên chia sẻ)
    → trả phí LƯU TRỮ dữ liệu

PHÒNG BAN (bên đăng ký)
    → trả phí TRUY VẤN của chính họ
        ↓
    ⚠ Chia sẻ KHÔNG làm tăng chi phí
      truy vấn của bên cung cấp
    → mô hình rất phù hợp cho
      chia sẻ nội bộ giữa các phòng ban

Xem thêm câu #12945 (lô 134): cùng tình huống chia sẻ dataset không sao chép, cùng khoá Analytics Hub. Hai câu hoàn toàn nhất quán.

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

  • D (IAM) — đây là phương án gần nhất và về kỹ thuật thì cấp quyền đọc dataset cho phòng ban khác là làm được, nhưng IAM không có danh mục để khám phá, không có cơ chế ĐĂNG KÝ, không theo dõi được mức sử dụng. Analytics Hub dùng IAM bên dưới và bổ sung lớp quản trị đó.

  • C (Data Catalog / Dataplex) — giúp TÌM KIẾM và mô tả dữ liệu, nhưng không cấp quyền truy cập hay tạo linked dataset.

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

Ghi nhớ

⚠ Các cách chia sẻ dữ liệu BigQuery — bảng phải thuộc: | Cách | Dùng khi | |---|---| | Analytics Hub | chia sẻ có QUẢN TRỊ, không sao chép, theo dõi được | | IAM trên dataset | chia sẻ đơn giản trong nội bộ | | Authorized view | chỉ lộ MỘT PHẦN dữ liệu | | Dataset copy (BQDTS) | khi bên nhận cần bản sao riêng | | bq extract sang GCS | bên nhận không dùng BigQuery | | Row/column-level security | giới hạn theo dòng và cột |

Từ khoá nhận diện:

"chia sẻ không sao chép, có đăng ký và theo dõi" → Analytics Hub "tìm kiếm dữ liệu bằng thuật ngữ nghiệp vụ" → Dataplex Catalog "chỉ cho xem vài cột" → authorized view / policy tag "bên nhận cần bản sao riêng" → dataset copy "sao chép theo lịch" → Data Transfer Service — trái yêu cầu ở đây

Analytics Hub — lợi ích cụ thể Lợi ích
Không nhân bản dữ liệu tiết kiệm lưu trữ, luôn mới
Thu hồi tức thì huỷ listing là mất quyền
Theo dõi mức sử dụng biết ai truy vấn bao nhiêu
Danh mục có mô tả bên nhận tự tìm được
Chia sẻ XUYÊN TỔ CHỨC không cần cùng project
Chia sẻ cả VIEW kiểm soát phần lộ ra
Chia sẻ VIEW thay vì BẢNG — nên cân nhắc Lý do
Lọc dòng, ẩn cột trước khi chia sẻ
Tổng hợp trước không lộ bản ghi cá nhân
Đổi cấu trúc bảng gốc bên đăng ký không bị ảnh hưởng
Kết hợp authorized view + Analytics Hub
Với dữ liệu nhạy cảm gần như luôn nên chia sẻ view
Chuẩn bị trước khi công bố listing Việc
Quét PII Sensitive Data Protection
Quyết định chia sẻ bảng hay view
Viết mô tả rõ ràng lược đồ, tần suất cập nhật, ý nghĩa cột
Chỉ định chủ sở hữu ai chịu trách nhiệm
Điều kiện sử dụng ghi trong mô tả listing
Chọn phạm vi exchange nội bộ hay công khai
Kiểm soát dữ liệu nhạy cảm khi chia sẻ Cách
Column-level security policy tag
Row-level security lọc dòng theo bên đăng ký
Dynamic data masking che giá trị
Authorized view chỉ lộ kết quả
VPC Service Controls vành đai

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai đang đăng ký | console → Analytics Hub → listing → Subscriptions | | Họ truy vấn bao nhiêu | số liệu của Hub, và INFORMATION_SCHEMA.JOBS | | Listing có lộ cột nhạy cảm không | kiểm tra policy tag và định nghĩa view |

Và một chi tiết khiến Analytics Hub khác biệt hẳn so với việc cấp quyền IAM trực tiếp: bạn biết ai đang dùng dữ liệu của mình. Với IAM, một dataset chia sẻ cho năm phòng ban là năm dòng trong chính sách và không có gì hơn; với Analytics Hub, bạn thấy ai đăng ký, ai truy vấn bao nhiêu — và đó là thông tin cần để quyết định có nên tiếp tục duy trì dataset đó hay không.

Câu 159 Data Management

A company maintains a data lake in Google Cloud Storage and wants to use BigQuery to query the data in place. A critical security requirement is the ability to enforce both row-level and column-level access control for different user groups directly through BigQuery's IAM (Identity and Access Management) policies, without having to manage separate permissions on the underlying files.

Which BigQuery feature is designed to provide these advanced security and performance capabilities on external data?

  1. A A BigQuery managed table
  2. B A BigLake table
  3. C The BigQuery Data Transfer Service
  4. D A regular external table
Xem giải thích

Đáp án

B — BigLake table.

Vì sao đúng

Đề nêu ba yêu cầu: truy vấn dữ liệu TẠI CHỖ trong Cloud Storage, cần row-level VÀ column-level security, và cưỡng chế qua IAM của BigQuery, KHÔNG phải quản lý quyền riêng trên tệp gốc. BigLake là loại bảng duy nhất làm được cả ba.

⚠ Điểm mấu chốt — BigLake tách quyền dữ liệu khỏi quyền tệp:

EXTERNAL TABLE thường
        ↓
    Người dùng phải có quyền TRÊN BUCKET
        ↓
    ⚠ tức là họ đọc thẳng tệp được
    ⚠ KHÔNG hỗ trợ row/column-level security
        ↓
    → phải quản lý quyền ở HAI nơi

BIGLAKE TABLE                    ← đề này
        ↓
    Truy cập qua CONNECTION có
    service account riêng
        ↓
    ⚠ Người dùng KHÔNG cần quyền trên bucket
    ⚠ CÓ row-level security
    ⚠ CÓ column-level security (policy tag)
    ⚠ CÓ dynamic data masking
        ↓
    → BigQuery thành CỬA DUY NHẤT vào data lake

⚠ Cách dựng:

-- 1. Tạo connection; cấp cho service account của nó
--    roles/storage.objectViewer trên bucket

-- 2. Tạo BigLake table
CREATE EXTERNAL TABLE `du_an.lake.giao_dich`
WITH CONNECTION `du_an.asia-southeast1.ket-noi-gcs`
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://data-lake/giao-dich/*.parquet'],
  max_staleness = INTERVAL 1 HOUR,
  metadata_cache_mode = 'AUTOMATIC'
);

-- 3. Gắn policy tag vào cột nhạy cảm
-- 4. Tạo row access policy nếu cần lọc dòng

⚠ Lợi ích về hiệu năng — metadata caching:

Data lake có hàng triệu tệp
        ↓
    External table thường phải LIỆT KÊ
    tệp mỗi lần truy vấn
        ↓
    ⚠ rất chậm

BigLake với metadata cache
        ↓
    → cache danh sách tệp và thống kê
    → truy vấn nhanh hơn NHIỀU LẦN

Xem thêm câu #12980 (lô 134): cùng tình huống data lake cần quản trị và che cột, cùng khoá BigLake + policy tag. Hai câu hoàn toàn nhất quán. Và #13077 (cùng lô) về cấu hình metadata cache của chính BigLake.

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

  • D (external table thường) — đây là phương án gần nhất vì cũng truy vấn tại chỗ, nhưng nó KHÔNG hỗ trợ row-level và column-level security, và đòi người dùng có quyền trên bucket — đúng hai điều đề loại bỏ.

  • A (bảng quản lý của BigQuery) — đòi NẠP dữ liệu vào BigQuery, trái yêu cầu "truy vấn tại chỗ".

  • C (BigQuery Data Transfer Service) — sao chép dữ liệu theo lịch, không phải cơ chế truy vấn tại chỗ.

Ghi nhớ

⚠ Bốn loại bảng của BigQuery — bảng phải thuộc: | Loại | Dữ liệu ở đâu | Bảo mật chi tiết | |---|---|---| | Managed table | trong BigQuery | đầy đủ | | BigLake table | trong GCS/S3/Azure | ĐẦY ĐỦ | | External table thường | trong GCS | KHÔNG có | | Object table | tệp phi cấu trúc trong GCS | có, qua connection | | Hiệu năng | managed > BigLake > external |

Từ khoá nhận diện:

"data lake + row/column-level security + IAM của BigQuery" → BigLake "truy vấn tại chỗ, không cần bảo mật chi tiết" → external table "hiệu năng tốt nhất" → nạp vào bảng quản lý "ảnh, video trong GCS" → object table "cần quyền trên bucket" → dấu hiệu của external table thường

BigLake — lợi ích đầy đủ Lợi ích
Column-level security policy tag như bảng thường
Row-level security row access policy
Dynamic data masking che giá trị
Không cần quyền trên bucket connection đọc thay
Metadata caching tăng tốc đáng kể
Đọc được nhiều đám mây S3, Azure Blob
Chia sẻ với engine khác Spark, Trino qua BigLake connector
Connection — thành phần then chốt Nội dung
Bản chất service account do BigQuery quản lý
Quyền cần cấp roles/storage.objectViewer trên bucket cho SA đó
Người dùng cuối chỉ cần quyền trên BẢNG BigLake
Lợi ích tách quyền DỮ LIỆU khỏi quyền HẠ TẦNG
Tạo bằng bq mk --connection --connection_type=CLOUD_RESOURCE
Vì sao "một cửa duy nhất" lại quan trọng Lý do
Một chỗ áp chính sách không phải đồng bộ hai hệ thống quyền
Một dòng audit log biết ai đọc gì
Không ai đọc thẳng tệp bỏ qua mọi kiểm soát của BigQuery
Dễ chứng minh với kiểm toán
Với external table thường phải quản lý quyền ở CẢ HAI nơi
Kiến trúc data lake có quản trị Thành phần
Cloud Storage lưu tệp (Parquet là tốt nhất)
BigLake table cửa vào có kiểm soát
Dataplex quản trị, phát hiện, chất lượng
Policy tag phân loại mức nhạy cảm
Sensitive Data Protection tìm PII để biết cột nào cần tag
Analytics Hub chia sẻ ra ngoài

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Bảng có phải BigLake không | bq show --format=prettyjson → có connectionId | | Cột nào mang policy tag | bq show --schema --format=prettyjson | | Người dùng có đọc được bucket không | không nên — kiểm tra IAM của bucket |

Và một bước cần làm để BigLake thật sự phát huy tác dụng: gỡ quyền trực tiếp trên bucket của người dùng cuối. Nếu họ vẫn có storage.objectViewer trên bucket gốc, mọi chính sách row-level và column-level đều bị bỏ qua chỉ bằng cách đọc thẳng tệp — và bảng BigLake khi đó chỉ là một lớp trang trí.

Câu 160 Data Management

A company has decided on a new, standardized definition for calculating "Customer Lifetime Value". The business requires this new metric to be a permanent, governed field that is available to all Looker users for their analyses, ensuring everyone uses the exact same logic.

How must this new field be created?

  1. A By pre-calculating the value in BigQuery and creating a new table.
  2. B As a Custom Field shared with all users.
  3. C As a Table Calculation saved to a dashboard.
  4. D By having a Looker Developer add it to the project's LookML (Looker Modeling Language).
Xem giải thích

Đáp án

D — Nhờ một Looker Developer thêm trường đó vào LookML của dự án.

Vì sao đúng

Đề nêu ba yêu cầu: chỉ số phải VĨNH VIỄN, ĐƯỢC QUẢN TRỊ, và mọi người dùng đều dùng ĐÚNG một logic. Chỉ LookML — lớp mô hình tập trung — cho cả ba.

⚠ Điểm mấu chốt — ba nơi định nghĩa phép tính trong Looker:

LOOKML MEASURE                    ← đề này
    → do DEVELOPER viết
    → lưu trong GIT, có review
    → dùng cho TOÀN BỘ tổ chức
    → VĨNH VIỄN và ĐƯỢC QUẢN TRỊ

CUSTOM FIELD
    → do NGƯỜI DÙNG tạo trong Explore
    → tính TRONG CSDL (đẩy vào SQL)
    → tạm thời, thuộc về một Look

TABLE CALCULATION
    → do NGƯỜI DÙNG tạo
    → tính TRÊN KẾT QUẢ đã trả về
    → không đẩy xuống CSDL

⚠ Định nghĩa trong LookML:

measure: customer_lifetime_value {
  type: number
  sql: SUM(${orders.amount}) /
       NULLIF(COUNT(DISTINCT ${users.id}), 0) ;;
  value_format_name: usd
  description: "CLV = tổng doanh thu / số khách duy nhất"
}
        ↓
    ⚠ Mọi dashboard, mọi Look, mọi người
      đều lấy TỪ ĐÂY
    → không còn hai con số CLV khác nhau

⚠ Vì sao đây là "được quản trị":

LookML lưu trong GIT
        ↓
    - Đổi định nghĩa phải qua PULL REQUEST
    - Có người review
    - Có lịch sử thay đổi
    - Quay lui được
    - Có môi trường dev tách production
        ↓
    ⚠ Custom Field và Table Calculation
      KHÔNG có gì trong số này

Xem thêm câu #13073 và #13079 (cùng lô): khoá lần lượt là Custom Field và Table Calculation — hai nơi còn lại. Ba câu, ba khoá, phân biệt bằng AI TẠO và TÍNH Ở ĐÂU — hoàn toàn nhất quán. Và #12946, #12976 (lô 134) về vai trò của LookML trong quản trị.

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

  • B (Custom Field chia sẻ cho mọi người) — đây là phương án gần nhất và cũng chia sẻ được, nhưng Custom Field thuộc về một Explore/Look cụ thể, không được quản lý phiên bản, và ai cũng sửa được — không đáp ứng "vĩnh viễn và được quản trị".

  • C (Table Calculation lưu vào dashboard) — chỉ tính trên kết quả của một truy vấn, gắn với một dashboard, không tái sử dụng được ở nơi khác.

  • A (tính sẵn trong BigQuery và tạo bảng mới) — có thể chạy được, nhưng chỉ số không xuất hiện như một trường Looker dùng chung; và mỗi lần đổi logic lại phải dựng lại bảng.

Ghi nhớ

⚠ Ba nơi tính toán trong Looker — bảng phải thuộc: | Nơi | Ai tạo | Tính ở đâu | Phạm vi | |---|---|---|---| | LookML measure/dimension | Developer | trong CSDL | toàn tổ chức, có Git | | Custom Field | người dùng | trong CSDL | một Explore/Look | | Table Calculation | người dùng | trên KẾT QUẢ đã trả về | một Look/dashboard |

Từ khoá nhận diện:

"chỉ số chính thức, dùng chung, được quản trị" → LookML "người dùng tự tạo trường, tính trong CSDL" → Custom Field "tính trên kết quả đã có, ví dụ phần trăm tổng" → Table Calculation "cần quản lý phiên bản và review" → LookML "nhanh, tạm thời, cho một báo cáo" → Custom Field hoặc Table Calculation

Vì sao "một định nghĩa duy nhất" lại quan trọng Lý do
Số khác nhau → tranh cãi thay vì quyết định
Kiểm toán và báo cáo tài chính cần định nghĩa nhất quán
Người mới vào không phải hỏi "CLV tính thế nào"
Đổi định nghĩa sửa MỘT chỗ, mọi báo cáo cập nhật
Cái giá cần đội duy trì LookML
Các thành phần LookML liên quan Thành phần
measure chỉ số tổng hợp — nơi định nghĩa CLV
dimension thuộc tính để cắt lớp
value_format_name định dạng hiển thị
description hiện trên giao diện — rất nên viết
label tên hiển thị thân thiện
hidden: yes ẩn trường trung gian
Vòng đời một thay đổi LookML Bước
1 Sửa trong development mode
2 LookML Validator kiểm cú pháp
3 Content Validator — nội dung nào bị hỏng
4 Pull request, đồng nghiệp review
5 Deploy to production
Lợi ích không ai đổi định nghĩa chỉ số một mình
Khi nào Custom Field là đủ Trường hợp
Phân tích một lần không cần vĩnh viễn
Thử nghiệm trước khi đưa vào LookML rất hữu ích
Chỉ một người dùng cần
Khi nào phải lên LookML nhiều người dùng, cần nhất quán, cần kiểm toán
Mẫu tốt thử bằng Custom Field, chốt thì đưa vào LookML

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Chỉ số định nghĩa ở đâu | tìm measure trong kho LookML | | Ai đổi gần đây | lịch sử Git của dự án | | Có ai dùng Custom Field trùng lặp không | rà soát các Look có custom field |

Và một quy trình đáng thiết lập khi tổ chức đã có LookML: Custom Field là nơi THỬ NGHIỆM, LookML là nơi CHỐT. Nhà phân tích tự do thử công thức mới trong Explore, nhưng khi một chỉ số trở thành số liệu chính thức, nó phải đi qua pull request — và đó chính là ranh giới giữa linh hoạt và nhất quán.