Presto SQL - 将数组 (BingTile) 转换为几何图形
Presto SQL - Transforming array(BingTile) into geometry
我正在尝试使用 bing_tiles_around()、geometry_union() 和 st_area() 等地理空间函数以及以下示例数据来计算城市面积大小.
City ID | Store ID | latitude | longitude | radius (km)
---------------------------------------------------------
12345 | store_01 | 36.1234 | 31.1234 | 3.11
12345 | store_02 | 36.5678 | 31.5678 | 2.52
我相信我应该使用上面的函数来计算面积大小。只要我了解基于 this reference,bing_tiles_around() returns 数组(BingTile),我需要将其转换为几何类型以同时使用 geometry_union( ) 和 st_area() 但我不确定如何将 'array(BingTile)' 转换为 'geometry' 类型。
with store_info as (
select city_id, store_id, latitude, longitude, radius,
bing_tiles_around(latitude, longitude, 10, radius) as bingTiles_around
from store_detail
)
select city_id, store_id, geometry_union(bingTiles_around)
from store_info
上面的查询是我当前正在处理的查询,当我执行它时它向我显示了以下错误。 (我知道这不是正确的用法,但只是想分享以下错误信息来解决这个问题)
QueryValidation: user_error: Attempt 1: presto: query failed (200 OK):
"USER_ERROR: com.facebook.presto.sql.analyzer.SemanticException: line 17:70:
Unexpected parameters (array(BingTile)) for function geometry_union.
Expected: geometry_union(array(Geometry)) "
最终目标是创建一个示例结果数据集,如下所示。
City ID | Area_size
--------------------
12345 | 40.12345
12346 | 50.56789
任何人都可以使用上述信息帮助我创建这个 table 吗?
任何帮助将不胜感激。
谢谢!
bing_tiles_around
returns array of BingTile
while geometry_union
需要 Geometry
数组,因此您需要将一个数组转换为另一个数组:
-- sample data
WITH dataset (City_ID , Store_ID , latitude , longitude , radius ) AS (
VALUES (12345 , 'store_01' , 36.1234 , 31.1234 , 3.11),
(12345 , 'store_02' , 36.5678 , 31.5678 , 2.52)
)
--query
select city_id,
store_id,
geometry_union(
transform(bingTiles_around, t->bing_tile_polygon(t))
)
from(
select city_id,
store_id,
latitude,
longitude,
radius,
bing_tiles_around(latitude, longitude, 10, radius) as bingTiles_around
from dataset
)
我正在尝试使用 bing_tiles_around()、geometry_union() 和 st_area() 等地理空间函数以及以下示例数据来计算城市面积大小.
City ID | Store ID | latitude | longitude | radius (km)
---------------------------------------------------------
12345 | store_01 | 36.1234 | 31.1234 | 3.11
12345 | store_02 | 36.5678 | 31.5678 | 2.52
我相信我应该使用上面的函数来计算面积大小。只要我了解基于 this reference,bing_tiles_around() returns 数组(BingTile),我需要将其转换为几何类型以同时使用 geometry_union( ) 和 st_area() 但我不确定如何将 'array(BingTile)' 转换为 'geometry' 类型。
with store_info as (
select city_id, store_id, latitude, longitude, radius,
bing_tiles_around(latitude, longitude, 10, radius) as bingTiles_around
from store_detail
)
select city_id, store_id, geometry_union(bingTiles_around)
from store_info
上面的查询是我当前正在处理的查询,当我执行它时它向我显示了以下错误。 (我知道这不是正确的用法,但只是想分享以下错误信息来解决这个问题)
QueryValidation: user_error: Attempt 1: presto: query failed (200 OK):
"USER_ERROR: com.facebook.presto.sql.analyzer.SemanticException: line 17:70:
Unexpected parameters (array(BingTile)) for function geometry_union.
Expected: geometry_union(array(Geometry)) "
最终目标是创建一个示例结果数据集,如下所示。
City ID | Area_size
--------------------
12345 | 40.12345
12346 | 50.56789
任何人都可以使用上述信息帮助我创建这个 table 吗? 任何帮助将不胜感激。
谢谢!
bing_tiles_around
returns array of BingTile
while geometry_union
需要 Geometry
数组,因此您需要将一个数组转换为另一个数组:
-- sample data
WITH dataset (City_ID , Store_ID , latitude , longitude , radius ) AS (
VALUES (12345 , 'store_01' , 36.1234 , 31.1234 , 3.11),
(12345 , 'store_02' , 36.5678 , 31.5678 , 2.52)
)
--query
select city_id,
store_id,
geometry_union(
transform(bingTiles_around, t->bing_tile_polygon(t))
)
from(
select city_id,
store_id,
latitude,
longitude,
radius,
bing_tiles_around(latitude, longitude, 10, radius) as bingTiles_around
from dataset
)