vertica空间对象及函数

vertica支持的空间对象

vertica支持OGC标准中定义的多个对象:

1.1 Point

使用以下方法之一标识的二维空间中的位置:

X 和 Y 坐标

经度和纬度值

点的维度为 0, 并且没有边界。

1.2 Multipoint

一个或多个点的集合。多点对象的维度为 0, 并且没有边界。

1.3 Linestring

由连续点对标识的一个或多个连接的线。线串的维度为 1。线串边界是包含其起点和终点的多点对象。

1.4 Multilinestring

零个或多个线串的集合。线串集合没有维度。线串集合的边界是包含所有线串起点和终点的多点对象。

1.5 Polygon

由一组封闭的线串标识的对象。多边形可能包含一个或多个由内部边界定义的孔, 但所有点都必须保持连接状态。

1.6 Multipolygon

零个或多个未重叠的多边形的集合。

vertica支持的空间函数

2.1 ST_AsText

I/O函数

空间对象的熟知文本 (WKT) 表示。当需要指定 ASCII 形式的空间对象时可使用此函数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.2 ST_Area

测量函数

计算空间对象的面积。

单位为:

GEOMETRY 对象: 空间参照系标识符 (SRID) 单位

GEOGRAPHY 对象: 平方米

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.3 ST_AsBinary

I/O函数

创建空间对象的熟知二进制 (WKB) 表示。当需要将对象转换为二进制格式以便与其他应用程序移植空间数据时, 可使用此函数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.4 ST_Boundary

运算符函数

计算指定 GEOMETRY 对象的边界。对象边界是指定义对象限制的点集。对于线串, 边界是起点和终点。对于多边形, 边界是在同一点开始和结束的线串。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.5 ST_Buffer

运算符函数

创建与某个空间对象边界的距离大于或等于指定距离的 GEOMETRY 对象。该距离使用笛卡尔坐标单位测量。ST_Buffer 不接受大于 +1e15 或小于 –1e15 的距离大小。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.6 ST_Centroid

运算符函数

计算空间对象的几何中心(即质心)。如果几何图形除多边形外还存在点 、 线串或同时存在此二者, 则质心计算仅考虑多边形。类似地, 如果除线串外还存在点, 则质心计算不考虑点。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.7 ST_Contains

断言函数

确定空间对象是否完全在另一个空间对象内部, 并且不仅仅在其边界上存在。两个参数必须是相同的空间数据类型。要么指定两个 GEOMETRY 对象, 要么指定两个 GEOGRAPHY 对象。

如果某个对象(例如点或线串)仅沿空间对象的边界存在, 则 ST_Contains 将返回False。线串的内部是线串上除起点和终点以外的所有点。

ST_Contains(g1, g2) 在功能上等同于 ST_Within(g2, g1)。

不支持顶点或边界位于国际日期变更线 (IDL) 或南 、 北极的 GEOGRAPHY 多边形。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.8 ST_ConvexHull

运算符函数

计算包含 GEOMETRY 对象的最小凸 GEOMETRY 对象。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.9 ST_Crosses

断言函数

确定一个 GEOMETRY 对象是否与另一个 GEOMETRY 对象在空间上交叉。如果两个对象仅在边界上接触, 则 ST_Crosses 将返回 FALSE。
如果以下两项均成立, 则表示两个对象在空间上交叉:
两个对象具有部分但非全部的公共内点。
它们的相交结果的尺寸小于两个对象的最大尺寸。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.10 ST_Difference

运算符函数

计算空间对象没有与另一个空间对象相交的部分。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.11 ST_Disjoint

断言函数

确定两个 GEOMETRY 对象是否未相交也未接触。
如果 ST_Disjoint 针对一对 GEOMETRY 对象返回 TRUE, 则 ST_Intersects 将针对这两个相同的对象返回 FALSE。
不支持顶点或边界位于国际日期变更线 (IDL) 或南 、 北极的 GEOGRAPHY 多边形。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.12 ST_Distance

测量函数

计算两个空间对象之间的最短距离。对于 GEOMETRY 对象, 距离使用笛卡尔坐标单位测量。对于 GEOGRAPHY 对象, 距离以米为单位测量。
g1 和 g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.13 ST_Envelope

运算符函数

计算包含指定的 GEOMETRY 对象的最小边界矩形。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.14 ST_Equals

断言函数

