1. Wprowadzenie

Workflows to w pełni zarządzana usługa orkiestracji, która wykonuje usługi Google Cloud lub usługi zewnętrzne w zdefiniowanej przez Ciebie kolejności.
BigQuery to usługa w pełni zarządzana hurtownia danych dla firm, która pomoże Ci zarządzać terabajtami danych i je analizować za pomocą wbudowanych funkcji, takich jak uczenie maszynowe, analiza geoprzestrzenna i analityka biznesowa.
W tym module dowiesz się, jak uruchamiać zapytania BigQuery na publicznym zbiorze danych Wikipedii. Następnie dowiesz się, jak uruchamiać wiele zapytań BigQuery kolejno w sposób szeregowy w ramach orkiestracji Workflows. Na koniec zrównoleglisz zapytania za pomocą funkcji iteracji równoległej w Workflows, co pozwoli Ci nawet 5-krotnie przyspieszyć działanie.
Czego się nauczysz
- Jak uruchamiać zapytania BigQuery dotyczące zbioru danych Wikipedii.
- Jak uruchamiać wiele zapytań w ramach orkiestracji przepływów pracy w sposób szeregowy.
- Jak równolegle wykonywać zapytania za pomocą iteracji równoległych w Workflows, aby zwiększyć szybkość nawet 5-krotnie.
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i jest niezmienny (nie można go zmienić po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

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

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.
3. Przeglądanie zbioru danych z Wikipedii
Najpierw zapoznaj się ze zbiorem danych Wikipedii w BigQuery.
Otwórz sekcję BigQuery w konsoli Google Cloud:

W sekcji bigquery-samples powinny być widoczne różne publiczne zbiory danych, w tym zbiory danych związane z Wikipedią:

W sekcji wikipedia_pageviews zbiór danych możesz zobaczyć różne tabele wyświetleń stron z różnych lat:

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

Możesz też wykonywać zapytania dotyczące tabeli. Na przykład to zapytanie wybiera 100 najpopularniejszych tytułów:
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 zajmuje około 20 sekund:

4. Określanie przepływu pracy do wykonywania wielu zapytań
Wysłanie zapytania do jednej tabeli jest proste. Jednak wykonywanie wielu zapytań dotyczących wielu tabel i zbieranie wyników może być dość żmudne. Aby Ci w tym pomóc, przepływy pracy mają składnię iteracji.
W Cloud Shell utwórz plik workflow-serial.yaml, aby utworzyć przepływ pracy do uruchamiania wielu zapytań w wielu tabelach:
touch workflow-serial.yaml
Następnie możesz edytować plik w edytorze w Cloud Shell:

W pliku workflow-serial.yaml w pierwszym kroku init utwórz mapę results, aby śledzić każdą iterację kluczowaną przez nazwy tabel. Zdefiniuj też tablicę tables z listą tabel, w których chcesz uruchamiać zapytania. W tym przypadku wybieramy 5 tabel:
main:
steps:
- init:
assign:
- results : {}
- tables:
- 201201h
- 201202h
- 201203h
- 201204h
- 201205h
Następnie zdefiniuj runQueries krok. Ten krok iteruje po każdej tabeli i używa oprogramowania sprzęgającego BigQuery w Workflows, aby uruchomić zapytanie i znaleźć 100 najpopularniejszych tytułów z największą liczbą wyświetleń strony w każdej tabeli. Następnie zapisuje najpopularniejszy tytuł i liczbę wyświetleń 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 zwróć mapę results:
- returnResults:
return: ${results}
5. Uruchamianie wielu zapytań za pomocą Workflows
Zanim wdrożysz i uruchomisz przepływ pracy, musisz się upewnić, że interfejs Workflows API jest włączony. Możesz ją włączyć w konsoli Google Cloud lub za pomocą gcloud w Cloud Shell:
gcloud services enable workflows.googleapis.com
Utwórz konto usługi dla przepływów pracy:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
Sprawdź, czy konto usługi ma role umożliwiające rejestrowanie 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 za pomocą konta usługi:
gcloud workflows deploy bigquery-serial \
--source=workflow-serial.yaml \
--service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Na koniec możesz uruchomić przepływ pracy.
W sekcji Workflows w konsoli Cloud znajdź przepływ pracy bigquery-serial i kliknij przycisk Execute:

Możesz też uruchomić przepływ pracy za pomocą gcloud w Cloud Shell:
gcloud workflows run bigquery-serial
Wykonanie przepływu pracy powinno trwać około 1 minuty (20 sekund w przypadku każdej z 5 tabel).
Na koniec zobaczysz dane wyjściowe z każdej tabeli z najpopularniejszymi tytułami i wyświetleniami:


6. Równoległe wykonywanie wielu zapytań za pomocą równoległych kroków
Przepływ pracy z poprzedniego kroku trwał około minuty, ponieważ uruchomił 5 zapytań, z których każde zajęło 20 sekund. Ponieważ są to niezależne zapytania, możesz je uruchamiać równolegle, korzystając z funkcji równoległej iteracji w przepływach pracy.
Skopiuj plik workflow-serial.yaml do nowego pliku workflow-parallel.yaml. W nowym pliku wprowadź kilka zmian, aby przekształcić kolejne etapy w etapy równoległe.
W pliku workflow-parallel.yaml zmień krok runQueries. Najpierw dodaj słowo kluczowe parallel. Dzięki temu każda iteracja pętli for może być wykonywana równolegle. Po drugie, zadeklaruj zmienną results jako zmienną shared. Dzięki temu gałąź może zapisywać wartość zmiennej. Do tej zmiennej dodamy każdy wynik.
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
Wdróż przepływ pracy równoległej:
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
Powinno się wyświetlić wykonanie przepływu pracy trwające około 20 sekund. Wynika to z tego, że wszystkie 5 zapytań jest uruchamianych równolegle. Nawet 5-krotne zwiększenie szybkości przy zmianie tylko kilku linii kodu!
Ostatecznie zobaczysz te same dane wyjściowe z każdej tabeli z najpopularniejszymi tytułami i wyświetleniami, ale z dużo krótszym czasem wykonania:

7. Gratulacje
Gratulacje! Codelab został ukończony. Więcej informacji znajdziesz w dokumentacji przepływów pracy dotyczącej etapów równoległych.
Omówione zagadnienia
- Jak uruchamiać zapytania BigQuery dotyczące zbioru danych Wikipedii.
- Jak uruchamiać wiele zapytań w ramach orkiestracji przepływów pracy w sposób szeregowy.
- Jak równolegle wykonywać zapytania za pomocą iteracji równoległych w Workflows, aby zwiększyć szybkość nawet 5-krotnie.