1. Giriş

Workflows, Google Cloud veya harici hizmetleri tanımladığınız sırayla yürüten, tümüyle yönetilen bir düzenleme hizmetidir.
BigQuery, tümüyle yönetilen kurumsal bir veri ambarıdır. Makine öğrenimi, coğrafi veri analizi ve iş zekası gibi yerleşik özelliklerle terabaytlarca veriyi yönetmenize ve analiz etmenize yardımcı olur.
Bu codelab'de, herkese açık Wikipedia veri kümesine karşı bazı BigQuery sorguları çalıştıracaksınız. Ardından, Workflows düzenlemesinin bir parçası olarak birden fazla BigQuery sorgusunu seri şekilde nasıl çalıştıracağınızı öğreneceksiniz. Son olarak, iş akışlarının paralel yineleme özelliğini kullanarak sorguları paralelleştirerek 5 kata kadar hız artışı elde edeceksiniz.
Neler öğreneceksiniz?
- Wikipedia veri kümesine karşı BigQuery sorgularını çalıştırma
- İş akışı düzenlemesinin bir parçası olarak birden fazla sorguyu seri olarak çalıştırma
- 5 kata kadar hız artışı için iş akışlarında paralel yineleme kullanarak sorguları nasıl paralelleştireceğinizi öğrenin.
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- 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.



- 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. Dilediğiniz zaman bunu 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_IDolarak 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ımdan 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.
- 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 oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. 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.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.
3. Wikipedia veri kümesini keşfedin
Öncelikle BigQuery'deki Wikipedia veri kümesini keşfedin.
Google Cloud Console'un BigQuery bölümüne gidin:

bigquery-samples bölümünde, Wikipedia ile ilgili bazı veri kümeleri de dahil olmak üzere çeşitli herkese açık veri kümeleri görürsünüz:

wikipedia_pageviews veri kümesi altında, farklı yıllara ait sayfa görüntülemeleriyle ilgili çeşitli tabloları görebilirsiniz:

Tablolardan birini (ör. 201207) ve verileri önizleyin:

Tabloda sorgu da çalıştırabilirsiniz. Örneğin, bu sorgu en çok görüntülenen ilk 100 öğeyi seçer:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
Sorguyu çalıştırdıktan sonra verilerin yüklenmesi yaklaşık 20 saniye sürer:

4. Birden fazla sorgu çalıştırmak için iş akışı tanımlama
Tek bir tabloya karşı sorgu çalıştırmak kolaydır. Ancak birden fazla tabloya karşı birden fazla sorgu çalıştırmak ve sonuçları derlemek oldukça sıkıcı olabilir. Bu konuda yardımcı olması için Workflows'un iteration söz diziminden yararlanabilirsiniz.
Cloud Shell'de, birden fazla tabloya karşı birden fazla sorgu çalıştırmak için bir iş akışı oluşturmak üzere workflow-serial.yaml dosyası oluşturun:
touch workflow-serial.yaml
Daha sonra dosyayı Cloud Shell'deki düzenleyiciyle düzenleyebilirsiniz:

