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

۱. مرور کلی

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

در این آزمایشگاه کد، شما از کتابخانه‌های کلاینت ابری گوگل برای دات‌نت (.NET) برای کوئری گرفتن از مجموعه داده‌های عمومی BigQuery با سی‌شارپ استفاده خواهید کرد.

آنچه یاد خواهید گرفت

  • نحوه استفاده از پوسته ابری
  • نحوه فعال کردن API بیگ‌کوئری
  • نحوه احراز هویت درخواست‌های API
  • نحوه نصب کتابخانه کلاینت گوگل کلود برای سی شارپ
  • چگونه آثار شکسپیر را جستجو کنیم
  • نحوه پرس و جو از مجموعه داده GitHub
  • نحوه تنظیم حافظه پنهان و نمایش آمار

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

  • یک پروژه پلتفرم ابری گوگل
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با استفاده از سی شارپ

نظرسنجی

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

فقط تا انتها بخوانید آن را بخوانید و تمرین‌ها را انجام دهید

تجربه خود را با C# چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

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

تازه کار متوسط ماهر

۲. تنظیمات و الزامات

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

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

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

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

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

فعال کردن پوسته ابری

  1. از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید d1264ca30785e435.png .

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.png

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز است. این ماشین یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش می‌دهد. بخش عمده‌ای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را می‌توان با یک مرورگر انجام داد.

پس از اتصال به 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].

۳. فعال کردن API بیگ‌کوئری

رابط برنامه‌نویسی کاربردی BigQuery باید به طور پیش‌فرض در تمام پروژه‌های Google Cloud فعال باشد. می‌توانید با دستور زیر در Cloud Shell بررسی کنید که آیا این موضوع صحت دارد یا خیر: شما باید در فهرست BigQuery قرار بگیرید:

gcloud services list

شما باید BigQuery را در لیست ببینید:

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

در صورتی که API مربوط به BigQuery فعال نباشد، می‌توانید از دستور زیر در Cloud Shell برای فعال کردن آن استفاده کنید:

gcloud services enable bigquery-json.googleapis.com

۴. کتابخانه کلاینت 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

و بسته‌ی 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 هستید!

۵. آثار شکسپیر را بررسی کنید

مجموعه داده عمومی، هر مجموعه داده‌ای است که در BigQuery ذخیره شده و در دسترس عموم قرار می‌گیرد. مجموعه داده‌های عمومی دیگری نیز برای جستجو در دسترس شما هستند که برخی از آنها نیز توسط گوگل میزبانی می‌شوند، اما بسیاری دیگر توسط اشخاص ثالث میزبانی می‌شوند. می‌توانید اطلاعات بیشتر را در صفحه مجموعه داده‌های عمومی مطالعه کنید.

علاوه بر مجموعه داده‌های عمومی، 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
...

۶. کوئری گرفتن از مجموعه داده‌های گیت‌هاب

برای آشنایی بیشتر با BigQuery، اکنون یک کوئری در مجموعه داده‌های عمومی GitHub ارسال خواهید کرد. رایج‌ترین پیام‌های commit را در GitHub خواهید یافت. همچنین از کنسول وب BigQuery برای پیش‌نمایش و اجرای کوئری‌های ad-hoc استفاده خواهید کرد.

برای دیدن نحوه نمایش داده‌ها، مجموعه داده 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"]}");
            }
        }
    }
}

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

دوباره به 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

۷. ذخیره‌سازی و آمار

پس از پرس‌وجوی اولیه، 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

مانند قبل، باید فهرستی از پیام‌های کامیت و تعداد رخدادهای آنها را ببینید. علاوه بر این، در پایان باید برخی آمارها در مورد کوئری را نیز مشاهده کنید.

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

۸. بارگذاری داده‌ها در 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

۹. تبریک می‌گویم!

شما یاد گرفتید که چگونه از BigQuery با استفاده از C# استفاده کنید!

تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب پلتفرم گوگل کلود خود برای منابع استفاده شده در این راهنمای سریع:

  • به کنسول پلتفرم ابری بروید.
  • پروژه‌ای را که می‌خواهید خاموش کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: این کار پروژه را برای حذف زمان‌بندی می‌کند.

اطلاعات بیشتر

مجوز

این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.