chapter 3

 本节提供了Greenplum数据库的一个高层次的系统要求和功能概述。它包含以下主题:

Greenplum的SQL标准的一致性

Greenplum和PostgreSQL的兼容性

Greenplum SQL Standard Conformance

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. 在子查询中用 UNION ALL关联表(UNION 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 domain这个临时办法

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 条评论
登录 后参与评论

相关文章

  • python生成随机密码串

       今天修改服务器密码,想来想去不知道设置什么密码比较好,索性设置随机数吧。python当中的random模块可以生成随机数,主要用这个生成随机密码。

    py3study
  • python初学之一

    一、实现一个函数isDuplicate(s),接受一个字符串,判断这个符串是否含有重复的字符,如果有的话函数返回True,没有的话返回False

    py3study
  • gitlab CI脚本编写

    从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 ...

    py3study
  • PL/SQL 包编译时hang住的处理

           最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。

    Leshami
  • 19.Linux-USB总线驱动分析

    如下图所示,以windows为例,我们插上一个没有USB设备驱动的USB,就会提示你安装驱动程序 ? 为什么一插上就有会提示信息? 是因为windows自带了...

    张诺谦
  • Sony、Kabam、 Blippar:AR是VR的诱导性毒品

    VRPinea
  • ASP.NET WebAPI String 传值问题

    如果我们再WebAPI中定义了只有一个string参数的WebAPI函数,如下所示: [HttpPost] public string TrackBill(st...

    码农阿宇
  • 深入浅出Logistic Regression之二分类

    ---- 概述 在深度学习笔记-神经网络基础文章里面介绍过Logistic Regression模型进行二分类和推导。比如:我们现在有一张彩色图片让计算机自己识...

    BrianLv
  • cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset

    杨熹
  • 关于字符串为空的几个性能测试

      string.Empty是一个Static的属性,使用时不分配存储空间,而在用""时,系统会分配一个长度为空的存储空间。不过编译系统应该会优化,也就是说,比...

    小老鼠

扫码关注云+社区

领取腾讯云代金券