1. Omówienie/Wprowadzenie
Aplikacje wielowarstwowe składające się z serwera internetowego, serwera aplikacji i bazy danych są podstawą tworzenia stron internetowych i stanowią punkt wyjścia dla wielu witryn. Sukces często wiąże się jednak z wyzwaniami związanymi ze skalowalnością, integracją i elastycznością. Na przykład jak przetwarzać dane w czasie rzeczywistym i jak je rozpowszechniać w wielu kluczowych systemach biznesowych? Te problemy w połączeniu z wymaganiami aplikacji na skalę internetu spowodowały potrzebę stworzenia rozproszonego systemu przesyłania wiadomości i doprowadziły do powstania wzorca architektury wykorzystującego potoki danych do tworzenia odpornych systemów działających w czasie rzeczywistym. Dlatego zrozumienie, jak publikować dane w czasie rzeczywistym w rozproszonym systemie przesyłania wiadomości, a następnie jak tworzyć potok danych, jest kluczową umiejętnością zarówno dla programistów, jak i architektów.
Co utworzysz
W tym module dowiesz się, jak utworzyć potok danych pogodowych, który zaczyna się od urządzenia internetu rzeczy (IoT), wykorzystuje kolejkę komunikatów do odbierania i dostarczania danych, korzysta z funkcji bezserwerowej do przenoszenia danych do hurtowni danych, a następnie tworzy panel, który wyświetla informacje. Jako urządzenie IoT będzie używany Raspberry Pi z czujnikiem pogodowym, a potok danych będzie się składać z kilku komponentów Google Cloud Platform. Rozbudowa Raspberry Pi, choć korzystna, jest opcjonalną częścią tego samouczka. Strumieniowe dane pogodowe można zastąpić skryptem.

Po wykonaniu kroków opisanych w tym ćwiczeniu będziesz mieć potok danych przesyłanych strumieniowo, który zasila panel wyświetlający temperaturę, wilgotność, punkt rosy i ciśnienie powietrza.

Czego się nauczysz
- Jak korzystać z Google Pub/Sub
- Jak wdrożyć funkcję w Cloud Functions
- Jak korzystać z Google BigQuery
- Jak utworzyć panel w Studiu danych Google
- Jeśli zbudujesz czujnik IoT, dowiesz się też, jak korzystać z pakietu Google Cloud SDK i jak zabezpieczać zdalne wywołania dostępu do Google Cloud Platform.
Czego potrzebujesz
- Konto Google Cloud Platform. Nowi użytkownicy Google Cloud Platform mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Jeśli zamiast korzystać z przykładowych danych i skryptu chcesz utworzyć część tego laboratorium dotyczącą czujnika IoT, potrzebujesz też tych elementów ( możesz je zamówić w postaci kompletnego zestawu lub pojedynczych części):
- Raspberry Pi Zero W z zasilaczem, kartą pamięci SD i obudową
- Czytnik kart USB
- Koncentrator USB (umożliwiający podłączenie klawiatury i myszy do jedynego portu USB na Raspberry Pi)
- Przewody do płytek stykowych (gniazdo–gniazdo)
- Złącza GPIO Hammer
- Czujnik BME280
- Lutownica z lutem
Dodatkowo zakłada się dostęp do monitora komputerowego lub telewizora z wejściem HDMI, kabla HDMI, klawiatury i myszy.
2. Przygotowania
Samodzielne konfigurowanie środowiska
Jeśli nie masz jeszcze konta Google (Gmail lub G Suite), musisz je utworzyć. Niezależnie od tego, czy masz już konto Google, czy nie, skorzystaj z bezpłatnego okresu próbnego, w którym masz do dyspozycji środki w wysokości 300 USD.
Zaloguj się w konsoli Google Cloud Platform ( console.cloud.google.com). W tym module możesz użyć domyślnego projektu („Mój pierwszy projekt”) lub utworzyć nowy projekt. Jeśli chcesz utworzyć nowy projekt, możesz to zrobić na stronie Zarządzanie zasobami. Identyfikator projektu musi być unikalną nazwą we wszystkich projektach Google Cloud (identyfikator pokazany poniżej jest już zajęty i nie będzie działać w Twoim przypadku). Zanotuj identyfikator projektu (np. Identyfikator projektu to _____) – będzie on potrzebny później.


