1. Обзор/Введение
Хотя многоуровневые приложения, состоящие из веб-компонента, сервера приложений и базы данных, являются основой веб-разработки и отправной точкой для многих веб-сайтов, их успех часто сопряжен с проблемами масштабируемости, интеграции и гибкости. Например, как обрабатывать данные в режиме реального времени и как распределять их между несколькими ключевыми бизнес-системами? Эти проблемы в сочетании с требованиями приложений интернет-масштаба обусловили необходимость распределенной системы обмена сообщениями и породили архитектурный шаблон использования конвейеров данных для создания отказоустойчивых систем реального времени. В результате, понимание того, как публиковать данные в режиме реального времени в распределенную систему обмена сообщениями, а затем как построить конвейер данных, является важнейшим навыком как для разработчика, так и для архитектора.
Что вы построите
В этом практическом занятии вы создадите конвейер обработки метеорологических данных, который начнет работу с устройства Интернета вещей (IoT), будет использовать очередь сообщений для приема и доставки данных, задействует бессерверную функцию для перемещения данных в хранилище данных, а затем создаст панель мониторинга для отображения информации. В качестве IoT-устройства будет использоваться Raspberry Pi с датчиком погоды, а конвейер обработки данных будет состоять из нескольких компонентов Google Cloud Platform. Создание Raspberry Pi, хотя и полезно, является необязательной частью этого практического занятия, и потоковую передачу метеорологических данных можно заменить скриптом.

После выполнения шагов в этом практическом задании у вас будет готов потоковый конвейер данных, передающий информацию на панель мониторинга, отображающую температуру, влажность, точку росы и атмосферное давление.

Что вы узнаете
- Как использовать Google Pub/Sub
- Как развернуть функцию Google Cloud
- Как эффективно использовать Google BigQuery
- Как создать панель мониторинга с помощью Google Data Studio
- Кроме того, если вы разработаете IoT-датчик, вы также узнаете, как использовать Google Cloud SDK и как обеспечить безопасность удаленного доступа к платформе Google Cloud.
Что вам понадобится
- Учетная запись Google Cloud Platform. Новые пользователи Google Cloud Platform имеют право на бесплатную пробную версию стоимостью 300 долларов .
Если вы хотите создать часть этого практического задания, посвященную IoT-датчикам, вместо использования примеров данных и скрипта, вам также понадобятся следующие компоненты ( которые можно заказать как в виде полного комплекта, так и по отдельным частям здесь )...
- Raspberry Pi Zero W с блоком питания, картой памяти SD и корпусом.
- USB-кардридер
- USB-концентратор (для подключения клавиатуры и мыши к единственному USB-порту Raspberry Pi)
- Провода для макетной платы типа «мама-мама»
- Разъемы GPIO Hammer
- датчик BME280
- Паяльник с припоем
Кроме того, предполагается наличие доступа к компьютерному монитору или телевизору с HDMI-входом, HDMI-кабелю, клавиатуре и мыши.
2. Настройка
Настройка среды для самостоятельного обучения
Если у вас еще нет учетной записи Google (Gmail или G Suite), вам необходимо ее создать . Независимо от того, есть у вас уже учетная запись Google или нет, обязательно воспользуйтесь бесплатной пробной версией за 300 долларов !
Войдите в консоль Google Cloud Platform ( console.cloud.google.com ). Для этой лабораторной работы вы можете использовать проект по умолчанию («Мой первый проект») или создать новый проект. Если вы хотите создать новый проект, воспользуйтесь страницей «Управление ресурсами» . Идентификатор проекта должен быть уникальным именем для всех проектов Google Cloud (приведенное ниже имя уже занято и вам не подойдет). Запишите свой идентификатор проекта (например, ваш идентификатор проекта будет _____), так как он понадобится позже.


Выполнение этого практического задания не должно стоить больше нескольких долларов, но может обойтись дороже, если вы решите использовать дополнительные ресурсы или оставите их запущенными. Обязательно пройдите раздел «Очистка ресурсов» в конце выполнения задания.
3. Создайте таблицу BigQuery.
BigQuery — это бессерверное, масштабируемое и недорогое корпоративное хранилище данных, которое станет идеальным вариантом для хранения данных, передаваемых потоком с IoT-устройств, а также позволит аналитической панели запрашивать эту информацию.
Давайте создадим таблицу, которая будет хранить все данные о погоде, полученные с помощью IoT. Выберите BigQuery в консоли Cloud. Это откроет BigQuery в новом окне (не закрывайте исходное окно, так как вам понадобится получить к нему доступ снова).

