1. ภาพรวม
BigQuery คือคลังข้อมูลการวิเคราะห์ที่มีการจัดการอย่างเต็มรูปแบบ มีความจุระดับเพทาไบต์ และมีต้นทุนต่ำของ Google BigQuery เป็น NoOps ซึ่งไม่มีโครงสร้างพื้นฐานที่ต้องจัดการและคุณไม่จำเป็นต้องมีผู้ดูแลฐานข้อมูล คุณจึงมุ่งเน้นที่การวิเคราะห์ข้อมูลเพื่อค้นหาข้อมูลเชิงลึกที่มีความหมาย ใช้ SQL ที่คุ้นเคย และใช้ประโยชน์จากโมเดลการชำระเงินตามการใช้งาน
ในโค้ดแล็บนี้ คุณจะได้ใช้ไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ .NET เพื่อค้นหาชุดข้อมูลสาธารณะของ BigQuery ด้วย C#
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ Cloud Shell
- วิธีเปิดใช้ BigQuery API
- วิธีตรวจสอบสิทธิ์คำขอ API
- วิธีติดตั้งไลบรารีของไคลเอ็นต์ Google Cloud สำหรับ C#
- วิธีค้นหาผลงานของเชกสเปียร์
- วิธีค้นหาชุดข้อมูล GitHub
- วิธีปรับสถิติการแคชและการแสดงผล
สิ่งที่คุณต้องมี
แบบสำรวจ
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน C# เท่าใด
คุณจะให้คะแนนประสบการณ์การใช้บริการ Google Cloud Platform เท่าใด
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



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


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

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

เครื่องเสมือนนี้โหลดเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่จำเป็นไว้แล้ว โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้ด้วยเบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์และระบบได้ตั้งค่าโปรเจ็กต์เป็นรหัสโปรเจ็กต์ของคุณ
- เรียกใช้คำสั่งต่อไปนี้ใน 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`
- เรียกใช้คำสั่งต่อไปนี้ใน 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
คุณควรเห็นแอปพลิเคชันที่สร้างขึ้นและมีการแก้ไขการอ้างอิงแล้ว
The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.
จากนั้นไปที่โฟลเดอร์ BigQueryDemo โดยใช้คำสั่งต่อไปนี้
cd BigQueryDemo
และเพิ่มแพ็กเกจ Google.Cloud.BigQuery.V2 NuGet ลงในโปรเจ็กต์
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. ซึ่งมีดัชนีคำของผลงานของเชกสเปียร์ โดยระบุจำนวนครั้งที่แต่ละคำปรากฏในแต่ละคลัง
ในขั้นตอนนี้ คุณจะค้นหาตาราง Shakespeare
ก่อนอื่น ให้เปิดเครื่องมือแก้ไขโค้ดจากด้านขวาบนของ Cloud Shell โดยทำดังนี้

ไปที่ไฟล์ 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&d=github_repos&t=commits&page=table
ดูตัวอย่างคร่าวๆ ว่าข้อมูลมีลักษณะอย่างไรโดยใช้ปุ่มแสดงตัวอย่าง

ไปที่ไฟล์ 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 เป็น false ประการที่ 2 คุณเข้าถึงสถิติเกี่ยวกับคำค้นหาจากออบเจ็กต์งาน
กลับไปที่ 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 คุณควรเห็นชุดข้อมูลและตารางใหม่ที่สร้างขึ้น หากเปลี่ยนไปที่แท็บตัวอย่างของตาราง คุณจะเห็นข้อมูลจริง

9. ยินดีด้วย
คุณได้เรียนรู้วิธีใช้ BigQuery โดยใช้ C# แล้ว
ล้างข้อมูล
เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud Platform สำหรับทรัพยากรที่ใช้ในการเริ่มต้นอย่างรวดเร็วนี้ ควรทำดังนี้
- ไปที่คอนโซล Cloud Platform
- เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- C#/.NET ใน Google Cloud Platform: https://cloud.google.com/dotnet/
- ไคลเอ็นต์ .NET ของ Google Cloud: https://googlecloudplatform.github.io/google-cloud-dotnet/
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป