BigQuery'yi C# ile kullanma

1. Genel Bakış

BigQuery; Google'ın tümüyle yönetilen, petabayt ölçekli, düşük maliyetli analiz veri ambarıdır. BigQuery NoOps'tur. Yönetilecek altyapı olmadığından ve veritabanı yöneticisine gerek olmadığından verileri analiz ederek anlamlı analizler bulmaya odaklanabilir, aşina olduğunuz SQL'i kullanabilir ve kullandıkça öde modelimizden yararlanabilirsiniz.

Bu codelab'de, C# ile BigQuery herkese açık veri kümelerini sorgulamak için .NET için Google Cloud istemci kitaplıklarını kullanacaksınız.

Neler öğreneceksiniz?

  • Cloud Shell'i kullanma
  • BigQuery API'yi etkinleştirme
  • API isteklerinin kimliğini doğrulama
  • C# için Google Cloud istemci kitaplığını yükleme
  • Shakespeare'in eserlerini sorgulama
  • GitHub veri kümesini sorgulama
  • Önbelleğe alma ve görüntüleme istatistiklerini ayarlama

Gerekenler

  • Google Cloud Platform projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • C# kullanma konusunda bilgi sahibi olma

Anket

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyun ve alıştırmaları tamamlayın

C# ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

Google Cloud Platform hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i d1264ca30785e435.png tıklayın.

cb81e7c8e34bc8d.png

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

d95252b003979716.png

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

7833d5e1c5d18f54.png

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.

  1. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list

Komut çıkışı

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. BigQuery API'yi etkinleştirme

BigQuery API, tüm Google Cloud projelerinde varsayılan olarak etkinleştirilmelidir. Bunun doğru olup olmadığını Cloud Shell'de aşağıdaki komutla kontrol edebilirsiniz: BigQuery listelenmiş olmanız gerekir:

gcloud services list

BigQuery'nin listelendiğini görmeniz gerekir:

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

BigQuery API etkinleştirilmemişse Cloud Shell'de aşağıdaki komutu kullanarak etkinleştirebilirsiniz:

gcloud services enable bigquery-json.googleapis.com

4. C# için BigQuery istemci kitaplığını yükleme

Öncelikle BigQuery API örneklerini çalıştırmak için kullanacağınız basit bir C# konsol uygulaması oluşturun.

dotnet new console -n BigQueryDemo

Uygulamanın oluşturulduğunu ve bağımlılıkların çözüldüğünü görmelisiniz:

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

Ardından BigQueryDemo klasörüne gidin:

cd BigQueryDemo

Ayrıca projeye Google.Cloud.BigQuery.V2 NuGet paketini ekleyin:

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

Artık BigQuery API'yi kullanmaya hazırsınız.

5. Shakespeare'in eserlerini sorgulama

Herkese açık veri kümesi, BigQuery'de depolanan ve genel kullanıma sunulan tüm veri kümeleridir. Sorgulayabileceğiniz birçok başka herkese açık veri kümesi vardır. Bunlardan bazıları Google tarafından, çok daha fazlası ise üçüncü taraflarca barındırılır. Daha fazla bilgiyi Herkese Açık Veri Kümeleri sayfasında bulabilirsiniz.

BigQuery, ortak veri kümelerinin yanı sıra sorgulayabileceğiniz sınırlı sayıda örnek tablo da sağlar. Bu tablolar bigquery-public-data:samples dataset içinde yer alır. Bu tablolardan birinin adı shakespeare.. Bu tablo, Shakespeare'in eserlerinin kelime dizinini içerir ve her kelimenin her korpusta kaç kez geçtiğini gösterir.

Bu adımda, Shakespeare tablosunu sorgulayacaksınız.

Öncelikle Cloud Shell'in sağ üst tarafındaki kod düzenleyiciyi açın:

fd3fc1303e63572.png

BigQueryDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakiyle değiştirin. projectId kısmını gerçek proje kimliğinizle değiştirdiğinizden emin olun:

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

Kodu incelemek ve tablonun nasıl sorgulandığını görmek için birkaç dakikanızı ayırın.

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

Kelimelerin ve kaç kez kullanıldıklarının listesini görürsünüz:

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

6. GitHub veri kümesini sorgulama

BigQuery'ye daha aşina olmak için şimdi GitHub herkese açık veri kümesi'ne karşı bir sorgu göndereceksiniz. En yaygın commit mesajlarını GitHub'da bulabilirsiniz. Ayrıca, BigQuery'nin web konsolunu kullanarak anlık sorguları önizleyecek ve çalıştıracaksınız.

Verilerin nasıl göründüğünü görmek için GitHub veri kümesini BigQuery web kullanıcı arayüzünde açın:

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

Verilerin nasıl göründüğüne dair hızlı bir önizleme almak için Önizleme düğmesini kullanın:

f706bfe3dfcbd267.png

BigQueryDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakiyle değiştirin. projectId kısmını gerçek proje kimliğinizle değiştirdiğinizden emin olun:

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

Kodu incelemek ve tablonun en yaygın commit mesajları için nasıl sorgulandığını görmek için bir veya iki dakikanızı ayırın.

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

Commit mesajlarının ve bunların oluşumlarının listesini görürsünüz:

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. Önbelleğe alma ve istatistikler

BigQuery, ilk sorgudan sonra sonuçları önbelleğe alır. Bu nedenle, sonraki sorgular çok daha kısa sürer. Sorgu seçenekleriyle önbelleğe almayı devre dışı bırakabilirsiniz. BigQuery, sorgularla ilgili bazı istatistikleri de (ör. oluşturma zamanı, bitiş zamanı, işlenen toplam bayt) takip eder.

Bu adımda, önbelleğe almayı devre dışı bırakacak ve sorgularla ilgili bazı istatistikleri de göstereceksiniz.

BigQueryDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakiyle değiştirin. projectId kısmını gerçek proje kimliğinizle değiştirdiğinizden emin olun:

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

Kodla ilgili dikkat edilmesi gereken bazı noktalar: İlk olarak, sorgu seçenekleri eklenerek ve UseQueryCache değeri false olarak ayarlanarak önbelleğe alma devre dışı bırakılır. İkincisi, sorguyla ilgili istatistiklere iş nesnesinden erişmişsinizdir.

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

Daha önce olduğu gibi, commit mesajlarının ve bunların oluşumlarının listesini görürsünüz. Ayrıca, sorguyla ilgili bazı istatistikleri de görebilirsiniz.

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'ye veri yükleme

Kendi verilerinizi sorgulamak istiyorsanız önce verilerinizi BigQuery'ye yüklemeniz gerekir. BigQuery; Google Cloud Storage, diğer Google hizmetleri ve okunabilir bir kaynak gibi birçok kaynaktan veri yüklemeyi destekler. Hatta akış eklerini kullanarak verilerinizi yayınlayabilirsiniz. BigQuery'ye Veri Yükleme sayfasında daha fazla bilgi edinebilirsiniz.

Bu adımda, Google Cloud Storage'da depolanan bir JSON dosyasını BigQuery tablosuna yükleyeceksiniz. JSON dosyası şu konumda bulunuyor: gs://cloud-samples-data/bigquery/us-states/us-states.json

JSON dosyasının içeriğini merak ediyorsanız Cloud Shell'de indirmek için gsutil komut satırı aracını kullanabilirsiniz:

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.

Bu dosyanın ABD eyaletlerinin listesini içerdiğini ve her eyaletin ayrı bir satırda JSON belgesi olarak yer aldığını görebilirsiniz:

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

Bu JSON dosyasını BigQuery'ye yüklemek için BigQueryDemo klasöründeki Program.cs dosyasına gidin ve kodu aşağıdakilerle değiştirin. projectId kısmını gerçek proje kimliğinizle değiştirdiğinizden emin olun:

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

Kodun JSON dosyasını nasıl yüklediğini ve bir veri kümesi altında şeması olan bir tabloyu nasıl oluşturduğunu incelemek için bir veya iki dakikanızı ayırın.

Cloud Shell'e dönüp uygulamayı çalıştırın:

dotnet run

BigQuery'de bir veri kümesi ve tablo oluşturulur.

Json file loaded to BigQuery

Veri kümesinin gerçekten oluşturulduğunu doğrulamak için BigQuery konsoluna gidebilirsiniz. Yeni bir veri kümesi ve tablo oluşturulduğunu görürsünüz. Tablonun önizleme sekmesine geçerseniz gerçek verileri görebilirsiniz:

7d9f7c493acbbf9a.png

9. Tebrikler!

C# kullanarak BigQuery'yi nasıl kullanacağınızı öğrendiniz.

Temizleme

Bu hızlı başlangıçta kullanılan kaynaklar için Google Cloud Platform hesabınızın ücretlendirmesini önlemek amacıyla:

  • Cloud Platform Console'a gidin.
  • Kapatmak istediğiniz projeyi seçin, ardından üst kısımdaki "Sil"i tıklayın. Bu işlem, projenin silinmesini planlar.

Daha Fazla Bilgi

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.