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ı 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, 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

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

Anket

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

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

Python ile ilgili deneyiminizi nasıl değerlendirirsiniz?

Yeni başlayan Orta düzey Uzman

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

Başlangıç Orta İleri

2. Kurulum ve şartlar

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.

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 dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı 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ğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur".
  • 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ırma ücreti alınmaması için kaynakları kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni 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 853e55310c205094.png 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ı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

Bu sanal makine, ihtiyaç duyduğunuz tüm geliştirme araçlarını içerir. 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ı yalnızca bir tarayıcı veya Chromebook'unuzla 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. 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.googleapis.com           BigQuery API

...

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

gcloud services enable bigquery.googleapis.com

4. API isteklerinin kimliğini doğrulama

BigQuery API'ye istekte bulunmak için hizmet hesabı kullanmanız gerekir. Hizmet hesabı, projenize aittir ve Google Cloud Python istemci kitaplığı tarafından BigQuery API istekleri göndermek için kullanılır. Diğer tüm kullanıcı hesapları gibi, hizmet hesabı da bir e-posta adresiyle temsil edilir. Bu bölümde, hizmet hesabı oluşturmak için Cloud SDK'yı kullanacak, ardından hizmet hesabı olarak kimlik 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, 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şturduktan sonra aşağıdaki komut aracılığıyla bir JSON dosyası ~/key.json 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 sonraki adımda ele alınacak olan BigQuery Python istemci kitaplığı tarafından kullanılan GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın. Ortam değişkeni, oluşturduğunuz kimlik bilgisi JSON dosyasının tam dizin yoluna göre ayarlanmalıdır. Bunun için:

export GOOGLE_APPLICATION_CREDENTIALS=~/key.json

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

5. Erişim denetimini ayarlama

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 bir dizi önceden tanımlanmış rol (kullanıcı, dataOwner, dataViewer vb.) bulunur. Erişim denetimi hakkında daha fazla bilgiyi BigQuery dokümanlarında 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 sorgulama

Herkese açık veri kümesi, BigQuery'de depolanan ve genel kullanıma sunulan tüm veri kümeleridir. Sorgulayabileceğiniz başka birçok herkese açık veri kümesi vardır. Bazı veri kümeleri Google tarafından barındırılırken çoğu üçüncü taraflarca barındırılır. Daha fazla bilgi için Herkese Açık Veri Kümeleri sayfasına bakın.

BigQuery, ortak veri kümelerinin yanı sıra sorgulayabileceğiniz sınırlı sayıda örnek tablo da sunar. Bu tablolar bigquery-public-data:samples veri kümesinde yer alır. samples veri kümesindeki shakespeare tablosu, Shakespeare'in eserlerinin kelime dizinini içerir. Her bir kelimenin her bir derlemde kaç kez geçtiğini gösterir.

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

İlk olarak 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ındaki kod düzenleyiciyi açın:

b648141af44811a3.png

bigquery-demo klasöründeki 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 birkaç dakikanızı ayırın.

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

python3 app.py

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
coriolanus           | 4653
2kinghenryiv         | 4605
antonyandcleopatra   | 4582

8. GitHub veri kümesini sorgulama

BigQuery'ye daha aşina olmak için şimdi GitHub herkese açık veri kümesi ile ilgili 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:

github_repos tablosunu açın.

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

d3f0dc7400fbe678.png

bigquery_demo klasöründeki 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 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:

python3 app.py

Commit mesajlarının ve bunların oluşumlarının 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, sorgu sonuçlarını önbelleğe alır. Bu nedenle, sonraki sorgular daha kısa sürer. Sorgu seçenekleriyle önbelleğe almayı devre dışı bırakabilirsiniz. BigQuery ayrıca sorgularla ilgili istatistikleri (ör. oluşturma zamanı, bitiş zamanı, işlenen toplam bayt) de takip eder.

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

bigquery_demo klasöründeki 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 bazı noktalar: İlk olarak, QueryJobConfig tanıtılarak ve use_query_cache 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:

python3 app.py

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     | 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. Hatta akış eklemelerini kullanarak verilerinizi yayınlayabilirsiniz. Daha fazla bilgi için BigQuery'ye veri yükleme sayfasına bakın.

Bu adımda, 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 .

Bu dosyanın ABD eyaletlerinin listesini içerdiğini ve her eyaletin ayrı bir satırda JSON belgesi olarak yer aldığını 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ğıdakilerle 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 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:

python3 app.py

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

Veri kümesinin oluşturulduğunu doğrulamak için BigQuery konsoluna gidin. Yeni bir veri kümesi ve tablo görmeniz gerekir. 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 istemiyorsanız:

  • Cloud Console'da Kaynakları yönetin sayfasına gidin.
  • Proje listesinde projenizi seçip Sil'i tıklayın.
  • İletişim kutusunda 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.