workflow-serial.yaml dosyasında, ilk init adımda, tablo adlarıyla anahtarlanmış her yinelemeyi takip etmek için bir results haritası oluşturun. Ayrıca, sorgu çalıştırmak istediğiniz tabloların listesini içeren bir tables dizisi tanımlayın. Bu örnekte 5 tablo seçiyoruz:
main:
steps:
- init:
assign:
- results : {}
- tables:
- 201201h
- 201202h
- 201203h
- 201204h
- 201205h
Ardından, bir runQueries adımı tanımlayın. Bu adımda her tablo üzerinde yineleme yapılır ve her tablodaki en fazla sayfa görüntülemesine sahip ilk 100 başlığı bulmak için sorgu çalıştırmak üzere Workflows'ün BigQuery bağlayıcısı kullanılır. Ardından, sonuç haritasındaki her tablodan en üstteki başlığı ve görünümleri kaydeder:
- runQueries:
for:
value: table
in: ${tables}
steps:
- runQuery:
call: googleapis.bigquery.v2.jobs.query
args:
projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
body:
useLegacySql: false
useQueryCache: false
timeoutMs: 30000
# Find the top 100 titles with most views on Wikipedia
query: ${
"SELECT TITLE, SUM(views)
FROM `bigquery-samples.wikipedia_pageviews." + table + "`
WHERE LENGTH(TITLE) > 10
GROUP BY TITLE
ORDER BY SUM(VIEWS) DESC
LIMIT 100"
}
result: queryResult
- returnResult:
assign:
# Return the top title from each table
- results[table]: {}
- results[table].title: ${queryResult.rows[0].f[0].v}
- results[table].views: ${queryResult.rows[0].f[1].v}
Son adımda results haritasını döndürün:
- returnResults:
return: ${results}
5. İş akışlarıyla birden fazla sorgu çalıştırma
İş akışını dağıtıp çalıştırmadan önce Workflows API'nin etkin olduğundan emin olmanız gerekir. Bu özelliği Google Cloud Console'dan veya Cloud Shell'de gcloud simgesini kullanarak etkinleştirebilirsiniz:
gcloud services enable workflows.googleapis.com
İş Akışları için hizmet hesabı oluşturun:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Hizmet hesabının BigQuery işlerini günlüğe kaydetme ve çalıştırma rollerine sahip olduğundan emin olun:
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
İş akışını hizmet hesabıyla dağıtın:
gcloud workflows deploy bigquery-serial \
--source=workflow-serial.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Son olarak, iş akışını çalıştırmaya hazırsınız.
Cloud Console'un İş Akışları bölümünde bigquery-serial iş akışını bulun ve Execute düğmesine basın:

Alternatif olarak, iş akışını Cloud Shell'de gcloud ile de çalıştırabilirsiniz:
gcloud workflows run bigquery-serial
İş akışı yürütme işleminin yaklaşık 1 dakika sürdüğünü görürsünüz (5 tablonun her biri için 20 saniye).
Sonunda, en iyi başlıkları ve görüntülemeleri içeren her tablonun çıktısını görürsünüz:


6. Paralel adımlar içeren birden fazla sorguyu paralelleştirme
Önceki adımdaki iş akışı, her biri 20 saniye süren 5 sorgu çalıştırdığı için yaklaşık 1 dakika sürdü. Bunlar bağımsız sorgular olduğundan, İş Akışları'nın paralel yineleme özelliğini kullanarak bunları paralel olarak çalıştırabilirsiniz.
workflow-serial.yaml dosyasını yeni bir workflow-parallel.yaml dosyasına kopyalayın. Yeni dosyada, sıralı adımları paralel adımlara dönüştürmek için birkaç değişiklik yapacaksınız.
workflow-parallel.yaml dosyasında runQueries adımını değiştirin. Öncelikle parallel anahtar kelimesini ekleyin. Bu, for döngüsünün her yinelemesinin paralel olarak çalışmasına olanak tanır. İkinci olarak, results değişkenini shared değişkeni olarak bildirin. Bu, değişkenin bir dal tarafından yazılabilir olmasını sağlar. Her sonucu bu değişkene ekleyeceğiz.
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
Paralel iş akışını dağıtın:
gcloud workflows deploy bigquery-parallel \
--source=workflow-parallel.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
İş akışını çalıştırın:
gcloud workflows run bigquery-parallel
İş akışı yürütmesinin yaklaşık 20 saniye sürdüğünü göreceksiniz. Bunun nedeni, 5 sorgunun da paralel olarak çalıştırılmasıdır. Yalnızca birkaç satır kod değişikliğiyle 5 kata kadar hız artışı!
Sonuç olarak, her tablodan aynı çıkışı (en iyi başlıklar ve görüntülemeler) çok daha kısa bir yürütme süresiyle elde edersiniz:

7. Tebrikler
Tebrikler, codelab'i tamamladınız. Daha fazla bilgi edinmek için Paralel adımlarla ilgili İş Akışları belgelerine göz atın.
İşlediğimiz konular
- Wikipedia veri kümesine karşı BigQuery sorgularını çalıştırma
- İş akışı düzenlemesinin bir parçası olarak birden fazla sorguyu seri olarak çalıştırma
- İş akışlarında paralel yineleme kullanarak sorguları nasıl paralelleştireceğinizi ve bu sayede hızı 5 kata kadar nasıl artıracağınızı öğrenin.