Wykonanie tego samouczka nie powinno kosztować więcej niż kilka dolarów, ale może okazać się droższe, jeśli zdecydujesz się wykorzystać więcej zasobów lub pozostawisz je uruchomione. Koniecznie zapoznaj się z sekcją Czyszczenie na końcu tego samouczka.
3. Tworzenie tabeli BigQuery
BigQuery to bezserwerowa, wysoce skalowalna i ekonomiczna hurtownia danych dla firm, która idealnie nadaje się do przechowywania danych przesyłanych strumieniowo z urządzeń IoT, a także umożliwia wykonywanie zapytań o informacje na panelu analitycznym.
Utwórzmy tabelę, w której będą przechowywane wszystkie dane pogodowe z IoT. Wybierz BigQuery w konsoli Cloud. Spowoduje to otwarcie BigQuery w nowym oknie (nie zamykaj oryginalnego okna, ponieważ będziesz musieć do niego wrócić).

Kliknij ikonę strzałki w dół obok nazwy projektu, a następnie wybierz „Utwórz nowy zbiór danych”.

Wpisz „weatherData” w polu Zbiór danych, wybierz lokalizację, w której będzie przechowywany, i kliknij „OK”.

Kliknij znak „+” obok zbioru danych, aby utworzyć nową tabelę.

W sekcji Dane źródłowe kliknij Utwórz pustą tabelę. W polu Nazwa tabeli docelowej wpisz weatherDataTable. W sekcji Schema (Schemat) klikaj przycisk Add Field (Dodaj pole), aż będzie 9 pól. Wypełnij pola zgodnie z poniższymi instrukcjami, pamiętając o wybraniu odpowiedniego typu dla każdego pola. Gdy wszystko będzie gotowe, kliknij przycisk Utwórz tabelę.

Powinien pojawić się wynik podobny do tego:

Masz teraz skonfigurowaną hurtownię danych, która będzie otrzymywać dane pogodowe.
4. Tworzenie tematu Pub/Sub
Cloud Pub/Sub to prosta, niezawodna i skalowalna podstawa systemów analizy strumieni danych i obliczeń opartych na zdarzeniach. Dzięki temu idealnie nadaje się do obsługi przychodzących wiadomości IoT, a następnie umożliwia przetwarzanie ich przez systemy podrzędne.
Jeśli nadal jesteś w oknie BigQuery, wróć do konsoli Cloud. Jeśli konsola Cloud została zamknięta, otwórz stronę https://console.cloud.google.com.
W konsoli Cloud wybierz Pub/Sub, a następnie Tematy.

Jeśli zobaczysz prośbę o włączenie interfejsu API, kliknij przycisk Włącz API.

Kliknij przycisk Utwórz temat.

Wpisz „weatherdata” jako nazwę tematu i kliknij Utwórz.

Powinien być widoczny nowo utworzony temat.

Masz teraz temat Pub/Sub, w którym możesz publikować wiadomości IoT i do którego inne procesy mogą uzyskiwać dostęp.
Bezpieczne publikowanie w temacie
Jeśli planujesz publikować wiadomości w temacie Pub/Sub z zasobów spoza konsoli Google Cloud (np. z czujnika IoT), konieczne będzie ściślejsze kontrolowanie dostępu za pomocą konta usługi i zapewnienie bezpieczeństwa połączenia przez utworzenie certyfikatu zaufania.
W Cloud Console kliknij Administracja i uprawnienia, a następnie Konta usługi.

Kliknij przycisk Utwórz konto usługi.

W menu Rola wybierz rolę Publikujący Pub/Sub.

Wpisz nazwę konta usługi (iotWeatherPublisher), zaznacz pole wyboru Dostarcz nowy klucz prywatny, upewnij się, że typ klucza to JSON, i kliknij „Utwórz”.

Klucz bezpieczeństwa zostanie pobrany automatycznie. Jest tylko jeden klucz, więc ważne jest, aby go nie zgubić. Kliknij „Zamknij”.

Powinno się wyświetlić, że konto usługi zostało utworzone i jest z nim powiązany identyfikator klucza.

Aby później mieć łatwy dostęp do klucza, zapiszemy go w Google Cloud Storage. W konsoli Cloud wybierz kolejno Przechowywanie i Przeglądarka.

Kliknij przycisk Utwórz zasobnik.

Wybierz nazwę zasobnika pamięci (musi być globalnie niepowtarzalna w Google Cloud) i kliknij przycisk Utwórz.

