Uruchamianie zadań BigQuery równolegle z Workflows

1. Wprowadzenie

1c05e3d0c2bd2b45.png 74be7b376d45258a.png

Przepływy pracy to w pełni zarządzana usługa administracji, która uruchamia Google Cloud lub usługi zewnętrzne w określonej przez Ciebie kolejności.

BigQuery to w pełni zarządzana hurtownia danych dla firm, która pomaga zarządzać terabajtami danych i je analizować za pomocą wbudowanych funkcji, takich jak systemy uczące się, analiza geoprzestrzenna i analityka biznesowa.

W ramach tego ćwiczenia w Codelabs uruchomisz niektóre zapytania BigQuery na publicznym zbiorze danych Wikipedia. Dowiesz się, jak uruchamiać po kolei wiele zapytań do BigQuery w ramach administrowania przepływami pracy w ramach administrowania przepływami pracy. Na koniec przeprowadź równoległe wykonywanie zapytań za pomocą funkcji iteracji równoległej dostępnej w Workflows, co pozwoli nawet 5-krotnie zwiększyć szybkość.

Czego się nauczysz

  • Uruchamianie zapytań BigQuery do zbioru danych Wikipedia.
  • Jak uruchomić wiele zapytań w ramach administracji przepływami pracy po kolei.
  • Dowiedz się, jak równolegle wykonywać zapytania za pomocą iteracji równoległej w Workflows, aby nawet 5-krotnie zwiększyć szybkość.

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Uruchamianie Cloud Shell

Google Cloud można obsługiwać zdalnie z laptopa, ale w ramach tego ćwiczenia z programowania wykorzystasz Google Cloud Shell – środowisko wiersza poleceń działające w chmurze.

W konsoli Google Cloud kliknij ikonę Cloud Shell na górnym pasku narzędzi:

55efc1aaa7a4d3ad.png

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:

7ffe5cbb04455448.png

Ta maszyna wirtualna ma wszystkie potrzebne narzędzia dla programistów. Zawiera stały katalog domowy o pojemności 5 GB i działa w Google Cloud, znacząco zwiększając wydajność sieci i uwierzytelnianie. Wszystkie zadania w ramach tego ćwiczenia z programowania można wykonywać w przeglądarce. Nie musisz niczego instalować.

3. Przeglądaj zbiór danych Wikipedii

Najpierw przejrzyj zbiór danych Wikipedii w BigQuery.

Otwórz sekcję BigQuery w Google Cloud Console:

ea75ab12a7c012a4.png

W sekcji bigquery-samples powinny być widoczne różne publiczne zbiory danych, w tym wybrane z Wikipedii:

c9484e305b8e1438.png

W zbiorze danych wikipedia_pageviews znajdują się różne tabele wyświetleń stron z różnych lat:

c540a4162640cbb3.png

Możesz wybrać jedną z tabel (np. 201207) i wyświetl podgląd danych:

b5b2a334cd6f63c0.png

Możesz też wykonywać zapytania na tabeli. Na przykład to zapytanie wybiera 100 tytułów z największą liczbą wyświetleń:

SELECT TITLE, SUM(views)
FROM bigquery-samples.wikipedia_pageviews.201207h
GROUP BY TITLE
ORDER BY SUM(VIEWS) DESC
LIMIT 100

Po uruchomieniu zapytania wczytanie danych zajmie około 20 sekund:

1df3877aed1653b4.png

4. Zdefiniuj przepływ pracy do uruchamiania wielu zapytań

Wykonywanie zapytania do pojedynczej tabeli jest łatwe. Wykonywanie kilku zapytań do wielu tabel i gromadzenie wyników może być jednak dość uciążliwe. W tym celu można skorzystać z pomocy Workflows przy składni iteracji.

W Cloud Shell utwórz plik workflow-serial.yaml, aby utworzyć przepływ pracy do uruchamiania wielu zapytań względem wielu tabel:

touch workflow-serial.yaml

Potem możesz edytować ten plik w edytorze Cloud Shell:

33bf9325b078ad8.png

W pierwszym kroku (init) w pliku workflow-serial.yaml utwórz mapę results, aby śledzić każdą iterację z podanymi nazwami tabel. Zdefiniuj też tablicę tables z listą tabel, do których chcesz wykonywać zapytania. W tym przypadku wybieramy 5 tabel:

