本节提供了Greenplum数据库的一个高层次的系统要求和功能概述。它包含以下主题:
Greenplum SQL Standard Conf
ORMance
SQL语言是首次正式在1986年由美国国家标准学会(ANSI)1986年作为SQL的标准化。
由ANSI SQL标准的后续版本已经发布,并作为国际标准化组织(ISO)标准组织:
SQL2003 SQL 1989,SQL 1992,SQL 1999,SQL 2003,SQL 2006,终于SQL2008年,这是当前的SQL标准。
该标准的正式名称是ISO/ IEC9075-14:2008。在一般情况下,每个新版本增加了更多的功能,虽然偶尔的功能已被弃用或删除。
重要的是要注意-没有商业
数据库系统,是完全符合SQL标准。
Greenplum数据库是几乎完全符合SQL1992标准,大部分SQL1999功能。SQL2003的几个特点,也已实施(最显着的SQL OLAP功能)。
本节讨论的Greenplum数据的重要一致性问题,因为它们涉及到SQL标准。
Greenplum的最新的SQL标准的支持为功能功能列表,请参见附录K“SQL2008可选功能符合”。
Core SQL Conformance
在建立并行,无共享数据库系统和查询
优化器的过程中,一些常见的SQL结构目前尚未在Greenplum数据库上实现。下面的SQL不支持:
1. 对于关联子查询,greenplumn并行优化器不会在内部重写成无关联的joins形式.大部分简单的子查询能够工作,而不必手动地改写成外连接.
2. 有一小部分多行子查询, greenplumn并行优化器不会在内部重写成equijoins
3. 一些返回子查询(用EXISTS或者NOT EXISTS子句), greenplumn并行优化器不会在内部重写成join
4. 在子查询中用 U
NION ALL关联表(UN
ioN ALL of joined tables with subqueries)
5. 返回值函数(set-returning)在子查询的from子句中
6. 向后类型的游标
7. 在create table 语句(在hash分布的表):UNIQUE或PRIMARY KEY语句必须包含所有的分布建的列.由于由此限制,只允许在create table语句中UNIQUE或PRIAMY KEY只允许出现一个, UNIQUE和PRIMARY KEY子句不允许出现在随机分布表里(random-distributed table)
8. CREATE UNIQUE INDEX语句不能包括所有的分布建, CREATE UNIQUE INDEX语句不能出现在随机分布表里(random-distributed table)
9. VOLATILE或者STABLE函数不能在子节点上执行,所以通常限制传入的文字值作为参数.( VOLATILE or STABLE functions cannot execute on the segments, and so are generally limited to being passed literal values as the arguments to their parameters)
10. 触发器不支持由于他们可以使用VOLATILE函数
11. Gp数据库不强制外键,用户可以定义外键,他们会保持在系统表中
12. 序列操作函数CURRVAL 和LASTVAL
13. DELETE WHERE CURRENT OF 和UPDATE WHERE CURRENT OF
gp不支持的sql 1992语法如下:
1. NCHAR和NVARCHAR,在gp中只是作为CHAR和VARCHAR的同义词
2. CREATE ASSERTION语句
3. Gp支持INTERVAL,但是和标准的不一样
4. GET DIAGNOSTICS 语句
5. 对应字段GRANT INSERT或者UPDATE 的权利,在gp中只能对表授权
6. GLOBAL TEMPORARY TABLE 或LOCAL TEMPORARY TABLE.gp的TEMPORARY TBALE不是标准的sql定义,不过许多商业数据库系统用同一种方法实现TEMPORARY TABLE.gp数据库的临时表跟TERADATA的VOLITILE TABLE一样
7. UNIQUE 谓词
8. MATCH PARTIAL 完整性检查(MATCH PARTIAL for referential integrity checks)
gp不支持的sql 1999语法如下:
1. 大对象数据类型:BLOB,NCLOB,CLOB,gp中TEXT和BYTEA列可以代替他们
2.
递归WITH和WITH RECURSIVE语句,非递归的WITH字句可以很简单的用表的表达式来表示
3. MODULE(SQL 客户端模块)
4. CREATE PROCEDURE 可以在gp中用返回void的function函数来建立,调用该函数时,使用select myfunc(args)
5. postgresql和gp的函数定义语法pl/plsql是orcalce的pl/plsql的子集,不兼容sql/psm函数定义语法,gp支持函数使用
python,perl,r语言来定义
6. BIT和BIT VARYING数据类型,这些在SQL 2003中被弃用,在SQL 2008中被重新启用
7. gp支持63位字符长度的标识符,标准SQL支持128位
8. prepared transactions(replace transaction,commit,prepared,rollback,prepared),这意味着gp不支持XA transaction
9. 在定义char() varchar()列中使用character set选项
10. 在char()或varchar()列中指定长度,例如:varchar(15 characters)
11. current_schema函数
12. create distinct type语句.在gp中可以使用create dom
ain这个临时办法
13. explict table construct
gp不支持的sql 2003语法如下:
1. XML数据类型
2. IDENTITY列和关联的GENERATED ALWAYS/GENERATED BY DEFAULT子句.SERIAL或者BIGSERIAL数据类型跟INT或者BIGINT GENRATED BY DEFAULT AS IDENTITY很类似
3. MULTISET modifiers on data types
4. ROW 数据类型
5. gp数据库的序列语法是非标准的,比如gp中使用nextval(‘seq’)替代标准的NEXT VALUE FOR SEQ
6. CREATE ALWAYS AS 列,在gp中可以使用视图这个临时方法
7. SELECT语句中的样本子句(TABLESAMPLE),在gp中可以使用random()函数从表中获取随机的样本的临时方法
8. 在select语句和子句中使用NULL FIRST/NULL LAST(在gp中NULL总是出现在最后)
9. partitioned join tables结构(PARTITION BY in a join)
10. 给字段GRANT SELECT 权限(在gp中权限只能给表),可以使用视图这个临时解决方案
11. 至于 FOR TABLE x(LIKE y)语法,gp不支持[INCLUDING|EXCLUDING] [DEFALUTS|CONSTRAINTS|INDEXS]语句
12. gp的
数组类型跟大部分的标准SQL一样,除了少数情况,一般不建议使用
13. MERGE结构
gp不支持的sql 2008语法如下:
1. BINARY和VARBINARY数据类型.在gp中BYTEA用来代替VARBINARY
2. 在SELECT中的FTECH FIRST和FETCH NEXT子句,比如select id ,name from tabl1 order by id offset 20 rows fetch next 10 rows only;Gp使用limit和limit offset子句来替代
3. 在视图跟子查询中order by 语句会被忽略,除非使用limit子句.这是故意的.gp优化器为了避免
排序带来的不确定的影响,作为临时解决方案,可以使用一个很大的limit(select * from mytable order by 1 limit 99999999)
4. row subquery语句不支持
5. truncate table不接受continue identity和restart identity子句
Greenplum and PostgreSQL Compatibility
Greenplum数据库是基于对PostgreSQL8.2,从8.3版本增加了一些功能。为支持Greenplum数据系统
分布式的性质和典型的工作负载,一些SQL命令已增加或修改,还有一些PostgreSQL的功能不支持。Greenplum的还增加了在PostgreSQL没有的功能,如物理数据分布,并行查询优化,外部表,工作负载管理和增强的表分区的资源队列。为完整的SQL语法和参考,请参阅第243页上的“SQL命令参考”。
0