1. Giới thiệu
BigQuery là một kho dữ liệu doanh nghiệp có quy mô petabyte và chi phí thấp được quản lý hoàn toàn dành cho hoạt động phân tích. BigQuery không máy chủ. Bạn không cần thiết lập và quản lý cụm.
Tập dữ liệu BigQuery nằm trong một dự án GCP và chứa một hoặc nhiều bảng. Bạn có thể truy vấn các tập dữ liệu này bằng SQL.
Trong lớp học lập trình này, bạn sẽ sử dụng giao diện người dùng web của BigQuery trong Bảng điều khiển GCP để tìm hiểu về cách phân chia và phân cụm trong BigQuery. Tính năng phân vùng và phân cụm bảng của BigQuery giúp định cấu trúc dữ liệu của bạn để phù hợp với các mẫu truy cập dữ liệu phổ biến. Phân vùng và phân cụm là chìa khoá để tối đa hoá hoàn toàn hiệu suất và chi phí của BigQuery khi truy vấn trên một phạm vi dữ liệu cụ thể. Điều này dẫn đến việc mỗi truy vấn quét ít dữ liệu hơn và việc cắt giảm được xác định trước thời gian bắt đầu truy vấn.
Để biết thêm thông tin về BigQuery, hãy xem tài liệu về BigQuery.
Kiến thức bạn sẽ học được
- Cách tạo và truy vấn các bảng được phân vùng và phân cụm
- So sánh hiệu suất truy vấn với các bảng được phân vùng và phân cụm
Bạn cần có
Để hoàn tất phòng thí nghiệm này, bạn cần:
- Phiên bản mới nhất của Google Chrome
- Tài khoản thanh toán Google Cloud Platform
2. Thiết lập
Để làm việc với BigQuery, bạn cần tạo một dự án GCP hoặc chọn một dự án hiện có.
Tạo một dự án
Để tạo dự án mới, hãy làm theo các bước sau:
- Nếu bạn chưa có Tài khoản Google (Gmail hoặc Google Apps), hãy tạo một tài khoản.
- Đăng nhập vào bảng điều khiển Google Cloud Platform ( console.cloud.google.com) và tạo một dự án mới.
- Nếu bạn chưa có dự án nào, hãy nhấp vào nút tạo dự án:
Nếu không, hãy tạo một dự án mới trong trình đơn chọn dự án:
- Nhập tên dự án rồi chọn Create (Tạo). Xin lưu ý rằng mã dự án là tên duy nhất của tất cả dự án trên Google Cloud.
3. Xử lý các tập dữ liệu công khai
BigQuery cho phép bạn làm việc với các tập dữ liệu công khai, bao gồm cả các tập dữ liệu của BBC News, GitHub repos, Stack Overflow và các tập dữ liệu của Cơ quan Quản lý Đại dương và Khí quyển Quốc gia Hoa Kỳ (NOAA). Bạn không cần tải các tập dữ liệu này vào BigQuery. Bạn chỉ cần mở các tập dữ liệu này để duyệt xem và truy vấn các tập dữ liệu đó trong BigQuery. Trong lớp học lập trình này, bạn sẽ làm việc với tập dữ liệu công khai của Stack Overflow.
Duyệt qua tập dữ liệu Stack Overflow
Tập dữ liệu Stack Overflow chứa thông tin về bài đăng, thẻ, huy hiệu, nhận xét, người dùng và nhiều thông tin khác. Để duyệt qua tập dữ liệu Stack Overflow trong giao diện người dùng web BigQuery, hãy làm theo các bước sau:
- Mở tập dữ liệu Stack Overflow. Giao diện người dùng web của BigQuery sẽ mở ra trong Bảng điều khiển của GCP và hiển thị thông tin về tập dữ liệu Stackoverflow.
- Trong bảng điều hướng , hãy chọn bigquery-public-data. Trình đơn này sẽ mở rộng để liệt kê các tập dữ liệu công khai. Mỗi tập dữ liệu bao gồm một hoặc nhiều bảng.
- Di chuyển xuống rồi chọn stackoverflow. Trình đơn sẽ mở rộng để liệt kê các bảng trong tập dữ liệu Stack Overflow.
- Chọn huy hiệu để xem giản đồ cho bảng huy hiệu. Lưu ý tên của các trường trong bảng.
- Phía trên Tên trường, hãy nhấp vào Xem trước để xem dữ liệu mẫu cho bảng huy hiệu.
Để biết thêm thông tin về tất cả các tập dữ liệu công khai có trong BigQuery, hãy xem Tập dữ liệu công khai của Google BigQuery.
Truy vấn tập dữ liệu Stackoverflow
Duyệt qua tập dữ liệu là một cách hiệu quả để hiểu dữ liệu bạn đang xử lý, nhưng truy vấn tập dữ liệu là điểm mạnh của BigQuery. Phần này hướng dẫn bạn cách chạy truy vấn BigQuery. Bạn không cần phải biết bất kỳ SQL nào vào thời điểm này. Bạn có thể sao chép và dán các truy vấn bên dưới.
Để chạy truy vấn, hãy hoàn tất các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau. BigQuery xác thực truy vấn và giao diện người dùng web hiển thị dấu kiểm màu xanh lục bên dưới vùng văn bản để cho biết rằng cú pháp hợp lệ.
SELECT EXTRACT(YEAR FROM creation_date) AS creation_year, COUNT(*) AS total_posts FROM `bigquery-public-data.stackoverflow.posts_questions` GROUP BY creation_year ORDER BY total_posts DESC LIMIT 10
- Chọn Run (Chạy). Truy vấn này trả về số lượng bài đăng hoặc câu hỏi trên Stack Overflow được đăng mỗi năm.
4. Tạo bảng mới
Trong phần trước, bạn đã truy vấn các tập dữ liệu công khai mà BigQuery cung cấp cho bạn. Trong phần này, bạn sẽ tạo một bảng mới trong BigQuery từ một bảng hiện có. Bạn sẽ tạo một bảng mới với dữ liệu được lấy mẫu từ bảng posts_questions
của tập dữ liệu công khai của Stack Overflow, sau đó truy vấn bảng.
Tạo tập dữ liệu mới
Để tạo và tải dữ liệu bảng vào BigQuery, trước tiên hãy tạo một tập dữ liệu BigQuery để lưu giữ dữ liệu bằng cách hoàn thành các bước sau:
- Trong bảng điều hướng trên bảng điều khiển của GCP, hãy chọn tên dự án đã tạo trong quá trình thiết lập.
- Ở phía bên phải, trong bảng chi tiết, hãy chọn Tạo tập dữ liệu.
- Trong hộp thoại Tạo tập dữ liệu, đối với Mã tập dữ liệu, hãy nhập
stackoverflow
. Giữ nguyên tất cả các chế độ cài đặt mặc định khác, rồi nhấp vào OK.
Tạo bảng mới bằng bài đăng StackOverflow năm 2018
Bây giờ, bạn đã tạo tập dữ liệu BigQuery, bạn có thể tạo bảng mới trong BigQuery. Để tạo bảng có dữ liệu từ một bảng hiện có, bạn sẽ truy vấn tập dữ liệu bài đăng Stack Overflow 2018 và ghi kết quả vào bảng mới bằng cách hoàn tất các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau để tạo một bảng mới, là câu lệnh DDL.
CREATE OR REPLACE TABLE `stackoverflow.questions_2018` AS SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags FROM `bigquery-public-data.stackoverflow.posts_questions` WHERE creation_date BETWEEN '2018-01-01' AND '2019-01-01';
- Chọn Run (Chạy). Truy vấn này sẽ tạo một bảng mới
questions_2018
trong tập dữ liệustackoverflow
trong dự án của bạn với dữ liệu kết quả từ việc chạy truy vấn trên tập dữ liệu BigQuery Stack Overflowbigquery-public-data.stackoverflow.posts_questions
.
Truy vấn bảng mới bằng các bài đăng Stack Overflow năm 2018
Bây giờ bạn đã tạo bảng BigQuery, hãy chạy truy vấn để trả về các bài đăng trên Stack Overflow cùng với câu hỏi và tiêu đề cùng với một vài số liệu thống kê khác như số lượng câu trả lời, nhận xét, lượt xem và mục yêu thích. Hãy hoàn tất các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count FROM `stackoverflow.questions_2018` WHERE creation_date BETWEEN '2018-01-01' AND '2018-02-01' AND tags = 'android';
- Chọn Run (Chạy). Truy vấn này trả về các câu hỏi trên Stack Overflow được tạo trong tháng 1 năm 2018 được gắn thẻ là
android
, cùng với câu hỏi và một vài số liệu thống kê khác. - Theo mặc định, BigQuery sẽ lưu các kết quả truy vấn vào bộ nhớ đệm. Chạy cùng một truy vấn và bạn sẽ thấy BigQuery mất ít thời gian hơn để trả về kết quả vì nó trả về kết quả từ bộ nhớ đệm.
- Chạy lại cùng một truy vấn nhưng lần này khi tính năng lưu vào bộ nhớ đệm của BigQuery đang tắt. Chúng tôi sẽ vô hiệu hoá bộ nhớ đệm cho những phần còn lại của phòng thí nghiệm để đảm bảo công bằng khi so sánh hiệu suất với các bảng được phân vùng và phân cụm. Các bảng này sẽ được chạy trong các phần tiếp theo. Trong trình chỉnh sửa truy vấn, hãy nhấp vào Lựa chọn khác rồi chọn Cài đặt truy vấn.
- Trong mục Lựa chọn ưu tiên về bộ nhớ đệm, hãy bỏ chọn mục Sử dụng kết quả được lưu vào bộ nhớ đệm.
- Trong kết quả truy vấn, bạn sẽ thấy thời gian để truy vấn hoàn tất và khối lượng dữ liệu được xử lý để có kết quả.
5. Tạo và truy vấn bảng được phân vùng
Ở phần trước, bạn đã tạo một bảng mới trong BigQuery chứa dữ liệu từ bảng posts_questions
bằng cách sử dụng tập dữ liệu công khai của Stack Overflow. Chúng tôi đã truy vấn tập dữ liệu này khi tính năng lưu vào bộ nhớ đệm đang tắt và quan sát thấy hiệu suất của truy vấn. Trong phần này, bạn sẽ tạo một bảng được phân vùng mới từ bảng posts_questions
của cùng một tập dữ liệu công khai của Stack Overflow và quan sát hiệu suất truy vấn.
Bảng được phân vùng là một bảng đặc biệt được chia thành các phân đoạn, được gọi là phân vùng, giúp bạn dễ dàng quản lý và truy vấn dữ liệu của mình hơn. Thông thường, bạn có thể chia các bảng lớn thành nhiều phân vùng nhỏ hơn bằng cách sử dụng thời gian nhập dữ liệu hoặc cột TIMESTAMP/DATE hoặc cột INTEGER. Chúng tôi sẽ tạo một bảng được phân vùng DATE.
Tìm hiểu thêm về bảng được phân vùng tại đây.
Tạo một bảng mới được phân vùng bằng các bài đăng StackOverflow năm 2018
Để tạo bảng được phân vùng có dữ liệu từ một bảng hoặc truy vấn hiện có, bạn sẽ truy vấn tập dữ liệu bài đăng Stackoverflow 2018 và ghi kết quả vào bảng mới, hoàn thành các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau để tạo một bảng mới, là câu lệnh DDL.
CREATE OR REPLACE TABLE `stackoverflow.questions_2018_partitioned` PARTITION BY DATE(creation_date) AS SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags FROM `bigquery-public-data.stackoverflow.posts_questions` WHERE creation_date BETWEEN '2018-01-01' AND '2019-01-01';
- Chọn Run (Chạy). Truy vấn này sẽ tạo một bảng mới
questions_2018_partitioned
trong tập dữ liệustackoverflow
trong dự án của bạn với dữ liệu có được từ việc chạy truy vấn trên tập dữ liệu BigQuery Stack Overflowbigquery-public-data.stackoverflow.posts_questions
Truy vấn Bảng phân vùng bằng các bài đăng Stack Overflow năm 2018
Bây giờ bạn đã tạo bảng được phân vùng của BigQuery, hãy chạy cùng một truy vấn, lần này trên bảng được phân vùng, để trả về các bài đăng trên Stack Overflow có câu hỏi và tiêu đề cùng với một vài số liệu thống kê khác như số lượng câu trả lời, nhận xét, lượt xem và mục yêu thích. Hãy hoàn tất các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count FROM `stackoverflow.questions_2018_partitioned` WHERE creation_date BETWEEN '2018-01-01' AND '2018-02-01' AND tags = 'android';
- Chọn Chạy khi tính năng lưu vào bộ nhớ đệm của BigQuery đang tắt (xem phần trước để biết cách tắt bộ nhớ đệm của BigQuery). Truy vấn này trả về các câu hỏi trên Stack Overflow được tạo trong tháng 1 năm 2018 được gắn thẻ là
android
, cùng với câu hỏi và một vài số liệu thống kê khác. - Trong kết quả truy vấn, bạn sẽ thấy thời gian để truy vấn hoàn tất và khối lượng dữ liệu được xử lý để có kết quả.
Bạn sẽ thấy rằng hiệu suất của truy vấn có bảng được phân vùng tốt hơn so với bảng không được phân vùng vì BigQuery cắt bớt các phân vùng, tức là chỉ quét các phân vùng bắt buộc, xử lý ít dữ liệu hơn và chạy nhanh hơn. Điều này sẽ tối ưu hoá chi phí truy vấn và hiệu suất truy vấn.
6. Tạo và truy vấn bảng phân cụm
Ở phần trước, bạn đã tạo một bảng được phân vùng trong BigQuery với dữ liệu từ bảng posts_questions
trong tập dữ liệu công khai của Stack Overflow. Chúng tôi đã truy vấn bảng này khi tắt tính năng lưu vào bộ nhớ đệm và quan sát hiệu suất truy vấn với cả bảng không được phân vùng và được phân vùng. Trong phần này, bạn sẽ tạo một bảng được nhóm mới từ bảng posts_questions
của cùng một tập dữ liệu công khai của Stack Overflow và quan sát hiệu suất truy vấn.
Khi một bảng được nhóm trong BigQuery, dữ liệu của bảng sẽ tự động được sắp xếp dựa trên nội dung của một hoặc nhiều cột trong giản đồ của bảng. Các cột bạn chỉ định được dùng để sắp xếp lại dữ liệu có liên quan. Khi dữ liệu được ghi vào một bảng phân cụm, BigQuery sắp xếp dữ liệu bằng cách sử dụng các giá trị trong các cột phân cụm. Các giá trị này được dùng để sắp xếp dữ liệu thành nhiều khối trong bộ nhớ BigQuery. Thứ tự của các cột được phân cụm sẽ xác định thứ tự sắp xếp dữ liệu. Khi dữ liệu mới được thêm vào bảng hoặc một phân vùng cụ thể, BigQuery sẽ tự động nhóm lại ở chế độ nền để khôi phục thuộc tính sắp xếp của bảng hoặc phân vùng.
Tìm hiểu thêm về cách làm việc với các bảng được phân cụm tại đây.
Tạo một bảng mới theo nhóm bằng các bài đăng Stack Overflow năm 2018
Trong phần này, bạn sẽ tạo một bảng mới được phân vùng trên creation_date
và được phân nhóm trên cột tags
dựa trên mẫu quyền truy cập truy vấn. Để tạo bảng phân nhóm có dữ liệu từ một bảng hoặc truy vấn hiện có, bạn sẽ truy vấn bảng bài đăng trên Stack Overflow 2018 và ghi kết quả vào bảng mới bằng cách hoàn tất các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau để tạo một bảng mới, là câu lệnh DDL.
#standardSQL CREATE OR REPLACE TABLE `stackoverflow.questions_2018_clustered` PARTITION BY DATE(creation_date) CLUSTER BY tags AS SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count, tags FROM `bigquery-public-data.stackoverflow.posts_questions` WHERE creation_date BETWEEN '2018-01-01' AND '2019-01-01';
- Chọn Chạy. Truy vấn này sẽ tạo một bảng mới
questions_2018_clustered
trong tập dữ liệustackoverflow
trong dự án của bạn với dữ liệu có được từ việc chạy truy vấn trên bảng BigQuery Stack Overflowbigquery-public-data.stackoverflow.posts_questions
. Bảng mới được phân vùng vào ngày tạo và phân nhóm trên cột thẻ.
Truy vấn Bảng theo cụm bằng các bài đăng Stack Overflow 2018
Bây giờ bạn đã tạo một bảng BigQuery nhóm, hãy chạy lại cùng một truy vấn, lần này trên bảng được phân vùng và phân nhóm, để trả về các bài đăng trên Stack Overflow có câu hỏi và tiêu đề cùng với một vài số liệu thống kê khác như số lượng câu trả lời, nhận xét, lượt xem và mục yêu thích. Hãy hoàn tất các bước sau:
- Ở gần phía trên cùng bên phải của bảng điều khiển GCP, hãy chọn Soạn truy vấn mới.
- Trong vùng văn bản của Trình chỉnh sửa truy vấn, hãy sao chép và dán truy vấn SQL sau
SELECT id, title, accepted_answer_id, creation_date, answer_count , comment_count , favorite_count, view_count FROM `stackoverflow.questions_2018_clustered` WHERE creation_date BETWEEN '2018-01-01' AND '2018-02-01' AND tags = 'android';
- Chọn Chạy khi tính năng lưu vào bộ nhớ đệm của BigQuery đang tắt (xem phần trước để biết cách tắt bộ nhớ đệm của BigQuery). Truy vấn này trả về các câu hỏi trên Stack Overflow được tạo trong tháng 1 năm 2018 được gắn thẻ là
android
, cùng với câu hỏi và một vài số liệu thống kê khác. - Trong kết quả truy vấn, bạn sẽ thấy thời gian để truy vấn hoàn tất và khối lượng dữ liệu được xử lý để có kết quả.
Với bảng được phân vùng và phân nhóm, truy vấn đã quét ít dữ liệu hơn so với bảng được phân vùng hoặc bảng không được phân vùng. Cách thức sắp xếp dữ liệu bằng cách phân vùng và phân cụm giúp giảm thiểu lượng dữ liệu được quét bởi các worker theo vị trí. Do đó, cải thiện hiệu suất truy vấn và tối ưu hoá chi phí.
7. Dọn dẹp
Nếu không có ý định tiếp tục xử lý tập dữ liệu stackoverflow, bạn nên xoá tập dữ liệu đó và xoá dự án bạn đã tạo cho lớp học lập trình này.
Xoá tập dữ liệu BigQuery
Để xoá tập dữ liệu BigQuery, hãy làm theo các bước sau:
- Chọn tập dữ liệu stackoverflow từ bảng điều hướng bên trái trong BigQuery .
- Trong bảng chi tiết, hãy chọn Xoá tập dữ liệu.
- Trong hộp thoại Xoá tập dữ liệu, hãy nhập stackoverflow rồi chọn Xoá để xác nhận rằng bạn muốn xoá tập dữ liệu.
Xoá dự án
Để xoá dự án GCP mà bạn đã tạo cho lớp học lập trình này, hãy thực hiện các bước sau:
- Trong trình đơn điều hướng của GCP, hãy chọn IAM và Quản trị viên.
- Trong bảng điều hướng, hãy chọn Cài đặt.
- Trong bảng điều khiển chi tiết, hãy xác nhận rằng dự án hiện tại của bạn là dự án bạn đã tạo cho lớp học lập trình này rồi chọn Tắt.
- Trong hộp thoại Tắt dự án, hãy nhập mã dự án (không phải tên dự án) cho dự án rồi chọn Tắt để xác nhận.
Xin chúc mừng! Giờ đây, bạn đã tìm hiểu
- Cách sử dụng giao diện người dùng web BigQuery để tạo bảng mới từ các bảng hiện có
- Cách tạo và truy vấn các bảng được phân vùng và phân cụm
- Cách phân vùng và phân cụm tối ưu hoá hiệu suất và chi phí truy vấn
Xin lưu ý rằng bạn không phải thiết lập hoặc quản lý các cụm để làm việc với tập dữ liệu.