Tải và truy vấn dữ liệu bằng công cụ dòng lệnh bq cho BigQuery

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.

  1. Đă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
  1. Chấp nhận điều khoản dịch vụ.
  2. 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. 1884405a64ce5765.png

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

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

bce75f34b2c53987.png

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:

70f315d7b402b476.png

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

fbe3a0674c982259.png

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.

  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

Đầ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`
  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

Đầ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, AvroCSV. Để đơ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=CSV sử 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=1 bỏ 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ằng gs://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àng
  • Zip:string: Mã bưu chính của Hoa Kỳ
  • Ttime:timestamp: Ngày và giờ giao dịch diễn ra
  • Amount: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ịch
  • Sku: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ề: