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 eserleriyle ilgili sorgu gönderme
  • 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 deneyimli olmanız

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?

Başlangıç Orta İleri

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.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Bu, 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, proje kimliğini 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 (kaydırma yapmadan görünen alanın altında) 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ıyla birlikte gelir. 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>

Ayarlanmamışsa ş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, Cloud SDK'yı kullanarak bir hizmet hesabı oluşturacak, 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 aşağıdaki yöntemlerden birini kullanarak 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 bilgisini oluşturun ve 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 roles/bigquery.user rolüne sahip olduğundan emin olmanız gerekir. Cloud Shell'de aşağıdaki komutu çalıştırarak hizmet hesabına kullanıcı rolünü atayı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 sağlar. Bu tablolar bigquery-public-data:samples veri kümesinde yer alır. samples veri kümesindeki shakespeare tablosunda, Shakespeare'in eserlerinin kelime dizini yer alır. 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 kısmından 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önerek 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 üzerinde bir sorgu yürüteceksiniz. En yaygın commit mesajlarını GitHub'da bulabilirsiniz. Ayrıca, BigQuery'nin web konsolunu kullanarak anlık sorguları önizleyip ç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önerek 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, sorgularla ilgili 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 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 birkaç nokta: İ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önerek 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ı gs://cloud-samples-data/bigquery/us-states/us-states.json konumunda bulunuyor.

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 şemalı bir tabloyu nasıl oluşturduğunu incelemek için bir veya iki dakikanızı ayırın.

Cloud Shell'e dönerek 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.