可从 ArcGIS 连接至 Teradata 数据仓库来执行对数据子集的复杂空间分析。还可以将数据的子集发布到 ArcGIS for Server 作为可编辑要素服务。可以将这些要素服务添加到编辑器使用的客户端应用程序用以更新数据。
要从 ArcGIS 连接到 Teradata 数据库,请在 ArcGIS 客户端计算机上安装 Teradata GSS 客户端、ICU 库和 ODBC 驱动程序。有关相关信息,请参阅连接至 Teradata。
有关受支持的 Teradata 数据仓库和客户端库版本列表,请参阅针对于 ArcGIS 的 Teradata Data Warehouse Appliance 要求。
空间数据使用 Teradata ST_Geometry 类型存储在 Teradata 中。ST_Geometry 是默认 Teradata 数据仓库安装的一部分。
使用数据子集
大多数情况下,您会在 Teradata 中存储大量数据。要从 ArcGIS 执行分析,请使用数据子集。操作方式取决于您使用数据的目的。
- 如果要向 ArcMap 中添加数据以在地图中进行查看和分析,则添加查询图层并定义仅返回数据子集的查询图层表达式。
- 如果要向 ArcMap 中添加数据以发布地图服务,则定义仅包含数据子集的数据库视图。数据库视图存储在数据库中。可使用创建数据库视图地理处理工具或 SQL 客户端来定义视图。
- 如果要向 ArcMap 中添加数据以发布要素服务,则取消选中该选项以在将数据添加到地图前“默认将新添加的图层设为可见”。然后,打开查询构建器对话框并使用 SQL 定义数据的子集。限制 ArcMap 中将显示的数据量后,将图层设为可见并准备地图以供发布。
在 ArcGIS 中使用 Teradata 数据的附加原则
以下列出了将 Teradata 与 ArcGIS 结合使用的准则:
- 表中的空间列必须命名为 shape 或在视图中使用别名 shape。
Teradata ST_Geometry 类型的基础存储是 CLOB;因此,列的名称或别名 (shape) 是 ArcGIS 确定列存储空间数据的唯一途径。
- 您必须使用 Teradata 提供的镶嵌函数在 Teradata ST_Geometry 列上创建和维护空间索引。
Teradata 通过一个预定义的感兴趣区域使用镶嵌空间索引。因此,基于动态输入的 ArcGIS 空间操作(如放大、缩小和平移)无法使用镶嵌索引。但如果用于定义查询图层的 SQL 语句明确使用镶嵌索引查询数据子集(基于感兴趣的区域),则可在查询图层中使用镶嵌索引。
- ArcGIS 需要唯一的标识字段以渲染地图中的要素和发布 web 服务。ArcMap 在您将空间表添加到地图时会提示您指定此唯一 ID 字段。
ArcGIS 工具不会将新值插入到数据库中的唯一 ID 字段中;而是依赖于数据库向字段插入值。由于 Teradata 不具备用于向 ID 字段填充值的数据类型或内置机制,Teradata 无法使用在数据库表中创建新行的 ArcGIS 工具。
- 作为 Teradata 用户,您了解 Teradata 14.x ST_Geometry 只支持二维空间数据;因此,不能将含有 z- 或 m- 坐标的空间数据粘贴到 Teradata 14.x。Teradata 15.0 ST_Geometry 支持 z- 坐标但不支持 m- 坐标;因此,不能将含有 m- 坐标的空间数据粘贴到 Teradata 15.0。
- 如果您使用 ArcGIS 将要素类添加到您的 Teradata 数据库,但是 Teradata 系统表中并没有您为要素类指定的空间参考,那么 ArcGIS 会将记录添加到 Teradata SPATIAL_REF_SYS 表和 GEOMETRY_COLUMNS 表。
这允许您使用比 Teradata 默认提供的更多的空间参考。但升级为主要 Teradata 版本时可能会删除这些表并进行重建,重建后的表中只包含默认值。
升级 Teradata 前,应始终对数据库进行备份。确保备份中含有这些表中的记录,因此在升级 Teradata 后,可在需要时恢复这些记录。在数据库升级操作期间,可按照此常规步骤来备份和恢复 SPATIAL_REF_SYS 和 GEOMETRY_COLUMNS 记录:
- 创建数据库备份。
- 连接到可在其中复制 SPATIAL_REF_SYS 和 GEOMETRY_COLUMNS 表的数据库。
本示例中的数据库命名为 mybackupdb。
database mybackupdb;
- 创建表的备份副本。
本示例中的源表位于 sysspatial 数据库中。
CREATE TABLE mybackupdb.spatial_ref_sys AS sysspatial.spatial_ref_sys WITH DATA; CREATE TABLE mybackupdb.geometry_columns AS sysspatial.geometry_columns WITH DATA;
- 升级 Teradata 源数据库。
- 连接到具有表副本的数据库。
- 在升级后的数据库中恢复表。
--Restore the geometry columns table. INSERT INTO sysspatial.geometry_columns SELECT * FROM mybackupdb.geometry_columns; --Restore the spatial_ref_sys table. INSERT INTO sysspatial.spatial_ref_sys SELECT * FROM mybackupdb.spatial_ref_sys MINUS SELECT * FROM sysspatial.spatial_ref_sys;
- 恢复表内容后,便可删除表的备份副本。
DROP TABLE mybackupdb.spatial_ref_sys; DROP TABLE mybackupdb.geometry_columns;
- 如有必要,为在数据库中创建数据的用户重新授予这些表的权限。