Нажмите на значок стрелки вниз рядом с названием вашего проекта, а затем выберите «Создать новый набор данных».

Введите "weatherData" в поле "Набор данных", выберите место для его хранения и нажмите "ОК".

Нажмите знак «+» рядом с вашим набором данных, чтобы создать новую таблицу.

В поле «Исходные данные» выберите «Создать пустую таблицу» . В поле «Имя целевой таблицы» введите weatherDataTable. В поле «Схема» нажимайте кнопку «Добавить поле» , пока не появится 9 полей. Заполните поля, как показано ниже, обязательно выбрав соответствующий тип для каждого поля. После завершения всех действий нажмите кнопку «Создать таблицу» .

Вы должны увидеть примерно такой результат...

Теперь у вас настроено хранилище данных для приема метеорологических данных.
4. Создайте тему Pub/Sub.
Cloud Pub/Sub — это простая, надежная и масштабируемая основа для потоковой аналитики и систем событийных вычислений. В результате она идеально подходит для обработки входящих сообщений IoT и последующей обработки их нижестоящими системами.
Если вы все еще находитесь в окне BigQuery, вернитесь в Cloud Console. Если вы закрыли Cloud Console, перейдите по адресу https://console.cloud.google.com
В консоли Cloud выберите Pub/Sub, а затем Topics.

Если появится запрос на включение API, нажмите кнопку «Включить API».

Нажмите на кнопку «Создать тему».

Введите "weatherdata" в качестве названия темы и нажмите "Создать".

Вы должны увидеть только что созданную тему.

Теперь у вас есть тема Pub/Sub, в которую можно публиковать сообщения IoT и предоставлять другим процессам доступ к этим сообщениям.
Безопасная публикация по данной теме.
Если вы планируете публиковать сообщения в тему Pub/Sub из ресурсов, находящихся за пределами вашей консоли Google Cloud (например, с IoT-датчика), потребуется более строгий контроль доступа с использованием учетной записи службы и обеспечение безопасности соединения путем создания доверенного сертификата.
В консоли Cloud выберите IAM & Admin, а затем Service accounts.

Нажмите кнопку «Создать учетную запись службы».

В раскрывающемся списке «Роль» выберите роль «Издатель/Подписчик».

Введите имя учетной записи службы (iotWeatherPublisher), установите флажок «Предоставить новый закрытый ключ», убедитесь, что тип ключа установлен на JSON, и нажмите «Создать».

Ключ безопасности будет загружен автоматически. Ключ всего один, поэтому важно его не потерять. Нажмите «Закрыть».

Вы должны увидеть, что учетная запись службы создана и с ней связан идентификатор ключа (Key ID).

Для удобства доступа к ключу в дальнейшем мы сохраним его в Google Cloud Storage. В консоли Cloud выберите «Хранилище», а затем «Обзор».

Нажмите кнопку «Создать корзину».

Выберите имя для хранилища (это имя должно быть уникальным во всей глобальном пространстве Google Cloud) и нажмите кнопку «Создать».

Найдите автоматически загруженный ключ безопасности и перетащите его в хранилище, либо загрузите оттуда.

После завершения загрузки ключа он должен отобразиться в браузере облачного хранилища.

Запишите имя хранилища и имя файла ключа безопасности для дальнейшего использования.
5. Создайте облачную функцию.
Облачные вычисления сделали возможными полностью бессерверные модели вычислений, где логика может запускаться по запросу в ответ на события, поступающие из любой точки мира. В этой лабораторной работе облачная функция будет запускаться каждый раз, когда сообщение публикуется в тему погоды, считывать сообщение, а затем сохранять его в BigQuery.
В консоли Cloud выберите Cloud Functions.

Если вы видите сообщение об использовании API, нажмите кнопку «Включить API».

Нажмите кнопку «Создать функцию».

