IBM PureData System for Analytics ( Netezza ) 与 Db2 SQL 兼容性

在大多数情况下, Db2® 和 Netezza® 产品提供等效的SQL支持。 例如,在大多数情况下,特定的 Netezza 命令都有等效的 Db2 语句,您无需修改代码即可使用。 在有限数目的情况下,需要进行更改。

下表列出了 Netezza与 Db2不同的领域。 有关与存储过程相关的SQL限制,请参阅用NZPLSQL编写的例程
表 1. SQL 兼容性:命令
Netezza Db2
ALTER AGGREGATE 没有可用的 Db2 AGGREGATE 语句。 使用 Db2更改聚合的定义。 IBM®将ALTER AGGREGATE命令转换为ALTER FUNCTION语句。
ALTER FUNCTION Db2支持的 Netezza 命令参数只有 FENCED 和 NOFENCED。 使用 Db2更改函数的定义。
ALTER GROUP 没有可用的 Db2 语句。 请使用角色代替组。
ALTER HISTORY CONFIGURATION Db2 ALTER HISTORY CONFIGURATION 语句不可用。 要收集和查看数据库使用情况的历史数据,请使用 Db2 监控功能。
ALTER LIBRARY 没有可用的 Db2 语句。 Database Harmony Profiler 工具会注释掉 ALTER LIBRARY 命令。

为确保您的 Db2 产品能够访问依赖库,请将它们放置在 Windows 操作系统中由 LIBPATHPATH 环境变量指定的目录中,或 Linux® 和 UNIX 操作系统中实例级函数目录 ( $inst_home_dir/sqllib/function/ ) 中。

ALTER SCHEMA Db2不支持 Netezza的某些子句:
  • Db2不支持AUTHORIZATION TO子句。 相反,使用 Db2重新分配架构的所有权。
  • Db2不支持SET PATH子句。

    对于动态 SQL 语句,SQL 路径是 Db2 特殊寄存器的值,您可以使用 SET PATH 命令更改该值。 对于静态 SQL 语句,请使用 FUNCPATH 绑定选项指定 SQL 路径。

ALTER SESSION 没有可用的 Db2 语句。 请考虑使用 WLM_CANCEL_ACTIVITY 或 WLM_SET_CONN_ENV 过程。
ALTER TABLE Db2不支持 Netezza的部分功能:
  • Db2不支持RENAME TO子句。 请改为使用下列其中一种方法:
    • 使用 RENAME 语句将表重命名。
    • 删除表,然后以新名称重新创建。
    • 创建具有新名称的别名。
  • Db2不支持SET PRIVILEGES TO子句。
  • Db2中的行大小限制为32677。
  • Db2不支持DEFERRABLE、NOT DEFERRABLE或INITIALLY DEFERRED子句。 如需其他解决方案,请咨询您的 IBM 代表。 IBM对这一条款进行了注释。
  • Db2不支持ORGANIZE ON子句。 Netezza 使用此条款处理集群基础表(CBT), Db2不支持该表。
ALTER USER 没有可用的 Db2 语句。 要更改用户,您可以使用网络控制台
ALTER VIEW Db2不支持 Netezza的所有子句:
  • Db2不支持SET PRIVILEGES TO子句。
  • Db2不支持 Netezza用于物化视图的MATERIALIZE SUSPEND子句。 物化查询表(MQT)可以替代 Netezza物化视图。 Database Harmony Profiler 工具会将具体化视图转换为 MQT。
    要让查询优化器暂停使用 MQT,请使用下列其中一种方法:
    • 发出 ALTER TABLE ... DISABLE QUERY OPTIMIZATION 语句。
    • 通过发出 ALTER TABLE ... 将 MQT 转换为常规表 DROP MATERIALIZED QUERY 语句。
ALTER VIEWS ON 没有可用的 Db2 语句。 Netezza 中用于物化视图的ALTER VIEWS ON命令。

物化查询表(MQT)可以替代 Netezza物化视图。 Database Harmony Profiler 工具会将具体化视图转换为 MQT。 请修改 ALTER VIEWS ON 命令中与基本表关联的 MQT。

BEGIN 没有可用的 Db2 EGIN TRANSACTION 语句。

Db2自动开始交易(工作单元)。 请移除 BEGIN TRANSACTION 命令,如有必要,调整应用程序代码以禁用自动落实功能。

COMMENT ON Db2不支持 LIBRARY 和 DATABASE 对象类型。 请勿注释数据库,而是注释模式。
COMMIT [WORK|TRANSACTION] 不支持 TRANSACTION 参数。 请将其移除,或使用 WORK 参数。 (无论是否指定 WORK 参数,ROLLBACK TRANSACTION 语句的行为方式都相同。)
CREATE AGGREGATE 没有可用的 Db2 语句。 使用 Db2定义聚合。 Database Harmony Profiler 工具会将 CREATE AGGREGATE 命令转换为 CREATE FUNCTION 语句。
CREATE DATABASE 无法使用 Db2 语句。 数据库和谐分析器工具假定数据库只有一个架构,并将CREATE DATABASE命令转换为 Db2 语句,以便将随后创建的所有对象置于同一架构下。
CREATE GROUP 没有可用的 Db2 语句。 要创建群组,您可以使用网络控制台
CREATE HISTORY CONFIGURATION 无法使用 Db2 创建历史配置语句。 要收集和查看数据库使用情况的历史数据,请使用 Db2 监控功能。
CREATE [OR REPLACE] FUNCTION Db2 CREATE FUNCTION 语句不支持 Netezza CREATE [OR REPLACE] FUNCTION 命令的所有子句:
  • Db2中,TABLE ALLOWED 和 TABLE FINAL ALLOWED 子句不起作用。 Database Harmony Profiler 工具会注释掉 TABLE ALLOWED 和 TABLE FINAL ALLOWED 子句。
  • Db2中,不使用DEPENDENCIES子句。 Database Harmony Profiler 工具会注释掉 DEPENDENCIES 子句。

    为确保从属库可访问,请将它们放置在Windows操作系统中由 LIBPATHPATH 环境变量指定的目录中,或 Linux 操作系统中的实例级函数目录( $inst_home_dir/sqllib/function/ )中。

CREATE [OR REPLACE] LIBRARY 没有可用的 Db2 CREATE [OR REPLACE] LIBRARY 语句。 Database Harmony Profiler 工具会注释掉 CREATE [OR REPLACE] LIBRARY 命令。

为确保从属库可访问,请将它们放置在Windows操作系统中由 LIBPATHPATH 环境变量指定的目录中,或 Linux 操作系统中的实例级函数目录( $inst_home_dir/sqllib/function/ )中。

CREATE SCHEDULER RULE 没有可用的 Db2 语句。 请考虑使用 Db2 WLM 功能。
CREATE SCHEMA Db2不支持PATH子句。

对于动态 SQL 语句,SQL 路径是 Db2 特殊寄存器的值,您可以使用 SET PATH 命令更改该值。 对于静态 SQL 语句,请使用 FUNCPATH 绑定选项指定 SQL 路径。

CREATE TABLE Db2 CREATE TABLE 语句和 Netezza CREATE TABLE 命令之间存在一些差异:
  • Db2不支持ROW SECURITY子句。 请考虑改为使用行列访问控制 (RCAC)。
  • Db2 ,必须为唯一列和主键列明确指定NOT NULL约束。
  • Db2不支持 DEFERRABLE、NOT DEFERRABLE 或 INITIALLY DEFERRED 子句。 如需其他解决方案,请咨询您的 IBM 代表。 Database Harmony Profiler 工具会注释掉该子句。
  • Db2 CREATE TABLE语句不支持ORGANIZE ON子句。 Netezza 使用此条款处理集群基础表(CBT), Db2不支持该表。 Db2 “按……组织”子句Netezza并不等同;用“按……组织”子句替换“按……组织”子句可能会导致问题。
CREATE USER 没有可用的 Db2 语句。 要创建用户,您可以使用网络控制台
DROP GROUP 没有可用的 Db2 DROP GROUP 语句。 请使用角色代替组。
DROP HISTORY CONFIGURATION 无法使用 Db2 CONFIGURATION 语句。 要收集和查看数据库使用情况的历史数据,请使用 Db2 监控功能。
DROP USER 没有可用的 Db2 DROP USER 语句。 要删除用户,您可以使用网络控制台
GENERATE [EXPRESS] STATISTICS 无法使用 Db2 语句。 使用 Db2 RUNSTATS 命令或自动统计收集。

IBM将生成统计信息命令转换为 RUNSTATS 命令。 RUNSTATS 命令不支持 GENERATE STATISTICS 命令中使用的列范围语法,因此 Database Harmony Profiler 工具不会保留该语法。

GRANT Db2不支持 Netezza支持的所有对象类型和权限:
  • Db2不支持以下对象类型:聚合、数据库、外部、组、管理表、管理视图、同义词、系统表、系统视图和用户。 如需合适的替代方案,请查看 Db2
  • 不支持某些管理特权。 如需合适的替代方案,请查看 Db2
GROOM TABLE Db2 语句不可用。 对于按列组织的表,将会自动完成重组。 对于按行组织的表,请使用 REORG TABLE 语句。
INSERT Db2不支持DEFAULT VALUES子句。 请针对每个列,将 DEFAULT VALUES 子句替换为 DEFAULT 关键字。 例如,将 INSERT INTO tb1(c1, c2) DEFAULT VALUES 更改为 INSERT INTO tb1(c1, c2) VALUES (DEFAULT, DEFAULT)
LOCK TABLE Db2不支持 Netezza的 NOWAIT 参数。 此外,您必须 Db2使用SHARE或EXCLUSIVE锁定模式参数。 考虑将 Netezza EXCLUSIVE模式参数替换为 Db2 ,并考虑将 Netezza、SHARE ROW EXCLUSIVE和EXCLUSIVE模式参数替换为 Db2 模式参数。
Database Harmony Profiler 工具会执行以下操作:
  • 移除 NOWAIT 参数
  • 如果未指定方式参数,那么添加 IN EXCLUSIVE MODE 子句
  • 将 ACCESS EXCLUSIVE 方式参数替换为 EXCLUSIVE 方式参数
  • 将 SHARE、SHARE ROW EXCLUSIVE 和 EXCLUSIVE 方式参数替换为 SHARE 方式参数