确定两个空间对象在空间上是否等效。ST_Equals 的两个对象的坐标及其WKT/WKB 表示必须完全匹配才能返回 TRUE。
在确定空间等价关系时点的顺序不重要

坐标存储为 FLOAT 类型。因此, 在导入熟知文本 (WKT) 值时, 由于浮点数表示的限制, 预期会出现舍入误差。
g1 和 g2 必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。此外, g1 和 g2不能都是 GeometryCollection 类型。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.15 ST_GeographyFromText

I/O函数

将已知文本 (WKT) 字符串转换为其对应的 GEOGRAPHY 对象。使用此函数可将WKT 字符串转换为 Vertica Place 函数所需的格式。
GEOGRAPHY 对象是在地球表面使用坐标 (longitude, latitude) 定义的空间对象。坐标使用划分地球的参考平面的度数(经度 、 纬度)表示。
GEOGRAPHY 对象的最大大小为 10 MB。如果将 WKT 传递给 ST_GeographyFromText 并且生成大小超过 10 MB 的空间对象, ST_GeographyFromText 将会返回错误。

支持的数据类型

数据类型 GEOGRAPHY (Perfect Sphere) GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.16 ST_GeographyFromWKB

I/O函数

将熟知二进制 (WKB) 值转换为其对应的 GEOGRAPHY 对象。使用此函数可将WKB 转换为 Vertica Place 函数所需的格式。
GEOGRAPHY 对象是在地球表面定义的空间对象。坐标使用划分地球的参考平面的度数(经度 、 纬度)表示。所有的计算都以米为单位。

GEOGRAPHY 对象的最大大小为 10 MB。如果将 WKB 传递给 ST_GeographyFromWKB 并且生成大小超过 10 MB 的空间对象, ST_GeographyFromWKB 将会返回错误。

支持的数据类型

数据类型 GEOGRAPHY (Perfect Sphere) GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.17 ST_GeoHash

GeoHash函数

对于指定的几何图形返回GeoHash值。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.18 ST_GeometryN

属性函数

返回几何图形对象内的第 n 个几何图形。
如果 n 超出索引范围, 则返回 NULL。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.19 ST_GeometryType

属性函数

确定空间对象的类。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.20 ST_GeomFromGeoHash

GeoHash函数

对于指定的GeoHash值返回多边形。

2.21 ST_GeomFromText

I/O函数

将熟知文本 (WKT) 字符串转换为其对应的 GEOMETRY 对象。使用此函数可将WKT 字符串转换为 Vertica Place 函数所需的格式。
GEOMETRY 对象是按平面坐标定义的空间对象。坐标表示为笛卡尔平面上的点(x,y)。SRID 值为 0 至 2^32-1 是有效的。超出此范围的 SRID 值将会生成错误。
GEOMETRY 对象的最大大小为 10 MB。如果将 WKT 传递给 ST_GeomFromText并且生成大小超过 10 MB 的空间对象, ST_GeomFromText 将会返回错误。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.22 ST_GeomFromWKB

I/O函数

将熟知二进制 (WKB) 值转换为其对应的 GEOMETRY 对象。使用此函数可将WKB 转换为许多 Vertica Place 函数所需的格式。
GEOMETRY 对象是在笛卡尔平面中定义的使用 (x,y) 坐标的空间对象。
GEOMETRY 对象的最大大小为 10 MB。如果将 WKB 传递给 ST_GeomFromWKB 并且生成大小超过 10 MB 的空间对象, ST_GeomFromWKB 将会返回错误。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.23 ST_Intersection

运算符函数

计算两个 GEOMETRY 对象共有的点集。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.24 ST_Intersects

断言函数

确定两个 GEOMETRY 或 GEOGRAPHY 对象是否在一个点相交或接触。对于相同的 GEOMETRY 或 GEOGRAPHY 对象, 如果 ST_Disjoint 返回 TRUE, 则 ST_Intersects 将返回 FALSE。
不支持顶点或边界位于国际日期变更线 (IDL) 或南 、 北极的 GEOGRAPHY 多边形。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.25 ST_IsEmpty

断言函数

确定空间对象是否表示空集。空对象没有维度。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.26 ST_IsSimple

断言函数

确定空间对象是否未与自身相交, 也未接触其自身边界上的任何点。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.27 ST_IsValid

断言函数

