1. Wprowadzenie
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
- 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ć.
- 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.
- 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:
Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno pojawić się coś takiego:
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:
W sekcji bigquery-samples
powinny być widoczne różne publiczne zbiory danych, w tym wybrane z Wikipedii:
W zbiorze danych wikipedia_pageviews
znajdują się 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 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:
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:
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
:
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:
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:
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.