استفاده از BigQuery با C#

استفاده از BigQuery با C#

درباره این codelab

subjectآخرین به‌روزرسانی: ژوئن ۲۶, ۲۰۲۳
account_circleنویسنده: Mete Atamel

1. نمای کلی

BigQuery انبار داده های تجزیه و تحلیلی کم هزینه و کاملاً مدیریت شده گوگل است. BigQuery NoOps است—هیچ زیرساختی برای مدیریت وجود ندارد و شما نیازی به مدیر پایگاه داده ندارید—بنابراین می توانید برای یافتن بینش های معنادار، بر تجزیه و تحلیل داده ها تمرکز کنید، از SQL آشنا استفاده کنید و از مدل پرداخت به موقع ما استفاده کنید.

در این لبه کد، از Google Cloud Client Libraries برای دات نت برای پرس و جو از مجموعه داده های عمومی BigQuery با C# استفاده خواهید کرد.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از Cloud Shell
  • نحوه فعال کردن BigQuery API
  • نحوه احراز هویت درخواست های API
  • نحوه نصب کتابخانه سرویس گیرنده Google Cloud برای C#
  • چگونه آثار شکسپیر را جویا شویم
  • چگونه مجموعه داده GitHub را پرس و جو کنیم
  • نحوه تنظیم کش و نمایش آمار

آنچه شما نیاز دارید

  • یک پروژه Google Cloud Platform
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با سی شارپ

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

به تجربه خود با سی شارپ چه امتیازی می دهید؟

تجربه خود را در استفاده از سرویس‌های پلتفرم ابری Google چگونه ارزیابی می‌کنید؟

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورت‌حساب فراتر از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید d1264ca30785e435.png .

cb81e7c8e34bc8d.png

اگر این اولین باری است که Cloud Shell را راه اندازی می کنید، با یک صفحه میانی روبرو می شوید که آن را توصیف می کند. اگر با یک صفحه میانی مواجه شدید، روی Continue کلیک کنید.

d95252b003979716.png

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

7833d5e1c5d18f54.png

این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی ارائه می‌کند و در Google Cloud اجرا می‌شود، که عملکرد و احراز هویت شبکه را بسیار افزایش می‌دهد. بسیاری از کارهای شما، اگر نه همه، در این کد لبه با مرورگر قابل انجام است.

پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده اید و پروژه به ID پروژه شما تنظیم شده است.

  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# ساده ایجاد کنید که از آن برای اجرای نمونه های 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. این شامل فهرست کلماتی از آثار شکسپیر است که تعداد دفعاتی که هر کلمه در هر مجموعه ظاهر می شود را نشان می دهد.

در این مرحله جدول شکسپیر را پرس و جو می کنید.

ابتدا ویرایشگر کد را از سمت راست بالای 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 را پرس و جو کنید

برای آشنایی بیشتر با BigQuery، اکنون یک پرس و جو علیه مجموعه داده عمومی GitHub صادر خواهید کرد. متداول ترین پیام های commit را در GitHub پیدا خواهید کرد. همچنین از کنسول وب BigQuery برای پیش نمایش و اجرای پرس و جوهای موقت استفاده خواهید کرد.

برای مشاهده اینکه داده ها چگونه به نظر می رسند، مجموعه داده GitHub را در رابط کاربری وب BigQuery باز کنید:

https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=github_repos&t=commits&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"]}");
           
}
       
}
   
}
}

یک یا دو دقیقه وقت بگذارید و کد را مطالعه کنید و ببینید که چگونه جدول برای رایج ترین پیام های commit پرس و جو می شود.

به Cloud Shell برگردید، برنامه را اجرا کنید:

dotnet run

شما باید لیستی از پیام های commit و وقوع آنها را ببینید:

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 غیرفعال می شود. دوم، شما به آمار مربوط به پرس و جو از شی job دسترسی پیدا کردید.

به Cloud Shell برگردید، برنامه را اجرا کنید:

dotnet run

مانند قبل، باید لیستی از پیام های commit و وقوع آنها را مشاهده کنید. علاوه بر این، در پایان باید برخی از آمارهای مربوط به پرس و جو را نیز مشاهده کنید

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 بروید.
  • پروژه‌ای را که می‌خواهید تعطیل کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: با این کار، پروژه برای حذف برنامه‌ریزی می‌شود.

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.