Truy vấn tập dữ liệu Wikipedia trong BigQuery

1. Tổng quan

BigQuery là cơ sở dữ liệu phân tích chi phí thấp do Google quản lý hoàn toàn, NoOps. Với BigQuery, bạn có thể truy vấn nhiều terabyte và terabyte dữ liệu mà không cần có bất kỳ cơ sở hạ tầng nào để quản lý mà không cần quản trị viên cơ sở dữ liệu. BigQuery sử dụng SQL quen thuộc và có thể tận dụng mô hình trả tiền theo mức dùng. BigQuery giúp bạn tập trung vào việc phân tích dữ liệu để tìm ra những thông tin chi tiết có ý nghĩa.

Trong lớp học lập trình này, bạn sẽ khám phá tập dữ liệu Wikipedia bằng BigQuery.

Kiến thức bạn sẽ học được

  • Cách sử dụng BigQuery
  • Cách tải một tập dữ liệu thực tế vào BigQuery
  • Cách viết truy vấn để thu thập thông tin chi tiết về một tập dữ liệu lớn

Bạn cần có

  • Một dự án trên Google Cloud
  • Một trình duyệt, chẳng hạn như Google Chrome hoặc Firefox

Khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ có thể đọc Đọc và hoàn thành bài tập

Bạn đánh giá thế nào về trải nghiệm sử dụng Google Cloud?

Người mới tập Trung cấp Thành thạo

2. Thiết lập và yêu cầu

Bật BigQuery

Nếu chưa có Tài khoản Google, bạn phải tạo một tài khoản.

  1. Đăng nhập vào Google Cloud Console rồi chuyển đến BigQuery. Bạn cũng có thể mở trực tiếp giao diện người dùng web BigQuery bằng cách nhập URL sau đây vào trình duyệt.
https://console.cloud.google.com/bigquery
  1. Chấp nhận điều khoản dịch vụ.
  2. Trước khi có thể sử dụng BigQuery, bạn phải tạo một dự án. Làm theo lời nhắc để tạo dự án mới.

Chọn tên dự án và ghi lại mã dự án. 1884405a64ce5765.pngS

Mã dự án là tên riêng biệt của tất cả dự án trên Google Cloud. Lớp này sẽ được đề cập sau trong lớp học lập trình này là PROJECT_ID.

Lớp học lập trình này sử dụng tài nguyên BigQuery trong hạn mức hộp cát BigQuery. Không bắt buộc phải có tài khoản thanh toán. Nếu sau này muốn loại bỏ giới hạn hộp cát, bạn có thể thêm tài khoản thanh toán bằng cách đăng ký dùng thử miễn phí Google Cloud.

Bạn tải tập dữ liệu Wikipedia trong phần tiếp theo.

3. Tạo tập dữ liệu

Trước tiên, hãy tạo một tập dữ liệu mới trong dự án. Một tập dữ liệu bao gồm nhiều bảng.

  1. Để tạo tập dữ liệu, hãy nhấp vào tên dự án trong ngăn tài nguyên, sau đó nhấp vào Tạo tập dữ liệu:

4a5983b4dc299705.pngS

  1. Nhập lab làm Mã tập dữ liệu:

a592b5b9be20fdec.png

  1. Nhấp vào Tạo tập dữ liệu để tạo tập dữ liệu trống.

4. Tải dữ liệu bằng chương trình dòng lệnh bq

Kích hoạt Cloud Shell

  1. Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell 4292cbf4971c9786.pngs.

bce75f34b2c53987.png

Nếu trước đây bạn chưa từng khởi động Cloud Shell, thì bạn sẽ thấy một màn hình trung gian (dưới màn hình đầu tiên) mô tả về ứng dụng này. Nếu trường hợp đó xảy ra, hãy nhấp vào Tiếp tục (và bạn sẽ không thấy thông báo đó nữa). Màn hình một lần đó sẽ có dạng như sau:

70f315d7b402b476.pngS

Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.

fbe3a0674c982259.png

Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc 5 GB ổn định và chạy trong Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Trong lớp học lập trình này, đa số mọi người đều có thể thực hiện chỉ bằng một trình duyệt hoặc Chromebook.

Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án.

  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list

Kết quả lệnh

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn:
gcloud config list project

Kết quả lệnh

[core]
project = <PROJECT_ID>

Nếu chưa, bạn có thể thiết lập chế độ này bằng lệnh sau:

gcloud config set project <PROJECT_ID>

Kết quả lệnh

Updated property [core/project].

Tải dữ liệu vào BigQuery

Để thuận tiện cho bạn, một số dữ liệu cho ngày 10 tháng 4 năm 2019, từ tập dữ liệu lượt xem trang Wikimedia có sẵn trên Google Cloud Storage tại gs://cloud-samples-data/third-party/wikimedia/pageviews/pageviews-20190410-140000.gz. Tệp dữ liệu là tệp CSV của GZip. Bạn có thể tải tệp này trực tiếp bằng tiện ích dòng lệnh bq. Trong lệnh tải, bạn cũng mô tả giản đồ của tệp.

bq load \
  --source_format CSV \
  --field_delimiter " " \
  --allow_jagged_rows \
  --quote "" \
  --max_bad_records 3 \
  $GOOGLE_CLOUD_PROJECT:lab.pageviews_20190410_140000 \
  gs://cloud-samples-data/third-party/wikimedia/pageviews/pageviews-20190410-140000.gz \
  wiki,title,requests:integer,zero:integer

Bạn đã sử dụng một số cách nâng cao để tải tệp số lượt xem trang:

  • Đặt --source_format CSV để cho biết tệp cần được phân tích cú pháp dưới dạng tệp CSV. Bước này là bước không bắt buộc vì CSV là định dạng mặc định.
  • Đặt --field_delimiter " " để cho biết rằng có một dấu cách được dùng để phân cách các trường.
  • Đặt --allow_jagged_rows để bao gồm các hàng có ít cột hơn và bỏ qua các lỗi khi tải tệp CSV.
  • Đặt --quote "" để cho biết các chuỗi không được trích dẫn.
  • Đặt --max_bad_records 3 để bỏ qua tối đa 3 lỗi khi phân tích cú pháp tệp CSV.

Bạn có thể tìm hiểu thêm về dòng lệnh bq trong tài liệu này.

5. Xem trước tập dữ liệu

Trong bảng điều khiển BigQuery, hãy mở một trong các bảng mà bạn vừa tải.

  1. Mở rộng dự án.
  2. Mở rộng tập dữ liệu.
  3. Chọn bảng. 99f875c838ed9a58.pngS

Bạn có thể xem giản đồ bảng trong thẻ Giản đồ. 4. Tìm hiểu lượng dữ liệu trong bảng bằng cách chuyển đến thẻ Chi tiết:

742cd54fbf17085.pngS

  1. Mở thẻ Xem trước để xem các hàng được chọn trong bảng.

397a9c25480735cc.pngS

6. Soạn một truy vấn

  1. Nhấp vào Soạn truy vấn mới:

cc28282a25c9746e.png

Thao tác này sẽ mở Trình chỉnh sửa truy vấn:

e881286d275ab4ec.png

  1. Tìm tổng số lượt xem Wikimedia trong khoảng thời gian từ 2 giờ đến 3 giờ chiều ngày 10 tháng 4 năm 2019 bằng cách viết truy vấn này:
SELECT SUM(requests)
FROM `lab.pageviews_20190410_140000`
  1. Nhấp vào Run (Chạy):

9abb7c4039961f5b.pngS

Trong vài giây, kết quả sẽ xuất hiện ở dưới cùng và cũng cho bạn biết lượng dữ liệu đã được xử lý:

a119b65f2ca49e41.png

