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

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

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

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

ALTER SCHEMA Db2 ALTER SCHEMA 语句不支持 Netezza ALTER SCHEMA 命令的某些子句:
  • Db2 ALTER SCHEMA 语句不支持 AUTHORIZATION TO 子句。请改为使用 Db2 TRANSFER OWNERSHIP 语句重新分配模式的所有权。
  • Db2 ALTER SCHEMA 语句不支持 SET PATH 子句。

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

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

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

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

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

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

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

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

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

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

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

CREATE TABLE Db2 CREATE TABLE 语句与 Netezza CREATE TABLE 命令之间存在多项差异:
  • Db2 CREATE TABLE 语句不支持 ROW SECURITY 子句。请考虑改为使用行列访问控制 (RCAC)。
  • 必须在 Db2 CREATE TABLE 语句中针对唯一键列和主键列显式指定 NOT NULL 约束。
  • Db2 CREATE TABLE 语句不支持 DEFERRABLE、NOT DEFERRABLE 或 INITIALLY DEFERRED 子句。要了解其他解决方法,请咨询 IBM 代表。Database Harmony Profiler 工具会注释掉该子句。
  • Db2 CREATE TABLE 语句不支持 ORGANIZE ON 子句。此子句在 Netezza 中用于集群基本表 (CBT),Db2 产品不支持这种表。Db2 ORGANIZE BY 子句与 Netezza ORGANIZE ON 子句并不等同;以 ORGANIZE BY 子句替换 ORGANIZE ON 子句可能会引起问题。
CREATE USER 没有可用的 Db2 CREATE USER 语句。要创建用户,您可使用 Web 控制台
DROP GROUP 没有可用的 Db2 DROP GROUP 语句。请使用角色代替组。
DROP HISTORY CONFIGURATION 没有可用的 Db2 DROP HISTORY CONFIGURATION 语句。要收集和查看有关数据库使用情况的历史数据,请使用 Db2 监视功能。
DROP USER 没有可用的 Db2 DROP USER 语句。要删除用户,您可使用 Web 控制台
GENERATE [EXPRESS] STATISTICS 没有可用的 Db2 GENERATE [EXPRESS] STATISTICS 语句。请使用 Db2 RUNSTATS 命令或自动统计信息收集功能。

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

GRANT Db2 GRANT 语句仅支持 Netezza GRANT 命令所支持的部分对象类型和特权:
  • Db2 GRANT 语句不支持下列对象类型:AGGREGATE、DATABASE、EXTERNAL、GROUP、MANAGEMENT TABLE、MANAGEMENT VIEW、SYNONYM、SYSTEM TABLE、SYSTEM VIEW 和 USER。要了解适合的替代项,请查看 Db2 文档。
  • 不支持某些管理特权。要了解适合的替代项,请查看 Db2 文档。
GROOM TABLE 没有可用的 Db2 GROOM TABLE 语句。对于按列组织的表,将会自动完成重组。对于按行组织的表,请使用 REORG TABLE 语句。
INSERT Db2 INSERT 语句不支持 DEFAULT VALUES 子句。请针对每个列,将 DEFAULT VALUES 子句替换为 DEFAULT 关键字。例如,将 INSERT INTO tb1(c1, c2) DEFAULT VALUES 更改为 INSERT INTO tb1(c1, c2) VALUES (DEFAULT, DEFAULT)
LOCK TABLE Db2 LOCK TABLE 语句不支持 Netezza LOCK TABLE 命令的 NOWAIT 参数。并且,必须在 Db2 语句中使用 SHARE 或 EXCLUSIVE 锁定方式参数。请考虑将 Netezza ACCESS EXCLUSIVE 方式参数替换为 Db2 EXCLUSIVE 方式参数,并考虑将 Netezza SHARE、SHARE ROW EXCLUSIVE 和 EXCLUSIVE 方式参数替换为 Db2 SHARE 方式参数。
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 REVOKE 语句仅支持 Netezza REVOKE 命令所支持的部分对象类型和特权:
  • Db2 REVOKE 语句不支持下列对象类型:AGGREGATE、DATABASE、EXTERNAL、GROUP、MANAGEMENT TABLE、MANAGEMENT VIEW、SYNONYM、SYSTEM TABLE、SYSTEM VIEW 和 USER。要了解适合的替代项,请查看 Db2 文档。
  • 不支持某些管理特权。要了解适合的替代项,请查看 Db2 文档。
ROLLBACK [WORK|TRANSACTION] 不支持 TRANSACTION 参数。请将其移除,或使用 WORK 参数。(无论是否指定 WORK 参数,ROLLBACK TRANSACTION 语句的行为方式都相同。)
SELECT Db2 SELECT 语句与 Netezza SELECT 命令之间存在多项差异,其中一些差异可通过将 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 SELECT 语句中 HAVING 或 WHERE 子句中的列别名。请将 HAVING 或 WHERE 子句中的别名替换为相应的列或表达式。
  • 在具体化查询表 (MQT)(这是 Netezza 具体化视图的可能替换项)定义中,不支持 ORDER BY 子句。IBM Database Harmony Profiler 工具会将具体化视图转换为 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 SELECT 语句不支持 TABLE WITH FINAL 子句。Database Harmony Profiler 工具会移除此子句。请复查此子句的每一次出现,确认将其移除不会影响查询逻辑。
  • 连接不支持 NATURAL 关键字。请改为使用带有显式条件的连接。
SET Db2 产品不支持大部分 Netezza 会话变量。请使用其他方法来调整和配置 Db2 产品。
SHOW LIBRARY 没有可用的 Db2 SHOW LIBRARY 语句。Database Harmony Profiler 工具会注释掉 SHOW LIBRARY 命令。
TRUNCATE TABLE Db2 TRUNCATE TABLE 语句需要 IMMEDIATE 参数。此参数指定立即处理截断操作,并且不可撤销。
表 2. SQL 兼容性:运算符
Netezza 运算符 Db2支持
! 阶乘运算符 不支持此运算符。您可以改为创建阶乘函数。
^ 和 ** 指数运算符 缺省情况下,不支持这些运算符。请通过将 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 SYSCAT 视图。否则,请创建您自己的视图。
列名中的 & 符 除非使用定界符(例如,"SALES&"),否则不支持此语法。
作为标识起始字符的下划线 (_) 除非使用定界符(例如,"_SALES"),否则不支持此语法。