1. Tổng quan
BigQuery là kho dữ liệu phân tích cỡ petabyte và chi phí thấp do Google quản lý hoàn toàn. BigQuery là NoOps – không có cơ sở hạ tầng để quản lý và bạn không cần quản trị viên cơ sở dữ liệu – vì vậy, bạn có thể tập trung vào việc phân tích dữ liệu để tìm thông tin chi tiết có ý nghĩa, sử dụng SQL quen thuộc và tận dụng mô hình trả tiền theo mức dùng của chúng tôi.
Trong lớp học lập trình này, bạn sẽ sử dụng Thư viện ứng dụng Google Cloud dành cho Python để truy vấn các tập dữ liệu công khai BigQuery bằng Python.
Kiến thức bạn sẽ học được
- Cách sử dụng Cloud Shell
- Cách bật BigQuery API
- Cách xác thực yêu cầu API
- Cách cài đặt thư viện ứng dụng Python
- Cách truy vấn các tác phẩm của Shakespeare
- Cách truy vấn tập dữ liệu GitHub
- Cách điều chỉnh việc lưu vào bộ nhớ đệm và thống kê hiển thị
Bạn cần có
- Một dự án trong Google Cloud
- Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
- Quen thuộc với Python
Khảo sát
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm sử dụng Python?
Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud?
2. Thiết lập và yêu cầu
Thiết lập môi trường theo tiến độ riêng
- Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.
- Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng và bạn có thể cập nhật chuỗi này bất cứ lúc nào.
- Mã dự án phải là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (bạn không thể thay đổi mã này sau khi đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (và mã này thường được xác định là
PROJECT_ID
). Vì vậy, nếu không thích, bạn có thể tạo một mã ngẫu nhiên khác hoặc bạn có thể thử mã của riêng mình để xem có mã này chưa. Sau đó, video sẽ được "đóng băng" sau khi tạo dự án. - Có giá trị thứ ba là Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
- Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên/API trên Cloud. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên để bạn không phải chịu thanh toán ngoài hướng dẫn này, hãy làm theo mọi thao tác "dọn dẹp" hướng dẫn ở cuối lớp học lập trình. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.
Khởi động Cloud Shell
Mặc dù bạn có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trong Đám mây.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell .
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:
Quá trình cấp phép và kết nối với Cloud Shell chỉ mất vài phút.
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.
- 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`
- 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].
3. Bật API
BigQuery API phải được bật theo mặc định trong tất cả dự án trên Google Cloud. Bạn có thể kiểm tra xem điều này có đúng hay không bằng lệnh sau trong Cloud Shell: Bạn phải là BigQuery được liệt kê:
gcloud services list
Bạn sẽ thấy BigQuery được liệt kê:
NAME TITLE bigquery.googleapis.com BigQuery API ...
Trong trường hợp chưa bật BigQuery API, bạn có thể sử dụng lệnh sau trong Cloud Shell để bật:
gcloud services enable bigquery.googleapis.com
4. Xác thực các yêu cầu API
Để gửi yêu cầu đến BigQuery API, bạn cần sử dụng Tài khoản dịch vụ. Tài khoản dịch vụ thuộc về dự án của bạn và thư viện ứng dụng Google Cloud Python dùng tài khoản này để tạo các yêu cầu API BigQuery. Giống như mọi tài khoản người dùng khác, tài khoản dịch vụ được đại diện bằng địa chỉ email. Trong phần này, bạn sẽ sử dụng Cloud SDK để tạo một tài khoản dịch vụ, sau đó tạo thông tin xác thực mà bạn cần để xác thực là tài khoản dịch vụ.
Trước tiên, hãy đặt một biến môi trường PROJECT_ID
:
export PROJECT_ID=$(gcloud config get-value core/project)
Tiếp theo, hãy tạo một tài khoản dịch vụ mới để truy cập vào BigQuery API bằng cách sử dụng:
gcloud iam service-accounts create my-bigquery-sa \ --display-name "my bigquery service account"
Tiếp theo, hãy tạo thông tin đăng nhập mà mã Python sẽ sử dụng để đăng nhập làm tài khoản dịch vụ mới của bạn. Tạo các thông tin đăng nhập này và lưu dưới dạng tệp JSON ~/key.json
bằng cách sử dụng lệnh sau:
gcloud iam service-accounts keys create ~/key.json \ --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com
Cuối cùng, hãy đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALS
mà thư viện ứng dụng BigQuery Python sử dụng (được đề cập trong bước tiếp theo) để tìm thông tin đăng nhập của bạn. Bạn phải đặt biến môi trường thành đường dẫn đầy đủ của tệp JSON chứa thông tin đăng nhập mà bạn đã tạo bằng cách sử dụng:
export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
Bạn có thể đọc thêm về cách xác thực BigQuery API.
5. Thiết lập kiểm soát quyền truy cập
BigQuery sử dụng giải pháp Quản lý danh tính và quyền truy cập (IAM) để quản lý quyền truy cập vào tài nguyên. BigQuery có một số vai trò được xác định trước (người dùng, dataOwner, dataViewer, v.v.) mà bạn có thể chỉ định cho tài khoản dịch vụ mà bạn đã tạo ở bước trước đó. Bạn có thể đọc thêm về Kiểm soát quyền truy cập trong tài liệu về BigQuery.
Trước khi có thể truy vấn các tập dữ liệu công khai, bạn cần đảm bảo tài khoản dịch vụ có ít nhất vai trò roles/bigquery.user
. Trong Cloud Shell, hãy chạy lệnh sau để chỉ định vai trò của người dùng cho tài khoản dịch vụ:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role "roles/bigquery.user"
Bạn có thể chạy lệnh sau để xác minh rằng tài khoản dịch vụ có vai trò người dùng:
gcloud projects get-iam-policy $PROJECT_ID
Bạn sẽ thấy những thông tin sau:
bindings: - members: - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com role: roles/bigquery.user ...
6. Cài đặt thư viện ứng dụng
Cài đặt thư viện ứng dụng BigQuery Python:
pip3 install --user --upgrade google-cloud-bigquery
Giờ đây, bạn đã sẵn sàng lập trình bằng API BigQuery!
7. Truy vấn các tác phẩm của Shakespeare
Tập dữ liệu công khai là bất kỳ tập dữ liệu nào được lưu trữ trong BigQuery và được cung cấp công khai. Có nhiều tập dữ liệu công khai khác để bạn truy vấn. Mặc dù một số tập dữ liệu được Google lưu trữ, nhưng hầu hết đều do các bên thứ ba lưu trữ. Để biết thêm thông tin, hãy xem trang Tập dữ liệu công khai.
Ngoài các tập dữ liệu công khai, BigQuery còn cung cấp một số lượng bảng mẫu hạn chế để bạn có thể truy vấn. Các bảng này nằm trong tập dữ liệu bigquery-public-data:samples
. Bảng shakespeare
trong tập dữ liệu samples
có chứa một chỉ mục từ ngữ của các tác phẩm của Shakespeare. Hàm này cho biết số lần mỗi từ xuất hiện trong mỗi tập sao lục.
Ở bước này, bạn sẽ truy vấn bảng shakespeare
.
Trước tiên, trong Cloud Shell, hãy tạo một ứng dụng Python đơn giản mà bạn sẽ dùng để chạy các mẫu Translation API.
mkdir bigquery-demo cd bigquery-demo touch app.py
Mở trình soạn thảo mã ở trên cùng bên phải của Cloud Shell:
Chuyển đến tệp app.py
bên trong thư mục bigquery-demo
rồi thay thế mã bằng đoạn mã sau.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT corpus AS title, COUNT(word) AS unique_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY title
ORDER BY unique_words
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
title = row['title']
unique_words = row['unique_words']
print(f'{title:<20} | {unique_words}')
Hãy dành một hoặc hai phút để nghiên cứu mã và xem cách bảng đang được truy vấn.
Quay lại Cloud Shell, chạy ứng dụng:
python3 app.py
Bạn sẽ thấy danh sách các từ và số lần xuất hiện của các từ đó:
hamlet | 5318 kinghenryv | 5104 cymbeline | 4875 troilusandcressida | 4795 kinglear | 4784 kingrichardiii | 4713 2kinghenryvi | 4683 coriolanus | 4653 2kinghenryiv | 4605 antonyandcleopatra | 4582
8. Truy vấn tập dữ liệu GitHub
Để làm quen với BigQuery, bây giờ, bạn sẽ đưa ra một truy vấn dựa trên tập dữ liệu công khai GitHub. Bạn sẽ tìm thấy những thông báo cam kết phổ biến nhất trên GitHub. Bạn cũng sẽ sử dụng Bảng điều khiển web của BigQuery để xem trước và chạy các truy vấn đặc biệt.
Để xem dữ liệu trông như thế nào, hãy mở tập dữ liệu GitHub trong giao diện người dùng web BigQuery:
Nhấp vào nút Xem trước để xem dữ liệu trông như thế nào:
Chuyển đến tệp app.py
bên trong thư mục bigquery_demo
rồi thay thế mã bằng đoạn mã sau.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
Hãy dành vài phút để nghiên cứu mã và xem cách bảng đang được truy vấn cho các thông báo xác nhận phổ biến nhất.
Quay lại Cloud Shell, chạy ứng dụng:
python3 app.py
Bạn sẽ thấy danh sách thông báo cam kết và số lần xuất hiện của các thông báo đó:
Update README.md | 1,685,515 Initial commit | 1,577,543 update | 211,017 | 155,280 Create README.md | 153,711 Add files via upload | 152,354 initial commit | 145,224 first commit | 110,314 Update index.html | 91,893 Update README | 88,862
9. Lưu vào bộ nhớ đệm và số liệu thống kê
BigQuery lưu kết quả của các truy vấn vào bộ nhớ đệm. Do đó, các truy vấn tiếp theo mất ít thời gian hơn. Bạn có thể tắt chức năng lưu vào bộ nhớ đệm bằng các tuỳ chọn truy vấn. BigQuery cũng theo dõi số liệu thống kê về các truy vấn như thời gian tạo, thời gian kết thúc, tổng số byte được xử lý.
Trong bước này, bạn sẽ tắt chức năng lưu vào bộ nhớ đệm và cũng hiển thị số liệu thống kê về truy vấn.
Chuyển đến tệp app.py
bên trong thư mục bigquery_demo
rồi thay thế mã bằng đoạn mã sau.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
print('-'*60)
print(f'Created: {results.created}')
print(f'Ended: {results.ended}')
print(f'Bytes: {results.total_bytes_processed:,}')
Một số điều cần lưu ý về mã. Trước tiên, tính năng lưu vào bộ nhớ đệm sẽ bị tắt bằng cách sử dụng QueryJobConfig
và đặt use_query_cache
thành false. Thứ hai, bạn đã truy cập vào số liệu thống kê về truy vấn từ đối tượng công việc.
Quay lại Cloud Shell, chạy ứng dụng:
python3 app.py
Giống như trước đó, bạn sẽ thấy danh sách các thông báo cam kết và số lần xuất hiện của các thông báo đó. Ngoài ra, cuối cùng bạn cũng sẽ thấy một vài số liệu thống kê về truy vấn:
Update README.md | 1,685,515 Initial commit | 1,577,543 update | 211,017 | 155,280 Create README.md | 153,711 Add files via upload | 152,354 initial commit | 145,224 first commit | 110,314 Update index.html | 91,893 Update README | 88,862 ------------------------------------------------------------ Created: 2020-04-03 13:30:08.801000+00:00 Ended: 2020-04-03 13:30:15.334000+00:00 Bytes: 2,868,251,894
10. Đang tải dữ liệu vào BigQuery
Nếu muốn truy vấn dữ liệu của riêng mình, bạn cần tải dữ liệu đó vào BigQuery. BigQuery hỗ trợ tải dữ liệu từ nhiều nguồn, bao gồm Cloud Storage, các dịch vụ khác của Google và các nguồn có thể đọc khác. Bạn thậm chí có thể truyền trực tuyến dữ liệu của mình bằng cách sử dụng các phương thức truyền trực tuyến. Để biết thêm thông tin, hãy xem trang Tải dữ liệu vào BigQuery.
Ở bước này, bạn sẽ tải tệp JSON được lưu trữ trên Cloud Storage vào bảng BigQuery. Tệp JSON nằm tại gs://cloud-samples-data/bigquery/us-states/us-states.json
Nếu muốn biết nội dung của tệp JSON, bạn có thể sử dụng công cụ dòng lệnh gsutil
để tải tệp này xuống trong Cloud Shell:
gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
Bạn có thể thấy tệp này chứa danh sách các tiểu bang của Hoa Kỳ và mỗi tiểu bang là một tài liệu JSON trên một dòng riêng:
head us-states.json
{"name": "Alabama", "post_abbr": "AL"} {"name": "Alaska", "post_abbr": "AK"} ...
Để tải tệp JSON này vào BigQuery, hãy chuyển đến tệp app.py
bên trong thư mục bigquery_demo
rồi thay thế mã bằng đoạn mã sau.
from google.cloud import bigquery
client = bigquery.Client()
gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'
dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')
job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
bigquery.SchemaField('name', 'STRING'),
bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)
print('JSON file loaded to BigQuery')
Hãy dành 2 phút để tìm hiểu cách mã tải tệp JSON và tạo bảng có giản đồ trong tập dữ liệu.
Quay lại Cloud Shell, chạy ứng dụng:
python3 app.py
Một tập dữ liệu và một bảng sẽ được tạo trong BigQuery.
Để xác minh rằng tập dữ liệu đã được tạo, hãy chuyển đến bảng điều khiển BigQuery. Bạn sẽ thấy một tập dữ liệu và bảng mới. Chuyển sang thẻ xem trước của bảng để xem dữ liệu:
11. Xin chúc mừng!
Bạn đã tìm hiểu cách sử dụng BigQuery với Python!
Dọn dẹp
Để tránh bị tính phí vào tài khoản Google Cloud của bạn cho các tài nguyên được sử dụng trong hướng dẫn này:
- Trong Cloud Console, hãy chuyển đến trang Quản lý tài nguyên.
- Trong danh sách dự án, hãy chọn dự án rồi nhấp vào Delete (Xoá).
- Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án.
Tìm hiểu thêm
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Python trên Google Cloud: https://cloud.google.com/python/
- Thư viện ứng dụng Cloud dành cho Python: https://googleapis.github.io/google-cloud-python/
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.