Quay lại bộ đề
Question #187 Topic 1
You are creating a data model in BigQuery that will hold retail transaction data. Your two largest tables, sales_transaction_header and sales_transaction_line, have a tightly coupled immutable relationship. These tables are rarely modified after load and are frequently joined when queried. You need to model the sales_transaction_header and sales_transaction_line tables to improve the performance of data analytics queries. What should you do?
Bạn đang tạo một mô hình dữ liệu trong BigQuery để lưu giữ dữ liệu giao dịch bán lẻ. Hai bảng lớn nhất của bạn, `sales_transaction_header` và `sales_transaction_line`, có mối quan hệ chặt chẽ bất biến với nhau. Các bảng này hiếm khi bị sửa đổi sau khi tải và thường xuyên được join (kết hợp) với nhau khi truy vấn. Bạn cần thiết kế mô hình cho hai bảng này để cải thiện hiệu suất của các truy vấn phân tích dữ liệu. Bạn nên làm gì?
A
Create a sales_transaction table that holds the sales_transaction_header information as rows and the sales_transaction_line rows as nested and repeated fields.
Tạo một bảng sales_transaction duy nhất chứa thông tin sales_transaction_header dưới dạng các hàng và các hàng sales_transaction_line dưới dạng các trường lồng nhau và lặp lại (nested and repeated fields).
B
Create a sales_transaction table that holds the sales_transaction_header and sales_transaction_line information as rows, duplicating the sales_transaction_header data for each line.
Tạo một bảng sales_transaction duy nhất chứa thông tin của cả sales_transaction_header và sales_transaction_line dưới dạng các hàng, sao chép dữ liệu của sales_transaction_header cho mỗi dòng giao dịch.
C
Create a sales_transaction table that stores the sales_transaction_header and sales_transaction_line data as a JSON data type.
Tạo một bảng sales_transaction lưu trữ dữ liệu sales_transaction_header và sales_transaction_line dưới dạng kiểu dữ liệu JSON.
D
Create separate sales_transaction_header and sales_transaction_line tables and, when querying, specify the sales_transaction_line first in the WHERE clause.
Tạo các bảng sales_transaction_header và sales_transaction_line riêng biệt và khi truy vấn, chỉ định sales_transaction_line trước tiên trong mệnh đề WHERE.
Giải thích & Tài liệu tham khảo
Trong các hệ thống cơ sở dữ liệu phân tích hiện đại như BigQuery, việc khử chuẩn hóa (denormalization) dữ liệu là một phương pháp tốt nhất để tối ưu hiệu suất truy vấn, đặc biệt là loại bỏ các phép JOIN tốn kém giữa hai bảng lớn có mối quan hệ cha-con (một-nhiều) chặt chẽ.
- A. Tạo một bảng sales_transaction duy nhất chứa thông tin... dưới dạng các trường lồng nhau và lặp lại (nested and repeated fields). Đây là phương pháp thiết kế mô hình dữ liệu chuẩn của BigQuery sử dụng
RECORDvới chế độREPEATED(mảng đối tượng). Cách tiếp cận này cho phép lưu trữ thông tin của các dòng hóa đơn (sales_transaction_line) ngay bên trong hóa đơn đó (sales_transaction_header) mà không làm lặp lại dư thừa dữ liệu ở mức vật lý, tăng tốc độ truy vấn đáng kể vì loại bỏ hoàn toàn nhu cầu JOIN giữa 2 bảng. - B. Nhân bản dữ liệu (flat denormalization) cũng giúp loại bỏ JOIN nhưng làm tăng đáng kể kích thước lưu trữ và chi phí quét dữ liệu của BigQuery do lặp lại dữ liệu header trên mỗi dòng chi tiết.
- C. Sử dụng kiểu dữ liệu JSON làm giảm hiệu năng phân tích do BigQuery phải phân tích cú pháp chuỗi JSON trong quá trình chạy truy vấn (mặc dù có tối ưu lưu trữ nhưng không mạnh mẽ bằng nested & repeated fields của schema tĩnh).
- D. Giữ riêng hai bảng và tối ưu mệnh đề WHERE không loại bỏ được thao tác JOIN vật lý tốn kém giữa hai bảng khổng lồ.
(Đáp án được gợi ý bởi AI)