проверьте, пересекает ли точка многоугольник в aws athena - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь переместить код MySQL в AWS athena.

У меня есть две таблицы: одна с location_name и границей (многоугольник), а другая таблица с rent_location (point)

Я присоединился к ним и создал новый столбец, в котором указывается location_name точки пересечения rent_location.

Вот мой запрос в MySQL:

select
  r.*, 
  l.location_name
from rent r
left join location l 
   on ST_Intersects(l.polygon,  ST_Point(ST_X(r.rent_location), ST_Y(r.rent_location)))

Однако он отлично работает, когда я пытаюсь сделать это в Aws Афине не получится. Я смотрел https://docs.aws.amazon.com/athena/latest/ug/geospatial-functions-list.html и пробовал несколько способов.

rent_location, l.polygon - оба типа двоичных данных.

Любая помощь будет очень принята. Спасибо!

Что я пробовал:

  1. From https://docs.aws.amazon.com/athena/latest/ug/geospatial-example-queries.html Я проверял, что ST_X (r.rent_location) преобразует двоичное в десятичное, однако не работает.

В Athena он не распознал lat, lng, если вы не указали ему псевдоним lat lng, поэтому я сделал:

WITH rent as(
    select ST_X(rent_location) as lng
         , ST_Y(rent_location) as lat
      from rent_table
)
select
  r.*, 
  l.location_name
from rent r
left join location l 
   on ST_Intersects(l.polygon,  Point(ST_X(r.rent_location), ST_Y(r.rent_location)))

, но все равно не не работает. Я пробовал как ST_INTERSECT, так и ST_Contains. Единственное, что отличается от примера, это то, что ST_X (r.rent_location) выводит десятичный тип данных вместо двойного.

Когда я запускаю вышеуказанный запрос, я получаю

[Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. GENERIC_INTERNAL_ERROR: Input data format is not validated or supported

Я думаю, это из-за десятичный тип данных?

Как я могу изменить его на двойной тип данных в моем запросе?

РЕДАКТИРОВАТЬ 2: Я изменил тип данных ST_X (rent_location) на удвоение, используя cast(ST_X(rent_location) as double)

, но все та же GENERIC_INTERNAL_ERROR.

Ответы [ 2 ]

0 голосов
/ 17 июля 2020

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

0 голосов
/ 16 июля 2020

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

Вы должны попробовать эту часть самостоятельно, а затем вы можете использовать ее с более крупным запросом. формат данных, который вы используете, который должен соответствовать примеру, который я поделился с Github.

Наконец, нужно запустить этот запрос непосредственно в Athena без подключения JDB C, чтобы мы могли исключить проблему не происходит с драйвером Simba JDB C.

...