В поле «Имя» введите function-weatherPubSubToBQ. В поле «Триггер» выберите тему Cloud Pub/Sub, а в раскрывающемся списке «Тема» — weatherdata. В поле «Исходный код» выберите встроенный редактор. На вкладке index.js вставьте следующий код поверх исходного. Убедитесь, что вы изменили константы projectId, datasetId и tableId в соответствии с вашей средой.
/**
* 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();
};
На вкладке package.json вставьте следующий код вместо кода-заполнителя.
{
"name": "function-weatherPubSubToBQ",
"version": "0.0.1",
"private": true,
"license": "Apache-2.0",
"author": "Google Inc.",
"dependencies": {
"@google-cloud/bigquery": "^0.9.6"
}
}
Если для функции, подлежащей выполнению, указано "HelloWorld", измените её на "subscribe". Нажмите кнопку "Создать".

Примерно через 2 минуты ваша функция покажет, что она развернута.

Поздравляем! Вы только что подключили Pub/Sub к BigQuery через Functions.
6. Настройка оборудования IoT (необязательно)
Соберите Raspberry Pi и датчик.
Если контактов больше 7, сократите разъем до 7. Припаяйте контакты разъема к плате датчика.

Аккуратно установите штырьки разъема Hammer в Raspberry Pi.

Отформатируйте SD-карту и установите программу установки NOOBS (New Out Of Box Software), следуя инструкциям здесь . Вставьте SD-карту в Raspberry Pi и поместите Raspberry Pi в корпус.

Используйте провода макетной платы для подключения датчика к Raspberry Pi в соответствии со схемой ниже.

контакт Raspberry Pi | Подключение датчика |
Контакт 1 (3,3 В) | VIN |
Контакт 3 (CPIO2) | СДИ |
Контакт 5 (GPIO3) | СКК |
Контакт 9 (заземление) | НД |

Подключите монитор (с помощью разъема mini-HDMI), клавиатуру/мышь (через USB-концентратор) и, наконец, адаптер питания.
Настройте Raspberry Pi и датчик.
После завершения загрузки Raspberry Pi выберите Raspbian в качестве нужной операционной системы, убедитесь, что выбран правильный язык, а затем нажмите кнопку «Установить» (значок жесткого диска в левом верхнем углу окна).

Нажмите на значок Wi-Fi (в правом верхнем углу экрана) и выберите сеть. Если это защищенная сеть, введите пароль (предварительно заданный ключ).

Щёлкните по значку Raspberry Pi (в верхнем левом углу экрана), выберите «Настройки», а затем «Конфигурация Raspberry Pi». На вкладке «Интерфейсы» включите I2C. На вкладке «Локализация» установите язык и часовой пояс. После установки часового пояса дождитесь перезагрузки Raspberry Pi.

После завершения перезагрузки нажмите на значок Терминала, чтобы открыть окно терминала.

Введите следующую команду, чтобы убедиться в правильном подключении датчика.
sudo i2cdetect -y 1
Результат должен выглядеть так – убедитесь, что отображается число 77.

Установите Google Cloud SDK.
Для использования инструментов платформы Google Cloud необходимо установить Google Cloud SDK на Raspberry Pi. SDK включает в себя инструменты, необходимые для управления платформой Google Cloud и её использования, и доступен для нескольких языков программирования.
Если окно терминала на Raspberry Pi еще не открыто, откройте его и установите переменную среды, которая будет сопоставлять версию SDK с операционной системой Raspberry Pi.
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
Теперь добавьте местоположение, где хранятся пакеты Google Cloud SDK, чтобы инструменты установки знали, где искать их при запросе на установку 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
Добавьте открытый ключ из репозитория пакетов Google, чтобы Raspberry Pi проверял безопасность и доверял содержимому во время установки.
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Убедитесь, что все программное обеспечение на Raspberry Pi обновлено, и установите основной пакет Google Cloud SDK.
sudo apt-get update && sudo apt-get install google-cloud-sdk
Когда появится запрос «Продолжить?», нажмите Enter.
Установите пакет tendo с помощью менеджера пакетов Python. Этот пакет используется для проверки того, выполняется ли скрипт более одного раза и устанавливается ли он для использования в скрипте погоды.
pip install tendo
Убедитесь, что пакеты Google Cloud PubSub и OAuth2 для Python установлены и обновлены с помощью менеджера пакетов Python.
sudo pip install --upgrade google-cloud-pubsub
sudo pip install --upgrade oauth2client
Инициализируйте Google Cloud SDK.
SDK обеспечивает удалённый аутентифицированный доступ к облаку Google. В рамках этого практического занятия он будет использоваться для доступа к хранилищу, чтобы можно было легко загрузить ключ безопасности на Raspberry Pi.
В командной строке Raspberry Pi введите
gcloud init --console-only
Когда появится запрос "Хотите войти в систему (Да/Нет)?", нажмите Enter.
Когда вы увидите сообщение «Перейдите по следующей ссылке в вашем браузере:», за которым следует длинный URL-адрес, начинающийся с https://accounts.google.com/o/oauth ?..., наведите курсор мыши на этот URL, щелкните правой кнопкой мыши и выберите «Копировать URL». Затем откройте веб-браузер (синяя иконка глобуса в верхнем левом углу экрана), щелкните правой кнопкой мыши по адресной строке и выберите «Вставить».
После появления экрана входа в систему введите адрес электронной почты, связанный с вашей учетной записью Google Cloud, и нажмите Enter. Затем введите свой пароль и нажмите кнопку «Далее».
Вам будет предложено подключиться к Google Cloud SDK и запросить доступ к вашей учетной записи Google. Нажмите кнопку «Разрешить».
Вам будет показан код подтверждения. Выделите его мышью, затем щелкните правой кнопкой мыши и выберите «Копировать». Вернитесь в окно терминала, убедитесь, что курсор находится справа от «Введите код подтверждения:», щелкните правой кнопкой мыши и выберите «Вставить». Нажмите кнопку Enter.
Если вас попросят выбрать облачный проект для использования, введите номер, соответствующий названию проекта, который вы использовали в этом практическом задании, и нажмите Enter.
Если появится запрос на включение API для вычислений, нажмите кнопку Enter. После этого вам будет предложено настроить параметры Google Compute Engine. Нажмите Enter. Вам будет представлен список потенциальных регионов/зон — выберите ближайший к вам, введите соответствующий номер и нажмите Enter.
Через мгновение отобразится дополнительная информация. Google Cloud SDK настроен. Можете закрыть окно веб-браузера, оно вам больше не понадобится.
Установите программное обеспечение для датчиков и скрипт прогноза погоды.
С помощью командной строки на Raspberry Pi клонируйте необходимые пакеты для чтения информации с входных/выходных контактов.
git clone https://github.com/adafruit/Adafruit_Python_GPIO
Установите загруженные пакеты.
cd Adafruit_Python_GPIO
sudo python setup.py install
cd ..
Клонируйте код проекта, который обеспечивает работу датчика погоды.
git clone https://github.com/googlecodelabs/iot-data-pipeline
Скопируйте драйвер датчика в ту же папку, что и остальное загруженное программное обеспечение.
cd iot-data-pipeline/third_party/Adafruit_BME280
mv Adafruit_BME280.py ../..
cd ../..
Отредактируйте скрипт, набрав...
nano checkWeather.py
Измените имя проекта на ваш идентификатор проекта, а имя темы — на название вашей темы Pub/Sub (эти данные были указаны в разделах «Настройка» и «Создание темы Pub/Sub» данного практического задания).
Измените значения sensorID, sensorZipCode, sensorLat и sensorLong на любые желаемые. Значения широты и долготы для конкретного местоположения или адреса можно найти здесь .
После внесения необходимых изменений нажмите Ctrl-X, чтобы выйти из редактора nano. Нажмите Y для подтверждения.
# 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"
Установите ключ безопасности
Скопируйте ключ безопасности (из раздела «Безопасная публикация в тему») на Raspberry Pi.
Если вы использовали SFTP или SCP для копирования ключа безопасности с локального компьютера на Raspberry Pi (в каталог /home/pi), то можете пропустить следующий шаг и сразу перейти к экспорту пути.
Если вы поместили ключ безопасности в хранилище данных, вам нужно запомнить имя этого хранилища и имя файла. Используйте команду gsutil для копирования ключа безопасности. Эта команда может получить доступ к Google Storage (поэтому она называется gsutil и почему путь к файлу начинается с gs://). Убедитесь, что вы изменили команду ниже, указав имя вашего хранилища данных и имя файла.
gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .
Вы должны увидеть сообщение о том, что файл копируется, а затем сообщение о завершении операции.
В командной строке Raspberry Pi укажите путь к ключу безопасности (измените имя файла в соответствии с имеющимся у вас ключом).
export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json
Теперь у вас есть готовый IoT-датчик погоды, который может передавать данные в облако Google.
7. Запустите конвейер обработки данных.
Возможно, потребуется включить Compute API.
Потоковая передача данных с Raspberry Pi
Если вы собрали IoT-датчик погоды на базе Raspberry Pi, запустите скрипт, который будет считывать данные о погоде и отправлять их в Google Cloud Pub/Sub. Если вы находитесь не в каталоге /home/pi/iot-data-pipeline, сначала перейдите туда.
cd /home/pi/iot-data-pipeline
Запустить скрипт погоды
python checkWeather.py
В окне терминала каждую минуту должны отображаться результаты анализа погодных данных. После того, как данные начали поступать, можно перейти к следующему разделу (Проверка потока данных).
Имитация потоковой передачи данных
Если вы не создавали датчик погоды для IoT, вы можете имитировать потоковую передачу данных, используя общедоступный набор данных, хранящийся в Google Cloud Storage, и передавая его в существующую тему Pub/Sub. Будет использоваться Google Dataflow вместе с предоставленным Google шаблоном для чтения из Cloud Storage и публикации в Pub/Sub.
В рамках этого процесса Dataflow потребуется временное место хранения, поэтому давайте создадим для этой цели хранилище (storage bucket).
В консоли Cloud выберите «Хранилище», а затем «Браузер».

Нажмите кнопку «Создать корзину».

Выберите имя для хранилища (помните, что это должно быть уникальное имя во всей сети Google Cloud) и нажмите кнопку «Создать». Запомните имя этого хранилища, так как оно понадобится в ближайшее время.

В консоли Cloud выберите Dataflow.

Нажмите на кнопку «Создать задание из шаблона» (в верхней части экрана).

Заполните информацию о вакансии, как показано ниже, обращая внимание на следующее:
- Введите имя задания: dataflow-gcs-to-pubsub
- Регион должен автоматически выбираться в зависимости от того, где размещен ваш проект, и его не нужно будет менять.
- Выберите шаблон Cloud Dataflow для GCS Text to Cloud Pub/Sub.
- В поле "Входной(ые) файл(ы) облачного хранилища" введите gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (это общедоступный набор данных).
- Для выходной темы публикации/подписки точный путь будет зависеть от названия вашего проекта и будет выглядеть примерно так: "projects/yourProjectName/topics/weatherdata".
- В поле «Временное расположение» укажите имя только что созданного вами сегмента Google Cloud Storage с префиксом имени файла «tmp» . Должно получиться что-то вроде «gs://myStorageBucketName/tmp».
После заполнения всей необходимой информации (см. ниже) нажмите кнопку «Запустить задание».

Задача Dataflow должна начать выполнение.

Выполнение задания Dataflow должно занять приблизительно минуту.

8. Убедитесь, что данные передаются.
Журналы облачных функций
Убедитесь, что облачная функция запускается через механизм публикации/подписки (Pub/Sub).
gcloud beta functions logs read function-weatherPubSubToBQ
В логах должно быть видно, что функция выполняется, данные принимаются и вставляются в BigQuery.

данные BigQuery
Убедитесь, что данные поступают в таблицу BigQuery. В консоли Cloud перейдите в BigQuery (bigquery.cloud.google.com).

В окне с названием проекта (в левой части) щелкните по набору данных (weatherData), затем по таблице (weatherDataTable) и нажмите кнопку «Запрос к таблице».

Добавьте звездочку к SQL-запросу, чтобы он выглядел как SELECT * FROM..., как показано ниже, а затем нажмите кнопку ВЫПОЛНИТЬ ЗАПРОС

При появлении запроса нажмите кнопку «Выполнить запрос».

Если вы видите результаты, значит, поток данных работает корректно.

После начала обработки данных вы готовы создать аналитическую панель.
9. Создайте панель мониторинга в Data Studio.
Google Data Studio превращает ваши данные в информативные панели и отчеты, которые легко читаются, легко распространяются и полностью настраиваются.
В веб-браузере перейдите по адресу https://datastudio.google.com

В разделе «Создать новый отчет» выберите «Пустой», а затем нажмите кнопку «Начать».

Установите флажок, чтобы принять условия, нажмите кнопку «Далее», выберите, какие электронные письма вы хотите получать, и нажмите кнопку «Готово». Еще раз, в разделе «Начать новый отчет», нажмите «Пустой».

Нажмите кнопку «Создать новый источник данных».

Нажмите на BigQuery, затем на кнопку «Авторизовать» и выберите учетную запись Google, которую вы хотите использовать с Data Studio (это должна быть та же учетная запись, которую вы использовали для выполнения практического задания).

Нажмите кнопку «Разрешить».

Выберите название проекта, набор данных и таблицу. Затем нажмите кнопку «Подключить».

Измените поля типа, как показано ниже (все поля, кроме timecollected и sensorID, должны быть числами). Обратите внимание, что для поля timecollected установлено значение «Дата и час» (а не просто «Дата»). Измените поля агрегации, как показано ниже (для точки росы, температуры, влажности и давления должны быть установлены средние значения, а для всех остальных — значение «Нет»). Нажмите кнопку «Создать отчет».

Подтвердите, нажав кнопку «Добавить в отчёт».

Если вас попросят выбрать свою учетную запись Google, сделайте это, а затем нажмите кнопку «Разрешить», чтобы Data Studio могла сохранять отчеты в Google Диск.

Перед вами открывается пустое поле для создания панели мониторинга. В верхнем ряду значков выберите «Временные ряды».

Нарисуйте прямоугольник в верхнем левом углу чистого листа. Он должен занимать примерно ¼ всей площади листа.

В правой части окна выберите вкладку «Стиль». Измените параметр «Отсутствующие данные» с «Линия до нуля» на «Разрывы линий». В разделе «Левая ось Y» удалите 0 из параметра «Минимальное значение оси», чтобы изменить его на (Авто).

Щелкните по графику на листе и скопируйте/вставьте его (Ctrl-C/Ctrl-V) 3 раза. Выровняйте графики так, чтобы каждый занимал ¼ площади листа.

Щелкните по каждому графику, а затем в разделе «Свойства и данные временного ряда» щелкните по существующему показателю (точка росы), выберите другой показатель для отображения, пока для всех четырех метеорологических параметров (точка росы, температура, влажность и давление) не появится свой собственный график.


Теперь у вас есть базовая панель управления!

10. Поздравляем!
Вы создали целый конвейер обработки данных! При этом вы научились использовать Google Pub/Sub, развертывать бессерверные функции, работать с BigQuery и создавать аналитические панели с помощью Data Studio. Кроме того, вы увидели, как безопасно использовать Google Cloud SDK для загрузки данных на платформу Google Cloud. Наконец, у вас появился практический опыт работы с важным архитектурным шаблоном, способным обрабатывать большие объемы данных, сохраняя при этом доступность.

Уборка
После завершения экспериментов с данными о погоде и аналитическим конвейером вы можете удалить запущенные ресурсы.
Если вы установили IoT-датчик, выключите его. Нажмите Ctrl-C в окне терминала, чтобы остановить скрипт, а затем введите следующее, чтобы выключить Raspberry Pi.
shutdown -h now
Перейдите в раздел «Облачные функции», установите флажок рядом с функцией weatherPubSubToBQ, а затем нажмите «Удалить».

Перейдите в раздел «Публикация/Подписка», нажмите «Тема», поставьте галочку рядом с темой «Данные о погоде», а затем нажмите «Удалить».

Перейдите в раздел «Хранилище», установите флажки рядом с ячейками хранения, а затем нажмите «Удалить».

Перейдите на bigquery.cloud.google.com, нажмите стрелку вниз рядом с названием вашего проекта, затем нажмите стрелку вниз справа от набора данных weatherData и выберите «Удалить набор данных».

При появлении запроса введите идентификатор набора данных (weatherData), чтобы завершить удаление данных.
