确定外部表上不支持或具有限制范围的操作。
表 1 比较了支持数据库表和外部表的表操作。
表操作 | 数据库表 | 外部表 |
---|---|---|
支持索引和:
|
是 | 否,使用顺序扫描 |
支持触发器 | 是 | 否 |
MERGE 语句中表可以是目标 | 是 | 否。不允许作为目标允许作为源。请参阅 MERGE 示例 |
支持表分片 | 是 | 否 |
在 FROM 子句中允许多个数据库表 | 是 | 否。请参阅 查询示例 |
支持 DB-Access LOAD FROM ... INSERT INTO 语句 | 是 | 否 |
清除表的 TRUNCATE TABLE 语句 | 是 | 否。使用 TRUNCATE 语句不会清除外部表中的数据。将数据库表中的数据卸载到外部表时会自动删除此外部表。 |
复制表数据 | 是 | 否 |
支持 UPDATE STATISTICS 语句 | 是 | 否 |
支持 UPDATE 和 DELETE 语句 | 是 | 否 |
支持 ALTER TABLE 语句 | 是 | 否 |
支持 LBAC | 是 | 否 |
支持压缩 | 是 | 否 |
支持 START 和 STOP VIOLATIONS 语句 | 是 | 否 |
支持 TEMP 表 | 是 | 否 |
表列支持 EXTERNAL 数据类型 | 否 | 是 |
支持 DEFAULT 子句 | 是 | 否 |
支持 BLOB 和 CLOB 类型的 PUT 子句 | 是 | 否。可以使用 DATAFILES 指定 BLOBDIR 和 CLOBDIR。 |
SERIAL 、SERIAL8 和 BIGSERIAL 数据类型生成的 serial 数 | 是 | 否。这些数据类型被转换为等价的整型且不会生成 serial 值 |
使用 Enterprise replication (ER)时可以复制表 | 是 | 否 |
表的更改可被日志记录且可以复制 | 是 | 否。外部表是非日志记录的且不能被复制;然而系统目录表可以被复制。 |
支持 ACID (原子性、一致性、隔离性、持久性)属性 | 是 | 否 |
支持 ETL (提取、转换、加载) | SQL 接口 不支持 ETL 操作的;然而,例如 dbload 、onload 、onunload 实用程序和 LOAD 、UNLOAD 语句支持。 | 支持使用简单的 SQL 接口,对高性能的数据加载和卸载,使用INSERT ... SELECT 语句。 |
确定不支持高可用集群操作(请参阅 GBase 8s 管理员指南 中的高可用集群环境中的外部表)。
要从外部表加载 BLOB 或者 CLOB 对象,您必须重建临时 sbspace ,并在那个空间中创建临时智能大对象来存储来自外部表 BLOB 或 CLOB 数据。不支持从只读的辅助服务器加载 BLOB 或 CLOB 数据,因为您不能在只读的辅助服务器上创建临时智能大对象。
MERGE INTO t1 USING ext ON t1.c1 = ext.c1 WHEN MATCHED THEN UPDATE SET t1.c2 = ext.c2 WHEN NOT MATCHED THEN INSERT VALUES (99, '999');然而,以下语句因为把 ext 作为目标表而失败:
MERGE INTO ext USING t1 ON ext.c1 = t1.c1 WHEN MATCHED THEN UPDATE SET ext.c2 = t1.c2 WHEN NOT MATCHED THEN INSERT VALUES (99, '999');
SELECT * FROM ext, t2 WHERE ext.c1 = t2.c1;然而,以下语句是不允许的:
SELECT * FROM ext, ext3 WHERE ext.c1 = ext3.c1;
SELECT * FROM t1 WHERE t1.c1 IN (SELECT c1 FROM ext);