如果不确定多边形是否有效, 请先运行 ST_IsValid。如果将无效的空间对象传递给 Vertica Place 函数, 函数将会失败或返回错误的结果。

确定空间对象的格式是否正确或其是否有效。如果对象有效, 则 ST_IsValid 返回 TRUE; 否则它将返回 FALSE。使用 STV_IsValidReason 以确定无效性原因。
空间有效性仅适用于多边形和多多边形。如果以下所有项均成立, 则多边形或多多边形是有效的:

多边形是封闭的; 其起点与终点相同。
其边界是一组线串。
边界不触及或穿越本身。
内部的任何多边形都未接触外部多边形边界除顶点以外的任何位置。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.28 ST_Length

测量函数

计算空间对象的长度。对于 GEOMETRY 对象, 长度使用笛卡尔坐标单位测量。对于 GEOGRAPHY 对象, 长度以米为单位测量。
按以下方法计算长度:
点或多点对象的长度为 0。
线串的长度是每个线段的长度之和; 而线段的长度是起点到终点的距离。
多边形的长度是外部边界和任何内部边界的长度之和。
线串集合 、 多边形集合或 geometrycollection 的长度是它所包含的所有对象的长度之和。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.29 ST_NumGeometries

属性函数

返回空间对象内包含的几何图形数量。单个 GEOMETRY 或 GEOGRAPHY 对象将返回 1, 空对象将返回 NULL。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.30 ST_NumPoints

属性函数

计算空间对象的顶点数, 空对象则返回 NULL。
多边形和多边形集合的第一个顶点和最后一个顶点单独计数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.31 ST_Overlaps

断言函数

确定 GEOMETRY 对象是否与另一个 GEOMETRY 对象共享空间但未完全包含在该对象范围内。它们必须在其内部重叠。如果两个对象在单个点接触, 或仅仅沿边界相交, 则二者没有重叠。两个参数必须具有相同的维度; 否则 ST_Overlaps 将返回 FALSE。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.32 ST_PointFromGeoHash

GeoHash函数

对于指定的GeoHash值返回一个几何点。

2.33 ST_PointN

属性函数

查找空间对象的第 n 个点。如果传递负数 、 零或大于线串上的总点数的数字,ST_PointN 将返回 NULL。
顶点顺序基于空间对象的熟知文本 (WKT) 表示。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.34 ST_Relate

断言函数

基于指定的 DE-9IM 模式矩阵字符串, 确定给定的 GEOMETRY 对象是否与另一个 GEOMETRY 对象在空间上相关。
DE-9IM 标准确定了两个对象彼此在空间上的相关性。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.35 ST_SRID

属性函数

确定随空间对象存储的空间参照系标识符 (SRID)。
将 SRID 传递给 ST_GeomFromText 或 ST_GeomFromWKB 后才能确定GEOMETRY 对象的 SRID。ST_SRID 将返回此存储值。SRID 值为 0 至 2^32-1 是有效的。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.36 ST_SymDifference

运算符函数

计算两个 GEOMETRY 对象中除它们共有的点之外的其他所有点, 包括这两个对象的边界。
此结果被称为余集, 以数学方式表示为: Closure (g1 – g2) ∪ Closure (g2 – g1)

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.37 ST_Touches

断言函数

确定两个 GEOMETRY 对象是否在一个点接触或沿边界接触, 但没有内部相交。
不支持顶点或边界位于国际日期变更线 (IDL) 或南 、 北极的 GEOGRAPHY 多边形。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.38 ST_Transform

运算符函数

使用给定的SRID,返回一个新的GEOMETRY。

此函数支持以下转换:

EPSG 4326(WGS84)到EPSG 3857(Web Mercator)

EPSG 3857(Web Mercator)到EPSG 4326(WGS84)

对于EPSG 4326(WGS84),坐标必须在以下范围内,否则将导致转换失败:

经度范围:-572到+572

纬度限制:-89.9999999到+89.9999999

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.39 ST_Union

运算符函数

计算两个空间对象中所有点的联合。
此结果以数学方式表示为: g1 ∪ g2

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.40 ST_Within

断言函数

