Teradata 和 ArcGIS
可从 ArcGIS 连接至 Teradata 数据仓库来执行对数据子集的复杂空间分析。
空间数据使用 Teradata ST_Geometry 类型存储在 Teradata 中。ST_Geometry 是默认 Teradata 数据仓库安装的一部分。
要从 ArcGIS 连接到 Teradata 数据库,您必须在 ArcGIS 客户端计算机上安装 Teradata GSS 客户端、ICU 库和 ODBC 驱动程序。有关信息,请参阅设置到 Teradata 的连接。
有关受支持的 Teradata 数据仓库和客户端库版本的列表,请参阅 ArcGIS Teradata Data Warehouse Appliance 的要求。
处理数据
在大多数情况下,您将在 Teradata 中存储大量数据。要从 ArcGIS 执行分析,您将使用一个仅包含有兴趣对其进行分析的数据的子集。您可以在查询图层定义中定义此子集,也可以创建一个只返回数据子集的数据库视图。
如果要使用查询图层定义,请在 ArcMap 中创建定义文件。单击文件 > 添加数据 > 添加查询图层打开新建查询图层 对话框,连接至数据库,然后键入 SQL 语句定义数据子集。
如何尚未定义数据子集,请不要将数据直接从 ArcMap 的目录 窗口中的数据库连接拖到地图中。正常存储在数据仓库设备中的超大型数据集需要耗费很长时间才能显示在地图上。
如果要使用数据库视图,您可以使用创建数据库视图地理处理工具或 SQL 定义要分析的数据子集。
ArcGIS 中 Teradata 的数据的使用指南
以下列出了将 Teradata 与 ArcGIS 结合使用的准则:
- 表中的空间列必须命名为 shape 或在视图中使用别名 shape。
Teradata ST_Geometry 类型的基础存储是 CLOB;因此,列的名称或别名 (shape) 是 ArcGIS 确定列存储空间数据的唯一途径。
- 您必须使用 Teradata 提供的镶嵌函数在 Teradata ST_Geometry 列上创建和维护空间索引。
镶嵌空间索需要与预定义的感兴趣区域结合使用。因此,ArcGIS 空间操作(例如基于动态输入的放大、缩小和平移)不能使用镶嵌索引。但如果用于定义查询图层的 SQL 语句明确使用镶嵌索引查询数据子集(基于感兴趣的区域),则镶嵌索引可用于查询图层。
- ArcGIS 需要唯一的标识字段以渲染地图中的要素。将空间表添加至地图时,系统将提示您指定此唯一 ID 字段。
ArcGIS 工具不会将新值插入到数据库中的唯一 ID 字段中;而是依赖于数据库向字段插入值。由于 Teradata 不具备用于向 ID 字段填充值的数据类型或内置机制,Teradata 无法使用在数据库表中创建新行的 ArcGIS 工具。
- 作为 Teradata 用户,我们了解 Teradata ST_Geometry 只支持二维空间数据;因此,不能将含有 z 或 m 坐标的空间数据粘贴到 Teradata。
- 如果使用 ArcGIS 向 Teradata 数据库添加要素类,并且为要素类指定的空间参考不在 Teradata 系统表中,ArcGIS 将会向 Teradata SPATIAL_REF_SYS 表添加记录,从而使该记录也添加到 GEOMETRY_COLUMNS 表中。
这允许您使用比 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;