Quay lại bộ đề
Question #8 Topic 1
You have spent a few days loading data from comma-separated values (CSV) files into the Google BigQuery table CLICK_STREAM. The column DT stores the epoch time of click events. For convenience, you chose a simple schema where every field is treated as the STRING type. Now, you want to compute web session durations of users who visit your site, and you want to change its data type to the TIMESTAMP. You want to minimize the migration effort without making future queries computationally expensive. What should you do?
Bạn đã dành vài ngày để tải dữ liệu từ các tệp giá trị phân tách bằng dấu phẩy (CSV) vào bảng Google BigQuery có tên là CLICK_STREAM. Cột DT lưu trữ thời gian epoch của các sự kiện nhấp chuột. Để thuận tiện, bạn chọn một lược đồ đơn giản trong đó mọi trường đều được coi là kiểu STRING. Bây giờ, bạn muốn tính toán thời lượng phiên web của những người dùng truy cập trang web của bạn và bạn muốn thay đổi kiểu dữ liệu của cột đó thành TIMESTAMP. Bạn muốn giảm thiểu nỗ lực di chuyển dữ liệu mà không làm cho các truy vấn trong tương lai trở nên tốn kém về mặt tính toán. Bạn nên làm gì?
A
Delete the table CLICK_STREAM, and then re-create it such that the column DT is of the TIMESTAMP type. Reload the data.
Xóa bảng CLICK_STREAM, sau đó tạo lại bảng sao cho cột DT có kiểu TIMESTAMP. Tải lại dữ liệu.
B
Add a column TS of the TIMESTAMP type to the table CLICK_STREAM, and populate the numeric values from the column TS for each row. Reference the column TS instead of the column DT from now on.
Thêm một cột TS kiểu TIMESTAMP vào bảng CLICK_STREAM và điền các giá trị số từ cột DT cho mỗi hàng. Tham chiếu đến cột TS thay vì cột DT từ nay về sau.
C
Create a view CLICK_STREAM_V, where strings from the column DT are cast into TIMESTAMP values. Reference the view CLICK_STREAM_V instead of the table CLICK_STREAM from now on.
Tạo một view CLICK_STREAM_V, trong đó các chuỗi từ cột DT được ép sang giá trị TIMESTAMP. Tham chiếu đến view CLICK_STREAM_V thay vì bảng CLICK_STREAM từ nay về sau.
D
Add two columns to the table CLICK STREAM: TS of the TIMESTAMP type and IS_NEW of the BOOLEAN type. Reload all data in append mode. For each appended row, set the value of IS_NEW to true. For future queries, reference the column TS instead of the column DT, with the WHERE clause ensuring that the value of IS_NEW must be true.
Thêm hai cột vào bảng CLICK_STREAM: TS kiểu TIMESTAMP và IS_NEW kiểu BOOLEAN. Tải lại tất cả dữ liệu ở chế độ chèn thêm (append mode). Đối với mỗi hàng được chèn thêm, đặt giá trị của IS_NEW thành true. Đối với các truy vấn trong tương lai, hãy tham chiếu cột TS thay vì cột DT, với điều kiện WHERE đảm bảo giá trị của IS_NEW phải là true.
E
Construct a query to return every row of the table CLICK_STREAM, while using the built-in function to cast strings from the column DT into TIMESTAMP values. Run the query into a destination table NEW_CLICK_STREAM, in which the column TS is the TIMESTAMP type. Reference the table NEW_CLICK_STREAM instead of the table CLICK_STREAM from now on. In the future, new data is loaded into the table NEW_CLICK_STREAM.
Xây dựng một truy vấn để trả về mọi hàng của bảng CLICK_STREAM, đồng thời sử dụng hàm tích hợp để ép các chuỗi từ cột DT thành các giá trị TIMESTAMP. Chạy truy vấn này và lưu vào bảng đích NEW_CLICK_STREAM, trong đó cột TS có kiểu TIMESTAMP. Tham chiếu bảng NEW_CLICK_STREAM thay vì bảng CLICK_STREAM từ nay về sau. Trong tương lai, dữ liệu mới sẽ được tải vào bảng NEW_CLICK_STREAM.
Giải thích & Tài liệu tham khảo
Để giải quyết bài toán chuyển đổi kiểu dữ liệu cột trong BigQuery hiệu quả nhất về mặt chi phí và công sức:
- Phương án E là tối ưu nhất: Việc viết một truy vấn sử dụng hàm ép kiểu
CAST(DT AS TIMESTAMP)cho tất cả các hàng hiện tại và lưu kết quả vào một bảng đích mới (NEW_CLICK_STREAM) là phương pháp tiêu chuẩn trong BigQuery. Điều này chỉ tốn chi phí thực hiện truy vấn một lần duy nhất. Bảng mới sẽ lưu trữ giá trị dưới dạngTIMESTAMPthực tế, giúp các truy vấn phân tích thời lượng phiên web sau này diễn ra nhanh chóng và tiết kiệm chi phí tính toán (vì không phải ép kiểu thời gian chạy). - Tại sao các phương án khác không tốt:
- A: Việc xóa và tải lại dữ liệu từ các file CSV gốc tốn rất nhiều công sức di chuyển và thời gian tải lại dữ liệu lớn.
- B, D: Cập nhật (UPDATE) dữ liệu cho từng hàng trên bảng BigQuery hiện tại cực kỳ tốn kém và hiệu suất kém đối với các bảng lớn.
- C (Dùng View): Sử dụng view để ép kiểu sẽ khiến BigQuery phải thực hiện việc chuyển đổi
STRINGsangTIMESTAMPtrên mọi hàng mỗi khi view được truy vấn, làm cho các truy vấn trong tương lai trở nên cực kỳ đắt đỏ.
(Đáp án được gợi ý bởi AI)