如果空间对象 g1 完全在空间对象 g2 内部, 则 ST_Within 将返回 True。两个参数必须是相同的空间数据类型。要么指定两个 GEOMETRY 对象, 要么指定两个 GEOGRAPHY 对象。
如果某个对象(例如点或线串)仅沿多边形边界存在, 则 ST_Within 将返回False。线串的内部是线串上除起点和终点以外的所有点。
ST_Within(g1,g2) 在功能上等同于 ST_Contains(g2,g1)。
不支持顶点或边界位于国际日期变更线 (IDL) 或南 、 北极的 GEOGRAPHY 多边形。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.41 ST_X

属性函数

确定 GEOMETRY 点的 x 坐标或 GEOGRAPHY 点的经度值。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.42 ST_XMax

属性函数

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最大 x 坐标。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.43 ST_XMin

属性函数

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最小 x 坐标。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.44 ST_YMax

属性函数

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最大 y 坐标。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.45 ST_YMin

属性函数

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最小 y 坐标。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.46 ST_Y

属性函数

确定 GEOMETRY 点的 y 坐标或 GEOGRAPHY 点的纬度值。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY
(Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.47 STV_AsGeoJSON

I/O函数

返回 Javascript 几何对象表示法 (GeoJSON) 对象形式的几何或地理参数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.48 STV_Create_Index

空间索引函数

对一组多边形创建空间索引, 以加快与一组点的空间相交计算速度。
利用一个输入多边形集(可以是查询的结果), 可以创建空间索引。空间索引是在全局命名空间中创建的。当跨群集的节点对输入表或投射分段时, Vertica 会采用分布式计划。
支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.49 STV_Describe_Index

空间索引函数

检索关于包含一组多边形的索引的信息。如果没有传递任何参数, STV_Describe_Index 将返回所有已定义的索引。

2.50 STV_Drop_Index

空间索引函数

删除空间索引。

2.51 STV_DWithin

断言函数

确定从一个空间对象的边界到另一个对象的边界的最短距离是否在指定的距离范围以内。
g1 和 g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.52 STV_Export2Shapefile

shapefile函数

将数据库表或子查询中的 GEOGRAPHY 或 GEOMETRY 数据导出到 shapefile。

2.53 STV_Extent

返回一个包含所有输入数据的边界框。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.54 STV_ForceLHR

运算符函数

更改空间对象的顶点顺序, 使其遵循左手规则。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.55 STV_Geography

I/O函数

将 GEOMETRY 对象转换为 GEOGRAPHY 对象。SRID 值不影响 Vertica Place 查询的结果。
STV_Geography 在将 GEOMETRY 对象转换为 GEOGRAPHY 对象时, 会将其SRID 设为 4326。

支持的数据类型

数据类型 GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.56 STV_GeographyPoint

运算符函数

基于输入值, 返回 GEOGRAPHY 点。
这是将原始坐标转换为 GEOGRAPHY 点的最佳方法。

2.57 STV_Geometry

I/O函数

将 GEOGRAPHY 对象转换为 GEOMETRY 对象。
SRID 值不影响 Vertica Place 查询的结果。

支持的数据类型

数据类型 GEOGRAPHY (Perfect Sphere) GEOGRAPHY (WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.58 STV_GeometryPoint

运算符函数

基于输入值, 返回 GEOMETRY 点。

这是将原始坐标转换为 GEOMETRY 点的最佳方法。

2.59 STV_GetExportShapefileDirectory

shapefile函数

返回导出目录的路径。

2.60 STV_Intersect Scalar Function

空间连接函数

将点与一组多边形在空间上相交。多边形需要建立空间索引。STV_Intersect 标量函数将返回与相交多边形关联的标识符。

2.61 STV_Intersect Transform Function

空间连接函数

将点与多边形在空间上相交。多边形需要建立空间索引。STV_Intersect 变换函数返回包含匹配的点/多边形对的元组。对于每个点, 可能返回一个或多个匹配的多边形。
在多个节点上并行计算 STV_Intersect 变换函数可以提高性能。要执行并行计算, 请使用 OVER(PARTITION BEST) 子句。

2.62 STV_IsValidReason

属性函数

确定多边形或多边形集合的格式是否正确或其是否有效。如果对象无效, STV_IsValidReason 将返回说明无效性原因的字符串。
空间有效性仅适用于多边形和多多边形。如果以下所有项均成立, 则多边形或多多边形是有效的:
多边形是封闭的; 其起点与终点相同。
其边界是一组线串。
边界不触及或穿越本身。
与外部多边形边界的接触点不超过一个的任何内部多边形。
如果将无效的对象传递给 Vertica Place 函数, 函数将会失败或返回错误的结果。要确定多边形是否有效, 请先运行 ST_IsValid。如果多边形有效, ST_IsValid 将返回 TRUE, 否则将返回 FALSE。

2.63 STV_LineStringPoint

属性函数

检索线串或线串集合的顶点。根据输入对象的类型, 返回的值为 GEOMETRY或 GEOGRAPHY 类型的点。GEOMETRY 点将继承输入对象的 SRID。
STV_LineStringPoint 为分析函数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.64 STV_MemSize

I/O函数

返回 INTEGER 类型的空间对象长度(以字节为单位)。
使用此函数确定空间数据的最优列宽。

2.65 STV_NN

运算符函数

计算空间对象与参考对象之间的距离, 并按照与参考对象的距离, 以升序方式返回(对象, 距离)对。
g1 和 g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。
STV_NN 为分析函数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect Sphere)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.66 STV_PolygonPoint

属性函数

以个别点的方式检索多边形的顶点。根据输入对象的类型, 返回的值为GEOMETRY 或 GEOGRAPHY 类型的点。GEOMETRY 点将继承输入对象的SRID。
STV_PolygonPoint 为分析函数。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.67 STV_Reverse

运算符函数

反转空间对象顶点的顺序。

支持的数据类型

数据类型 GEOMETRY GEOGRAPHY (Perfect
Sphere)
GEOGRAPHY
(WGS84)
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

2.68 STV_Rename_Index

空间索引函数

重命名空间索引。

2.69 STV_Refresh_Index

空间索引函数

刷新空间索引。将新添加或更新的多边形追加到现有的空间索引, 以及从现有的空间索引中移除已删除的多边形。

2.70 STV_SetExportShapefileDirectory

shapefile函数

指定将 GEOMETRY 或 GEOGRAPHY 数据导出到 shapefile 的目录。不检查路径的有效性, 并且路径不能为空。

2.71 STV_ShpSource 和 STV_ShpParser

shapefile函数

这两个函数可与 COPY 命令配合使用, 解析 shapefile 中的几何图形和属性并将其加载到数据库表, 然后转换为 GEOMETRY 数据类型格式。必须将这两个函数一起使用。需要 SRID。无法从 shapefile 加载空的多点或无效的多边形集合。

2.72 STV_ShpCreateTable

shapefile函数

返回包含在指定的 shapefile 中找到的属性列和类型的 CREATE TABLE 语句。
列类型将根据 shapefile 元数据调整大小。列大小基于在 shapefile 中找到的最大几何图形。表中的第一列是 gid, 它是自动递增的 IDENTITY 主关键字列。缓存值默认设为 64。最后一列是用于存储实际几何数据的 GEOMETRY 数据类型。

MapD、PG-Strom、Vertica横向对比

简介

选取;MapD、PG-Strom、Vertica进行对比测试。其中MapD为列式GPU数据库;PG-Strom是在PostgreSQL(行式)上增加了GPU插件,使用GPU运算;Vertica为一般列式数据库,作为对比。

另外还有Kinetica、Brytlyt、BlazingDB等均为商用GPU数据库,流行度、文档、官方支持都弱于MapD,且无开源版本,未纳入本次测试。

系统配置

CPUIntel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz*4
内存8G
磁盘260G ssd
GPUNVIDIA Tesla P40(24G显存)*1

性能测试

原始数据美国2008年飞行数据(MapD官方提供)行长约400B,共2.1亿行,84G

3.1 入库性能

数据库导入性能表大小数据压缩比
mapd27.5w/s37G2.27
mapd 边查边入21.7w/s37G2.27
vertica14.2w/s6.4G13.12
pg-strom9.3w/s66G1.27
pg-strom多进程导入23.9w/s66G1.27

MapD与vertica导入时CPU使用率接近100%,均为瓶颈。边查边入的性能降低也是由于查询占用了部分CPU。PG-Strom一个导入进程只能用满1核,故需要多进程导入才能达到性能上限。

3.2 查询性能

测试语句:

Sql1: select count(*) from flights;
Sql2: select count(*) from flights where origin_country=’USA’;
Sql3: select count(*) as cnt,avg(distance) as dis from flights where flight_month=10;
Sql4: select origin_city,dest_city,count(*) as cnt,avg(airtime) as atime from flights group by origin_city,dest_city order by cnt desc,atime;
Sql5: select origin_state,dest_state,count(*) as cnt,avg(airtime) as atime from flights where distance<175 group by origin_state,dest_state ;

性能对比:

无缓存:

Sql 查询耗时(ms)mapd gpu+cpumapd cpu onlyverticapg with pg-strompg
sql1364130951548619670833
sql245714319583890782143490
sql3442839425118869975490
sql4591456998698942191286666
sql566665903328991956212259

有缓存:

Sql 查询耗时(ms)mapd gpu+cpumapd cpu onlyverticapg with pg-strompg
sql152721698694671456
sql258106578791004142894
sql3571491538887474287
sql42524968567927681270628
sql5162212263788107211838

3.3 并发测试

使用3.2中SQL5进行并发测试,其中distance随机生成:

SQL5:

并发QPS显存GPU
17.94.8G90%
108.54.8G90%
208.54.8G90%
508.44.8G90%

MapD引擎内部并无并发处理机制,实际多个会话执行的查询都是串行执行,系统资源也并未随并发数升高而增加。

测试结论

  1. 性能对比:
    • 入库性能:MapD与PG-Strom由于压缩比较低所以入库性能均高于Vertica。
    • 无论有无缓存,PG以及PG-Strom性能均远远低于MapD与Vertica。数据有缓存场景下,MapD的大部分统计查询得益于GPU的高吞吐量性能远高于vertica,同样PG-Strom也高于原生PG。
  2. MapD引擎内部并无并发处理机制,所有查询都是串行执行。已向官方证实。
  3. MapD在SQL方面只支持INSERT、SELECT,不支持UPDATE、DELETE、事务、索引等。PG-Strom由于是插件形式,所以SQL支持度是与PG相同,兼容性非常高。
  4. 本轮测试过程中MapD服务端同样发生过崩溃。

后续测试规划

基于公司的某一业务场景,和vertica、ydb进行对比测试。

PG数据库插件性能对比测试

简介

PG-Strom是在PostgreSQL上的GPU插件,可以使用GPU进行运算。

cstore_fdw是PostgreSQL上的列式插件,使用该插件可以对表进行列式存储。

对比原生PG与使用上述插件的导入及查询性能。

系统配置

CPUIntel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz*4
内存8G
磁盘260G ssd
GPUNVIDIA Tesla P40(24G显存)*1

性能测试

原始数据美国2008年飞行数据(MapD官方提供)行长约400B,共2.1亿行,84G

3.1 入库性能

数据库导入性能表大小数据压缩比
pg-strom9.3w/s66G1.27
pg-strom多进程导入23.9w/s66G1.27
cstore_fdw7w/s3.8G22.1

3.2 查询性能

测试语句:

Sql1: select count(*) from flights;
Sql2: select count(*) from flights where origin_country=’USA’;
Sql3: select count(*) as cnt,avg(distance) as dis from flights where flight_month=10;
Sql4: select origin_city,dest_city,count(*) as cnt,avg(airtime) as atime from flights group by origin_city,dest_city order by cnt desc,atime;
Sql5: select origin_state,dest_state,count(*) as cnt,avg(airtime) as atime from flights where distance<175 group by origin_state,dest_state ;

性能对比:

无缓存:

Sql 查询耗时(ms)pgpg with pg-stromcstore_fdwpg-strom & cstore_fdw
sql170833861962447835965
sql2143490907824931647441
sql3754908869967667902
sql412866669421914162485152
sql5212259919564123039182

有缓存:

Sql 查询耗时(ms)pgpg-stromcstore_fdwpg-strom & cstore_fdw
sql171456869462250335686
sql2142894910043974338782
sql3742878887445954686
sql412706289276811936264952
sql5211838881074195138719

测试结论

  1. 入库性能:PG一个导入进程只能用满1核,故需要多进程导入才能达到性能上限。但是cstore_fdw不支持多进程并发导入,只支持单进程。
  2. cstore_fdw插件数据压缩比很高,甚至高于vertica的13.12。
  3. 两个插件较原生PG均能大幅提高性能,且可以共同生效。
  4. 有无缓存对PG性能基本没有影响,只有cstore_fdw插件在有缓存场景下性能有所提升。
  5. 分析型业务可以使用cstore_fdw插件提速,但是该插件使用外部表,功能上限制较大,不支持删除与修改。