# #google-bigquery
Вопрос:
Мне нужно выбрать ненулевую(географическую точку) из моего сгруппированного набора данных. Функция max выдает следующую ошибку.
МАКС не определен для аргументов типа ГЕОГРАФИЯ в [65:11]
Рассмотрим примерные данные:
╔════════════════════╦══════════════════════════════╗
║id ║Point ║
╠════════════════════╬══════════════════════════════╣
║1 ║POINT(-79.3123031 43.6839641) ║
║1 ║null ║
╚════════════════════╩══════════════════════════════╝
Мне нужно выбрать ненулевое значение из сгруппированных данных.
Для числовых/строковых значений мы можем использовать max
Есть ли способ решить эту проблему для географических данных в bigquery?
Ответ №1:
Мне нужно выбрать ненулевое значение из сгруппированных данных
Рассмотрим следующий подход
select id, any_value(point) point
from data
where not point is null
group by id
Ответ №2:
МАКС не имеет значения для пространственных типов, потому что они не являются простыми значениями. Я думаю, что вам нужно использовать функции географии и либо
- Извлеките простой тип данных (например, используя такую функцию, как ST_X или ST_AREA), а затем вы можете использовать значение MAX для поиска, например, МАКСИМАЛЬНОЙ долготы или МАКСИМАЛЬНОЙ площади
- Используйте функцию типа ST_BOUNDARY, если вы ищете что-то вроде пространственной границы из нескольких значений ГЕОГРАФИИ
Комментарии:
1. Я немного отредактировал вопрос. Дайте мне знать ваши мысли, пожалуйста! Спасибо.
2. Понял, я вижу обновления. В вашем примере в этой группе идентификаторов есть только одна точка, которая не является нулевой, поэтому вам разрешается просто добавить a
WHERE Point IS NOT NULL
. Но если предположить, что в нормальном случае в группе идентификаторов много точек, что может сделать одну из точек «максимальной» в этой группе? Может быть, дальше всего на Север, дальше всего на Восток, дальше всего на Юг и т. Д.? Это возвращается к использованию ST_X, например, для получения числа из каждой точки. Как только у вас будет простое значение, вы сможете найти МАКСИМАЛЬНОЕ…