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
Anket
Bu eğiticiden nasıl yararlanacaksınız?
Python deneyiminizi nasıl değerlendirirsiniz?
Google Cloud hizmetlerini kullanma deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- 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.
- 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.
- 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
- Cloud Console'da, Cloud Shell'i etkinleştir simgesini tıklayın.
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:
Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.
İ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.
- 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`
- 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:
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:
Verilerin nasıl göründüğüne bakmak için Önizleme düğmesini tıklayın:
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:
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
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Google Cloud'da Python: https://cloud.google.com/python/
- Python için Cloud İstemci Kitaplıkları: https://googleapis.github.io/google-cloud-python/
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.