Athena目前不支持所有的地理空间查询。然而,我们可以使用以下方法来解决这个问题:
SELECT *
FROM mytable
WHERE ST_WITHIN(ST_POINT(my_long, my_lat), ST_GEOMETRY_FROM_TEXT('POLYGON((...))'))
CREATE FUNCTION my_function(point_lat double, point_lon double, polygon_text varchar)
RETURNS boolean
WITH (lambda_execution_role='arn:aws:iam::0123456789012:role/LambdaInvokeRole',
external_language='python3',
output_type='boolean',
runtime_env={'extraPipPackages': ['geopandas', 'shapely']})
AS $$
from shapely.geometry import Point, Polygon
p = Point(point_lon, point_lat)
poly_text = polygon_text.strip()
if not poly_text.startswith('POLYGON(('):
return False
poly_str = poly_text[9:-2]
coords = [tuple(map(float, x.split())) for x in poly_str.split(',')]
poly = Polygon(coords)
return p.within(poly)
$$;
以上是通过使用SQL查询及UDF或ETL作业等手段,来解决Athena地理空间查询的限制的方法。