Trafodion的第一个版本提供了一个基于Hadoop平台之上的操作型SQL引擎。功能包含:
- 完整的ANSI SQL语言支持
- 完整的ACID事务支持。对于读、写查询,Trafodion支持跨行,跨表和跨语句的事务保护
- 支持异构存储引擎的直接访问,包括本地访问数据存储
- 为应用程序提供极佳的高可用性保证
- 采用了查询间(intra-query)并发执行模式。轻松支持大数据应用
- 同时应用编译时和运行时优化技术,优化了OLTP工作负载的性能
事务管理特性包括:
- 事务串行化,基于开源项目HBase-Trx中的多版本并发控制(MVCC)的实现原理
- 增强的故障恢复机制保证了数据库中用户数据的一致性
- 事务管理器支持多线程的SQL客户端应用
- 支持非事务型数据访问,即直接访问底层HBase表
接下来的章节阐述了更多细节。
关键功能
SQL数据定义语言(DDL)语句
SQL语句 | 描述 |
---|---|
CREATE SCHEMA | 此语句执行之后但是没有真正创建一个schema, 只有在创建表的时候指定了schema,这时才会创建schema。 |
CREATE TABLE | 创建表;支持其他的变换形式,如:CREATE TABLE AS, CREATE TABLE LIKE以及CREATE VOLATILE TABLE。 |
CREATE INDEX | 在已存在的表上创建索引。 |
CREATE VIEW | 创建视图。 |
CREATE FUNCTION | 创建用户用C语言写的自定义功能函数(UDF)。 |
CREATE PROCEDURE | 创建Java语言版本的存储过程(SPJ)。 |
CREATE LIBRARY | 在数据库schema中为一个SPJ的JAR文件或者一个用户自定义功能函数(UDF)的库文件创建一个库对象。 |
DROP TABLE | 删除表,支持RESTRICT和CASCADE两种选项。 |
DROP INDEX | 删除索引。 |
DROP VIEW | 删除试图。 |
DROP FUNCTION | 删除C语言版本的用户自定义功能函数(UDF)。 |
DROP PROCEDURE | 删除Java语言版本的存储过程(SPJ)。 |
DROP LIBRARY | 删除SPJs或者UDFs在数据库schema中的库对象。 |
ALTER TABLE | 改变现有表的结构,譬如新增或者删除一列。 |
SQL数据操作语言(DML)语句
数据库读(SELECT)以及写(INSERT/UPDATE/DELETE)语句都是支持的。另外也支持CALL语句(调用SPJ)。
SELECT语句
功能 | 描述 |
---|---|
SELECT 列对象列表 | 可以指定ANY, FIRST或者ALL子句;也支持DISTINCT子句过滤掉重复行;甚至可以指定多个DISTINCT子句。列名可以引用相关的名字。 |
FROM 子句 | 可以是表或者视图对象,连接可以自然连接或者交叉连接。支持以下链接方式:
|
WHERE 子句 | 指定选择结果的删选条件 |
子查询支持 | 查询条件中支持子查询,可以是嵌套查询或者连接查询。 |
GROUP BY 子句 | 指定GROUP BY子句会让结果根据指定的分组字段进行分组。子句可以列名或者列序号。 |
HAVING 子句 | 指定在GROUP BY子句返回结果中的每个组中的查询条件。 |
ORDER BY 子句 | 指定结果的排列顺序,子句可以是列名或者列序号。 |
UNION 子句 | 合并两个SELECT语句的查询结果。 |
SAMPLE 子句 | Trafodion中的扩展,此子句可以指定从结果集中选取一个子集。 |
TRANSPOSE 子句 | Trafodion中的扩展,提供类似于Oracle和SQL Server中 Pivot命令的相似功能。 |
SEQUENCE BY 子句 | Trafodion中的扩展,为计算sequencen的函数指定结果集的排列顺序。 |
INSERT/UPDATE/DELETE 语句
语句 | 描述 |
---|---|
INSERT | 往表或者视图中插入数据。 |
UPDATE | 更新表或者视图中相关列的值。 |
DELETE | 删除表或者视图中的数据行。 |
UPSERT | 如果数据行存在,更新表中的数据行,反之插入一条新的数据。 |
MERGE | 从表A往表B做UPSERT以及额外的更新操作。 |
CALL 语句
语句 | 描述 |
---|---|
CALL | 调用Java语言版本的存储过程(SPJ)。 |
SQL 事务控制语句
语句 | 描述 |
---|---|
BEGIN WORK | 开始一个事务。 |
COMMIT WORK | 提交所有改动以及结束事务。 |
ROLLBACK WORK | 撤销事务中的所有数据变动以及结束事务。 |
SET TRANSACTION | 设定事务相关属性。 |
SQL 数据类型
CAST函数可以把值从一种数据类型转换成另外一种数据类型。
数据类型 | 描述 |
---|---|
Numeric | 支持以下几种数值数据类型:
|
Character | 支持以下几种字符串数据类型:
字符数据类型支持也包含国际字符集的支持。 |
Date/time | 支持以下几种数据类型:
|
Interval | INTERVAL |
SQL 语言功能支持
特性 | 描述 |
---|---|
字符集 | 用户数据编码可以是ISO88591, UTF8以及UCS2字符集。原数据用UTF8编码存储。TRANSLATE函数可以将字符串在相互兼容的任意两种字符集间进行相互转换。 |
约束 | Trafodion支持主键,非空,检查以及唯一性约束,另外也支持外键约束。 |
别名 | 可以给表、试图或者子查询命名别名。 |
游标 | Support for non-holdable cursors only. |
表达式 | 支持基于数据类型–的值表达式。 |
标志符 | 支持常用的或者分割的标志符。 |
键 | 支持主键(但是主键创建之后不能删除)、族键和Hash分区键。另外,系统产生的syskey也可以用作键。 |
Literals | Support for data-type–based literals. |
谓词 | 支持以下谓词: BETWEEN比较运算符EXISTSINLIKEIS [NOT] NULLQuantified comparison operators |
子查询 | 支持嵌套子查询或者连接子查询。 |
SQL 语句
语句类型 | 描述 |
---|---|
DEFAULT | 可以在CREATE TABLE或者ALTER TABLE ADD COLUMN语句中给某列指定默认值。 |
FORMAT | 指定某列的输入格式。 |
SQL 函数
函数类型 | 描述 | 详细信息 |
---|---|---|
聚合 | 聚合函数 | 支持的函数: AVG, COUNT, MAX, MIN, STDDEV, SUM, VARIANCE |
字符 | 针对字符数据类型值的字符串函数 | 支持的函数: ASCII, CHAR, CHAR_LENGTH, CODE_VALUE, CONCAT, INSERT, LCASE, LEFT, LOCATE, LOWER, LPAD, LTRIM, OCTET_LENGTH, POSITION, REPEAT, REPLACE, RIGHT, RPAD, RTRIM, SPACE, SUBSTRING/SUBSTR, TRANSLATE, TRIM, UCASE, UPPER, UPSHIFT |
日期/时间 | 针对日期时间类型数据相关函数 | 支持的函数: ADD_MONTHS, CONVERTTIMESTAMP, CURRENT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DATE_ADD, DATE_PART, DATE_SUB, DATE_TRUNC, DATEADD, DATEDIFF, DATEFORMAT, DAY, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, EXTRACT, HOUR, JULIANTIMESTAMP, MINUTE, MONTH, MONTHNAME, QUARTER, SECOND, TIMESTAMPADD, TIMESTAMPDIFF, WEEK, YEAR |
算数 | 针对数值类型数据的数学和统计函数 | 支持的函数: ABS, ACOS, ASIN, ATAN, ATAN2, CEILING, COS, COSH, DEGRESS, EXP, FLOOR, LOG, LOG10, MOD, NULLIFZERO, PI, POWER, RADIANS, SIGN, SIN, SINH, SQRT, TAN, TANH, ZEROIFNULL |
Sequence | Trafodion扩展函数,提供了针对有序的中间结果的聚合函数子集 | 支持的函数:
|
其他 | 工具函数,譬如跟NULL值、安全、数据类型转换等相关的函数 | 支持的函数: BITAND, CASE, CAST, COALESCE, CONVERTTOHEX, CURRENT_USER, DECODE, EXPLAIN, ISNULL, NULLIF, NVL, SESSION_USER, USER |
用户自定义函数(UDFs) | 支持C语言开发的用户自定义函数 | 函数可以返回单个数据列值,数据行或者一个表格 |
SQL 工具
语句 | 描述 |
---|---|
UPDATE STATISTICS | Trafodion扩展功能,可以更新一个表中的一组或者多组列集合的柱状统计信息 |
EXPLAIN | Trafodion扩展功能,可以产生一个描述DML语句访问表的结果表 |
CONTROL QUERY DEFAULT | Trafodion扩展功能,通过CQD可以改变当前进程的默认设置 |
CONTROL QUERY SHAPE | Trafodion扩展功能,可以人为影响优化器选择一段或者一个完整的用户选择的查询计划 |
Trafodion 限制
条目 | 限制描述 |
---|---|
命名 | Schema、表以及列名最长只能256字节。(However, many UTF8 characters will fit in 256 bytes.) |
表 | 针对行的最大长度没有限制 |
索引 | 针对索引键的组合列长度没有限制 |
约束 | 针对主键的组合列长度没有限制 |
VARCHAR | 列长度最多支持100K。 |