Greenplum 特点概要

该部分提供了GP数据库的系统要求和功能集合的高级概述。它包含以下主题:

上级话题: Greenplum数据库参考指南

Greenplum与SQL标准的一致性

SQL语言于1986年被美国国家标准学会(ANSI)第一次作为SQL正式标准化。SQL标准的后续版本已由ANSI和国际标准化组织(ISO)标准发布:SQL 1989,SQL 1992,SQL 1999,SQL 2003,SQL 2006,和最后的 SQL 2008,它就是当前的SQL标准。该标准的正式名称为 ISO/IEC 9075-14:2008。一般来说,每个更新的版本都增加了更多的内容,虽然偶尔也有一些内容被启用或者删除。

重要的是要注意,没有完全遵从SQL标准的商业数据库系统。Greenplum数据库几乎完全符合SQL 1992的标准,多数功能来源于SQL 1999。几个来源于SQL 2003的功能也被实现了(最著名的是 SQL OLAP 功能)。

该部分针对Greenplum数据库和SQL标准相关的重要一致性的问题。有关对最新的SQL标准的支持功能列表,请参阅 SQL 2008可选特性符合

核心SQL一致性

在构建并行,无共享架构的数据库系统和查询优化器的过程中,某些常见的SQL结构尚未在Greenplum 数据库中实现。不支持以下的SQL结构:

  1. 有些设置在 EXISTSNOT EXISTS 子句中返回子查询,Greenplum的并行优化器不能将之重写为到连接之中。
  2. 向后回滚游标,包括 FETCH PRIORFETCH FIRSTFETCH ABOLUTE,和 FETCH RELATIVE操作的使用。
  3. CREATE TABLE 语句上(哈希分布表):UNIQUEPRIMARY KEY 子句必须包括分布键列的所有值,或者是其超集。因为这个限制,在CREATE TABLE的语句中,仅允许一个 UNIQUE 子句或者 PRIMARY KEY 子句。UNIQUEPRIMARY KEY 子句不允许出现在随机分布的表中。
  4. CREATE UNIQUE INDEX 语句不包含分布键的列的所有值或者为其超集。CREATE UNIQUE INDEX不允许使用在随机分布的表上。注意 UNIQUE INDEXES(但是不是 UNIQUE CONSTRAINTS)在分布表的单个部分上执行,它们保证每个部分或者字部分内的键值的唯一性。
  5. VOLATILESTABLE 函数不能在段上执行,因此限于将文字值作为其参数值传递。
  6. 触发器是不支持的,因为他么通常依赖于 VOLATILE 函数的使用。
  7. 引用完整性约束(外键)不会再Greenplum数据库中实施。用户可以声明外键,但是这些信息保存在系统目录中。
  8. 序列操纵函数 CURRVALLASTVAL

SQL 1992 一致性

以下 SQL 1992 的功能在Greenplum数据库中不支持:

  1. NATIONAL CHARACTERNCHAR)和 NATIONAL CHARACTER VARYINGNVARCHAR)。用户可以声明 NCHARNVARCHAR 类型,但是它们只是Greenplum数据库中 CHARVARCHAR 的同义词。
  2. CREATE ASSERTION 语句。
  3. INTERVAL 文字在Greenplum数据库中是支持的, 但是不符合标准。
  4. GET DIAGNOSTICS 语句。
  5. 对列 GRANT INSERTUPDATE 权限。在Greenplum数据库中权限只能赋予在表上。
  6. GLOBAL TEMPORARY TABLEs 和 LOCAL TEMPORARY TABLEs. Greenplum TEMPORARY TABLEs 不符合SQL标准,但是很多商业数据库以同样的方式实现了临时表。Greenplum 临时表和Terdata中的 VOLATILE TABLEs 一样。
  7. UNIQUE 断言。
  8. 引用完整性检查的 MATCH PARTIAL (很可能不会在Greenplum数据库中实现)。

SQL 1999 一致性

以下 SQL 1999 的功能在Greenplum数据库中不支持:

  1. Large Object 数据类型:BLOBCLOBNCLOB。但是,Grennplum数据库中该 BYTEATEXT 列可以存储大量的数据(数百兆字节)。
  2. MODULE(SQL 客户端模块)。
  3. CREATE PROCEDURESQL/PSM)。这可通过创建返回值为voidFUNCTION 在Greenplum数据库中进行操作,如下调用函数: ``` SELECT myfunc(args);
4. 该 PostgreSQL/Greenplum 函数定义语言
 (`PL/PGSQL`)是Oracle的 `PL/SQL`的子集,而不是和 `SQL/PSM` 函数定义语言的兼容。
 Greenplum数据库还支持使用 Python,Perl,Java,和
 R定义函数。
5. `BIT` 和 `BIT VARYING` 数据类型
 (故意生路)。这些在 SQL 2003中被弃用,并且在 SQL
 2008中被替代。
6. Greenplum 63个字符长的标识符。该SQL标准要求支持达到128个字符长的标识符。
7. 准备好的事务(`PREPARE TRANSACTION`,
 `COMMIT PREPARED`, `ROLLBACK PREPARED`)。这也意味着
 Greenplum 不支持 `XA` 事务(数据库事务和外部事务2个阶段的提交的协调)。
8. `CHARACTER SET` 选项,在
 `CHAR()` 或 `VARCHAR()` 列定义的时候。
9. 指明 `CHARACTERS` 或 `OCTETS`
 (`BYTES`)关于 `CHAR()` 或
 `VARCHAR()` 列的长度。例如,`VARCHAR(15
 CHARACTERS)` 或 `VARCHAR(15 OCTETS)` 或 `VARCHAR(15
 BYTES)`。
10. `CURRENT_SCHEMA` 函数。
11. `CREATE DISTINCT TYPE` 语句。`CREATE
 DOMAIN` 可以用作Greenplum中的一种解决方案。
12. *显式表* 结构。





### SQL 2003 一致性



以下 SQL 2003 的功能在Greenplum数据库中不支持:


1. `MERGE` 语句。
2. `IDENTITY` 列和相关的 `GENERATED
 ALWAYS/GENERATED BY DEFAULT` 子句。该 `SERIAL` 或
 `BIGSERIAL` 数据类型 `INT` 或
 `BIGINT GENERATED BY DEFAULT AS IDENTITY`非常相似。
3. `MULTISET` 对数据类型的修饰符。
4. `ROW` 数据类型。
5. Greenplum 使用序列的语法是非标准的。例如,`nextval('``seq``')` 在
 Greenplum 中使用来替代标准的 `NEXT VALUE FOR` `seq`。
6. `GENERATED ALWAYS AS` 列。视图可以用来解决。
7. `SELECT`语句上的示例子句(`TABLESAMPLE`)。该 `random()` 函数可以用解决从表中获取随机样本的方法。
8. 该 *partitioned join tables*结构(连接中的 `PARTITION
 BY` )。
9. `GRANT SELECT` 对列授权。Greenplum数据库中权限只能赋予表。视图可以用来解决。
10. 对 `CREATE TABLE x (LIKE(y))` 语句,Greenplum 不支持
 `[INCLUDING|EXCLUDING]``[DEFAULTS|CONSTRAINTS|INDEXES]`
 语句。
11. Greenplum 数组数据类型几乎符合SQL标准,但是有一些例外,通常,用户不应该遇到使用它们的问题。





### SQL 2008 一致性



以下SQL 2008的功能在Greenplum数据库中不支持:


1. `BINARY` 和 `VARBINARY` 数据类型。
 在Greenplum数据库中,`BYTEA` 可以用来替代 `VARBINARY`。
2. `FETCH FIRST` 或 `FETCH NEXT` 子句对
 `SELECT`,例如:

SELECT id, name FROM tab1 ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY; ```

Greenplum 有 LIMITLIMIT OFFSET 子句可以用来替代。

  1. ORDER BY 子句在视图中或子查询中会被忽视,除非也使用了 LIMIT 子句。这是可选的,正如 Greenplum 优化器不能决定什么时候可以安全的避免呢排序,可能会导致未知的性能影响因为 ORDER BY 子句。要解决这个问题,用户可以指定一个非常大的 LIMIT。例如: SELECT * FROM mytable ORDER BY 1 LIMIT 9999999999
  2. row subquery 结构是不支持的。
  3. TRUNCATE TABLE 不接受 CONTINUE IDENTITYRESTART IDENTITY 子句。

Greenplum 和 PostgreSQL 兼容性

Greenplum数据库是基于 PostgreSQL 8.3 的,并且带有一些新PostgreSQL版本的一些功能。要支Greenplum数据库持分布式的特点和常规的工作负载,一些SQL命令已经被添加和修改,但是仍然还有一些PostgreSQL的功能不支持。Greenplum还添加了PostgreSQL不支持的功能,例如物理数据分布,并行查询优化,外部表,负载管理的资源队列和增强的表分区。更多关于完整的SQL语法和引用,请参阅 SQL命令参考

