Hãy dùng VIEW trong BigQuery ( SQL )

Hãy dùng VIEW trong BigQuery ( SQL )
Bạn nên dùng VIEW

VIEW là một tính năng rất hữu ích trong SQL nói chung. Trong bài viết này mình sẽ chỉ ra các ưu điểm, lí do vì sao bạn nên dùng VIEW trong BigQuery nhiều hơn. Nhưng trước tiên chúng ta hãy khám phá View là gì và cách tạo View trong BigQuery đã nhé.

View là gì?

Ẩn đằng sau view là một câu queyr nằm giữa

View là đoạn mã SQL đã được viết sẵn và được abstract away ( trừu tượng hóa ) bằng cách lưu ẩn dưới dạng 1 table. Chúng ta xét ví dụ có một view như sau.

dataset_a.view_a:

SELECT birthday,name FROM dataset_a.user_data

Lúc này view_a sẽ được lưu dưới dạng 1 table trong dataset_a với query “ẩn” như trên.

Sau khi đã có view chúng ta thực hiện query view_a như bên dưới

SELECT * FROM dataset_a.view_a

Thì bạn sẽ có kết quả tương tự khi bạn query 1 table có 2 cột birthday và name. Query trên hoàn toàn tương đương với.

SELECT * FROM ( SELECT birthday,name FROM dataset_a.user_data )

Như vậy bạn không cần lồng các query vào nhau mà vẫn có thể dùng một query đã dựng sẵn từ trước.

Cách tạo view trong BigQuery

Thông qua BigQuery Console (UI)

Tạo view trong BigQuery Console không hề phức tạp, để tạo view bạn chỉ cần để ý ở giao diện query của BigQuery. Việc đầu tiên bạn cần làm là viết 1 câu query không bị lỗi và nó có thể chạy được.

Giao diện của BigQuery

Sau khi query đã thành công, hãy nhấn vào nút expand của save ( dấu trỏ xuống ) để xem các lựa chọn tương tự như phía dưới.

Save view

Hãy chọn save view để save lại view này, sau đó chọn dataset bạn muốn view được save vào tương ứng như ví dụ phía trên.

Điền các thông tin tương ứng được yêu cầu

Như vậy là bạn đã có thể tạo view thành công rồi đấy.

Tạo view bằng câu lệnh SQL

Ngoài tạo view bằng UI rất trực quan, bạn còn có thể tạo view bằng câu lệnh SQL. Bạn có thể tham khảo ví dụ sau.

CREATE VIEW mydataset.usa_male_names(name, number) AS (
  SELECT
    name,
    number
  FROM
    bigquery-public-data.usa_names.usa_1910_current
  WHERE
    gender = 'M'
  ORDER BY
    number DESC
);

Trong ví dụ trên một view tên là mydataset.usa_male_names đã được khởi tạo với 2 cột name và number, nội dung query tạo view được thêm vào sau AS.

Thế tại sao lại dùng view

Tại sao không … viết 1 query trực tiếp mà phải dùng view chi cho cực, hay là chúng ta có thể dùng 1 schedule query để tạo ra 1 table mới mong muốn mỗi ngày kia mà? Sau đây mình xin nêu một số lí do.

Các lí do chung

  • Bảo mật dễ dàng: Nếu có 1 người dùng cần query dữ liệu nhưng bạn sợ lộ dữ liệu nhạy cảm ở table gốc, bạn có thể sử dụng view để cắt bớt số cột và dữ liệu đi để người dùng vẫn có thể query mà không “va phải” dữ liệu nhạy cảm
  • Tính đơn giản: Không phải lúc nào viết lại câu query dài cũng là ý hay
  • Thay đổi tên cột và thay đổi dữ liệu: Đôi lúc chỉ cần 1 chút thay đổi về tên, hoặc dữ liệu ở 1 số dòng sẽ làm dữ liệu dễ đọc hơn, không nhất thiết phải tạo ra 1 bảng mới

Các lí do riêng dành cho BigQuery

  • BigQuery rất mạnh: BigQuery có khả năng scale rất tốt và có performance chỉ tính bằng giây cho hầu hết dữ liệu không quá lớn, không có lí do gì bạn phải chạy daily schedule hay ETL cho một query không dùng quá nhiều ( chỉ query 1 vài lần trong ngày )
  • View có thể xem được dữ liệu real-time: Nếu bạn sử dụng schedule query hoặc materialized view bạn luôn phải xem 1 snapshot ( lát cắt ) của dữ liệu tại 1 thời điểm trong quá khứ. Khi bạn sử dụng view bạn có thể dùng được tính năng stream ingest của BigQuery.
  • Giảm thiểu chi phí: giả sử bạn có 1 query phức tạp nhưng ít dùng, thì việc chạy schedule hàng ngày chỉ để tăng thêm chi phí cố định. Thay vào đó hãy dùng view, để chỉ khi nào cần mới lấy ra xem, chi phí sẽ rẻ hơn rất nhiều.

Kết

Mong là sau bài viết này các bạn nắm rõ hơn VIEW là gì và tại sao nên dùng view, để công việc có thể hiệu quả và nhẹ nhàng hơn, đặc biệt là cho các bạn analyst. Cảm ơn các bạn đã đón đọc.

Support Tuan | Analytic

Trả lời