Я бы хотел добавить к этому сообщению префикс, сказав, что я новичок в SQL, новичок в BigQuery и впервые пишу, поэтому заранее спасибо!
В настоящее время я воссоздаю отчет в Google DataСтудия, изначально построенная в Excel для автобусной компании, которая сравнивала бы ежедневное расписание с данными, которые мы ежедневно получаем от стороннего программного обеспечения.Таблица данных «Расписание» включает название маршрута, названия мест, запланированное время и координаты GPS.Данные в режиме реального времени, которые мы получаем от стороннего программного обеспечения, включают в себя: дату, метку времени для каждых 40 секунд и координаты GPS для этой метки времени.Обратите внимание, что «название маршрута» отсутствует, это ключ к дальнейшему обсуждению в моем вопросе.
Сторонние CSV-данные ежедневно загружаются в виде отдельных CSV-файлов в корзину Google Cloud Data Storage, которая, в свою очередь, связана с Google BigQuery в виде единой таблицы данных в реальном времени, готовой для сравнения стаблица данных расписания.
Цель этого отчета - сравнить выгруженную таблицу данных реального времени с данными расписания, чтобы создать отчет Google Data Studio, который наша команда по логистике может проверить, чтобы ответить надва основных вопроса: 1) Пунктуальность автобуса - был ли автобус вовремя в тот день и насколько поздно.2) Местоположение автобуса - где находится точное GPS-местоположение автобуса относительно запланированных GPS-координат, для отметки времени.В моем идеальном отчете были бы фильтры для выбора различных автобусных маршрутов и выбора рассматриваемой даты.
Мой первый запрос заключается в том, как создать этот отчет.Я предполагаю, что мне нужно будет выполнить соединение с моими данными, чтобы быть в явном виде двумя левыми соединениями, которые отвечают на два моих ключевых вопроса следующим образом: 1) расчет пунктуальности при левом соединении с помощью GPS-координат и 2) расчет GPS с помощью левогоприсоединиться через отметки времени.
Если эта схема ясна, и мое предложение использовать два ЛЕВЫХ объединения правильное, что, как я подозреваю, может быть не так по причинам, рассмотренным ниже, давайте перейдем ко второму этапу.Это хороший контрольный пункт для всех, кто до этого момента читал и считал, что мне нужно внести изменения в свой подход.
Двигаясь дальше, когда и когда я присоединяюсь к своим двум таблицам, я изначально наблюдал следующее техническоесоображения, в которых мне понадобится небольшая помощь:
1) Метки времени в данных в реальном времени берутся каждые 40 секунд.Поэтому у меня не обязательно есть данные для автобуса с точными отметками времени, например, автобус в моем расписании должен быть в точке x на 09:00:00, однако моя самая близкая отметка времени в моих данных в реальном времени может быть 09: 00: 04.Как мне сопоставить эти данные, чтобы выбрать правильную точку данных.Сначала я думал об уменьшении числа значащих цифр, однако затем я рассмотрел случай, который будет наблюдаться в этом примере, где у меня также будет точка данных в 09:00:44, 40 секунд спустя.При уменьшении значимых цифр - 09:00, будет две совпадающие точки данных, и они будут рассматриваться как одинаковые.Любая идея?Может быть, осталось присоединиться к MIN.
2) Координаты GPS для сопоставления.Я пытался использовать функцию географии ST_CLOSESTPOINT, но не до конца ее понимаю ST_CLOSESTPOINT (geography_1, geography_2 [, spheroid = FALSE]).Что такое сфероид = ЛОЖЬ? (https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions).
3) В-третьих, и в настоящее время моя самая сложная проблема - моя таблица данных в реальном времени связана с корзиной данных Google с файлами CSV за несколько лет для 9 различных шин с разными маршрутами - по 1 файлу CSV на шину надень.Кроме того, как упомянуто в параграфе 2, в моих данных в реальном времени нет «имени маршрута», только набор GPS-координат и отметок времени.Мне нужно придумать, как можно различать эти разные CSV-файлы с помощью моей таблицы данных расписания, чтобы она работала в Google Data Studio с двумя ранее упомянутыми фильтрами, чтобы сначала выбрать автобусные маршруты, а затем выбрать дату,Именно этот вопрос заставляет меня задаться вопросом, подходит ли LEFT-соединение, поскольку эта функциональность была бы невозможна при уже соединенных данных.В настоящее время при большом наборе данных в реальном времени соединение с моей таблицей данных расписания случайно совпадает с ближайшим ближайшим к этому набору данных, без возможности выбора по дню и т. Д.
Это довольно большоепроект, немного за пределами моей зоны комфорта и длинный подробный вопрос, но любые рекомендации будут высоко оценены, поскольку я относительно новичок в SQL и BigQuery.
Большое спасибо заранее!
// JOIN 1 - via ST_CLOSESTPOINT to determine punctuality of the bus
SELECT
r1.Direction,
r1.ScheduledLocation,
r1.ScheduledNextLocation,
r1.ScheduledTime,
r1.ScheduledCoordinates,
r1.ScheduledXCoordinates,
r1.ScheduledYCoordinates,
r1.ScheduledFullCoordinates,
r2.RealTime,
r2.RealTimeDate,
r2.RealTimeXCoordinates,
r2.RealTimeYCoordinates,
r2.RealTimeFullCoordinates,
ST_CLOSESTPOINT(r1.ScheduledFullCoordinates, r2.RealTimeFullCoordinates) as ClosestPoint
FROM `SCHEDULE DATA SOURCE` r1
LEFT JOIN `REAL-TIME DATA SOURCE` r2 ON r1.ScheduledTime = r2.RealTime
// JOIN 2 - via Timestamp to determine GPS location of the bus
SELECT
r1.Direction,
r1.ScheduledLocation,
r1.ScheduledNextLocation,
r1.ScheduledTime,
r1.ScheduledCoordinates,
r1.ScheduledXCoordinates,
r1.ScheduledYCoordinates,
r1.ScheduledFullCoordinates,
r2.RealTime,
r2.RealTimeXCoordinates,
r2.RealTimeYCoordinates,
r2.RealTimeFullCoordinates
FROM `SCHEDULE DATA SOURCE` r1
LEFT JOIN `REAL-TIME DATA SOURCE` r2 ON r1.ScheduledTime = r2.RealTime