BigQuery işlerini Workflows ile paralel olarak çalıştırma

1. Giriş

1c05e3d0c2bd2b45.png 74be7b376d45258a.png

İş 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

  1. 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.

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 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.
  1. 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:

55efc1aaa7a4d3ad.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

7ffe5cbb04455448

İ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:

ea75ab12a7c012a4.png

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:

c9484e305b8e1438.png

wikipedia_pageviews veri kümesinde, farklı yıllara ait sayfa görüntülemeleri için çeşitli tablolar görebilirsiniz:

c540a4162640cbb3.png

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

b5b2a334cd6f63c0.png

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:

1df3877aed1653b4.png

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:

33bf9325b078ad8.png

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:

b6afa4747680334f.png

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:

304d11a5bffdada4.png

baf31533d3671c9e.png

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:

1825d49ef225c828.png

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.