main:
    steps:
    - init:
        assign:
            - results : {}
            - tables:
                - 201201h
                - 201202h
                - 201203h
                - 201204h
                - 201205h

Następnie określ krok runQueries. Ten krok powtarza procedurę dla każdej tabeli i korzysta z Workflows oprogramowania sprzęgającego BigQuery, aby uruchomić zapytanie w celu znalezienia 100 najpopularniejszych tytułów z największą liczbą wyświetleń stron w poszczególnych tabelach. Następnie zapisuje najważniejsze tytuły i wyświetlenia z każdej tabeli na mapie wyników:

    - 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}

W ostatnim kroku wróć do mapy results:

    - returnResults:
        return: ${results}

5. Uruchamianie wielu zapytań za pomocą Workflows

Przed wdrożeniem i uruchomieniem przepływu pracy musisz się upewnić, że włączony jest interfejs Workflows API. Możesz ją włączyć w konsoli Google Cloud lub za pomocą narzędzia gcloud w Cloud Shell:

gcloud services enable workflows.googleapis.com

Utwórz konto usługi dla Workflows:

SERVICE_ACCOUNT=workflows-bigquery-sa
gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Workflows BigQuery service account"

Sprawdź, czy konto usługi ma przypisane role umożliwiające logowanie i uruchamianie zadań BigQuery:

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

Wdróż przepływ pracy przy użyciu konta usługi:

gcloud workflows deploy bigquery-serial \
    --source=workflow-serial.yaml \
    --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Możesz teraz uruchomić przepływ pracy.

Znajdź przepływ pracy bigquery-serial w sekcji Przepływy pracy w konsoli Cloud i kliknij przycisk Execute:

b6afa4747680334f.png

Możesz też uruchomić przepływ pracy za pomocą narzędzia gcloud w Cloud Shell:

gcloud workflows run bigquery-serial

Wykonanie przepływu pracy powinno zająć około 1 minuty (20 sekund na każdą z 5 tabel).

Na koniec zobaczysz wyniki z każdej tabeli z najpopularniejszymi tytułami i wyświetleniami:

304d11a5bffdada4.png

baf31533d3671c9e.png

6. Równoległość wielu zapytań z krokami równoległymi

Przepływ pracy w poprzednim kroku trwał około minuty, ponieważ uruchamiał 5 zapytań po 20 sekund. Ponieważ są to niezależne zapytania, możesz je uruchamiać równolegle, korzystając z funkcji iteracji równoległej w Workflows.

Skopiuj plik workflow-serial.yaml do nowego pliku workflow-parallel.yaml. W nowym pliku wprowadzisz kilka zmian, dzięki którym kolejne etapy staną się równoległe.

W pliku workflow-parallel.yaml zmień krok runQueries. Najpierw dodaj słowo kluczowe parallel. Dzięki temu każde wystąpienie pętli „for” działa równolegle. Następnie zadeklaruj zmienną results jako zmienną shared. Dzięki temu zmienna może być zapisywana przez gałąź. Dołączymy każdy wynik do tej zmiennej.

- runQueries:
    parallel:
        shared: [results]
        for:
            value: table
            in: ${tables}

Wdróż równoległy przepływ pracy:

gcloud workflows deploy bigquery-parallel \
    --source=workflow-parallel.yaml \
    --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Uruchom przepływ pracy:

gcloud workflows run bigquery-parallel

Wykonanie przepływu pracy powinno zająć około 20 sekund. Wynika to ze wszystkich 5 zapytań uruchomionych równolegle. Nawet 5-krotnie większa szybkość przy kilku zmianach w kodzie.

Ostatecznie zobaczysz te same dane wyjściowe z każdej tabeli z najpopularniejszymi tytułami i wyświetleniami, ale znacznie krótszym czasem wykonania:

1825d49ef225c828.png

7. Gratulacje

Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania. Więcej informacji znajdziesz w dokumentacji przepływów pracy dotyczących kroków równoległych.

Omówione zagadnienia

  • Uruchamianie zapytań BigQuery do zbioru danych Wikipedia.
  • Jak uruchomić wiele zapytań w ramach administracji przepływami pracy po kolei.
  • Dowiedz się, jak równolegle wykonywać zapytania za pomocą iteracji równoległej w Workflows w celu nawet 5-krotnego zwiększenia szybkości.