Данные и машинное обучение — Примеры
Пример 1 — Счёт за запрос следует за прочитанными столбцами
Таблица событий хранится по строкам и запрашивается по времени, пользователю и сумме, а тот же движок ещё и работает непрерывно, независимо от того, запрашивает ли его кто-нибудь. Объявите хранилище, которое позволяет запросу из трёх столбцов прочитать три столбца, и скажите, что произойдёт со стоимостью движка.
таблица: events (хранится по строкам; каждый запрос читает всю запись)
запрос: select user_id, date(event_time), sum(amount)
from events group by user_id, date(event_time)
Решение
resource "google_bigquery_table" "events" {
dataset_id = "<analytics-dataset>"
table_id = "events"
# хранение по столбцам: этот запрос читает только event_time, user_id и amount
clustering = ["user_id"]
time_partitioning { type = "DAY" }
}
Хранимый по столбцам, тот же запрос читает три названных поля вместо всей полезной нагрузки в каждой подходящей строке, поэтому прочитанные байты — и следующий за ними счёт — падают на порядок. Хранение данных в долговечном дешёвом объектном хранилище с оплатой движка запросов только во время работы означает, что простаивающий склад стоит почти ничего. Обычная ошибка — держать аналитические данные в строчном хранилище, куда уже пишет приложение, потому что это хранилище появилось первым.
Пример 2 — Конвейер, который завершился успешно и загрузил ничего
Ночное задание обновляет данные, по которым переобучается настроенная модель. В некоторые ночи исходный раздел пуст, а задание всё равно завершается успешно, поэтому модель снова обучается на вчерашних данных. Добавьте проверку, которая ловит отказ данных, а не отказ задания.
# ночная загрузка, код выхода 0 независимо от содержимого раздела
load <events-partition> --date yesterday
echo "load ok"
Решение
set -euo pipefail
load <events-partition> --date yesterday
rows=$(count <events-partition> --date yesterday)
test "$rows" -gt 0 || { echo "вчерашний раздел пуст"; exit 1; }
Проверка теперь утверждает свежесть и форму данных, поэтому пустой раздел валит запуск и сообщает владельцу набора данных, вместо того чтобы устаревшая таблица отдавалась, пока кто-нибудь не заметит. Настроенная модель этого не покрывает: зависимости конвейера отказывают поздно и тихо, а код возврата задания ничего не говорит о том, что оно создало. Обычная ошибка — оповещать только о падениях и считать зелёный запуск доказательством свежих данных.