MAPREDUCE服务 MRS-CarbonData表空间索引语法说明:不规则空间集合的聚合查询
不规则空间集合的聚合查询
- 根据polygon过滤数据
UDF输入参数:
参数
类型
说明
pointList
String
将多个点输入为一个字符串,每个点以longitude latitude表示。经纬度间用空格分隔,每对经纬度用逗号分隔,字符串首尾经纬度一致。
UDF输出参数:
参数
类型
说明
inOrNot
Boolean
判断数据是否在指定的polygon_list之内。
使用示例:
select longitude, latitude from geosot where IN_POLYGON('116.321011 40.123503, 116.137676 39.947911, 116.560993 39.935276, 116.321011 40.123503');
- 根据polygon列表过滤数据。
IN_POLYGON_LIST(polygonList, opType)
UDF输入参数:
参数
类型
说明
polygonList
String
将多个polygon输入为一个字符串,每个polygon以POLYGON ((longitude1 latitude1, longitude2 latitude2, …))表示。注意“POLYGON”后有空格,经纬度间用空格分隔,每对经纬度用逗号分隔,一个polygon的首尾经纬度一致。IN_POLYGON_LIST必须输入2个以上polygon。
一个polygon示例:
POLYGON ((116.137676 40.163503, 116.137676 39.935276, 116.560993 39.935276, 116.137676 40.163503))
opType
String
对多个polygon进行并交差操作。
目前支持的操作类型:
- OR:A U B U C (假设输入了三个POLYGON,A、B、C)
- AND:A ∩ B ∩ C
UDF输出参数:
参数
类型
说明
inOrNot
Boolean
判断数据是否在指定的polygon_list之内。
使用示例:
select longitude, latitude from geosot where IN_POLYGON_LIST('POLYGON ((120.176433 30.327431,120.171283 30.322245,120.181411 30.314540, 120.190509 30.321653,120.185188 30.329358,120.176433 30.327431)), POLYGON ((120.191603 30.328946,120.184179 30.327465,120.181819 30.321464, 120.190359 30.315388,120.199242 30.324464,120.191603 30.328946))', 'OR');
- 根据polyline列表过滤数据。
IN_POLYLINE_LIST(polylineList, bufferInMeter)
UDF输入参数:
参数
类型
说明
polylineList
String
将多个polyline输入为一个字符串,每个polyline以LINESTRING (longitude1 latitude1, longitude2 latitude2, …)表示。注意“LINESTRING”后有空格,经纬度间用空格分隔,每组经纬度用逗号分隔。
对多个polyline区域内的数据会输出并集结果。
一个polyline示例:
LINESTRING (116.137676 40.163503, 116.137676 39.935276, 116.260993 39.935276)
bufferInMeter
Float
polyline的buffer距离,单位为米。末端使用直角创建缓冲区。
UDF输出参数:
参数
类型
说明
inOrNot
Boolean
判断数据是否在指定的polyline_list之内。
使用示例:
select longitude, latitude from geosot where IN_POLYLINE_LIST('LINESTRING (120.184179 30.327465, 120.191603 30.328946, 120.199242 30.324464, 120.190359 30.315388)', 65);
- 根据GeoId区间列表过滤数据。
IN_POLYGON_RANGE_LIST(polygonRangeList, opType)
UDF输入参数:参数
类型
说明
polygonRangeList
String
将多个rangeList输入为一个字符串,每个rangeList以RANGELIST (startGeoId1 endGeoId1, startGeoId2 endGeoId2, …)表示。注意“RANGELIST”后有空格,首尾GeoId间用空格分隔,每组GeoId range用逗号分隔。
一个rangeList示例:
RANGELIST (855279368848 855279368850, 855280799610 855280799612, 855282156300 855282157400)
opType
String
对多个rangeList进行并交差操作。
目前支持的操作类型:
- OR:A U B U C (假设输入了三个RANGELIST,A、B、C)
- AND:A ∩ B ∩ C
UDF输出参数:
参数
类型
说明
inOrNot
Boolean
判断数据是否在指定的polyRange_list之内。
使用示例:
select mygeosot, longitude, latitude from geosot where IN_POLYGON_RANGE_LIST('RANGELIST (526549722865860608 526549722865860618, 532555655580483584 532555655580483594)', 'OR');
- polygon连接查询
IN_POLYGON_JOIN(GEO_HASH_INDEX_COLUMN, POLYGON_COLUMN)
两张表做join查询,一张表为空间数据表(有经纬度列和GeoHashIndex列),另一张表为维度表,保存polygon数据。
查询使用IN_POLYGON_JOIN UDF,参数GEO_HASH_INDEX_COLUMN和polygon表的POLYGON_COLUMN。Polygon_column列是一系列的点(经纬度列)。Polygon表的每一行的第一个点和最后一个点必须是相同的。Polygon表的每一行的所有点连接起来形成一个封闭的几何对象。
UDF输入参数:
参数
类型
说明
GEO_HASH_INDEX_COLUMN
Long
空间数据表的GeoHashIndex列。
POLYGON_COLUMN
String
Polygon表的polygon列,数据为polygon的字符串表示。例如,一个polygon是POLYGON ((longitude1 latitude1, longitude2 latitude2, …))
使用示例:
CREATE TABLE polygonTable( polygon string, poiType string, poiId String) STORED AS carbondata; insert into polygonTable select 'POLYGON ((120.176433 30.327431,120.171283 30.322245, 120.181411 30.314540,120.190509 30.321653,120.185188 30.329358,120.176433 30.327431))','abc','1'; insert into polygonTable select 'POLYGON ((120.191603 30.328946,120.184179 30.327465, 120.181819 30.321464,120.190359 30.315388,120.199242 30.324464,120.191603 30.328946))','abc','2'; select t1.longitude,t1.latitude from geosot t1 inner join (select polygon,poiId from polygonTable where poitype='abc') t2 on in_polygon_join(t1.mygeosot,t2.polygon) group by t1.longitude,t1.latitude;
- range_list连接查询
IN_POLYGON_JOIN_RANGE_LIST(GEO_HASH_INDEX_COLUMN, POLYGON_COLUMN)
同IN_POLYGON_JOIN,使用IN_POLYGON_JOIN_RANGE_LIST UDF关联空间数据表和polygon维度表,关联基于Polygon_RangeList。直接使用range list可以避免polygon到range list的转换。
UDF输入参数:
参数
类型
说明
GEO_HASH_INDEX_COLUMN
Long
空间数据表的GeoHashIndex列。
POLYGON_COLUMN
String
Polygon表的rangelist列,数据为rangeList的字符串。例如,一个rangelist是RANGELIST (startGeoId1 endGeoId1, startGeoId2 endGeoId2, …)
使用示例:
CREATE TABLE polygonTable( polygon string, poiType string, poiId String) STORED AS carbondata; insert into polygonTable select 'RANGELIST (526546455897309184 526546455897309284, 526549831217315840 526549831217315850, 532555655580483534 532555655580483584)','xyz','2'; select t1.* from geosot t1 inner join (select polygon,poiId from polygonTable where poitype='xyz') t2 on in_polygon_join_range_list(t1.mygeosot,t2.polygon);
- GeoID转栅格行列号。
UDF输入参数:
参数
类型
说明
geoId
Long
根据GeoId计算栅格行列号。
UDF输出参数:
参数
类型
说明
gridArray
Array[Int]
返回该geoid所包含的栅格行列号,以数组的方式返回,第一位为行,第二位为列。
使用示例:
select longitude, latitude, mygeohash, GeoIdToGridXy(mygeohash) as GridXY from geoTable;
- 经纬度转GeoID。
LatLngToGeoId(latitude, longitude oriLatitude, gridSize)
UDF输入参数:
参数
类型
说明
longitude
Long
经度,注:转换后的整数类型。
latitude
Long
纬度,注:转换后的整数类型。
oriLatitude
Double
原点纬度,计算GeoId需要参数。
gridSize
Int
栅格大小,计算GeoId需要参数。
UDF输出参数:
参数
类型
说明
geoId
Long
通过编码获得一个表示经纬度的数。
使用示例:
select longitude, latitude, mygeohash, LatLngToGeoId(latitude, longitude, 39.832277, 50) as geoId from geoTable;
- GeoID转经纬度。
GeoIdToLatLng(geoId, oriLatitude, gridSize)
UDF输入参数:
参数
类型
说明
geoId
Long
根据GeoId计算经纬度。
oriLatitude
Double
原点纬度,计算经纬度需要参数。
gridSize
Int
栅格大小,计算经纬度需要参数。
由于GeoId由栅格坐标生成,坐标为栅格中心点,则计算出的经纬度是栅格中心点经纬度,与生成该GeoId的经纬度可能有[0度~半个栅格度数]的误差。
UDF输出参数:
参数
类型
说明
latitudeAndLongitude
Array[Double]
返回该geoid所表示的栅格的中心点的经纬度坐标,以数组的方式返回,第一位为latitude,第二位为longitude。
使用示例:
select longitude, latitude, mygeohash, GeoIdToLatLng(mygeohash, 39.832277, 50) as LatitudeAndLongitude from geoTable;
- 计算金字塔模型向上汇聚一层的GeoID。
UDF输入参数:
参数
类型
说明
geoId
Long
根据输入GeoId计算金字塔模型上一层GeoId。
UDF输出参数:
参数
类型
说明
geoId
Long
金字塔模型上一层GeoId。
使用示例:
select longitude, latitude, mygeohash, ToUpperLayerGeoId(mygeohash) as upperLayerGeoId from geoTable;
- 输入polygon获得GeoID范围列表。
ToRangeList(polygon, oriLatitude, gridSize)
UDF输入参数:
参数
类型
说明
polygon
String
输入polygon字符串,用一组经纬度表示。
经纬度间用空格分隔,每对经纬度间用逗号分隔,首尾经纬度一致。
oriLatitude
Double
原点纬度,计算GeoId需要参数。
gridSize
Int
栅格大小,计算GeoId需要参数。
UDF输出参数:
参数
类型
说明
geoIdList
Buffer[Array[Long]]
将polygon转换为一串geoid的范围列表。
使用示例:
select ToRangeList('116.321011 40.123503, 116.137676 39.947911, 116.560993 39.935276, 116.321011 40.123503', 39.832277, 50) as rangeList from geoTable;
- 计算金字塔模型向上汇聚一层的longitude。
ToUpperLongitude (longitude, gridSize, oriLat)
UDF输入参数:
参数
类型
说明
longitude
Long
输入longitude,用一个长整型表示。
gridSize
Int
栅格大小,计算longitude需要参数。
oriLatitude
Double
原点纬度,计算longitude需要参数。
UDF输出参数:
参数
类型
说明
longitude
Long
返回上一层的longitude。
使用示例:
select ToUpperLongitude (-23575161504L, 50, 39.832277) as upperLongitude from geoTable;
- 计算金字塔模型向上汇聚一层的Latitude。
ToUpperLatitude(Latitude, gridSize, oriLat)
UDF输入参数:
参数
类型
说明
latitude
Long
输入latitude,用一个长整型表示。
gridSize
Int
栅格大小,计算latitude需要参数。
oriLatitude
Double
原点纬度,计算latitude需要参数。
UDF输出参数:
参数
类型
说明
Latitude
Long
返回上一层的latitude。
使用示例:
select ToUpperLatitude (-23575161504L, 50, 39.832277) as upperLatitude from geoTable;
- 经纬度转GeoSOT
LatLngToGridCode(latitude, longitude, level)
UDF输入参数:
参数
类型
说明
latitude
Double
输入latitude。
longitude
Double
输入longitude。
level
Int
输入level,值区间[0-32]。
UDF输出参数:
参数
类型
说明
geoId
Long
通过GeoSOT编码获得一个表示经纬度的数。
使用示例:
select LatLngToGridCode(39.930753, 116.302895, 21) as geoId;
- GaussDB数据库SQL语法_SQL语法_CREATE_ALTER
- GaussDB查看表大小_GaussDB查询表空间_高斯数据库查看表大小-华为云
- TaurusDB并行查询_TaurusDB内核_TaurusDB并行执行_PQ
- 什么是Spark_如何使用Spark_Spark的功能是什么
- MapReduce服务_什么是ClickHouse_如何使用ClickHouse
- MRS优势_什么是MRS_MRS功能
- 云数据库Gaussdb数据库索引_华为gaussdb__gaussdb 数据库
- Hudi服务_什么是Hudi_如何使用Hudi
- 连接GaussDB数据库_华为高斯数据库_新建数据库_语法
- 什么是Manager_Manager的功能_MRS运维管理