Znajdź klucz bezpieczeństwa, który został automatycznie pobrany, i przeciągnij go do zasobnika lub prześlij go do niego.

Po zakończeniu przesyłania klucz powinien pojawić się w przeglądarce Cloud Storage.

Zapisz nazwę zasobnika i pliku klucza bezpieczeństwa, aby użyć ich później.
5. Utwórz funkcję w Cloud Functions
Dzięki przetwarzaniu w chmurze możliwe stało się tworzenie w pełni bezserwerowych modeli obliczeniowych, w których logika może być uruchamiana na żądanie w odpowiedzi na zdarzenia pochodzące z dowolnego miejsca. W tym module funkcja w Cloud Functions będzie uruchamiana za każdym razem, gdy wiadomość zostanie opublikowana w temacie dotyczącym pogody. Funkcja odczyta wiadomość, a następnie zapisze ją w BigQuery.
W konsoli Cloud wybierz Cloud Functions.

Jeśli zobaczysz komunikat interfejsu API, kliknij przycisk Włącz API.

Kliknij przycisk Utwórz funkcję.

W polu Nazwa wpisz function-weatherPubSubToBQ. W sekcji Trigger (Aktywator) wybierz Cloud Pub/Sub topic (Temat Cloud Pub/Sub), a w menu Topic (Temat) wybierz weatherdata. W przypadku kodu źródłowego wybierz edytor wbudowany. Na karcie index.js wklej ten kod, aby zastąpić nim dotychczasową zawartość. Pamiętaj, aby zmienić stałe projectId, datasetId i tableId, aby pasowały do Twojego środowiska.
/**
* Background Cloud Function to be triggered by PubSub.
*
* @param {object} event The Cloud Functions event.
* @param {function} callback The callback function.
*/
exports.subscribe = function (event, callback) {
const BigQuery = require('@google-cloud/bigquery');
const projectId = "myProject"; //Enter your project ID here
const datasetId = "myDataset"; //Enter your BigQuery dataset name here
const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
const PubSubMessage = event.data;
// Incoming data is in JSON format
const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
const jsonData = JSON.parse(incomingData);
var rows = [jsonData];
console.log(`Uploading data: ${JSON.stringify(rows)}`);
// Instantiates a client
const bigquery = BigQuery({
projectId: projectId
});
// Inserts data into a table
bigquery
.dataset(datasetId)
.table(tableId)
.insert(rows)
.then((foundErrors) => {
rows.forEach((row) => console.log('Inserted: ', row));
if (foundErrors && foundErrors.insertErrors != undefined) {
foundErrors.forEach((err) => {
console.log('Error: ', err);
})
}
})
.catch((err) => {
console.error('ERROR:', err);
});
// [END bigquery_insert_stream]
callback();
};
Na karcie package.json wklej ten kod, zastępując kod obiektu zastępczego:
{
"name": "function-weatherPubSubToBQ",
"version": "0.0.1",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"dependencies": {
"@google-cloud/bigquery": "^0.9.6"
}
}
Jeśli funkcja do wykonania jest ustawiona na „HelloWorld”, zmień ją na „subscribe”. Z użyciem przycisku Utwórz

Wyświetlenie informacji o wdrożeniu funkcji zajmie około 2 minut.

Gratulacje! Właśnie połączono Pub/Sub z BigQuery za pomocą funkcji.
6. Konfigurowanie sprzętu IoT (opcjonalnie)
Złóż Raspberry Pi i czujnik
Jeśli jest więcej niż 7 pinezek, przytnij nagłówek tak, aby zawierał tylko 7 pinezek. Przylutuj piny złącza do płytki czujnika.

Ostrożnie zamontuj piny nagłówka młotka na Raspberry Pi.

Sformatuj kartę SD i zainstaluj instalator NOOBS (New Out Of Box Software), wykonując czynności opisane tutaj. Włóż kartę SD do Raspberry Pi i umieść Raspberry Pi w obudowie.

Za pomocą przewodów do płytki stykowej połącz czujnik z Raspberry Pi zgodnie z diagramem poniżej.

Pin Raspberry Pi | Połączenie z czujnikiem |
Pin 1 (3,3 V) | Numer VIN |
Pin 3 (CPIO2) | SDI |
Pin 5 (GPIO3) | SCK |
Pin 9 (uziemienie) | GND |

