Ненулевое значение Bigquery(географическая точка) в сгруппированном наборе данных

# #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, например, для получения числа из каждой точки. Как только у вас будет простое значение, вы сможете найти МАКСИМАЛЬНОЕ…