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 do Google quản lý hoàn toàn, NoOps. Với BigQuery, bạn có thể truy vấn nhiều terabyte dữ liệu mà không cần quản trị viên cơ sở dữ liệu hay cơ sở hạ tầng. BigQuery sử dụng SQL quen thuộc và mô hình tính phí chỉ trả tiền theo giá 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 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ẽ sử dụng công cụ dòng lệnh bq để tải tệp CSV cục bộ vào 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 cục bộ 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ở 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 cùng với 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.

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.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].

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

Tạo một tập dữ liệu để chứa các bảng.

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ả 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 để giới hạn quyền truy cập vào một tập dữ liệu và các bảng trong 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 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, trong đó có JSON được phân tách bằng dòng mới, AvroCSV. Để đơn giản hoá, bạn sẽ sử dụng 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 chỉnh sửa Cloudshell. Thao tác 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 tải bq để tải tệp CSV của bạn vào 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ì đây là hàng tiêu đề.
  • Bq_load_codelab.customer_transactions—the first positional argument— xác định bảng nào 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 trên thiết bị, lệnh tải bq có thể tải các tệp từ Cloud Storage bằng gs://my_bucket/path/to/file URIs.
  • 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. (Để đơn giản, bạn sử dụng danh sách được phân tách bằng dấu phẩy.)

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ờ diễn ra giao dịch
  • Amount:numeric: Số tiền giao dịch (cột số lưu trữ dữ liệu ở dạng số thập phân, hữu ích cho các giá trị tiền tệ.)
  • Fdbk:float: Điểm xếp hạng trong một cuộc khảo sát 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, dữ liệu đã được tải, bạn có thể truy vấn dữ liệu đó bằng cách sử dụng giao diện người dùng web BigQuery, lệnh bq hoặc API. Các truy vấn của bạn có thể kết hợp dữ liệu của bạn dựa vào bất kỳ tập dữ liệu nào (hoặ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 chuẩn kết hợp tập dữ liệu của bạn với tập dữ liệu mã ZIP của Hoa Kỳ và tổng hợp các giao dịch theo tiểu bang ở Hoa Kỳ. Sử dụng lệnh truy vấn bq để 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 kết quả 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ó nhận xét này của cùng một truy vấn:

#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. Hãy 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 đã đề cập

  • 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à tập dữ liệu công khai với truy vấn BigQuery.

Các bước tiếp theo

Tìm hiểu thêm về: