การใช้ BigQuery กับ C#

การใช้ BigQuery กับ C#

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ มิ.ย. 26, 2023
account_circleเขียนโดย Mete Atamel

1 ภาพรวม

BigQuery คือคลังเก็บข้อมูลการวิเคราะห์ต้นทุนต่ำที่มีความจุระดับเพทาไบต์ที่ Google จัดการอย่างเต็มรูปแบบ BigQuery คือ NoOps ไม่มีโครงสร้างพื้นฐานให้จัดการและคุณไม่จำเป็นต้องมีผู้ดูแลระบบฐานข้อมูล คุณจึงสามารถมุ่งเน้นไปที่การวิเคราะห์ข้อมูลเพื่อค้นหาข้อมูลเชิงลึกที่มีความหมาย ใช้ SQL ที่คุ้นเคย และใช้ประโยชน์จากโมเดลแบบจ่ายเมื่อใช้

ใน Codelab นี้ คุณจะใช้ไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ .NET เพื่อค้นหาชุดข้อมูลสาธารณะของ BigQuery ด้วย C#

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ Cloud Shell
  • วิธีเปิดใช้ BigQuery API
  • วิธีตรวจสอบสิทธิ์คำขอ API
  • วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ C#
  • วิธีค้นหาผลงานของเชกสเปียร์
  • วิธีค้นหาชุดข้อมูล GitHub
  • วิธีปรับการแคชและการแสดงสถิติ

สิ่งที่คุณต้องมี

  • โปรเจ็กต์ Google Cloud Platform
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • ความคุ้นเคยกับการใช้ C#

แบบสำรวจ

คุณจะใช้บทแนะนำนี้อย่างไร

คุณจะให้คะแนนความพึงพอใจสำหรับประสบการณ์การใช้งาน C# อย่างไร

คุณจะให้คะแนนความพึงพอใจสำหรับประสบการณ์การใช้บริการ Google Cloud Platform อย่างไร

2 การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตวิธีการชำระเงินได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้ใช้งานหรือไม่ คุณจะเปลี่ยนแปลงหลังจากขั้นตอนนี้ไม่ได้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

เปิดใช้งาน Cloud Shell

  1. คลิกเปิดใช้งาน Cloud Shell d1264ca30785e435.png จาก Cloud Console

cb81e7c8e34bc8d.png

หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป

d95252b003979716.png

การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที

7833d5e1c5d18f54.png

เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์

เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นข้อความตรวจสอบสิทธิ์และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว

  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list

เอาต์พุตจากคำสั่ง

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project

เอาต์พุตจากคำสั่ง

[core]
project = <PROJECT_ID>

หากไม่ใช่ ให้ตั้งคำสั่งด้วยคำสั่งนี้

gcloud config set project <PROJECT_ID>

เอาต์พุตจากคำสั่ง

Updated property [core/project].

3 เปิดใช้ BigQuery API

ควรเปิดใช้ BigQuery API โดยค่าเริ่มต้นในโปรเจ็กต์ Google Cloud ทั้งหมด คุณตรวจสอบว่าเรื่องนี้เป็นจริงหรือไม่ได้ด้วยคำสั่งต่อไปนี้ใน Cloud Shell: คุณควรอยู่ในรายการ BigQuery

gcloud services list

คุณควรเห็น BigQuery แสดงอยู่

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

ในกรณีที่ไม่ได้เปิดใช้ BigQuery API คุณจะใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อเปิดใช้ได้

gcloud services enable bigquery-json.googleapis.com

4 ติดตั้งไลบรารีของไคลเอ็นต์ BigQuery สำหรับ C#

ขั้นแรก ให้สร้างแอปพลิเคชันคอนโซล C# แบบง่ายที่คุณจะใช้เพื่อเรียกใช้ตัวอย่าง BigQuery API

dotnet new console -n BigQueryDemo

คุณควรเห็นการสร้างแอปพลิเคชันและการแก้ไขทรัพยากร Dependency แล้ว

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

จากนั้นไปที่โฟลเดอร์ BigQueryDemo

cd BigQueryDemo

และเพิ่มแพ็กเกจ NuGet Google.Cloud.BigQuery.V2 ลงในโปรเจ็กต์ด้วย

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

ตอนนี้คุณพร้อมที่จะใช้ BigQuery API แล้ว

5 ค้นหาผลงานของเชกสเปียร์

ชุดข้อมูลสาธารณะคือชุดข้อมูลที่จัดเก็บใน BigQuery และเผยแพร่ต่อสาธารณะ มีชุดข้อมูลสาธารณะอื่นๆ อีกมากมายให้คุณค้นหา โดยชุดข้อมูลบางส่วนโฮสต์โดย Google ด้วย แต่ก็มีชุดข้อมูลอื่นๆ อีกมากมายที่โฮสต์โดยบุคคลที่สาม คุณสามารถอ่านเพิ่มเติมได้ในหน้าชุดข้อมูลสาธารณะ

นอกจากชุดข้อมูลสาธารณะแล้ว BigQuery ยังมีตารางตัวอย่างที่จำกัดซึ่งคุณค้นหาได้ ตารางเหล่านี้อยู่ใน bigquery-public-data:samples dataset ตารางหนึ่งมีชื่อว่า shakespeare. โดยมีดัชนีคำจากผลงานต่างๆ ของเชกสเปียร์ ทำให้จำนวนครั้งที่แต่ละคำปรากฏในคอร์ปัส

ในขั้นตอนนี้ คุณจะค้นหาตารางเชกสเปียร์

ก่อนอื่น ให้เปิดตัวแก้ไขโค้ดจากมุมขวาบนของ Cloud Shell:

fd3fc1303e63572.png

ไปที่ไฟล์ Program.cs ในโฟลเดอร์ BigQueryDemo และแทนที่โค้ดด้วยโค้ดต่อไปนี้ โปรดแทนที่ projectId ด้วยรหัสโปรเจ็กต์จริงของคุณ

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"]}");
           
}
       
}
   
}
}

ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูว่าตารางมีการค้นหาอย่างไร

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

คุณจะเห็นรายการคำและรายการต่างๆ ดังต่อไปนี้

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

6 ค้นหาชุดข้อมูล GitHub

คุณจะต้องทำการค้นหาชุดข้อมูลสาธารณะของ GitHub เพื่อให้คุ้นเคยกับ BigQuery มากขึ้น คุณจะพบข้อความคอมมิตที่พบบ่อยที่สุดใน GitHub นอกจากนี้คุณยังใช้เว็บคอนโซลของ BigQuery เพื่อดูตัวอย่างและเรียกใช้คำค้นหาเฉพาะกิจได้อีกด้วย

หากต้องการดูว่าข้อมูลมีลักษณะอย่างไร ให้เปิดชุดข้อมูล GitHub ใน UI ทางเว็บของ BigQuery โดยทำดังนี้

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

ดูตัวอย่างข้อมูลอย่างรวดเร็ว โดยใช้ปุ่ม "แสดงตัวอย่าง"

f706bfe3dfcbd267.png

ไปที่ไฟล์ Program.cs ในโฟลเดอร์ BigQueryDemo และแทนที่โค้ดด้วยโค้ดต่อไปนี้ โปรดแทนที่ projectId ด้วยรหัสโปรเจ็กต์จริงของคุณ

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"]}");
           
}
       
}
   
}
}

ใช้เวลาสักครู่เพื่อศึกษาโค้ดและดูว่าตารางมีการค้นหาข้อความคอมมิตที่พบบ่อยที่สุดอย่างไร

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

คุณจะเห็นรายการข้อความคอมมิตและรายการต่างๆ ดังต่อไปนี้

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 การแคชและสถิติ

หลังจากการค้นหาเริ่มต้น BigQuery จะแคชผลลัพธ์ ด้วยเหตุนี้ การค้นหาที่ตามมาจึงใช้เวลาน้อยลงมาก คุณจะปิดใช้การแคชได้ด้วยตัวเลือกการค้นหา BigQuery ยังติดตามสถิติบางอย่างเกี่ยวกับคำค้นหา เช่น เวลาที่สร้าง เวลาสิ้นสุด และไบต์ทั้งหมดที่ประมวลผล

ในขั้นตอนนี้ คุณจะปิดการแคชและแสดงสถิติบางอย่างเกี่ยวกับข้อความค้นหา

ไปที่ไฟล์ Program.cs ในโฟลเดอร์ BigQueryDemo และแทนที่โค้ดด้วยโค้ดต่อไปนี้ โปรดแทนที่ projectId ด้วยรหัสโปรเจ็กต์จริงของคุณ

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}");
       
}
   
}
}

ข้อควรทราบบางประการเกี่ยวกับโค้ด ก่อนอื่น การแคชจะถูกปิดใช้โดยแนะนำตัวเลือกการค้นหาและตั้งค่า UseQueryCache เป็น "เท็จ" ขั้นที่สอง คุณเข้าถึงสถิติเกี่ยวกับการค้นหาจากออบเจ็กต์งาน

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

คุณจะเห็นรายการข้อความคอมมิตและรายการต่างๆ เช่นเดียวกับก่อนหน้านี้ นอกจากนี้ คุณควรจะเห็นสถิติจำนวนหนึ่งเกี่ยวกับข้อความค้นหาในตอนท้าย

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 กำลังโหลดข้อมูลลงใน BigQuery

หากต้องการค้นหาข้อมูลของคุณเอง คุณต้องโหลดข้อมูลลงใน BigQuery ก่อน BigQuery รองรับการโหลดข้อมูลจากแหล่งที่มาหลายแห่ง เช่น Google Cloud Storage, บริการอื่นๆ ของ Google ซึ่งเป็นแหล่งที่มาที่อ่านได้ นอกจากนี้ คุณยังสตรีมข้อมูลโดยใช้การแทรกแบบสตรีมมิงได้ด้วย อ่านเพิ่มเติมได้ในหน้าการโหลดข้อมูลลงใน BigQuery

ในขั้นตอนนี้ คุณจะต้องโหลดไฟล์ JSON ที่จัดเก็บไว้ใน Google Cloud Storage ลงในตาราง BigQuery ไฟล์ JSON อยู่ที่ gs://cloud-samples-data/bigquery/us-states/us-states.json

หากมีข้อสงสัยเกี่ยวกับเนื้อหาในไฟล์ JSON ให้ใช้เครื่องมือบรรทัดคำสั่ง gsutil เพื่อดาวน์โหลดใน 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.

คุณจะเห็นว่ามีรายชื่อรัฐในสหรัฐอเมริกา และแต่ละรัฐจะเป็นเอกสาร JSON แยกบรรทัดกัน ดังนี้

less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

หากต้องการโหลดไฟล์ JSON นี้ลงใน BigQuery ให้ไปที่ไฟล์ Program.cs ภายในโฟลเดอร์ BigQueryDemo และแทนที่โค้ดด้วยโค้ดต่อไปนี้ โปรดแทนที่ projectId ด้วยรหัสโปรเจ็กต์จริงของคุณ

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");
       
}
   
}
}

โปรดใช้เวลาสักครู่เพื่อศึกษาว่าโค้ดโหลดไฟล์ JSON และสร้างตารางที่มีสคีมาใต้ชุดข้อมูลอย่างไร

กลับไปที่ Cloud Shell แล้วเรียกใช้แอปโดยทำดังนี้

dotnet run

ระบบสร้างชุดข้อมูลและตารางใน BigQuery

Json file loaded to BigQuery

หากต้องการยืนยันว่าสร้างชุดข้อมูลแล้วจริงๆ ให้ไปที่คอนโซล BigQuery คุณควรเห็นชุดข้อมูลใหม่และมีการสร้างตาราง หากเปลี่ยนไปที่แท็บแสดงตัวอย่างของตาราง คุณจะเห็นข้อมูลจริงดังนี้

7d9f7c493acbbf9a.png

9 ยินดีด้วย

คุณได้เรียนรู้วิธีใช้ BigQuery ด้วย C# แล้ว

ล้างข้อมูล

เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้

  • ไปที่คอนโซล Cloud Platform
  • เลือกโครงการที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน: การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0