Truy vấn này đã xử lý 123,9 MB, mặc dù bảng là 691,4 MB. BigQuery chỉ xử lý các byte từ những cột được dùng trong truy vấn, vì vậy, tổng lượng dữ liệu được xử lý có thể nhỏ hơn đáng kể so với kích thước bảng. Nhờ tính năng nhómphân vùng, lượng dữ liệu được xử lý có thể giảm hơn nữa.

7. Truy vấn nâng cao khác

Tìm chế độ xem trang Wikipedia

Tập dữ liệu Wikimedia chứa lượt xem trang của tất cả các dự án trên Wikimedia (bao gồm cả Wikipedia, Wiktionary, Wikibooks và WikiTrích dẫn). Thu hẹp truy vấn chỉ còn các trang Wikipedia tiếng Anh bằng cách thêm câu lệnh WHERE:

SELECT SUM(requests), wiki
FROM `lab.pageviews_20190410_140000`
WHERE wiki = "en"
GROUP BY wiki

d6c6c7901c314da7.png

Xin lưu ý rằng khi truy vấn một cột bổ sung wiki, lượng dữ liệu được xử lý đã tăng từ 124 MB lên 204 MB.

BigQuery hỗ trợ nhiều mệnh đề SQL quen thuộc, chẳng hạn như CONTAINS, GROUP BY, ORDER BY và một số hàm tổng hợp. Ngoài ra, bạn cũng có thể sử dụng biểu thức chính quy để truy vấn các trường văn bản! Hãy thử một đáp án:

SELECT title, SUM(requests) requests
FROM `lab.pageviews_20190410_140000`
WHERE
  wiki = "en"
  AND REGEXP_CONTAINS(title, 'Red.*t')
GROUP BY title
ORDER BY requests DESC

Truy vấn trên nhiều bảng

Bạn có thể chọn một loạt bảng để tạo liên kết bằng cách sử dụng bảng ký tự đại diện.

  1. Trước tiên, tạo bảng thứ hai để truy vấn bằng cách tải số lượt xem trang của giờ tiếp theo vào một bảng mới:
bq load \
  --source_format CSV \
  --field_delimiter " " \
  --quote "" \
  $GOOGLE_CLOUD_PROJECT:lab.pageviews_20190410_150000 \
  gs://cloud-samples-data/third-party/wikimedia/pageviews/pageviews-20190410-150000.gz \
  wiki,title,requests:integer,zero:integer
  1. Trong Trình chỉnh sửa truy vấn, hãy truy vấn trên cả hai bảng mà bạn đã tải bằng cách truy vấn các bảng bằng "pageviews_2019" làm tiền tố:
SELECT title, SUM(requests) requests
FROM `lab.pageviews_2019*`
WHERE
  wiki = "en"
  AND REGEXP_CONTAINS(title, 'Red.*t')
GROUP BY title
ORDER BY requests DESC

Bạn có thể lọc các bảng một cách có chọn lọc hơn bằng cột giả _TABLE_DOCUMENT. Truy vấn này giới hạn ở các bảng tương ứng với ngày 10 tháng 4.

SELECT title, SUM(requests) requests
FROM `lab.pageviews_2019*`
WHERE
  _TABLE_SUFFIX BETWEEN '0410' AND '0410_9999999'
  AND wiki = "en"
  AND REGEXP_CONTAINS(title, 'Red.*t')
GROUP BY title
ORDER BY requests DESC

8. Dọn dẹp

Bạn có thể xoá tập dữ liệu bạn đã tạo bằng lệnh bq rm nếu muốn. Sử dụng cờ -r để xoá mọi bảng có trong đó.

bq rm -r lab

9. Xin chúc mừng!

Bạn đã sử dụng BigQuery và SQL để truy vấn tập dữ liệu về lượt xem trang trên Wikipedia trong thực tế. Bạn có quyền truy vấn các tập dữ liệu cỡ petabyte!

Tìm hiểu thêm