1. Giriş
İş akışları, Google Cloud'u veya harici hizmetleri sizin tanımladığınız sırayla yürüten, tümüyle yönetilen bir düzenleme hizmetidir.
BigQuery; makine öğrenimi, coğrafi analiz ve iş zekası gibi yerleşik özelliklerle terabaytlarca veriyi yönetmenize ve analiz etmenize yardımcı olan, tümüyle yönetilen bir kurumsal veri ambarıdır.
Bu codelab'de, herkese açık Wikipedia veri kümesinde bazı BigQuery sorguları çalıştıracaksınız. Ardından, bir Workflows düzenlemesi kapsamında birden fazla BigQuery sorgusunu sırayla ve seri şekilde nasıl çalıştıracağınızı göreceksiniz. Son olarak, iş akışlarının paralel yineleme özelliğini kullanarak hızları 5 kata kadar artırmak için sorguları paralel hale getirirsiniz.
Neler öğreneceksiniz?
- Wikipedia veri kümesinde BigQuery sorguları çalıştırma
- İş akışları düzenlemesinin bir parçası olarak birden fazla sorguyu sırayla çalıştırma.
- Hızı 5 kata kadar artırmak için Workflows paralel yinelemesini kullanarak sorguları paralelleştirme.
2. Kurulum ve Gereksinimler
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. İstediğ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ğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, 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ırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. 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.
Google Cloud Console'da, sağ üstteki araç çubuğunda bulunan Cloud Shell simgesini tıklayın:
Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:
İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınız tarayıcıda yapılabilir. 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
altında, Wikipedia'yla ilgili bazı veri kümeleri de dahil olmak üzere herkese açık çeşitli veri kümelerini görürsünüz:
wikipedia_pageviews
veri kümesinde, farklı yıllara ait sayfa görüntülemeleri için çeşitli tablolar görebilirsiniz:
Tablolardan birini seçebilirsiniz (ör. 201207
) ve verileri önizleyin:
Tabloda sorgu çalıştırabilirsiniz. Örneğin, bu sorgu en çok görüntülenen ilk 100 içeriği 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 tabloda sorgu çalıştırmak kolaydır. Ancak birden çok tabloda birden çok sorgu çalıştırmak ve sonuçları bir araya getirmek yorucu olabilir. Workflows, bu konuda iterasyon söz dizimini destekleyebilir.
Birden fazla sorguyu birden fazla tabloda çalıştırmak üzere bir iş akışı oluşturmak için Cloud Shell'de bir workflow-serial.yaml
dosyası oluşturun:
touch workflow-serial.yaml
Ardından dosyayı Cloud Shell'de düzenleyici ile düzenleyebilirsiniz:
workflow-serial.yaml
dosyasının içinde, ilk init
adımda, tablo adlarına göre ayarlanmış her iterasyonu takip etmek için bir results
haritası oluşturun. Ayrıca, sorgu çalıştırmak istediğiniz tabloların listesiyle birlikte bir tables
dizisi tanımlayın. Bu örnekte 5 tablo seçiyoruz:
main: steps: - init: assign: - results : {} - tables: - 201201h - 201202h - 201203h - 201204h - 201205h
Sonra bir runQueries
adımı tanımlayın. Bu adım, her tablo üzerinde yineleme yapar ve Workflows'u BigQuery bağlayıcısı ile bir sorgu çalıştırarak her tabloda en fazla sayfa görüntüleme sayısına sahip ilk 100 içeriği bulabilirsiniz. Daha sonra, sonuç haritasındaki her tablonun en popüler başlığı ve görünümleri kaydedilir:
- 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. Workflows ile birden fazla sorgu çalıştırma
İş akışını dağıtıp çalıştırmadan önce Workflows API'nin etkinleştirildiğinden emin olmanız gerekir. Bu özelliği, Google Cloud Console'dan veya Cloud Shell'de gcloud
kullanarak etkinleştirebilirsiniz:
gcloud services enable workflows.googleapis.com
Workflows için bir 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ışının yürütülmesinin yaklaşık 1 dakika (5 tablonun her biri için 20 saniye) sürdüğünü göreceksiniz.
En sonunda, en popüler başlıkları ve görünümleri içeren her tablodan çıktıyı görürsünüz:
6. Paralel adımlarla birden fazla sorguyu paralel yapma
Önceki adımdaki iş akışı, her biri 20 saniye süren 5 sorgu çalıştırdığından yaklaşık 1 dakika sürdü. Bunlar bağımsız sorgular olduğundan iş akışlarının paralel yineleme özelliğini kullanarak bunları paralel olarak çalıştırabilirsiniz.
workflow-serial.yaml
dosyasını yeni workflow-parallel.yaml
dosyasına kopyalayın. Yeni dosyada, seri adımlarını 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. İlk olarak parallel
anahtar kelimesini ekleyin. Bu, for döngüsündeki her yinelemenin paralel olarak çalışmasına olanak tanır. İkinci olarak, results
değişkenini shared
değişkeni olarak tanımlayın. 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ışının yürütülmesinin yaklaşık 20 saniye sürdüğünü göreceksiniz. Bunun nedeni, 5 sorgunun tümünün paralel olarak çalışmasıdır. Yalnızca birkaç satır kod değişikliğiyle 5 kata kadar artış!
En sonunda, en popüler başlıkları ve görüntülemeleri içeren her tablodan aynı çıktıyı, ancak çok daha kısa yürütme süresiyle görürsünüz:
7. Tebrikler
Tebrikler, codelab'i tamamladınız. Daha fazla bilgi edinmek için Paralel adımlarla ilgili iş akışları belgelerine göz atın.
İşlediğimiz konular
- Wikipedia veri kümesinde BigQuery sorguları çalıştırma
- İş akışları düzenlemesinin bir parçası olarak birden fazla sorguyu sırayla çalıştırma.
- Hızı 5 kata kadar artırmak için Workflows paralel yinelemesini kullanarak sorguları paralelleştirme.