Sao Lưu Dữ Liệu Nhanh Chóng, Dễ Dàng Với Chi Phí Hợp Lý Nhờ Bigquery Table Snapshots

 

Là con người ai chả mắc sai lầm. Ra ngoài khóa cửa nhưng lại bỏ quên chìa khóa trong nhà. Nhấn gửi email nhưng lại quên file đính kèm. Đây đều là những sai lầm ai cũng ít nhất vài lần mắc phải, may mắn là những lỗi lầm này không gây ảnh hưởng nghiêm trọng đến cuộc sống. Tuy nhiên, nếu sai lầm xảy ra với kho dữ liệu, chẳng hạn như vô tình xóa hoặc sửa dữ liệu, dù chỉ là một sai lầm nhỏ thôi, cũng có thể ảnh hưởng nghiêm trọng đến kết quả kinh doanh của cả công ty.

Tính năng BigQuery time travel (du hành thời gian) được tự động bật cho tất cả các tệp dữ liệu, cho phép người dùng nhanh chóng truy cập vào trạng thái của bảng tại bất kỳ thời điểm nào trong vòng 7 ngày qua. Tuy nhiên, việc khôi phục bảng bằng cách sử dụng tính năng này có thể khá phức tạp vì người dùng cần theo dõi thời gian “last known good” (thời gian tốt nhất cuối cùng được biết). Ngoài ra, người dùng có thể muốn duy trì trạng thái dữ liệu ngoài thời hạn 7 ngày, chẳng hạn như đối với các yêu cầu kiểm tra hoặc tuân thủ quy định. Đây là lúc tính năng BigQuery table snapshots (chụp nhanh bảng BigQuery) phát huy tác dụng.

BigQuery table snapshots có sẵn thông qua BigQuery API, SQL, giao diện dòng lệnh hoặc Google Cloud Console. Hãy xem một ví dụ nhanh trong Cloud Console.

Trước tiên, chúng ta sẽ tạo một bảng và tập dữ liệu mới để kiểm tra chức năng BigQuery table snapshots.

 

Tiếp theo, mở trang thuộc tính (properties page) cho bảng mới tạo bằng cách chọn trong ngăn Explorer. Bảng nguồn cho một ảnh chụp nhanh (snapshot) được gọi là bảng cơ sở (base table):

 

Mặc dù có thể sử dụng SQL hoặc công cụ dòng lệnh BigQuery để tạo ảnh chụp nhanh, nhưng đối với ví dụ này, chúng ta sẽ tạo ảnh chụp nhanh của một inventory table bằng cách sử dụng nút Ảnh chụp nhanh trong thanh công cụ Cloud Console.

BigQuery đã giới thiệu IAM permission (bigquery.tables.createSnapshot) cần thiết cho base table ngoài quyền bigquery.tables.get và bigquery.tables.getData hiện có. IAM permission đã được thêm vào các vai trò bigQuery.dataViewer và bigQuery.dataEditor, nhưng sẽ cần được thêm vào các vai trò tùy chỉnh khác.

 

Table snapshots được xử lý giống như các bảng thông thường, ngoại trừ việc người dùng không thể thực hiện bất kỳ sửa đổi nào (dữ liệu hoặc giản đồ). Nếu tạo snapshots trong cùng một tập dữ liệu với bảng cơ sở, người dùng sẽ cần đặt cho snapshots đó một cái tên duy nhất hoặc sử dụng tên được đề xuất gắn với thời gian vào cuối tên bảng.

Nếu muốn sử dụng tên bảng gốc làm tên của snapshot, ngưởi dùng sẽ cần tạo trong một tập dữ liệu mới để không có xung đột khi đặt tên. Ví dụ: Người dùng có thể viết tập lệnh để tạo tập dữ liệu mới và tạo snapshot của tất cả các bảng từ tập dữ liệu nguồn, giữ nguyên tên ban đầu của chúng. Lưu ý rằng khi tạo một ảnh chụp nhanh trong một tập dữ liệu khác, snapshot sẽ kế thừa cấu hình bảo mật của tập dữ liệu đích chứ không phải tập dữ liệu nguồn.

Người dùng có thể tùy chọn nhập một giá trị vào trường Expiration time và để BigQuery tự động xóa snapshot tại thời điểm đó. Người dùng cũng có thể tùy chọn chỉ định một giá trị trong trường Snapshot time để tạo snapshot từ phiên bản lịch sử của bảng cơ sở trong cửa sổ time travel . Ví dụ: Người dùng có thể tạo snapshot từ trạng thái của base table kể từ 3 giờ trước.

Ví dụ, chúng ta sử dụng snapshot của name inventory. Một vài giây sau khi nhấp vào Lưu, snapshot sẽ được tạo và xuất hiện trong danh sách các bảng trong ngăn Explorer với một biểu tượng khác.

 

SQL tương đương cho thao tác này sẽ là:

 

Bây giờ hãy xem trang thuộc tính để biết snapshot của bảng mới trong Cloud Console.

Ngoài thông tin chung về snapshot, người dùng sẽ thấy thông tin về base table được sử dụng để tạo snapshot, cũng như ngày và giờ tạo, ngay cả khi base table bị xóa. Mặc dù kích thước snapshot hiển thị như kích thước của bảng đầy đủ, nhưng người dùng sẽ chỉ được lập hóa đơn (theo giá BigQuery chuẩn) cho sự khác biệt về kích thước giữa dữ liệu được duy trì trong ảnh chụp nhanh và dữ liệu hiện được duy trì trong snapshot. Nếu không có dữ liệu nào bị xóa hoặc thay đổi trong base table, người dùng sẽ không phải trả thêm phí cho snapshot.

Vì snapshot ở chế độ read-only (chỉ đọc), nếu người dùng cố gắng sửa đổi dữ liệu snapshot qua DML hoặc thay đổi lược đồ của snapshot qua DDL thì sẽ gặp lỗi. Tuy nhiên, người dùng có thể thay đổi một số thuộc tính của snapshot như mô tả, thời gian hết hạn hoặc labels. Người dùng cũng có thể sử dụng các điều khiển truy cập bảng để thay đổi ai có quyền truy cập vào snapshot, giống như bất kỳ bảng nào khác.

Giả sử chúng ta đã vô tình xóa một số dữ liệu khỏi base tableở. Người dùng có thể mô phỏng điều này bằng cách chạy các lệnh sau trong không gian làm việc SQL.

 

Có thể thấy rằng base table bây giờ chỉ có 6 hàng, trong khi số hàng và kích thước của snapshot không thay đổi. Nếu cần truy cập vào dữ liệu đã xóa, người dùng có thể truy vấn trực tiếp snapshot. Ví dụ, truy vấn sau sẽ cho thấy rằng ảnh chụp nhanh vẫn có 7 hàng:

 

Tuy nhiên, nếu muốn cập nhật dữ liệu dưới dạng snapshot, người dùng sẽ cần khôi phục dữ liệu đó vào một bảng có thể ghi. Để thực hiện việc này, nhấp vào nút Khôi phục trong Cloud Console.

 

Theo mặc định, snapshot sẽ được khôi phục vào một bảng mới. Tuy nhiên, nếu muốn thay thế một bảng hiện có, người dùng có thể sử dụng tên bảng hiện có và chọn hộp Overwrite nếu tồn tại.

Thao tác này cũng có thể được thực hiện với BigQuery API, SQL hoặc CLI. SQL tương đương cho thao tác này sẽ là: