Sử dụng BigQuery với C#

1. Tổng quan

BigQuery là kho dữ liệu phân tích cỡ petabyte, tiết kiệm chi phí và do Google toàn quyền quản lý. BigQuery là NoOps (không cần quản lý cơ sở hạ tầng và bạn không cần quản trị viên cơ sở dữ liệu) nên 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 cho .NET để truy vấn tập dữ liệu công khai BigQuery bằng C#.

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 các yêu cầu API
  • Cách cài đặt thư viện ứng dụng Google Cloud cho C#
  • Cách truy vấn các tác phẩm của Shakespeare
  • Cách truy vấn tập dữ liệu trên GitHub
  • Cách điều chỉnh bộ nhớ đệm và số liệu thống kê hiển thị

Bạn cần có

  • Một dự án trên Google Cloud Platform
  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Quen thuộc với việc sử dụng C#

Bản khảo sát

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

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

Bạn đánh giá thế nào về trải nghiệm của mình với C#?

Người mới bắt đầu Trung cấp Thành thạo

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

Người mới bắt đầu Trung cấp Thành thạo

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

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Google Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một 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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 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ự mà các API của Google không sử dụng. Bạn luôn có thể cập nhật thông tin này.
  • Mã dự án là mã duy nhất trên tất cả các dự án trê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 thì bạn không cần quan tâm đến chuỗi này. 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 (thường được xác định là PROJECT_ID). Nếu không thích mã nhận dạng được tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Hoặc bạn có thể thử tên người dùng của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi tên này sau bước này và tên này sẽ tồn tại trong suốt thời gian của dự án.
  • Để bạn nắm được thông tin, có một giá trị thứ ba là Số dự án mà một số API sử dụng. Tìm hiểu thêm về cả 3 giá trị này trong tài liệu.
  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên/API trên đám mây. Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này, bạn có thể xoá các tài nguyên đã tạo hoặc xoá dự án. 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í trị giá 300 USD.

Khởi động Cloud Shell

Mặc dù 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 trên Cloud.

Kích hoạt Cloud Shell

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

cb81e7c8e34bc8d.png

Nếu đây là lần đầu tiên bạn khởi động Cloud Shell, bạn sẽ thấy một màn hình trung gian mô tả về Cloud Shell. Nếu bạn thấy màn hình trung gian, hãy nhấp vào Tiếp tục.

d95252b003979716.png

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

7833d5e1c5d18f54.png

Máy ảo này được trang bị tất cả các công cụ phát triển cần thiết. 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 của mình trong lớp học lập trình này bằng trình duyệt.

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. Bật BigQuery API

Theo mặc định, BigQuery API sẽ được bật trong tất cả cá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 được liệt kê trong BigQuery:

gcloud services list

Bạn sẽ thấy BigQuery trong danh sách:

NAME                              TITLE
bigquery-json.googleapis.com      BigQuery API
...

Trong trường hợp BigQuery API chưa được bật, bạn có thể dùng lệnh sau trong Cloud Shell để bật API này:

gcloud services enable bigquery-json.googleapis.com

4. Cài đặt thư viện ứng dụng BigQuery cho C#

Trước tiên, hãy tạo một ứng dụng bảng điều khiển C# đơn giản mà bạn sẽ dùng để chạy các mẫu BigQuery API.

dotnet new console -n BigQueryDemo

Bạn sẽ thấy ứng dụng được tạo và các phần phụ thuộc được phân giải:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

Tiếp theo, hãy chuyển đến thư mục BigQueryDemo:

cd BigQueryDemo

Và thêm gói Google.Cloud.BigQuery.V2 NuGet vào dự án:

dotnet add package Google.Cloud.BigQuery.V2
info : Adding PackageReference for package 'Google.Cloud.BigQuery.V2' into project '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
log  : Restoring packages for /home/atameldev/BigQueryDemo/BigQueryDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.BigQuery.V2' version '1.2.0' added to file '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.

Giờ đây, bạn đã sẵn sàng sử dụng BigQuery API!

5. Truy vấn các tác phẩm của Shakespeare

Tập dữ liệu công khai là tập dữ liệu được lưu trữ trong BigQuery và được cung cấp cho công chúng. Có nhiều tập dữ liệu công khai khác mà bạn có thể truy vấn, một số tập dữ liệu cũng do Google lưu trữ, nhưng nhiều tập dữ liệu khác do bên thứ ba lưu trữ. Bạn có thể đọc thêm thông tin trên 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 hạn chế bảng mẫu mà bạn có thể truy vấn. Các bảng này nằm trong bigquery-public-data:samples dataset. Một trong những bảng đó có tên là shakespeare.. Bảng này chứa một chỉ mục từ của các tác phẩm của Shakespeare, cho biết số lần mỗi từ xuất hiện trong mỗi ngữ liệu.

Trong bước này, bạn sẽ truy vấn bảng Shakespeare.

Trước tiên, hãy mở trình soạn thảo mã ở phía trên cùng bên phải của Cloud Shell:

fd3fc1303e63572.png

Chuyển đến tệp Program.cs bên trong thư mục BigQueryDemo rồi thay thế mã bằng đoạn mã sau. Đảm bảo bạn thay thế projectId bằng mã dự án thực tế của mình:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "samples", "shakespeare");
            var sql = $"SELECT corpus AS title, COUNT(word) AS unique_words FROM {table} GROUP BY title ORDER BY unique_words DESC LIMIT 10";

            var results = client.ExecuteQuery(sql, parameters: null);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["title"]}: {row["unique_words"]}");
            }
        }
    }
}

Hãy dành một hoặc hai phút để nghiên cứu mã và xem cách truy vấn bảng.

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

Bạn sẽ thấy danh sách các từ và số lần xuất hiện của chúng:

hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...

6. Truy vấn tập dữ liệu trên GitHub

Để làm quen hơn với BigQuery, giờ đây, bạn sẽ đưa ra một truy vấn đối với tập dữ liệu công khai của GitHub. Bạn sẽ tìm thấy những thông báo xác nhận phổ biến nhất trên GitHub. Bạn cũng sẽ sử dụng Bảng điều khiển trê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:

https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&page=table

Để xem nhanh dữ liệu trông như thế nào, hãy sử dụng nút Xem trước:

f706bfe3dfcbd267.png

Chuyển đến tệp Program.cs bên trong thư mục BigQueryDemo rồi thay thế mã bằng đoạn mã sau. Đảm bảo bạn thay thế projectId bằng mã dự án thực tế của mình:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
            
            var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";

            var results = client.ExecuteQuery(sql, parameters: null);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
            }
        }
    }
}

Dành một hoặc hai phút để nghiên cứu mã và xem cách bảng được truy vấn để tìm các thông báo cam kết phổ biến nhất.

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

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 chúng:

Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863

7. Lưu vào bộ nhớ đệm và số liệu thống kê

Sau truy vấn ban đầu, BigQuery sẽ lưu kết quả vào bộ nhớ đệm. Do đó, các truy vấn tiếp theo sẽ mất ít thời gian hơn nhiều. Bạn có thể tắt tính năng lưu vào bộ nhớ đệm bằng các lựa chọn truy vấn. BigQuery cũng theo dõi một số số liệu thống kê về các truy vấn, chẳng hạ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 tính năng lưu vào bộ nhớ đệm và hiển thị một số số liệu thống kê về các truy vấn.

Chuyển đến tệp Program.cs bên trong thư mục BigQueryDemo rồi thay thế mã bằng đoạn mã sau. Đảm bảo bạn thay thế projectId bằng mã dự án thực tế của mình:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = BigQueryClient.Create("projectId");
            var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
            
            var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
            var queryOptions = new QueryOptions {
                UseQueryCache = false
            };

            var results = client.ExecuteQuery(sql, parameters: null, queryOptions: queryOptions);

            foreach (var row in results)
            {
                Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
            }

            var job = client.GetJob(results.JobReference);
            var stats = job.Statistics;
            Console.WriteLine("----------");
            Console.WriteLine($"Creation time: {stats.CreationTime}");
            Console.WriteLine($"End time: {stats.EndTime}");
            Console.WriteLine($"Total bytes processed: {stats.TotalBytesProcessed}");
        }
    }
}

Một số điều cần lưu ý về mã này. Trước tiên, hãy vô hiệu hoá tính năng lưu vào bộ nhớ đệm bằng cách giới thiệu các lựa chọn truy vấn và đặt UseQueryCache 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.

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

Giống như trước đây, 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 chúng. Ngoài ra, bạn cũng sẽ thấy một số số liệu thống kê về cụm từ tìm kiếm ở cuối

Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
----------
Creation time: 1533052057398
End time: 1533052066961
Total bytes processed: 9944197093

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

Nếu muốn truy vấn dữ liệu của riêng mình, trước tiên, bạn cần tải dữ liệu lên BigQuery. BigQuery hỗ trợ tải dữ liệu từ nhiều nguồn, chẳng hạn như Google Cloud Storage, các dịch vụ khác của Google, một nguồn có thể đọc. Bạn thậm chí có thể truyền trực tuyến dữ liệu bằng cách sử dụng các phần chèn truyền trực tuyến. Bạn có thể đọc thêm trên trang Tải dữ liệu vào BigQuery.

Trong bước này, bạn sẽ tải một tệp JSON được lưu trữ trên Google Cloud Storage vào một bảng BigQuery. Tệp JSON nằm ở 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ể 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 .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][  2.0 KiB/  2.0 KiB]                                                
Operation completed over 1 objects/2.0 KiB.

Bạn có thể thấy rằng 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 biệt:

less 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 Program.cs bên trong thư mục BigQueryDemo rồi thay thế mã bằng đoạn mã sau. Đảm bảo bạn thay thế projectId bằng mã dự án thực tế của mình:

using System;
using Google.Cloud.BigQuery.V2;

namespace BigQueryDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var gcsUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
            var client = BigQueryClient.Create("projectId");
            var dataset = client.GetOrCreateDataset("us_states_dataset");

            var schema = new TableSchemaBuilder 
            {
                { "name", BigQueryDbType.String },
                { "post_abbr", BigQueryDbType.String }
            }.Build();

            var jobOptions = new CreateLoadJobOptions
            {
                SourceFormat = FileFormat.NewlineDelimitedJson
            };

            var table = dataset.GetTableReference("us_states_table");
            var loadJob = client.CreateLoadJob(gcsUri, table, schema, jobOptions);

            loadJob.PollUntilCompleted();
            loadJob.ThrowOnAnyError();
            Console.WriteLine("Json file loaded to BigQuery");
        }
    }
}

Dành một hoặc hai phút để nghiên cứu cách mã tải tệp JSON và tạo một bảng có giản đồ trong một tập dữ liệu.

Trong Cloud Shell, hãy chạy ứng dụng:

dotnet run

Một tập dữ liệu và một bảng được tạo trong BigQuery

Json file loaded to BigQuery

Để xác minh rằng tập dữ liệu thực sự được tạo, bạn có thể chuyển đến bảng điều khiển BigQuery. Bạn sẽ thấy một tập dữ liệu mới và một bảng được tạo. Nếu chuyển sang thẻ xem trước của bảng, bạn có thể xem dữ liệu thực tế:

7d9f7c493acbbf9a.png

9. Xin chúc mừng!

Bạn đã tìm hiểu cách sử dụng BigQuery bằng C#!

Dọn dẹp

Để tránh bị tính phí cho tài khoản Google Cloud Platform đối với các tài nguyên được dùng trong hướng dẫn bắt đầu nhanh này, hãy làm như sau:

  • Truy cập vào Cloud Platform Console.
  • Chọn dự án mà bạn muốn tắt, sau đó nhấp vào "Xoá" ở trên cùng: thao tác này sẽ lên lịch xoá dự án.

Tìm hiểu thêm

Giấy phép

Tác phẩm này được cấp phép theo giấy phép Ghi công theo Creative Commons 2.0 Chung.