Podłącz monitor (za pomocą złącza mini-HDMI), klawiaturę/mysz (za pomocą koncentratora USB) i zasilacz.
Konfigurowanie Raspberry Pi i czujnika
Po zakończeniu uruchamiania Raspberry Pi wybierz Raspbian jako żądany system operacyjny, upewnij się, że wybrany język jest prawidłowy, a następnie kliknij Zainstaluj (ikona dysku twardego w lewym górnym rogu okna).

Kliknij ikonę Wi-Fi (w prawym górnym rogu ekranu) i wybierz sieć. Jeśli jest to sieć zabezpieczona, wpisz hasło (wstępnie udostępniony klucz).

Kliknij ikonę maliny (w lewym górnym rogu ekranu), wybierz kolejno Preferences (Ustawienia) i Raspberry Pi Configuration (Konfiguracja Raspberry Pi). Na karcie Interfejsy włącz I2C. Na karcie Lokalizacja ustaw język i strefę czasową. Po ustawieniu strefy czasowej zezwól na ponowne uruchomienie Raspberry Pi.

Po zakończeniu ponownego uruchamiania kliknij ikonę terminala, aby otworzyć okno terminala.

Aby upewnić się, że czujnik jest prawidłowo podłączony, wpisz to polecenie:
sudo i2cdetect -y 1
Wynik powinien wyglądać tak – upewnij się, że jest to 77.

Instalowanie pakietu SDK Google Cloud
Aby korzystać z narzędzi na platformie Google Cloud, musisz zainstalować na Raspberry Pi pakiet Google Cloud SDK. Pakiet SDK zawiera narzędzia potrzebne do zarządzania Google Cloud Platform i korzystania z niej. Jest dostępny w kilku językach programowania.
Otwórz okno terminala na Raspberry Pi, jeśli nie jest jeszcze otwarte, i ustaw zmienną środowiskową, która będzie odpowiadać wersji pakietu SDK w systemie operacyjnym na Raspberry Pi.
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
Teraz dodaj lokalizację, w której są przechowywane pakiety Google Cloud SDK, aby narzędzia do instalacji wiedziały, gdzie szukać, gdy poprosisz o zainstalowanie pakietu SDK.
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
Dodaj klucz publiczny z repozytorium pakietów Google, aby Raspberry Pi weryfikował bezpieczeństwo i ufał treściom podczas instalacji.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Upewnij się, że całe oprogramowanie na Raspberry Pi jest aktualne, i zainstaluj podstawowy pakiet SDK Google Cloud.
sudo apt-get update && sudo apt-get install google-cloud-sdk
Gdy pojawi się pytanie „Czy chcesz kontynuować?”, naciśnij Enter.
Zainstaluj pakiet tendo za pomocą menedżera pakietów Pythona. Ten pakiet służy do sprawdzania, czy skrypt jest uruchamiany więcej niż raz, i jest instalowany w celu zastosowania go w skrypcie pogodowym.
pip install tendo
Sprawdź, czy pakiety Google Cloud PubSub i OAuth2 dla Pythona są zainstalowane i aktualne, korzystając z menedżera pakietów Pythona.
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
Inicjowanie pakietu SDK Google Cloud
Pakiet SDK umożliwia zdalny, uwierzytelniony dostęp do Google Cloud. W tym samouczku będzie on używany do uzyskiwania dostępu do zasobnika pamięci, aby można było łatwo pobrać klucz bezpieczeństwa na Raspberry Pi.
W wierszu poleceń na Raspberry Pi wpisz
gcloud init --console-only
Gdy pojawi się pytanie „Would you like to log in (Y/n)?”, naciśnij Enter.
Gdy zobaczysz komunikat „Go to the following link in your browser:” (Otwórz w przeglądarce ten link:) i długi adres URL zaczynający się od https://accounts.google.com/o/oauth?..., najedź na niego kursorem myszy, kliknij go prawym przyciskiem i wybierz „Kopiuj adres URL”. Następnie otwórz przeglądarkę (niebieska ikona kuli ziemskiej w lewym górnym rogu ekranu), kliknij prawym przyciskiem myszy pasek adresu i wybierz „Wklej”.
Gdy zobaczysz ekran logowania, wpisz adres e-mail powiązany z kontem Google Cloud i naciśnij Enter. Następnie wpisz hasło i kliknij przycisk Dalej.
Pojawi się prośba o przyznanie pakietowi Google Cloud SDK dostępu do Twojego konta Google. Kliknij przycisk Zezwól.
Wyświetlimy Ci kod weryfikacyjny. Zaznacz go myszą, a następnie kliknij prawym przyciskiem myszy i wybierz Kopiuj. Wróć do okna terminala, upewnij się, że kursor znajduje się po prawej stronie tekstu „Enter verification code:” (Wpisz kod weryfikacyjny:), kliknij prawym przyciskiem myszy i wybierz Wklej. Naciśnij przycisk Enter.
Jeśli pojawi się prośba „Pick cloud project to use:” (Wybierz projekt w chmurze, którego chcesz użyć), wpisz numer odpowiadający nazwie projektu, którego używasz w tym samouczku, a potem naciśnij Enter.
Jeśli pojawi się prośba o włączenie interfejsu Compute API, naciśnij Enter, aby go włączyć. Następnie pojawi się prośba o skonfigurowanie ustawień Google Compute Engine. Naciśnij Enter. Wyświetli się lista potencjalnych regionów i stref. Wybierz jeden z nich, wpisz odpowiedni numer i naciśnij Enter.
Za chwilę zobaczysz dodatkowe informacje. Pakiet SDK Google Cloud został skonfigurowany. Możesz zamknąć okno przeglądarki, ponieważ nie będzie Ci już potrzebne.
Instalowanie oprogramowania czujnika i skryptu pogodowego
W wierszu poleceń na Raspberry Pi sklonuj pakiety potrzebne do odczytywania informacji z pinów wejścia/wyjścia.
git clone https://github.com/adafruit/Adafruit_Python_GPIO
Instalowanie pobranych pakietów
cd Adafruit_Python_GPIO
sudo python setup.py install
cd ..
Sklonuj kod projektu, który włącza czujnik pogody
git clone https://github.com/googlecodelabs/iot-data-pipeline
Skopiuj sterownik czujnika do tego samego katalogu, w którym znajduje się pozostałe pobrane oprogramowanie.
cd iot-data-pipeline/third_party/Adafruit_BME280
mv Adafruit_BME280.py ../..
cd ../..
Edytuj skrypt, wpisując…
nano checkWeather.py
Zmień projekt na swój identyfikator projektu, a temat na nazwę tematu Pub/Sub (zostały one podane w sekcjach Konfiguracja i Tworzenie tematu Pub/Sub w tym laboratorium).
Zmień wartości sensorID, sensorZipCode, sensorLat i sensorLong na dowolne wartości. Wartości szerokości i długości geograficznej dla konkretnej lokalizacji lub adresu znajdziesz tutaj.
Po wprowadzeniu niezbędnych zmian naciśnij Ctrl-X, aby zamknąć edytor nano. Naciśnij Y, aby potwierdzić.
# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"
Instalowanie klucza bezpieczeństwa
Skopiuj klucz bezpieczeństwa (z sekcji „Bezpieczne publikowanie w temacie”) na Raspberry Pi.
Jeśli do skopiowania klucza bezpieczeństwa z komputera lokalnego na Raspberry Pi (do katalogu /home/pi) używasz SFTP lub SCP, możesz pominąć następny krok i przejść do eksportowania ścieżki.
Jeśli klucz bezpieczeństwa został umieszczony w zasobniku na dane, musisz zapamiętać nazwę zasobnika i nazwę pliku. Użyj polecenia gsutil, aby skopiować klucz bezpieczeństwa. To polecenie może uzyskać dostęp do Google Storage (dlatego nazywa się gsutil i dlatego ścieżka do pliku zaczyna się od gs://). Pamiętaj, aby zmienić poniższe polecenie, tak aby zawierało nazwę zasobnika i pliku.
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
Powinien pojawić się komunikat informujący o kopiowaniu pliku, a następnie o zakończeniu operacji.
W wierszu poleceń na Raspberry Pi wyeksportuj ścieżkę do klucza bezpieczeństwa (zmień nazwę pliku, aby była zgodna z Twoją):
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
Masz już gotowy czujnik pogodowy IoT, który może przesyłać dane do Google Cloud.
7. Uruchamianie potoku danych
Może być konieczne włączenie Compute API
Przesyłanie strumieniowe danych z Raspberry Pi
Jeśli masz czujnik pogodowy IoT na Raspberry Pi, uruchom skrypt, który będzie odczytywać dane pogodowe i przesyłać je do Google Cloud Pub/Sub. Jeśli nie jesteś w katalogu /home/pi/iot-data-pipeline, najpierw przejdź do niego.
cd /home/pi/iot-data-pipeline
Uruchamianie skryptu pogodowego
python checkWeather.py
W oknie terminala co minutę powinny pojawiać się wyniki danych pogodowych. Gdy dane będą przesyłane, możesz przejść do następnej sekcji (Sprawdź, czy dane są przesyłane).
Symulowane przesyłanie strumieniowe danych
Jeśli nie masz czujnika pogodowego IoT, możesz symulować przesyłanie strumieniowe danych, korzystając z publicznego zbioru danych przechowywanego w Google Cloud Storage i przesyłając go do istniejącego tematu Pub/Sub. Użyjemy Google Dataflow wraz z udostępnionym przez Google szablonem do odczytywania danych z Cloud Storage i publikowania ich w Pub/Sub.
W ramach tego procesu Dataflow będzie potrzebować tymczasowego miejsca na dane, więc utwórzmy w tym celu zasobnik pamięci.
W konsoli Cloud wybierz kolejno Przechowywanie i Przeglądarka.

Kliknij przycisk Utwórz zasobnik.

Wybierz nazwę zasobnika pamięci (pamiętaj, że musi to być nazwa, która jest globalnie niepowtarzalna w całej usłudze Google Cloud) i kliknij przycisk Utwórz. Zapamiętaj nazwę tego zasobnika pamięci, ponieważ wkrótce będzie Ci potrzebna.

W konsoli Cloud wybierz Dataflow.

U góry ekranu kliknij Utwórz zadanie z szablonu.

Wypełnij szczegóły zadania, jak pokazano poniżej, zwracając uwagę na te kwestie:
- Wpisz nazwę zadania dataflow-gcs-to-pubsub.
- Region powinien zostać wybrany automatycznie na podstawie miejsca hostowania projektu i nie wymagać zmiany.
- Wybierz szablon Cloud Dataflow GCS Text to Cloud Pub/Sub
- W polu Pliki wejściowe w Cloud Storage wpisz gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (jest to publiczny zbiór danych).
- W przypadku tematu Pub/Sub wyjściowego dokładna ścieżka będzie zależeć od nazwy projektu i będzie wyglądać mniej więcej tak: „projects/yourProjectName/topics/weatherdata”.
- Ustaw lokalizację tymczasową na nazwę utworzonego właśnie zasobnika Google Cloud Storage wraz z prefiksem nazwy pliku „tmp”. Powinien wyglądać tak: „gs://myStorageBucketName/tmp”.
Po wypełnieniu wszystkich informacji (patrz poniżej) kliknij przycisk Uruchom zadanie.

Zadanie Dataflow powinno się uruchomić.

Ukończenie zadania Dataflow powinno zająć około minuty.

8. Sprawdzanie, czy dane są przesyłane
Logi funkcji w Cloud Functions
Sprawdź, czy funkcja w Cloud Functions jest wyzwalana przez Pub/Sub.
gcloud beta functions logs read function-weatherPubSubToBQ
Logi powinny wskazywać, że funkcja jest wykonywana, dane są odbierane i wstawiane do BigQuery.

Dane BigQuery
Sprawdź, czy dane są przesyłane do tabeli BigQuery. W konsoli Cloud otwórz BigQuery (bigquery.cloud.google.com).

Pod nazwą projektu (po lewej stronie okna) kliknij kolejno Zbiór danych (weatherData), tabelę (weatherDataTable) i przycisk Zapytanie do tabeli.

Dodaj do instrukcji SQL gwiazdkę, aby wyglądała tak jak poniżej: SELECT * FROM... Następnie kliknij przycisk URUCHOM ZAPYTANIE.

Jeśli pojawi się komunikat, kliknij przycisk Uruchom zapytanie.

Jeśli zobaczysz wyniki, oznacza to, że dane są przesyłane prawidłowo.

Po rozpoczęciu przepływu danych możesz utworzyć panel analityczny.
9. Tworzenie panelu Studia danych
Studio danych Google pozwala Ci tworzyć przyjazne raporty i panele informacyjne na podstawie Twoich danych – do tego możesz je dopasować do swoich potrzeb i łatwo udostępniać.
W przeglądarce otwórz stronę https://datastudio.google.com.

W sekcji „Utwórz nowy raport” kliknij Pusty, a następnie przycisk Rozpocznij.

Zaznacz pole wyboru, aby zaakceptować warunki, kliknij przycisk Dalej, wybierz e-maile, które chcesz otrzymywać, i kliknij przycisk Gotowe. Ponownie w sekcji „Utwórz nowy raport” kliknij Pusty.

Kliknij przycisk Utwórz nowe źródło danych.

Kliknij BigQuery, a potem przycisk Autoryzuj i wybierz konto Google, którego chcesz używać w Studio danych (powinno to być to samo konto, którego używasz w tym samouczku).

Kliknij przycisk Zezwól.

Wybierz nazwę projektu, zbioru danych i tabeli. Następnie kliknij przycisk Połącz.

Zmień pola typu, jak pokazano poniżej (wszystkie wartości powinny być liczbami z wyjątkiem timecollected i sensorID). Pamiętaj, że parametr timecollected jest ustawiony na „Data Godzina” (a nie tylko „Data”). Zmień pola agregacji w sposób pokazany poniżej (punkt rosy, temperatura, wilgotność i ciśnienie powinny być średnimi, a wszystkie pozostałe wartości powinny być ustawione na „Brak”). Kliknij przycisk Utwórz raport.

Potwierdź, klikając przycisk Dodaj do raportu.

Jeśli pojawi się prośba o wybranie konta Google, wybierz je, a następnie kliknij przycisk Zezwól, aby umożliwić Studio danych przechowywanie raportów na Dysku Google.

Pojawi się pusty obszar roboczy, na którym możesz utworzyć panel. W górnym rzędzie ikon wybierz Seria czasowa.

Narysuj prostokąt w lewym górnym rogu pustego arkusza. Powinien zajmować około ¼ całego pustego arkusza.

Po prawej stronie okna kliknij kartę Styl. Zmień opcję Brakujące dane z „Linia do zera” na „Przerwy w linii”. W sekcji Lewa oś Y usuń wartość 0 z pola Min. osi, aby zmienić ją na (Automatycznie).

Kliknij wykres w arkuszu i skopiuj go/wklej (Ctrl+C/Ctrl+V) 3 razy. Ustaw wykresy tak, aby każdy z nich zajmował ¼ układu.

Kliknij każdy wykres, a w sekcji Właściwości szeregu czasowego i dane kliknij istniejące dane (punkt rosy). Wybierz inne dane, które mają być wyświetlane, aż wszystkie 4 odczyty pogody (punkt rosy, temperatura, wilgotność i ciśnienie) będą miały własny wykres.


Masz już podstawowy panel.

10. Gratulacje!
Udało Ci się utworzyć cały potok danych. W ten sposób dowiesz się, jak korzystać z Google Pub/Sub, wdrażać funkcję bezserwerową, używać BigQuery i tworzyć panel analityczny za pomocą Studia danych. Dowiedzieliśmy się też, jak bezpiecznie używać pakietu Google Cloud SDK do przenoszenia danych do Google Cloud Platform. Masz już praktyczne doświadczenie z ważnym wzorcem architektury, który może obsługiwać duże ilości danych przy zachowaniu dostępności.

Porządkowanie roszczeń
Gdy skończysz eksperymentować z danymi pogodowymi i potokiem analitycznym, możesz usunąć uruchomione zasoby.
Jeśli czujnik IoT został przez Ciebie zbudowany, wyłącz go. Aby zatrzymać skrypt, naciśnij Ctrl-C w oknie terminala, a następnie wpisz to polecenie, aby wyłączyć Raspberry Pi:
shutdown -h now
Otwórz Cloud Functions, kliknij pole wyboru obok funkcji function-weatherPubSubToBQ, a następnie kliknij Usuń.

Otwórz Pub/Sub, kliknij Temat, zaznacz pole wyboru obok tematu weatherdata, a następnie kliknij Usuń.

Otwórz Pamięć, kliknij pola wyboru obok zasobników pamięci, a następnie kliknij Usuń.

Otwórz stronę bigquery.cloud.google.com, kliknij strzałkę w dół obok nazwy projektu, kliknij strzałkę w dół po prawej stronie zbioru danych weatherData, a następnie kliknij Usuń zbiór danych.

Gdy pojawi się odpowiedni komunikat, wpisz identyfikator zbioru danych (weatherData), aby dokończyć usuwanie danych.