如果您使用 Database Harmony Profiler 工具,那么必须将所有其他方式参数手动转换为 SHARE 或 EXCLUSIVE。 另外,请查看 LOCK TABLE 语句,确保仍然满足并行性需求。
REVOKE Db2不支持 Netezza支持的所有对象类型和权限:
  • Db2不支持以下对象类型:聚合、数据库、外部、组、管理表、管理视图、同义词、系统表、系统视图和用户。 如需合适的替代方案,请查看 Db2
  • 不支持某些管理特权。 如需合适的替代方案,请查看 Db2
ROLLBACK [WORK|TRANSACTION] 不支持 TRANSACTION 参数。 请将其移除,或使用 WORK 参数。 (无论是否指定 WORK 参数,ROLLBACK TRANSACTION 语句的行为方式都相同。)
SELECT Db2和 Netezza之间存在多种差异,其中一些差异可以通过将 SQL_COMPAT 全局变量设置为 “NPS” 来解决:
  • Db2 产品中,SELECT 列表中列别名的表达式(如下例所示)默认情况下不受支持:
    SELECT c1 AS a, a+3 AS 
    b FROM t1;
    
    请通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。
  • 缺省情况下,不支持在 GROUP BY 子句中按顺序位置引用 SELECT 列表元素,如以下示例所示:
    SELECT c1 AS a, c2+c3 AS b, 
    COUNT(*) AS c FROM t1 
    GROUP BY 1, 2;
    
    请通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。

    缺省情况下,也不支持在 GROUP BY 子句中按有序位置引用 SELECT 列表元素,但您可以通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。

  • 缺省情况下,不支持在 GROUP BY 子句中按别名引用 SELECT 列表元素,如以下示例所示:
    
    SELECT c1 as a, count(*) 
    FROM t1 GROUP BY a 
    ORDER BY a;
    请通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。

    缺省情况下,也不支持在 ORDER BY 子句中按别名引用 SELECT 列表元素,但您可以通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。

  • 缺省情况下,不支持以下示例中的语法:
    SELECT A + B as C , C+2 FROM T1
    请通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。
  • 不支持 Db2的HAVING或WHERE子句中使用列别名。 请将 HAVING 或 WHERE 子句中的别名替换为相应的列或表达式。
  • 在物化查询表(MQT)的定义中不支持ORDER BY子句,而物化查询表是 Netezza的可能替代方案。 IBM可将具体化视图转换为MQT。

    请重新编写查询,将 ORDER BY 子句移至内部 SELECT 语句。 例如,您可以将 SELECT * from tb1 WHERE c1 < 10 ORDER BY 1 改为 SELECT * from (SELECT * FROM tb1 ORDER BY 1) tbSorted WHERE c1 < 10

  • FROM 子句为必需。 例如,不支持以下 SELECT 语句:
    SELECT constant as
    alias;
    如果要引用一个值,请使用 VALUES 语句或 FROM sysibm.sysdummy1 as。 如果要调用过程,请使用 CALL 语句。
  • Db2不支持TABLE WITH FINAL子句。 Database Harmony Profiler 工具会移除此子句。 请复查此子句的每一次出现,确认将其移除不会影响查询逻辑。
  • 连接不支持 NATURAL 关键字。 请改为使用带有显式条件的连接。
SET Db2不支持大多数 Netezza 会话变量。 使用其他技术来调整和配置您的 Db2 产品。
SHOW LIBRARY 没有可用的 Db2 语句。 Database Harmony Profiler 工具会注释掉 SHOW LIBRARY 命令。
TRUNCATE TABLE Db2需要IMMEDIATE参数。 此参数指定立即处理截断操作,并且不可撤销。
表 2. SQL 兼容性:运算符
Netezza Db2
! factorial 运算符 不支持此运算符。 您可以改为创建阶乘函数。
^ 和 ** 指数运算符 缺省情况下,不支持这些运算符。 请通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。
# 按位 XOR 运算符 缺省情况下,不支持此运算符。 请通过将 SQL_COMPAT 全局变量设置为 'NPS' 来启用此支持。
<< 和 >> 按位左移和右移运算符 不支持这些运算符。 可以用 2 的幂的乘法或除法替换运算符。 例如, col1 << 4 相当于 col1 * power(2, 4)
表 3. SQL 兼容性:杂项
Netezza Db2
系统视图(名称为 _V_viewname 或 _VT_viewname)和系统表(名称为 _T_tablename 不支持系统视图和系统表。 尽可能使用 Db2 视图。 否则,请创建您自己的视图。
列名中的 & 符 除非使用定界符(例如,"SALES&"),否则不支持此语法。
作为标识起始字符的下划线 (_) 除非使用定界符(例如,"_SALES"),否则不支持此语法。