C# के साथ BigQuery का इस्तेमाल करना

1. खास जानकारी

BigQuery, Google का पूरी तरह से मैनेज किया गया डेटा वेयरहाउस है. इसमें, कम-लागत में कई पेटाबाइट डेटा के विश्लेषण की सुविधा मिलती है. BigQuery एक NoOps (ऑपरेशन के लिए किसी भी तरह के मानवीय हस्तक्षेप की ज़रूरत नहीं होती) सेवा है. इसमें किसी इंफ़्रास्ट्रक्चर को मैनेज करने की ज़रूरत नहीं होती. साथ ही, आपको डेटाबेस एडमिन की भी ज़रूरत नहीं होती. इसलिए, डेटा का विश्लेषण करके अपने काम की अहम जानकारी ढूंढने पर ध्यान दें. इसके लिए, जाने-पहचाने SQL का इस्तेमाल करें. साथ ही, इस्तेमाल के हिसाब से पेमेंट करने वाले हमारे मॉडल का फ़ायदा पाएं.

इस कोडलैब में, C# का इस्तेमाल करके BigQuery के सार्वजनिक डेटासेट को क्वेरी करने के लिए, .NET के लिए Google Cloud Client Libraries का इस्तेमाल किया जाएगा.

आपको क्या सीखने को मिलेगा

  • Cloud Shell का इस्तेमाल कैसे करें
  • BigQuery API को चालू करने का तरीका
  • एपीआई अनुरोधों की पुष्टि करने का तरीका
  • C# के लिए Google Cloud क्लाइंट लाइब्रेरी इंस्टॉल करने का तरीका
  • शेक्सपियर की रचनाओं के बारे में क्वेरी करने का तरीका
  • 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 API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग को अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी (आम तौर पर PROJECT_ID के तौर पर पहचाना जाता है) का रेफ़रंस देना होगा. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहता है.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मिलेगा. वे इसे मुफ़्त में आज़मा सकते हैं.

Cloud Shell शुरू करें

Google Cloud को अपने लैपटॉप से रिमोटली ऐक्सेस किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जाएगा. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें d1264ca30785e435.png पर क्लिक करें.

cb81e7c8e34bc8d.png

अगर आपने Cloud Shell को पहली बार शुरू किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर आपको इंटरमीडिएट स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

d95252b003979716.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

7833d5e1c5d18f54.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है, जो हमेशा बनी रहती है. साथ ही, यह Google Cloud में काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.

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. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
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. C# के लिए 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

BigQueryDemo फ़ोल्डर में मौजूद Program.cs फ़ाइल पर जाएं और कोड को इससे बदलें. 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 के सार्वजनिक डेटासेट के लिए क्वेरी जारी करें. आपको GitHub पर सबसे ज़्यादा इस्तेमाल होने वाले कमिट मैसेज मिलेंगे. आपको BigQuery के वेब कंसोल का इस्तेमाल करके, ऐड-हॉक क्वेरी की झलक देखने और उन्हें चलाने का विकल्प भी मिलेगा.

डेटा कैसा दिखता है, यह देखने के लिए BigQuery के वेब यूज़र इंटरफ़ेस (यूआई) में GitHub डेटासेट खोलें:

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

'झलक देखें' बटन का इस्तेमाल करके, डेटा की झलक देखें:

f706bfe3dfcbd267.png

BigQueryDemo फ़ोल्डर में मौजूद Program.cs फ़ाइल पर जाएं और कोड को इससे बदलें. 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, क्वेरी के बारे में कुछ आंकड़ों को भी ट्रैक करता है. जैसे, क्वेरी बनाने का समय, क्वेरी खत्म होने का समय, और प्रोसेस किए गए कुल बाइट.

इस चरण में, आपको कैश मेमोरी बंद करने का विकल्प मिलेगा. साथ ही, क्वेरी के बारे में कुछ आंकड़े भी दिखेंगे.

BigQueryDemo फ़ोल्डर में मौजूद Program.cs फ़ाइल पर जाएं और कोड को इससे बदलें. 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 पर सेट करके, कैश मेमोरी में सेव होने की सुविधा बंद की जाती है. दूसरा, आपने नौकरी के ऑब्जेक्ट से क्वेरी के बारे में आंकड़े ऐक्सेस किए.

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 में डेटा लोड करना पेज पर जाकर, इस बारे में ज़्यादा जानकारी पाई जा सकती है.

इस चरण में, Google Cloud Storage में सेव की गई JSON फ़ाइल को BigQuery टेबल में लोड किया जाएगा. JSON फ़ाइल, gs://cloud-samples-data/bigquery/us-states/us-states.json पर मौजूद है

अगर आपको JSON फ़ाइल के कॉन्टेंट के बारे में जानना है, तो Cloud Shell में इसे डाउनलोड करने के लिए, gsutil कमांड लाइन टूल का इस्तेमाल करें:

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 में लोड करने के लिए, BigQueryDemo फ़ोल्डर में मौजूद Program.cs फ़ाइल पर जाएं और कोड को इससे बदलें. 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. बधाई हो!

आपने C# का इस्तेमाल करके BigQuery का इस्तेमाल करने का तरीका सीखा!

व्यवस्थित करें

इस क्विकस्टार्ट में इस्तेमाल की गई संसाधनों के लिए, अपने Google Cloud Platform खाते से शुल्क न लिए जाने के लिए:

  • Cloud Platform Console पर जाएं.
  • वह प्रोजेक्ट चुनें जिसे बंद करना है. इसके बाद, सबसे ऊपर मौजूद ‘मिटाएं' पर क्लिक करें: इससे प्रोजेक्ट को मिटाने के लिए शेड्यूल कर दिया जाता है.

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.