1. Giới thiệu
BigQuery là cơ sở dữ liệu phân tích chi phí thấp, NoOps và do Google toàn quyền quản lý. Với BigQuery, bạn có thể truy vấn hàng terabyte dữ liệu mà không cần quản trị viên cơ sở dữ liệu hoặc cơ sở hạ tầng. BigQuery sử dụng SQL quen thuộc và mô hình tính phí chỉ trả cho những gì bạn sử dụng. BigQuery giúp bạn tập trung vào việc phân tích dữ liệu để tìm ra thông tin chi tiết có ý nghĩa. Trong lớp học lập trình này, bạn sẽ sử dụng công cụ dòng lệnh bq để tải một tệp CSV cục bộ vào một bảng BigQuery mới.
Kiến thức bạn sẽ học được
- Cách sử dụng công cụ dòng lệnh bq cho BigQuery
- Cách tải tệp dữ liệu địa phương vào bảng BigQuery
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
2. Bắt đầu thiết lập
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.
- Đăng nhập vào Google Cloud Console rồi chuyển đến BigQuery. Bạn cũng có thể mở giao diện người dùng web BigQuery trực tiếp bằng cách nhập URL sau vào trình duyệt.
https://console.cloud.google.com/bigquery
- Chấp nhận điều khoản dịch vụ.
- Bạn phải tạo một dự án thì mới có thể sử dụng BigQuery. 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. 
Mã dự án là một tên riêng biệt cho tất cả các dự án trên Google Cloud. Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID.
Lớp học lập trình này sử dụng các tài nguyên BigQuery trong hạn mức của hộp cát BigQuery. Bạn không bắt buộc phải có tài khoản thanh toán. Nếu sau này muốn xoá các giới hạn của hộp cát, bạn có thể thêm một tài khoản thanh toán bằng cách đăng ký dùng thử miễn phí Google Cloud.
Cloud Shell
Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud.
Kích hoạt Cloud Shell
- Trong Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell
.

Nếu chưa từng khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian (bên dưới phần hiển thị đầu tiên) mô tả về Cloud Shell. Nếu vậy, hãy nhấp vào Tiếp tục (và bạn sẽ không bao giờ thấy màn hình này nữa). Sau đây là giao diện của màn hình xuất hiện một lần:

Quá trình cung cấp và kết nối với Cloud Shell chỉ mất vài giây.

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nền tảng này cung cấp một thư mục chính có dung lượng 5 GB và chạy trong Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện hầu hết, nếu không muốn nói là tất cả, công việc trong lớp học lập trình này 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 rằng mình đã được xác thực và dự án đã được đặt thành mã dự án của bạ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
Đầu ra của 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
Đầu ra của lệnh
[core] project = <PROJECT_ID>
Nếu không, bạn có thể đặt nó bằng lệnh sau:
gcloud config set project <PROJECT_ID>
Đầu ra của lệnh
Updated property [core/project].
3. Tạo tập dữ liệu
Tạo một tập dữ liệu để chứa các bảng của bạn.
Tập dữ liệu là gì?
Tập dữ liệu BigQuery là một tập hợp các bảng. Tất cả các bảng trong một tập dữ liệu đều được lưu trữ ở cùng một vị trí dữ liệu. Bạn cũng có thể đính kèm các chế độ kiểm soát quyền truy cập tuỳ chỉnh để hạn chế quyền truy cập vào một tập dữ liệu và các bảng của tập dữ liệu đó.
Tạo tập dữ liệu
Trong Cloud Shell, hãy dùng lệnh bq mk để tạo một tập dữ liệu có tên là "bq_load_codelab".
bq mk bq_load_codelab
Xem các thuộc tính của tập dữ liệu
Xác minh rằng bạn đã tạo tập dữ liệu bằng cách xem các thuộc tính của tập dữ liệu bằng lệnh bq show.
bq show bq_load_codelab
Bạn sẽ thấy kết quả tương tự như dưới đây:
Dataset my-project:bq_load_codelab
Last modified ACLs Labels
----------------- -------------------- --------
15 Jun 14:12:49 Owners:
projectOwners,
your-email@example.com
Writers:
projectWriters
Readers:
projectReaders
4. Tạo tệp dữ liệu
BigQuery có thể tải dữ liệu từ nhiều định dạng dữ liệu, bao gồm cả JSON phân tách bằng dòng mới, Avro và CSV. Để đơn giản, bạn sẽ sử dụng tệp CSV.
Tạo tệp CSV
Trong Cloud Shell, hãy tạo một tệp CSV trống.
touch customer_transactions.csv
Mở tệp CSV trong trình soạn thảo mã trong Cloud Shell bằng cách chạy lệnh cloudshell edit. Lệnh này sẽ mở một cửa sổ trình duyệt mới có trình soạn thảo mã và bảng điều khiển Cloud Shell.
cloudshell edit customer_transactions.csv
Trong trình soạn thảo mã, hãy nhập một số giá trị được phân tách bằng dấu phẩy để tải vào BigQuery.
ID,Zipcode,Timestamp,Amount,Feedback,SKU c123,78757,2018-02-14 17:01:39Z,1.20,4.7,he4rt5 c456,10012,2018-03-14 15:09:26Z,53.60,3.1,ppiieee c123,78741,2018-04-01 05:59:47Z,5.98,2.0,ch0c0
Lưu tệp CSV bằng cách nhấp vào Tệp > Chỉnh sửa.
5. Tải dữ liệu
Sử dụng lệnh bq load để tải tệp CSV vào một bảng BigQuery.
bq load \
--source_format=CSV \
--skip_leading_rows=1 \
bq_load_codelab.customer_transactions \
./customer_transactions.csv \
id:string,zip:string,ttime:timestamp,amount:numeric,fdbk:float,sku:string
Bạn đã sử dụng các lựa chọn sau:
--source_format=CSVsử dụng định dạng dữ liệu CSV khi phân tích cú pháp tệp dữ liệu.--skip_leading_rows=1bỏ qua dòng đầu tiên trong tệp CSV vì đó là hàng tiêu đề.Bq_load_codelab.customer_transactions—the first positional argument—xác định bảng mà dữ liệu sẽ được tải vào../customer_transactions.csv(đối số vị trí thứ hai) xác định tệp cần tải. Ngoài các tệp cục bộ, lệnh tải bq có thể tải tệp từ Cloud Storage bằnggs://my_bucket/path/to/file URIs.- Một giản đồ có thể được xác định trong tệp giản đồ JSON hoặc dưới dạng danh sách được phân tách bằng dấu phẩy. (Bạn đã sử dụng danh sách được phân tách bằng dấu phẩy để đơn giản hoá.)
Bạn đã sử dụng giản đồ sau trong bảng customer_transactions:
Id:string: Giá trị nhận dạng khách hàngZip:string: Mã bưu chính của Hoa KỳTtime:timestamp: Ngày và giờ giao dịch diễn raAmount:numeric: Số tiền của một giao dịch (cột số lưu trữ dữ liệu ở dạng số thập phân, rất hữu ích cho các giá trị tiền tệ.)Fdbk:float: Điểm xếp hạng từ một bản khảo sát ý kiến phản hồi về giao dịchSku:string: Giá trị nhận dạng của mặt hàng đã mua
Xem thông tin chi tiết về bảng
Xác minh rằng bảng đã tải bằng cách hiển thị các thuộc tính của bảng.
bq show bq_load_codelab.customer_transactions
Kết quả:
Table my-project:bq_load_codelab.customer_transactions
Last modified Schema Total Rows Total Bytes
----------------- --------------------- ------------ -------------
15 Jun 15:13:55 |- id: string 3 159
|- zip: string
|- ttime: timestamp
|- amount: numeric
|- fdbk: float
|- sku: string
6. Truy vấn dữ liệu
Giờ đây, sau khi dữ liệu được tải, bạn có thể truy vấn dữ liệu đó bằng giao diện người dùng web BigQuery, lệnh bq hoặc API. Các truy vấn có thể kết hợp dữ liệu của bạn với bất kỳ tập dữ liệu nào (hoặc các tập dữ liệu, miễn là chúng ở cùng một vị trí) mà bạn có quyền đọc.
Chạy một truy vấn SQL tiêu chuẩn kết hợp tập dữ liệu của bạn với tập dữ liệu mã bưu chính của Hoa Kỳ và tính tổng các giao dịch theo tiểu bang của Hoa Kỳ. Sử dụng lệnh bq query để thực thi truy vấn.
bq query --nouse_legacy_sql ' SELECT SUM(c.amount) AS amount_total, z.state_code AS state_code FROM `bq_load_codelab.customer_transactions` c JOIN `bigquery-public-data.utility_us.zipcode_area` z ON c.zip = z.zipcode GROUP BY state_code '
Lệnh đó sẽ xuất ra nội dung như sau:
Waiting on bqjob_r26...05a15b38_1 ... (1s) Current status: DONE +--------------+------------+ | amount_total | state_code | +--------------+------------+ | 53.6 | NY | | 7.18 | TX | +--------------+------------+
Truy vấn mà bạn đã chạy sử dụng một tập dữ liệu công khai và tập dữ liệu riêng tư của bạn. Tìm hiểu thêm bằng cách đọc phiên bản có chú thích của cùng một truy vấn này:
#standardSQL SELECT /* Total of all transactions in the state. */ SUM(c.amount) AS amount_total, /* State corresponding to the transaction's zipcode. */ z.state_code AS state_code /* Query the table you just constructed. * Note: If you omit the project from the table ID, * the dataset is read from your project. */ FROM `bq_load_codelab.customer_transactions` c /* Join the table to the zipcode public dataset. */ JOIN `bigquery-public-data.utility_us.zipcode_area` z /* Find the state corresponding to the transaction's zipcode. */ ON c.zip = z.zipcode /* Group over all transactions by state. */ GROUP BY state_code
7. Dọn dẹp
Xoá tập dữ liệu mà bạn đã tạo bằng lệnh bq rm. Sử dụng cờ -r để xoá mọi bảng có trong đó.
bq rm -r bq_load_codelab
8. Xin chúc mừng!
Bạn đã tải một bảng lên BigQuery và truy vấn bảng đó!
Nội dung bạn đã học
- Sử dụng công cụ dòng lệnh
bqđể tương tác với BigQuery. - Kết hợp dữ liệu của bạn và một tập dữ liệu công khai bằng truy vấn BigQuery.
Bước tiếp theo
Tìm hiểu thêm về:
- Công cụ dòng lệnh
bq - Các cách khác để tải dữ liệu vào BigQuery.
- Các tập dữ liệu công khai khác có sẵn thông qua BigQuery.
- Thời tiết, tội phạm và các loại dữ liệu khác trong TIL với BigQuery.