BigQuery'yi Python 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ı yoktur ve veritabanı yöneticisine ihtiyaç duyulmaz. Bu sayede anlamlı analizler bulmak için veri analizine odaklanabilir, bildiğiniz SQL'leri kullanabilir ve kullandıkça öde modelimizden yararlanabilirsiniz.

Bu codelab'de, Python ile BigQuery herkese açık veri kümelerini sorgulamak için Python için Google Cloud İstemci Kitaplıkları'nı kullanacaksınız.

Neler öğreneceksiniz?

  • Cloud Shell'i kullanma
  • BigQuery API'yi etkinleştirme
  • API isteklerinin kimliğini doğrulama
  • Python 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

  • Bir Google Cloud projesi
  • Chrome veya Firefox gibi bir tarayıcı
  • Python kullanımı hakkında bilgi

Anket

Bu eğiticiden nasıl yararlanacaksınız?

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

Python deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta Yeterli

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

Acemi Orta Yeterli

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü 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 çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 853e55310c205094.png simgesini tıklayın.

55efc1aaa7a4d3ad.png

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmında) gösterilir. Bu durumda Devam'ı tıklayın (bunu bir daha görmezsiniz). Tek seferlik ekran şöyle görünür:

9c92662c6a846a5c.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

9f0e51b578fecce5.png

İhtiyaç duyduğunuz tüm geliştirme araçları bu sanal makinede yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı yalnızca bir tarayıcı veya Chromebook'unuzla yapılabilir.

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. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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 projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. 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 listesinde yer almanız gerekir:

gcloud services list

BigQuery aşağıdaki listede gösterilir:

NAME                              TITLE
bigquery.googleapis.com           BigQuery API

...

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

gcloud services enable bigquery.googleapis.com

4. API isteklerinin kimliğini doğrulama

BigQuery API'ye istek göndermek için Hizmet Hesabı kullanmanız gerekir. Hizmet Hesabı projenize aittir ve Google Cloud Python istemci kitaplığı tarafından BigQuery API istekleri yapmak için kullanılır. Diğer tüm kullanıcı hesapları gibi hizmet hesabı da e-posta adresiyle temsil edilir. Bu bölümde Google Cloud SDK'yı kullanarak bir hizmet hesabı oluşturacaksınız. Ardından, hizmet hesabı olarak kimliğinizi doğrulamak için gereken kimlik bilgilerini oluşturacaksınız.

Öncelikle bir PROJECT_ID ortam değişkeni ayarlayın:

export PROJECT_ID=$(gcloud config get-value core/project)

Ardından aşağıdakileri kullanarak BigQuery API'ye erişmek için yeni bir hizmet hesabı oluşturun:

gcloud iam service-accounts create my-bigquery-sa \
  --display-name "my bigquery service account"

Ardından, Python kodunuzun yeni hizmet hesabınız olarak giriş yapmak için kullanacağı kimlik bilgilerini oluşturun. Bu kimlik bilgilerini oluşturun ve aşağıdaki komutu kullanarak ~/key.json JSON dosyası olarak kaydedin:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com

Son olarak, kimlik bilgilerinizi bulmak için BigQuery Python istemci kitaplığı tarafından kullanılacak ve bir sonraki adımda ele alınacak olan GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın. Ortam değişkeninin, oluşturduğunuz kimlik bilgisi JSON dosyasının tam yoluna şu şekilde ayarlanması gerekir:

export GOOGLE_APPLICATION_CREDENTIALS=~/key.json

BigQuery API'nin kimliğini doğrulama hakkında daha fazla bilgi edinebilirsiniz.

5. Erişim denetimini ayarlayın

BigQuery, kaynaklara erişimi yönetmek için Identity and Access Management (IAM) kullanır. BigQuery'de, önceki adımda oluşturduğunuz hizmet hesabınıza atayabileceğiniz önceden tanımlanmış çeşitli roller (user, dataOwner, dataViewer vb.) bulunur. Erişim Denetimi hakkında daha fazla bilgiyi BigQuery belgelerinde bulabilirsiniz.

Herkese açık veri kümelerini sorgulayabilmek için hizmet hesabının en azından roles/bigquery.user rolüne sahip olduğundan emin olmanız gerekir. Cloud Shell'de, kullanıcı rolünü hizmet hesabına atamak için aşağıdaki komutu çalıştırın:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/bigquery.user"

Hizmet hesabının kullanıcı rolüne sahip olduğunu doğrulamak için aşağıdaki komutu çalıştırabilirsiniz:

gcloud projects get-iam-policy $PROJECT_ID

Aşağıdaki ekranı görmeniz gerekir:

bindings:
- members:
  - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com
  role: roles/bigquery.user
...

6. İstemci kitaplığını yükleme

BigQuery Python istemci kitaplığını yükleyin:

pip3 install --user --upgrade google-cloud-bigquery

Artık BigQuery API ile kod yazmaya hazırsınız.

7. Shakespeare'in eserlerini sorgulayın

Ortak veri kümesi, BigQuery'de depolanan ve herkesin kullanımına açık olan herhangi bir veri kümesidir. Sorgulayabileceğiniz başka birçok herkese açık veri kümesi vardır. Bazı veri kümeleri Google tarafından barındırılsa da çoğu, üçüncü taraflarca barındırılır. Daha fazla bilgi için Herkese Açık Veri Kümeleri sayfasını inceleyin.

BigQuery, herkese açık veri kümelerine ek olarak sorgulayabileceğiniz sınırlı sayıda örnek tablo sağlar. Bu tablolar, bigquery-public-data:samples veri kümesinde yer alır. samples veri kümesindeki shakespeare tablosu, Shakespeare'in eserlerine ait bir kelime dizinini içerir. Her kelimenin her toplulukta kaç kez geçtiğini gösterir.

Bu adımda shakespeare tablosunu sorgulayacaksınız.

Öncelikle Cloud Shell'de, Translation API örneklerini çalıştırmak için kullanacağınız basit bir Python uygulaması oluşturun.

mkdir bigquery-demo
cd bigquery-demo
touch app.py

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

b648141af44811a3.png

bigquery-demo klasörünün içindeki app.py dosyasına gidin ve kodu aşağıdakiyle değiştirin.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT corpus AS title, COUNT(word) AS unique_words
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY title
    ORDER BY unique_words
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    title = row['title']
    unique_words = row['unique_words']
    print(f'{title:<20} | {unique_words}')

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

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

python3 app.py

Kelimelerin ve geçtiği yerlerin listesini göreceksiniz:

hamlet               | 5318
kinghenryv           | 5104
cymbeline            | 4875
troilusandcressida   | 4795
kinglear             | 4784
kingrichardiii       | 4713
2kinghenryvi         | 4683
coriolanus           | 4653
2kinghenryiv         | 4605
antonyandcleopatra   | 4582

8. GitHub veri kümesini sorgulama

BigQuery hakkında daha fazla bilgi edinmek için şimdi GitHub herkese açık veri kümesi ile ilgili bir sorgu yayınlamanız gerekir. En yaygın kayıt mesajlarını GitHub'da bulabilirsiniz. Ayrıca BigQuery'nin Web konsolunu kullanarak anlık sorguları önizleyebilir ve çalıştırabilirsiniz.

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

github_repos tablosunu aç

Verilerin nasıl göründüğüne bakmak için Önizleme düğmesini tıklayın:

d3f0dc7400fbe678.png

bigquery_demo klasörünün içindeki app.py dosyasına gidin ve kodu aşağıdakiyle değiştirin.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

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

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

python3 app.py

Kaydetme mesajlarının ve geçtiği yerlerin listesini görürsünüz:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862

9. Önbelleğe alma ve istatistikler

BigQuery, sorguların sonuçlarını önbelleğe alır. Bunun sonucunda, sonraki sorgular daha kısa sürer. Sorgu seçenekleriyle önbelleğe almayı devre dışı bırakmak mümkündür. BigQuery; oluşturma zamanı, bitiş zamanı, işlenen toplam bayt sayısı gibi sorgularla ilgili istatistikleri de takip eder.

Bu adımda, önbelleğe almayı devre dışı bırakır ve sorgularla ilgili istatistikleri de görüntülersiniz.

bigquery_demo klasörünün içindeki app.py dosyasına gidin ve kodu aşağıdakiyle değiştirin.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

print('-'*60)
print(f'Created: {results.created}')
print(f'Ended:   {results.ended}')
print(f'Bytes:   {results.total_bytes_processed:,}')

Kodla ilgili dikkat edilmesi gereken birkaç nokta: Öncelikle, QueryJobConfig kullanımı ve use_query_cache politikasının yanlış değerine ayarlanmasıyla önbelleğe alma devre dışı bırakılır. İkinci olarak, sorguyla ilgili istatistiklere iş nesnesinden eriştiniz.

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

python3 app.py

Daha önce olduğu gibi, kaydetme mesajlarının ve bunların oluşumlarının listesini görürsünüz. Ayrıca, listenin sonunda sorguyla ilgili bazı istatistikler de göreceksiniz:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862
------------------------------------------------------------
Created: 2020-04-03 13:30:08.801000+00:00
Ended:   2020-04-03 13:30:15.334000+00:00
Bytes:   2,868,251,894

10. BigQuery'ye veri yükleme

Kendi verilerinizi sorgulamak istiyorsanız verilerinizi BigQuery'ye yüklemeniz gerekir. BigQuery; Cloud Storage, diğer Google hizmetleri ve diğer okunabilir kaynaklar dahil olmak üzere birçok kaynaktan veri yüklemeyi destekler. Akış ekleme özelliğini kullanarak da veri akışı sağlayabilirsiniz. Daha fazla bilgi için BigQuery'ye veri yükleme sayfasını inceleyin.

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

JSON dosyasının içeriğini merak ediyorsanız gsutil komut satırı aracını kullanarak dosyayı Cloud Shell'e indirebilirsiniz:

gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .

ABD eyaletlerinin listesini içerdiğini ve her eyaletin ayrı bir satırda bir JSON dokümanı olduğunu görebilirsiniz:

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

Bu JSON dosyasını BigQuery'ye yüklemek için bigquery_demo klasöründeki app.py dosyasına gidin ve kodu aşağıdaki kodla değiştirin.

from google.cloud import bigquery

client = bigquery.Client()

gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'

dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')

job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)

print('JSON file loaded to BigQuery')

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

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

python3 app.py

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

Veri kümesinin oluşturulduğunu doğrulamak için BigQuery konsoluna gidin. Yeni bir veri kümesi ve tablo göreceksiniz. Verilerinizi görmek için tablonun önizleme sekmesine geçin:

8c7d2621820a5ac4.png

11. Tebrikler!

BigQuery'yi Python ile kullanmayı öğrendiniz.

Temizleme

Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla:

  • Cloud Console'da Kaynakları yönetin sayfasına gidin.
  • Proje listesinde projenizi seçin ve Sil'i tıklayın.
  • İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

Daha fazla bilgi

Lisans

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