表 1.Greenplum数据库中支持的SQL

SQL 命令 Greenplum 的支持 修改,限制,例外
ALTER AGGREGATE YES
ALTER CONVERSION YES
ALTER DATABASE YES
ALTER DOMAIN YES
ALTER EXTENSION YES 改变了Greenplum数据库扩展的定义 - 基于 PostgreSQL 9.6。
ALTER FILESPACE YES Greenplum数据库并行表空间的功能 - 是 PostgreSQL 8.3不具有的。
ALTER FUNCTION YES
ALTER GROUP YES ALTER ROLE 的别名。
ALTER INDEX YES
ALTER LANGUAGE YES
ALTER OPERATOR YES
ALTER OPERATOR CLASS YES
ALTER OPERATOR FAMILY YES
ALTER PROTOCOL YES
ALTER RESOURCE QUEUE YES Greenplum数据库负载管理功能 - PostgreSQL不具备。
ALTER ROLE YES Greenplum数据库子句:RESOURCE QUEUE queue_name ` none`
ALTER SCHEMA YES
ALTER SEQUENCE YES
ALTER TABLE YES 不支持的子句/选项:CLUSTER ON ENABLE/DISABLE TRIGGER Greenplum 数据库子句: `ADD DROP RENAME SPLIT EXCHANGE PARTITION SET SUBPARTITION TEMPLATE SET WITH (REORGANIZE=true false) SET DISTRIBUTED BY`
ALTER TABLESPACE YES
ALTER TRIGGER NO
ALTER TYPE YES
ALTER USER YES ALTER ROLE 的别名。
ALTER VIEW YES
ANALYZE YES
BEGIN YES
CHECKPOINT YES
CLOSE YES
CLUSTER YES
COMMENT YES
COMMIT YES
COMMIT PREPARED NO
COPY YES 修改的子句:ESCAPE [ AS ] 'escape`' 'OFF'**Greenplum数据库子句:**[LOG ERRORS] SEGMENT REJECT LIMIT*count*[ROWS PERCENT]`
CREATE AGGREGATE YES 不支持的语句/选项:[ , SORTOP = sort_operator ] Greenplum数据库子句: [ , PREFUNC = prefunc] 限制: 用来实现聚集函数的函数必须是 IMMUTABLE 函数。
CREATE CAST YES
CREATE CONSTRAINT TRIGGER NO
CREATE CONVERSION YES
CREATE DATABASE YES
CREATE DOMAIN YES
CREATE EXTENSION YES 加载一个新的扩展到Greenplum数据库 - 基于 PostgreSQL 9.6。
CREATE EXTERNAL TABLE YES Greenplum数据库并行 ETL 特点 - PostgreSQL 8.3不具备。
CREATE FUNCTION YES 限制:Functions 被定义成 STABLE 或者 VOLATILE 仅可以运行在Greenplum主机中数据库中。 STABLEVOLATILE 函数不能再段级别的语句中执行。
CREATE GROUP YES CREATE ROLE 的别名。
CREATE INDEX YES Greenplum数据库子句:USING bitmap(位图索引) 限制: UNIQUE 索引仅当它包含所有分布键的列值或者是其超集才被允许。在分区表中,唯一索引仅在单独的分区中才支持,并不能夸分区存在。 CONCURRENTLY 关键词在 Greenplum 中不支持。
CREATE LANGUAGE YES
CREATE OPERATOR YES 限制:用来实现操作符的函数必须是 IMMUTABLE 函数。
CREATE OPERATOR CLASS YES
CREATE OPERATOR FAMILY YES
CREATE PROTOCOL YES
CREATE RESOURCE QUEUE YES Greenplum数据库工作负载管理功能 - PostgreSQL 8.3不具有。
CREATE ROLE YES Greenplum数据库子句:RESOURCE QUEUE queue_name ` none`
CREATE RULE YES
CREATE SCHEMA YES
CREATE SEQUENCE YES 限制:The lastval and currval 函数不支持。 The setval 函数仅对没有操作分布数据的查询才允许。
CREATE TABLE YES 不支持的子句/选项:`[GLOBAL LOCAL]`REFERENCES FOREIGN KEY `[DEFERRABLE NOT DEFERRABLE]**限制子句:**UNIQUEPRIMARY KEY约束仅在哈希分布表上才允许(DISTRIBUTED BY),并且该约束列必须和该表的分布键相同或是其超集,此外必须包含所有分区键中的分布键列。 **Greenplum数据库子句:**DISTRIBUTED BY (column, [ ... ] ) `DISTRIBUTED RANDOMLY PARTITION BY type (column [, ...]) ( partition_specification, [...] ) WITH (appendonly=true [,compresslevel=value,blocksize=value] )
CREATE TABLE AS YES 参阅 CREATE TABLE
CREATE TABLESPACE NO Greenplum数据库子句:FILESPACE filespace_name
CREATE TRIGGER NO
CREATE TYPE YES 限制:用来实现基础类型的函数必须是 IMMUTABLE 函数。
CREATE USER YES CREATE ROLE 的别名。
CREATE VIEW YES
DEALLOCATE YES
DECLARE YES 不支持的子句/ 选项:SCROLL FOR UPDATE [ OF column [, ...] ] 限制: 游标不可以后滚动,支持前滚动。 PL/pgSQL 不支持可更新的游标。
DELETE YES 不支持的子句/ 选项:RETURNING
DISCARD YES
DO YES PostgreSQL 9.0 功能
DROP AGGREGATE YES
DROP CAST YES
DROP CONVERSION YES
DROP DATABASE YES
DROP DOMAIN YES
DROP EXTENSION YES 从Greenplum数据库中删除一个扩展 – 基于 PostgreSQL 9.6。
DROP EXTERNAL TABLE YES Greenplum数据库并行 ETL 功能 - PostgreSQL 8.3不具有。
DROP FILESPACE YES Greenplum数据库并行表空间功能 - PostgreSQL 8.3不具有。
DROP FUNCTION YES
DROP GROUP YES DROP ROLE 的别名。
DROP INDEX YES
DROP LANGUAGE YES
DROP OPERATOR YES
DROP OPERATOR CLASS YES
DROP OPERATOR FAMILY YES
DROP OWNED NO
DROP PROTOCOL YES
DROP RESOURCE QUEUE YES Greenplum数据库工作负载管理功能 - PostgreSQL 8.3不支持。
DROP ROLE YES
DROP RULE YES
DROP SCHEMA YES
DROP SEQUENCE YES
DROP TABLE YES
DROP TABLESPACE NO
DROP TRIGGER NO
DROP TYPE YES
DROP USER YES DROP ROLE 的别名。
DROP VIEW YES
END YES
EXECUTE YES
EXPLAIN YES
FETCH YES 不支持的子句/ 选项:LAST PRIOR BACKWARD BACKWARD ALL 限制: 不能非顺序的提取行;不支持向后扫描。
GRANT YES
INSERT YES 不支持的子句/ 选项:RETURNING
LISTEN NO
LOAD YES
LOCK YES
MOVE YES 参见 FETCH
NOTIFY NO
PREPARE YES
PREPARE TRANSACTION NO
REASSIGN OWNED YES
REINDEX YES
RELEASE SAVEPOINT YES
RESET YES
REVOKE YES
ROLLBACK YES
ROLLBACK PREPARED NO
ROLLBACK TO SAVEPOINT YES
SAVEPOINT YES
SELECT YES 限制:限制使用 VOLATILESTABLE 函数在 FROMWHERE 子句中 文本搜索(Tsearch2)是不支持的。 FETCH FIRSTFETCH NEXT 子句是不支持的。 Greenplum数据库子句 (OLAP): [GROUP BY grouping_element [, ...]] [WINDOW window_name AS (window_specification)] [FILTER (WHERE condition)] 应用到 SELECT 列表上的聚集函数上。
SELECT INTO YES 参阅 SELECT
SET YES
SET CONSTRAINTS NO 在 PostgreSQL,这仅用于外键约束,该不能在Greenplum数据库中执行。
SET ROLE YES
SET SESSION AUTHORIZATION YES 在 PostgreSQL 8.1 中弃用了 - 参阅 SET ROLE
SET TRANSACTION YES
SHOW YES
START TRANSACTION YES
TRUNCATE YES
UNLISTEN NO
UPDATE YES 不支持的子句:RETURNING 限制: SET 对于 Greenplum 分布键列是不允许的。
VACUUM YES 限制:VACUUM FULL 在Greenplum数据库中不推荐。
VALUES YES
当前内容版权归GreenPlum和翻译组所有,若有侵权请联系删除下架 修订时间: 2024-09-15 21:48:03

results matching ""

    No results matching ""