@liyuj
2018-01-05T00:04:05.000000Z
字数 30496
阅读 10979
Apache-Ignite-2.3.0-中文开发手册
本文档描述了Apache Ignite支持的SQL语法,其中包括:
修改已有表的结构:
ALTER TABLE [IF EXISTS] tableName
ADD [COLUMN] {[IF NOT EXISTS] tableColumn | (tableColumn [,...])}
tableColumn := columnName columnType [PRIMARY KEY]
ALTER TABLE的范围
目前,Ignite只支持增加新的列,在即将发布的版本中,命令的语法和功能将进一步扩展。
参数
tableName
:表名tableColumn
:表中要增加的列名和类型IF EXISTS
:如果指定的表不存在不会抛出错误IF NOT EXISTS
:如果同名的列已经存在不会抛出错误描述
ALTER TABLE
为之前创建的表增加一个或者多个列,列添加了之后,就可以在DML语句中进行访问,并且在CREATE INDEX
语句中增加索引。
Ignite以键值对的形式存储数据,所有新增的列都属于值,键(PRIMARY KEY
)所属的列是无法修改的。
ALTER TABLE
语句在执行过程中,相同表的DDL和DML语句都会被阻塞一小段时间。
如果开启了Ignite的持久化,这个命令对应的模式改变也会被持久化到磁盘,因此即使整个集群重启也不会受到影响。
示例
给表增加一列:
ALTER TABLE Person ADD COLUMN city varchar;
只有没有同名列时才会为表增加新列:
ALTER TABLE City ADD COLUMN IF NOT EXISTS population int;
只有表存在时才会增加新列:
ALTER TABLE IF EXISTS Missing ADD number long;
一次为表增加多个列:
ALTER TABLE Region ADD COLUMN (code varchar, gdp double);
为表创建索引。
CREATE [SPATIAL] INDEX [[IF NOT EXISTS] indexName] ON tableName
(columnName [ASC|DESC] [,...])
参数
indexName
:要创建的索引名;ASC
:升序排列(默认);DESC
:降序排列;SPATIAL
:创建空间索引,目前只支持几何类型;IF NOT EXISTS
:如果同名索引已经存在则不会抛出错误,数据库只检查索引的名字,不考虑列的类型和数量。描述
CREATE INDEX
为指定的表创建一个新的索引,常规的索引存储于内部的B+树数据结构中,该B+树和实际的数据一样,在集群内进行分布,一个集群节点会存储其所属的数据对应的索引的一部分。
如果CREATE INDEX
在运行时执行,那么数据库会在指定的索引列上同步地迭代,同一个表的其他DDL命令会被阻塞,直到CREATE INDEX
执行完毕,但是DML语句的执行不受影响,还是并行地执行。
如果开启了Ignite的持久化,这个命令对应的模式改变也会被持久化到磁盘,因此即使整个集群重启也不会受到影响。
空间索引由JTS拓扑套件维护,具体可以参照相关的文档。
索引的权衡
为应用选择索引时,需要考虑很多事情。
索引每个字段是错误的!
有序索引示例
| A | B | C |
| 1 | 2 | 3 |
| 1 | 4 | 2 |
| 1 | 4 | 4 |
| 2 | 3 | 5 |
| 2 | 4 | 4 |
| 2 | 4 | 5 |
任意条件,比如a = 1 and b > 3
,都会被视为有界范围,在log(N)
时间内两个边界在索引中可以被快速检索到,然后结果就是两者之间的任何数据。
下面的条件会使用索引:
a = ?
a = ? and b = ?
a = ? and b = ? and c = ?
从索引的角度,条件a = ?
和c = ?
不会好于a = ?
明显地,半界范围a > ?
可以工作得很好。
示例
创建常规索引:
CREATE INDEX title_idx ON books (title);
只有在不存在时创建倒序索引:
CREATE INDEX IF NOT EXISTS name_idx ON persons (firstName DESC);
创建组合索引:
CREATE INDEX city_idx ON sales (country, city);
创建空间索引:
CREATE SPATIAL INDEX idx_person_address ON Person (address);
创建一个新表及其底层的缓存。
CREATE TABLE [IF NOT EXISTS] tableName (tableColumn [, tableColumn]...
[, PRIMARY KEY (columnName [,columnName]...)])
[WITH "paramName=paramValue [,paramName=paramValue]..."]
tableColumn := columnName columnType [PRIMARY KEY]
参数
tableName
:表名;tableColumn
:新表中一个列的名字和类型;columnName
:之前定义的一个列名;IF NOT EXISTS
:只有同名表不存在时才会创建新表;PRIMARY KEY
:定义表的主键,可以由一个或者多个列组成;WITH
:标准ANSI SQL中未定义的参数: TEMPLATE=<cache's template name>
:在Ignite中注册的大小写敏感的缓存模板,用于CREATE TABLE命令在创建分布式缓存时的配置。一个模板是在集群中通过Ignite.addCacheConfiguration
注册的CacheConfiguration
类的实例。使用预定义的TEMPLATE=PARTITIONED
或者TEMPLATE=REPLICATED
模板,可以直接创建对应复制类型的缓存,其他的参数由CacheConfiguration
对象决定,在没有显式指定的情况下,默认会使用TEMPLATE=PARTITIONED
模板。BACKUPS=<number of backups>
:设置数据的备份数量,如果未指定这个参数,或者未指定任意的TEMPLATE
参数,那么创建的缓存备份数量为0;ATOMICITY=<ATOMIC | TRANSACTIONAL>
:为底层缓存设置ATOMIC
或者TRANSACTIONAL
模式,如果未指定这个参数,或者未指定任意的TEMPLATE
参数,那么创建的缓存为ATOMIC
模式;WRITE_SYNCHRONIZATION_MODE=<PRIMARY_SYNC | FULL_SYNC | FULL_ASYNC>
:设置底层缓存的写同步模式,如果未指定这个参数,或者未指定任意的TEMPLATE
参数,那么创建的缓存为FULL_SYNC
模式;CACHEGROUP=<group name>
:设置底层缓存所属的组名;AFFINITYKEY=<affinity key column name>
:设置关系键名字,它应该是PRIMARY KEY
约束中的一个列;CACHE_NAME=<custom name of the new cache>
:命令创建的底层缓存的名字,下面会详细描述;DATA_REGION=<existing data region name>
:表数据存储的数据区的名字,Ignite默认会将所有的数据存储于默认的数据区中;KEY_TYPE=<custom name of the key type>
:设置自定义键类型的名字,用于Ignite的键值API中,名字需要与Java、.NET和C++的类相对应,或者如果使用了二进制对象而不是自定义类时,也可以是随机的。在自定义键中,字段的数量和类型需要与PRIMARY KEY
相对应,下面会详细描述;VALUE_TYPE=<custom name of the value type of the new cache>
:设置自定义值类型的名字,用于Ignite的键值API以及其他的非SQL API中。名字需要与Java、.NET和C++的类相对应,或者如果使用了二进制对象而不是自定义类时,也可以是随机的。值类型需要包含在CREATE TABLE命令中定义的所有列,但是PRIMARY KEY
约束中列出的不算,下面会详细描述;WRAP_KEY=<true | false>
:这个标志控制单列主键是否会被包装成二进制对象形式,这个标志默认值为false
,这个标志对多列的PRIMARY KEY
不会产生影响,不管这个参数值是什么,它总是会被包装;WRAP_VALUE=<true | false>
:这个标志控制单列基本类型的值是否会被包装成二进制对象形式,这个标志默认值为true
,这个标志对多列的值不会产生影响,不管这个参数值是什么,它总是会被包装。如果表中只有一个列,并且没有计划添加额外的列时,可以将其配置为false
。注意如果该参数配置为false
,就无法在该表上执行ALTER TABLE ADD COLUMN
命令;描述
CREATE TABLE
会创建一个新的缓存,然后在其上定义一个新的SQL表,缓存以键-值对的形式存储数据,并且该表允许在数据上执行SQL查询。
表会驻留在PUBLIC
模式中。
注意CREATE TABLE
操作是同步的,在CREATE TABLE
执行过程中会阻塞其他DDL命令的执行,DML命令的执行不受影响,还会以并行的方式执行。
如果希望使用键-值API访问数据,那么设置CACHE_NAME
, KEY_TYPE
和VALUE_TYPE
参数会比较有用,因为:
CREATE TABLE
执行后,生成的缓存名是SQL_{SCHEMA_NAME}_{TABLE}
形式的,使用CACHE_NAME
参数会覆盖默认的名字;类型
变得复杂.这时可以使用自定义的KEY_TYPE
和VALUE_TYPE
来覆盖默认值,他们可以分别对应业务模型对象;示例
创建Person
表:
CREATE TABLE IF NOT EXISTS Person (
age int, id int, city_id int, name varchar, company varchar,
PRIMARY KEY (name, id))
WITH "template=partitioned,backups=1,affinitykey=city_id, key_type=PersonKey, value_type=MyPerson";
该命令执行后,做了如下事情:
SQL_PUBLIC_PERSON
的分布式缓存,该缓存会存储Person类型的数据,该类型与一个特定的Java, .NET, C++类对应,或者是二进制对象。此外,键类型(PersonKey
)和值类型(MyPerson
)是显式定义的,说明该数据可以被键-值以及其他的非SQL API处理;PUBLIC
模式中;PRIMARY KEY
列会被用于键列,其他的列则属于值;WITH
子句进行传递,如果没有WITH
子句,那么缓存会通过CacheConfiguration
类的默认参数创建。下面的示例显示了如何通过指定的PRIMARY KEY
来创建相同的表,然后覆写了和缓存有关的部分参数:
CREATE TABLE Person (
age int, id int PRIMARY KEY, city_id int, name varchar, company varchar)
WITH "atomicity=transactional,cachegroup=somegroup";
删除表的一个索引。
DROP INDEX [IF EXISTS] indexName
参数
indexName
:要删除的索引名;IF EXISTS
:如果指定名字的索引不存在,不会抛出错误,数据库只会校验索引的名字,不考虑列的类型和数量。描述
DROP INDEX
命令会删除之前创建的一个索引。
相同表的其他DDL命令会被阻塞,直到DROP INDEX
执行完成,DML命令的执行不受影响,仍然会以并行的方式执行。
如果开启了Ignite的持久化,这个命令对应的模式改变也会被持久化到磁盘,因此即使整个集群重启也不会受到影响。
示例
删除一个索引:
DROP INDEX idx_person_name;
删除指定的表及其底层的索引。
DROP TABLE [IF EXISTS] tableName
参数
tableName
:要删除的表名;IF NOT EXISTS
:如果指定名字的表不存在,不会抛出错误。描述
DROP TABLE
命令会删除之前创建的一个表,底层的分布式缓存及其保存的数据也会被删除。
在DROP TABLE
命令执行过程中,相同表的其他DDL和DML命令都会被阻塞,,在表删除后,所有挂起的命令都会报错。
如果开启了Ignite的持久化,这个命令对应的模式改变也会被持久化到磁盘,因此即使整个集群重启也不会受到影响。
示例
如果Person表存在,将其删除:
DROP TABLE IF EXISTS "Person";
从一张表或者多张表中获得数据。
SELECT
[TOP term] [DISTINCT | ALL] selectExpression [,...]
FROM tableExpression [,...] [WHERE expression]
[GROUP BY expression [,...]] [HAVING expression]
[{UNION [ALL] | MINUS | EXCEPT | INTERSECT} select]
[ORDER BY order [,...]]
[{ LIMIT expression [OFFSET expression]
[SAMPLE_SIZE rowCountInt]} | {[OFFSET expression {ROW | ROWS}]
[{FETCH {FIRST | NEXT} expression {ROW | ROWS} ONLY}]}]
参数
DISTINCT
:配置从结果集中删除重复数据;GROUP BY
:通过给定的表达式对结果集进行分组;HAVING
:分组后过滤;ORDER BY
:使用给定的列或者表达式对结果集进行排序;LIMIT
和FETCH FIRST/NEXT ROW(S) ONLY
:对查询返回的结果集的数量进行限制(如果为null或者小于0则无限制);OFFSET
:配置忽略的行数;UNION
、INTERSECT
、MINUS
、EXPECT
:将多个查询的结果集进行组合。描述
SELECT
查询可以在分区
和复制
模式的数据上执行。
当在全复制的数据上执行的时候,Ignite会将查询发送到某一个节点上,然后在其本地数据上执行。
另外,如果查询在分区数据上执行,那么执行流程如下:
关联
Ignite支持并置以及非并置的分布式SQL关联。
在分区和复制模式的数据集上进行关联也没有任何的限制。
但是,如果关联了分区模式的数据,那么要注意,要么将关联的键并置在一起,要么为查询开启非并置关联参数。
分组和排序优化
带有ORDER BY
子句的SQL查询不需要将整个结果集加载到查询发起节点来进行完整的排序,而是查询映射的每个节点先对各自的结果集进行排序,然后汇总过程会以流式进行合并处理。
对于有序的GROUP BY
查询也实现了部分优化,不需要将整个结果集加载到发起节点来进行分组,在Ignite中,每个节点的部分结果集可以流化、合并、聚合,然后逐步返回给应用。
示例
获取Person
表的所有数据:
SELECT * FROM Person;
获取所有数据,按照字典顺序排序:
SELECT * FROM Person ORDER BY name;
计算某个城市的人口数量:
SELECT city_id, COUNT(*) FROM Person GROUP BY city_id;
关联Person
和City
表的数据:
SELECT p.name, c.name
FROM Person p, City c
WHERE p.city_id = c.id;
往表中插入数据。
INSERT INTO tableName
{[( columnName [,...])]
{VALUES {({DEFAULT | expression} [,...])} [,...] | [DIRECT] [SORTED] select}}
| {SET {columnName = {DEFAULT | expression}} [,...]}
参数
tableName
:要更新的表名;columnName
:VALUES
子句中的值对应的列名。描述
INSERT
命令在表中新增了一个条目。
因为Ignite是以键-值对的形式存储数据的,因此所有的INSERT
语句最后都会被转换成键-值操作的集合。
如果单个键-值对正在加入缓存,那么最后INSERT
语句会被转换成cache.putIfAbsent(...)
操作,还有,如果插入多个键-值对,那么DML引擎会为每组数据创建一个EntryProcessor
,然后使用cache.invokeAll(...)
将数据注入缓存。
关于SQL引擎如何处理并发问题,可以看这里。
示例
在表中插入一个新的Person
:
INSERT INTO Person (id, name, city_id) VALUES (1, 'John Doe', 3);
将Account
表的数据注入Person
表:
INSERT INTO Person(id, name, city_id)
(SELECT a.id + 1000, concat(a.firstName, a.secondName), a.city_id
FROM Account a WHERE a.id > 100 AND a.id < 1000);
修改表中的数据。
UPDATE tableName [[AS] newTableAlias]
SET {{columnName = {DEFAULT | expression}} [,...]} |
{(columnName [,...]) = (select)}
[WHERE expression] [ORDER BY order [,...]] [LIMIT expression]
参数
table
:表名;columnName
:要修改的列名;描述
UPDATE
命令会修改表中的已有数据。
因为Ignite以键-值对的形式存储数据,因此所有的UPDATE
语句最后都会被转换成一组键-值操作。
开始时,SQL引擎会根据UPDATE
语句的WHERE
子句生成并且执行一个SELECT
查询,然后只会修改该结果集范围内的数据。
修改是通过cache.invokeAll(...)
执行的,这基本上意味着SELECT
查询完成后,SQL引擎就会准备一定量的EntryProcessors
,然后使用cache.invokeAll(...)
进行执行。EntryProcessors
修改完数据后,会进行额外的检查,确保在查询和执行实际的更新之间没有受到干扰。
关于SQL引擎如何处理并发问题,可以看这里。
主键更新
Ignite不允许更新主键,因为主键和分区的映射关系是静态的。虽然分区及其数据可以修改所有者,但是键会一直属于一个固定的分区,该分区是根据主键使用一个哈希函数计算的。
因此,如果主键需要更新,那么这条数据应该先删除,更新后再插入。
示例
更新数据的name
列:
UPDATE Person SET name = 'John Black' WHERE id = 2;
根据Account
表的数据更新Person
表:
UPDATE Person p SET name = (SELECT a.first_name FROM Account a WHERE a.id = p.id)
将数据合并后入表。
MERGE INTO tableName [(columnName [,...])]
[KEY (columnName [,...])]
{VALUES {({ DEFAULT | expression } [,...])} [,...] | select}
参数
tableName
:要更新的表名;columnName
:VALUES
子句中的值对应的列名。MERGE
命令会更新已有的条目,如果不存在会插入一个新的条目。
因为Ignite是以键-值对的形式存储数据的,因此所有的MERGE
语句最后都会被转换成键-值操作的集合。
MERGE
是非常明确的操作,它会根据要被插入和更新的数据行数翻译成对应的cache.put(...)
和cache.putAll(...)
操作。
关于SQL引擎如何处理并发问题,可以看这里。
示例
合并一组数据进Person
表:
MERGE INTO Person(id, name, city_id) VALUES
(1, 'John Smith', 5),
(2, 'Mary Jones', 5);
从Account
表获得数据,然后注入Person
表:
MERGE INTO Person(id, name, city_id)
(SELECT a.id + 1000, concat(a.firstName, a.secondName), a.city_id
FROM Account a WHERE a.id > 100 AND a.id < 1000);
从表中删除数据。
DELETE
[TOP term] FROM tableName
[WHERE expression]
[LIMIT term]
参数
tableName
:表名;TOP
、LIMIT
:指定要删除的数据的数量(如果为null或者小于0则无限制)。描述
DETELE
命令会从一个表中删除数据。
因为Ignite以键-值对的形式存储数据,因此所有的DELETE
语句最后都会被转换成一组键-值操作。
DELETE
语句的执行会被拆分为两个阶段,和UPDATE
语句的执行过程类似。
首先,使用一个SQL查询,SQL引擎会收集符合DELTE
语句中WHERE
子句的键,下一步,持有这些键之后,会创建一组EntryProcessors
,调用cache.invokeAll(...)
执行,在数据被删除之后,会进行额外的检查,确保在查询和执行实际的删除之间没有受到干扰。
关于SQL引擎如何处理并发问题,可以看这里。
示例
从Persons
表中删除指定name的数据:
DELETE FROM Person WHERE name = 'John Doe';
AVG ([DISTINCT] expression)
参数
DISTINCT
:可选关键字,加上会去除重复数据。描述
取平均值,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效,返回值类型与参数值类型相同。
示例
计算玩家的平均年龄:
SELECT AVG(age) "AverageAge" FROM Players;
BIT_AND (expression)
描述
所有非空值的按位与操作,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
对长度相等的两个二进制表达式的每一对对应的位执行逻辑与操作。
对于每个对,如果第一个为1且第二个也为1,则返回值为1,否则返回0。
BIT_OR (expression)
描述
所有非空值的按位或操作,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
对长度相等的两个二进制表达式的每一对对应的位执行逻辑或操作。
对于每个对,如果第一个为1或者第二个为1或者两者都为1,则返回值为1,否则返回0。
BOOL_AND (boolean)
描述
如果所有的表达式都为true,则返回true,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
示例
SELECT item, BOOL_AND(price > 10) FROM Items GROUP BY item;
BOOL_OR (boolean)
描述
如果任意表达式为true,则返回true,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
示例
SELECT BOOL_OR(CITY LIKE 'W%') FROM Users;
COUNT (* | [DISTINCT] expression)
描述
所有条目或者非空值的数量,该方法返回long型值,如果没有命中记录,返回值为0,该函数只对SELECT语句有效。
示例
计算每个城市玩家的数量:
SELECT city_id, COUNT(*) FROM Players GROUP BY city_id;
MAX (expression)
参数
expression
:可以是一个列名,也可以是另一个函数或者数学操作的结果集。描述
返回最大值,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效,返回值类型与参数值类型相同。
示例
获得最高的玩家:
SELECT MAX(height) FROM Players;
MIN (expression)
参数
expression
:可以是一个列名,也可以是另一个函数或者数学操作的结果集。描述
返回最小值,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效,返回值类型与参数值类型相同。
示例
获得最年轻的玩家:
SELECT MIN(age) FROM Players;
SUM ([DISTINCT] expression)
参数
DISTINCT
:去除重复的数据;expression
:可以是一个列名,也可以是另一个函数或者数学操作的结果集。描述
返回所有值的总和,如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效,返回值类型与参数值类型相同。
示例
获得所有玩家的总得分:
SELECT SUM(goal) FROM Players;
SELECTIVITY (expression)
参数
expression
:可以是列名。描述
估算性能优化选择(0-100)。这个值被定义为(100 * distinctCount / rowCount)。0行的优化选择为0(未知)。该函数只对SELECT语句有效。
示例
计算first_name
和second_name
列的选择性:
SELECT SELECTIVITY(first_name), SELECTIVITY(second_name) FROM Player
WHERE ROWNUM() < 20000;
STDDEV_POP ([DISTINCT] expression)
参数
DISTINCT
:去除重复值;expression
:可以是一个列名。描述
返回总体标准差。此方法返回一个double型值。如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
示例
计算玩家年龄的标准差:
SELECT STDDEV_POP(age) from Players;
STDDEV_SAMP ([DISTINCT] expression)
参数
DISTINCT
:去除重复值;expression
:可以是一个列名。描述
返回样本标准差。此方法返回一个double型值。如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
示例
计算玩家年龄的样本标准差:
SELECT STDDEV_SAMP(age) from Players;
VAR_POP ([DISTINCT] expression)
参数
DISTINCT
:去除重复值;expression
:可以是一个列名。描述
返回总体方差(总体标准方差)。此方法返回一个double型值。如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
示例
计算玩家年龄的总体方差:
SELECT VAR_POP (age) from Players;
VAR_SAMP ([DISTINCT] expression)
参数
DISTINCT
:去除重复值;expression
:可以是一个列名。描述
返回样本方差(样本标准方差)。此方法返回一个double型值。如果没有命中记录,返回值为NULL,该函数只对SELECT语句有效。
示例
计算玩家年龄的样本方差:
SELECT VAR_SAMP(age) FROM Players;
ABS (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
返回表达式的绝对值。
示例
计算绝对值:
SELECT transfer_id, ABS (price) from Transfers;
ACOS (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算反余弦函数值,该函数返回double型值。
示例
获取反余弦值:
SELECT acos(angle) FROM Triangles;
ASIN (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算反正弦函数值,该函数返回double型值。
示例
获取反余弦值:
SELECT asin(angle) FROM Triangles;
ATAN (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算反正切函数值,该函数返回double型值。
示例
获取反余切值:
SELECT atan(angle) FROM Triangles;
COS (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算余弦函数值,该函数返回double型值。
示例
获取余弦值:
SELECT COS(angle) FROM Triangles;
COSH (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算双曲余弦函数值,该函数返回double型值。
示例
获取双曲余弦值:
SELECT COSH(angle) FROM Triangles;
COT (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算余切函数值,该函数返回double型值。
示例
获取余切值:
SELECT COT(angle) FROM Triangles;
SIN (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算正弦函数值,该函数返回double型值。
示例
获取正弦值:
SELECT SIN(angle) FROM Triangles;
SINH (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算双曲正弦函数值,该函数返回double型值。
示例
获取双曲正弦值:
SELECT SINH(angle) FROM Triangles;
TAN (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算正切函数值,该函数返回double型值。
示例
获取正切值:
SELECT TAN(angle) FROM Triangles;
TANH (expression)
参数
expression
:可以是列名,也可以是另一个函数或者数学操作的结果集。描述
计算双曲正切函数值,该函数返回double型值。
示例
获取双曲正切值:
SELECT TANH(angle) FROM Triangles;
ATAN2 (y, x)
参数
x
和y
:参数。描述
将直角坐标转换成极坐标时的角度计算,该函数返回double型值。
示例
获取方位角:
SELECT ATAN2(X, Y) FROM Triangles;
BITAND (y, x)
参数
x
和y
:参数。描述
按位与操作,该函数返回double型值。
示例
SELECT BITAND(X, Y) FROM Triangles;
BITGET (y, x)
参数
x
和y
:参数。描述
当且仅当第一个参数在第二个参数指定的位置上存在二进制位组时返回true,该方法返回布尔值,第二个参数从0开始,最小有效位位置为0。
示例
检查第3位是否为1:
SELECT BITGET(X, 3) from Triangles;
BITOR (y, x)
参数
x
和y
:参数。描述
按位或操作,该方法返回long型值。
示例
计算两个字段的或操作:
SELECT BITOR(X, Y) from Triangles;
BITXOR (y, x)
参数
x
和y
:参数。描述
按位异或操作,该方法返回long型值。
示例
计算两个字段的异或操作:
SELECT BITXOR(X, Y) from Triangles;
MOD (y, x)
参数
x
和y
:参数。描述
取模操作,该方法返回long型值。
示例
计算两个字段的模:
SELECT MOD(X, Y) from Triangles;
CEIL (expression)
CEILING (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.ceil,该方法返回double型值。
示例
计算品类的向上取整价格:
SELECT item_id, CEILING(price) FROM Items;
DEGREES (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.toDegrees,该方法返回double型值。
示例
计算参数的角度值:
SELECT DEGREES(X) FROM Triangles;
EXP (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.exp,该方法返回double型值。
示例
计算exp:
SELECT EXP(X) FROM Triangles;
FLOOR (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.floor,该方法返回double型值。
示例
计算向下取整价格:
SELECT FLOOR(X) FROM Items;
LOG (expression)
LN (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.log,该方法返回double型值。
示例
计算自然对数:
SELECT LOG(X) from Items;
LOG10 (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.log10(Java5),该方法返回double型值。
示例
计算底数为10的对数:
SELECT LOG10(X) from Items;
RADIANS (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.toRadians,该方法返回double型值。
示例
计算参数的弧度值:
SELECT RADIANS(X) FROM Triangles;
SQRT (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.sqrt,该方法返回double型值。
示例
计算参数的平方根:
SELECT SQRT(X) FROM Items;
PI (expression)
参数
expression
:任意有效的数值表达式。描述
可以参照Java的Math.PI,该方法返回double型值。
示例
计算参数的圆周率:
SELECT PI(X) FROM Items;
POWER (X, Y)
参数
x
和y
:参数。描述
可以参照Java的Math.pow,该方法返回double型值。
示例
计算2的乘方:
SELECT pow(2, n) FROM Rows;
{RAND | RANDOM} ([expression])
参数
expression
:任意有效的数值表达式。描述
调用函数时没有参数会生成下一个伪随机数,带参数时会使用会话的随机数生成器,,该方法返回从0(包含)到1(不包含)的一个double型值。
示例
为每个玩家生成一个随机数:
SELECT random() FROM Play;
{RANDOM_UUID | UUID} ()
描述
使用122伪随机位,返回一个新的UUID。
示例
为每个玩家生成一个随机数:
SELECT UUID(),name FROM Player;
ROUND ( expression [, precision] )
参数
expression
:任意有效的数值表达式;precision
:小数点之后的位数,如果位数未指定,会四舍五入到最近的long型值。描述
四舍五入到指定的位数,如果未指定位数,则四舍五入到最近的long型值,该方法会返回一个数值(类型与输入相同)。
示例
将每个玩家的年龄转成整型值:
SELECT name, ROUND(age) FROM Player;
ROUNDMAGIC (expression)
参数
expression
:任意有效的数值表达式;描述
该方法会很好地对数值进行四舍五入,但是速度较慢。它对0附近的数值有特殊的处理,他只支持小于等于+/-1000000000000的数值。在内部,首先将值转成字符串,然后检查最后的4位,000x
会变成0000
,999x
会变成999999
,这些都是自动的,该方法返回double型值。
示例
对每个玩家的年龄进行四舍五入:
SELECT name, ROUNDMAGIC(AGE/3*3) FROM Player;
SECURE_RAND (int)
参数
int
:指定位数。描述
生成安全加密的随机数,该方法返回字节。
示例
返回真正的随机数:
SELECT name, SECURE_RAND(10) FROM Player;
SIGN (expression)
参数
expression
:任意有效的数值表达式。描述
如果表达式值小于0,则返回-1,等于0,则返回0,否则返回1。
示例
返回每个值的符号:
SELECT name, SIGN(VALUE) FROM Player;
ENCRYPT (algorithmString , keyBytes , dataBytes)
参数
algorithmString
:指定支持的AES算法;keyBytes
:指定密钥;dataBytes
:数据。描述
使用密钥对数据进行加密,支持的算法为AES,块大小为16个字节,该方法返回字节。
示例
对玩家的名字进行加密:
SELECT ENCRYPT('AES', '00', STRINGTOUTF8(Name)) FROM Player;
DECRYPT (algorithmString , keyBytes , dataBytes)
参数
algorithmString
:指定支持的AES算法;keyBytes
:指定密钥;dataBytes
:数据。描述
使用密钥对数据进行解密,支持的算法为AES,块大小为16个字节,该方法返回字节。
示例
对玩家的名字进行解密:
SELECT DECRYPT('AES', '00', '3fabb4de8f1ee2e97d7793bab2db1116'))) FROM Player;
{TRUNC | TRUNCATE} ({{numeric, digitsInt} | timestamp | date | timestampString})
描述
截断到一定的位数,该方法返回double型值。如果处理一个时间戳,会将截断到日期类型,如果处理一个日期,会将其截断到时间较少的一个日期,如果处理时间戳字符串,会将时间戳截断到一个日期类型。
示例
TRUNCATE(VALUE, 2);
COMPRESS(dataBytes [, algorithmString])
参数
dataBytes
:要压缩的数据;algorithmString
:压缩的算法。描述
使用指定的压缩算法压缩数据,支持的算法包括:LZF(快,但是压缩率较低,默认),DEFLATE(高压缩率)。压缩并不一定会减少大小,很小的对象以及冗余较少的对象会变得更大,该方法返回字节。
示例
COMPRESS(STRINGTOUTF8('Test'))
EXPAND(dataBytes)
参数
dataBytes
:要解开的数据。描述
解压缩通过COMPRESS函数压缩的数据,该方法返回字节。
示例
UTF8TOSTRING(EXPAND(COMPRESS(STRINGTOUTF8('Test'))))
ZERO()
描述
返回0,该函数用于无法使用数值字面量的场景。
示例
ZERO()
ASCII(string)
参数
string
:参数。描述
返回字符串中第一个字符的ASCII码值,该方法返回int型值。
示例
select ASCII(name) FROM Players;
BIT_LENGTH(string)
参数
string
:参数。描述
返回字符串的位数,该方法返回long型值,对于BLOB、CLOB、BYTES以及JAVA_OBJECT,需要使用精度,每个字符需要16位。
示例
select BIT_LENGTH(name) FROM Players;
{LENGTH | CHAR_LENGTH | CHARACTER_LENGTH} (string)
参数
string
:参数。描述
返回字符串的字符数,该方法返回long型值,对于BLOB、CLOB、BYTES以及JAVA_OBJECT,需要使用精度,每个字符需要16位。
示例
SELECT LENGTH(name) FROM Players;
OCTET_LENGTH(string)
参数
string
:参数。描述
返回字符串的字节数,该方法返回long型值,对于BLOB、CLOB、BYTES以及JAVA_OBJECT,需要使用精度,每个字符需要2个字节。
示例
SELECT OCTET_LENGTH(name) FROM Players;
{CHAR | CHR} (int)
参数
int
:参数。描述
返回ASCII码值对应的字符,该方法返回字符串。
示例
SELECT CHAR(65)||name FROM Players;
CONCAT(string, string [,...])
参数
string
:参数。描述
字符串连接,与操作符||
不同,NULL参数会被忽略,不会导致结果变为NULL,该方法返回字符串。
示例
SELECT CONCAT(NAME, '!') FROM Players;
CONCAT_WS(separatorString, string, string [,...])
参数
separatorString
:分隔符;string
:参数。描述
通过一个分隔符对字符串连接,与操作符||
不同,NULL参数会被忽略,不会导致结果变为NULL,该方法返回字符串。
示例
SELECT CONCAT_WS(',', NAME, '!') FROM Players;
DIFFERENCE(X, Y)
参数
X
,Y
:要比较的字符串。描述
返回两个字符串之间的差异,该方法返回整型值。
示例
计算玩家姓名的一致程度:
select DIFFERENCE(T1.NAME, T2.NAME) FROM players T1, players T2
WHERE T1.ID = 10 AND T2.ID = 11;
HEXTORAW(string)
参数
string
:要转换的十六进制字符串。描述
将十六进制字符串转换为普通字符串,4个十六进制字符转成一个普通字符。
示例
SELECT HEXTORAW(DATA) FROM Players;
RAWTOHEX(string)
参数
string
:要转换成十六进制的字符串。描述
将字符串转换为十六进制形式,4个十六进制字符对应一个普通字符,该方法返回字符串类型。
示例
SELECT RAWTOHEX(DATA) FROM Players;
INSTR(string, searchString, [, startInt])
参数
string
:任意字符串searchString
:要搜索的字符串startInt
:搜索的起始位置描述
返回要搜索的字符串在源字符串中的位置,如果指定了起始位置,之前的字符会被忽略,如果是负数,会返回最右侧的位置,如果未找到则返回0,注意该函数是区分大小写的。
示例
检查一个字符串是否包含@
字符:
SELECT INSTR(EMAIL,'@') FROM Players;
INSERT(originalString, startInt, lengthInt, addString)
参数
originalString
:原来的字符串;startInt
:起始位置;lengthInt
:长度;addString
:要添加的字符串。描述
在原字符串的指定位置插入额外的字符串,长度指的是在源字符串从指定开始位置开始删除的字符的长度,该方法返回字符串。
示例
SELECT INSERT(NAME, 1, 1, ' ') FROM Players;
{LOWER | LCASE} (string)
参数
string
:参数描述
将字符串转为小写。
示例
SELECT LOWER(NAME) FROM Players;
{UPPER | UCASE} (string)
参数
string
:参数描述
将字符串转为大写。
示例
下面的示例会将所有玩家的名字转为大写形式:
SELECT UPPER(last_name) "LastNameUpperCase" FROM Players;
LEFT(string, int)
参数
string
:参数;int
:字符数。描述
返回最左边的若干个字符。
示例
获取玩家名字的前三个字符:
SELECT LEFT(NAME, 3) FROM Players;
RIGHT(string, int)
参数
string
:参数;int
:字符数。描述
返回最右边的若干个字符。
示例
获取玩家名字的后三个字符:
SELECT RIGHT(NAME, 3) FROM Players;
LOCATE(searchString, string [, startInt])
参数
string
:任意字符串searchString
:要搜索的字符串startInt
:搜索的起始位置描述
返回要搜索的字符串在源字符串中的位置,如果指定了起始位置,之前的字符会被忽略,如果是负数,会返回最右侧的位置,如果未找到则返回0。
示例
检查一个字符串是否包含@
字符:
SELECT LOCATE('.', NAME) FROM Players;
POSITION(searchString, string)
描述
返回要搜索的字符串在源字符串中的位置,可以参照LOCATE
。
示例
SELECT POSITION('.', NAME) FROM Players;
LPAD(string, int[, paddingString])
描述
将字符串左补到指定的长度,如果长度比字符串长度小,后面会被截断,如果未指定补齐字符串,默认使用空格。
示例
SELECT LPAD(AMOUNT, 10, '*') FROM Players;
RPAD(string, int[, paddingString])
描述
将字符串右补到指定的长度,如果长度比字符串长度小,后面会被截断,如果未指定补齐字符串,默认使用空格。
示例
SELECT RPAD(TEXT, 10, '-') FROM Players;
LTRIM(string)
描述
删除字符串开头的空格。
示例
SELECT LTRIM(NAME) FROM Players;
RTRIM(string)
描述
删除字符串末尾的空格。
示例
SELECT RTRIM(NAME) FROM Players;
TRIM ([{LEADING | TRAILING | BOTH} [string] FROM] string)
描述
删除首尾的所有空格,通过一个字符串,也可以删除其他的字符。
示例
SELECT TRIM(BOTH '_' FROM NAME) FROM Players;
REGEXP_REPLACE(inputString, regexString, replacementString [, flagsString])
描述
替换每个匹配正则表达式的子串,具体可以参照Java的String.replaceAll()
方法,如果参数都为空(除了可选的flagsString参数),返回结果也为空。
flagsString参数可以为i
、c
、n
、m
,其他的字符会出现异常,该参数可以同时使用多个标志位(比如im
),后面的标志会覆盖前面的,比如ic
等价于c
。
i
:启用区分大小写匹配(Pattern.CASE_INSENSITIVE);c
:禁用区分大小写匹配(Pattern.CASE_INSENSITIVE);n
:允许句号.
匹配换行符(Pattern.DOTALL);m
:启用多行模式(Pattern.MULTILINE)。示例
SELECT REGEXP_REPLACE(name, 'w+', 'W', 'i') FROM Players;
REGEXP_LIKE(inputString, regexString [, flagsString])
描述
用正则表达式进行字符串匹配,具体可以参照Java的Matcher.find()
方法,如果参数都为空(除了可选的flagsString参数),返回结果也为空。
flagsString参数可以为i
、c
、n
、m
,其他的字符会出现异常,该参数可以同时使用多个标志位(比如im
),后面的标志会覆盖前面的,比如ic
等价于c
。
i
:启用区分大小写匹配(Pattern.CASE_INSENSITIVE);c
:禁用区分大小写匹配(Pattern.CASE_INSENSITIVE);n
:允许句号.
匹配换行符(Pattern.DOTALL);m
:启用多行模式(Pattern.MULTILINE)。示例
SELECT REGEXP_LIKE(name, '[A-Z ]*', 'i') FROM Players;
REPEAT(string, int)
描述
返回重复若干次数的字符串。
示例
SELECT REPEAT(NAME || ' ', 10) FROM Players;
REPLACE(string, searchString [, replacementString])
描述
将文本中出现的所有搜索字符串替换为另一个字符串,如果未指定替换字符串,索索字符串会从原字符串中删除,如果参数都为空,则返回值为空。
示例
SELECT REPLACE(NAME, ' ') FROM Players;
SOUNDEX(string)
描述
返回表示字符串声音的四个字符码,具体可以看这里,该方法返回一个字符串。
示例
SELECT SOUNDEX(NAME) FROM Players;
SPACE(int)
描述
返回由若干个空格组成的字符串。
示例
SELECT name, SPACE(80) FROM Players;
STRINGDECODE(string)
描述
使用Java的字符串编码格式对已编码字符串进行转换,特殊字符为\b
、\t
、\n
、\f
、\r
、\"
、\
、\<octal>
, \u<unicode>
,该方法返回一个字符串。
示例
STRINGENCODE(STRINGDECODE('Lines 1\nLine 2'));
STRINGENCODE(string)
描述
使用Java的字符串编码格式对字符串进行编码,特殊字符为\b
、\t
、\n
、\f
、\r
、\"
、\
、\<octal>
, \u<unicode>
,该方法返回一个字符串。
示例
STRINGENCODE(STRINGDECODE('Lines 1\nLine 2'))
STRINGTOUTF8(string)
描述
将字符串转换成UTF-8格式的字符数组,该方法返回字节数组。
示例
SELECT UTF8TOSTRING(STRINGTOUTF8(name)) FROM Players;
{SUBSTRING | SUBSTR} (string, startInt [, lengthInt])
描述
返回一个字符串从指定位置开始的一个子串,如果开始位置为负数,那么开始位置会相对于字符串的末尾。长度是可选的。SUBSTRING(string [FROM start] [FOR length])
也是支持的。
示例
SELECT SUBSTR(name, 2, 5) FROM Players;
UTF8TOSTRING(bytes)
描述
将UTF-8编码的字符串解码成对应的字符串。
示例
SELECT UTF8TOSTRING(STRINGTOUTF8(name)) FROM Players;
XMLATTR(nameString, valueString)
描述
以name=value的形式创建一个XML属性元素,value是以XML文本的形式进行编码,该方法返回一个字符串。
示例
XMLNODE('a', XMLATTR('href', 'http://h2database.com'))
XMLNODE(elementString [, attributesString [, contentString [, indentBoolean]]])
描述
创建一个XML节点元素,如果属性字符串为空或者null,那么意味着这个节点没有属性,如果内容字符串为空或者null,那么这个节点是没有内容的,如果内容中包含换行,那么默认会被缩进,该方法返回一个字符串。
示例
XMLNODE('a', XMLATTR('href', 'http://h2database.com'), 'H2')
XMLCOMMENT(commentString)
描述
创建一个XML注释,两个减号(--
)会被转换为- -
。该方法返回一个字符串。
示例
XMLCOMMENT('Test')
XMLCDATA(valueString)
描述
创建一个XML CDATA元素,如果值中包含]]>
,会创建一个XML文本元素作为替代,该方法返回一个字符串。
示例
XMLCDATA('data')
XMLSTARTDOC()
描述
返回一个XML声明,结果为<?xml version=1.0?>
。
示例
XMLSTARTDOC()
XMLTEXT(valueString [, escapeNewlineBoolean])
描述
创建一个XML文本元素,如果启用,换行符会被转换为一个XML实体(&#
),该方法返回一个字符串。
示例
XMLSTARTDOC()
TO_CHAR(value [, formatString[, nlsParamString]])
描述
该函数会格式化一个时间戳、数值或者文本。
示例
TO_CHAR(TIMESTAMP '2010-01-01 00:00:00', 'DD MON, YYYY')
TRANSLATE(value , searchString, replacementString]])
描述
该函数会用另一组字符替换字符串中一组字符。
示例
TRANSLATE('Hello world', 'eo', 'EO')
{CURRENT_DATE [()] | CURDATE() | SYSDATE | TODAY}
描述
返回当前日期,该方法在一个事务中会返回同一个值。
示例
CURRENT_DATE()
{CURRENT_TIME [ () ] | CURTIME()}
描述
返回当前时间,该方法在一个事务中会返回同一个值。
示例
CURRENT_TIME()
{CURRENT_TIMESTAMP [([int])] | NOW([int])}
描述
返回当前时间戳,注意纳秒的精度参数是可选的,该方法在一个事务中会返回同一个值。
示例
CURRENT_TIMESTAMP()
{DATEADD| TIMESTAMPADD} (unitString, addIntLong, timestamp)
描述
为时间戳增加若干个单位。第一个字符串表示单位,使用负数可以做减法,如果操作毫秒addIntLong可以是一个long型值,否则限定为整型值。支持的单位与EXTRACT
函数一致。DATEADD
方法返回一个时间戳,TIMESTAMPADD
方法返回一个long型值。
示例
DATEADD('MONTH', 1, DATE '2001-01-31')
{DATEDIFF | TIMESTAMPDIFF} (unitString, aTimestamp, bTimestamp)
描述
返回两个时间戳根据特定单位计算的差值,该方法返回long型值,第一个字符串表示单位,支持的单位与EXTRACT
函数一致。
示例
DATEDIFF('YEAR', T1.CREATED, T2.CREATED)
DAYNAME(date)
描述
返回日期的名字(英语)。
示例
DAYNAME(CREATED)
DAY_OF_MONTH(date)
描述
返回月中的日期数(1-31)。
示例
DAY_OF_MONTH(CREATED)
DAY_OF_WEEK(date)
描述
返回周中的天数(1表示周日)。
示例
DAY_OF_WEEK(CREATED)
DAY_OF_YEAR(date)
描述
返回年中的天数(1-366)。
示例
DAY_OF_YEAR(CREATED)
EXTRACT ({YEAR | YY | MONTH | MM | WEEK | DAY | DD | DAY_OF_YEAR
| DOY | HOUR | HH | MINUTE | MI | SECOND | SS | MILLISECOND | MS}
FROM timestamp)
描述
返回时间戳中的特定值,该方法返回整型值。
示例
EXTRACT(SECOND FROM CURRENT_TIMESTAMP)
FORMATDATETIME (timestamp, formatString [,localeString [,timeZoneString]])
描述
将日期、时间或者时间戳格式化成字符串,最常用的格式符为:y:年,M:月,d:日期,H:小时,m:分钟,s:秒,要了解详细信息,可以看Java的java.text.SimpleDateFormat,该方法返回字符串。
示例
FORMATDATETIME(TIMESTAMP '2001-02-03 04:05:06', 'EEE, d MMM yyyy HH:mm:ss z', 'en', 'GMT')
HOUR(timestamp)
描述
返回时间戳中的小时数(0-23)。
示例
HOUR(CREATED)
MINUTE(timestamp)
描述
返回时间戳中的分钟数(0-59)。
示例
MINUTE(CREATED)
MONTH(timestamp)
描述
返回时间戳中的月数(1-12)。
示例
MONTH(CREATED)
MONTHNAME(date)
描述
返回月的名字(英语)。
示例
MONTHNAME(CREATED)
PARSEDATETIME(string, formatString [, localeString [, timeZoneString]])
描述
将字符串解析成时间戳类型,最常用的格式符为:y:年,M:月,d:日期,H:小时,m:分钟,s:秒,要了解详细信息,可以看Java的java.text.SimpleDateFormat。
示例
PARSEDATETIME('Sat, 3 Feb 2001 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'en', 'GMT')
QUARTER(timestamp)
描述
返回时间戳中的季度数(1-4)。
示例
QUARTER(CREATED)
SECOND(timestamp)
描述
返回时间戳中的秒数(0-59)。
示例
SECOND(CREATED)
WEEK(timestamp)
描述
返回时间戳中的周数(1-53),该方法使用系统当前的区域设置。
示例
WEEK(CREATED)
YEAR(timestamp)
描述
返回时间戳中的年数。
示例
YEAR(CREATED)
{COALESCE | NVL } (aValue, bValue [,...])
描述
返回第一个非空值。
示例
COALESCE(A, B, C)
DECODE(value, whenValue, thenValue [,...])
描述
返回第一个匹配的值,NULL会匹配NULL,如果没有匹配的,那么会返回NULL或者最后一个参数(参数个数为偶数)。
示例
DECODE(RAND()>0.5, 0, 'Red', 1, 'Black')
GREATEST(aValue, bValue [,...])
描述
返回非空的最大值,如果所有值都为空则返回空。
示例
GREATEST(1, 2, 3)
IFNULL(aValue, bValue)
描述
如果aValue
非空则返回aValue
,否则返回bValue
。
示例
IFNULL(NULL, '')
LEAST(aValue, bValue [,...])
描述
返回非空的最小值,如果所有值都为空则返回空。
示例
LEAST(1, 2, 3)
NULLIF(aValue, bValue)
描述
如果aValue
等于bValue
,则返回NULL,否则返回aValue
。
示例
NULLIF(A, B)
NVL2(testValue, aValue, bValue)
描述
如果testValue
为空,则返回bValue
,否则返回aValue
。
示例
NVL2(X, 'not null', 'null')
本章节中列出了Ignite中支持的SQL数据类型列表,比如string、numeric以及date/time类型。
对于每个SQL类型来说,都会被映射到Ignite原生支持的编程语言或者驱动指定的类型上。
可选值:TRUE
和FALSE
。
映射:
java.lang.Boolean
bool
bool
SQL_BIT
可选值:[-2147483648
, 2147483647
]。
映射:
java.lang.Integer
int
int32_t
SQL_INTEGER
可选值:[-128
, 127
]。
映射:
java.lang.Byte
sbyte
int8_t
SQL_TINYINT
可选值:[-32768
, 32767
]。
映射:
java.lang.Short
short
int16_t
SQL_SMALLINT
可选值:[-9223372036854775808
, 9223372036854775807
]。
映射:
java.lang.Long
long
int64_t
SQL_BIGINT
可选值:带有固定精度的数值类型。
映射:
java.math.BigDecimal
decimal
ignite::Decimal
SQL_DECIMAL
可选值:浮点数。
映射:
java.lang.Double
double
double
SQL_DOUBLE
可选值:单精度浮点数。
映射:
java.lang.Float
float
float
SQL_FLOAT
可选值:时间数据类型,格式为hh:mm:ss
。
映射:
java.sql.Time
N/A
ignite::Time
SQL_TYPE_TIME
可选值:日期数据类型,格式为yyyy-MM-dd
。
映射:
java.sql.Date
N/A
ignite::Date
SQL_TYPE_DATE
可选值:时间戳数据类型,格式为yyyy-MM-dd hh:mm:ss[.nnnnnnnnn]
。
映射:
java.sql.Timestamp
System.DateTime
ignite::Timestamp
SQL_TYPE_TIMESTAMP
可选值:Unicode字符串。
映射:
java.lang.String
string
std::string
SQL_VARCHAR
可选值:Unicode字符串。支持这个类型是为了与旧的应用或者其他数据库进行兼容。
映射:
java.lang.String
string
std::string
SQL_CHAR
可选值:通用唯一标识符,长度128位。
映射:
java.util.UUID
System.Guid
ignite::Guid
SQL_GUID
可选值:表示一个字节数组。
映射:
byte[]
byte[]
int8_t[]
SQL_BINARY
可选值:表示一个对象数组。
映射:
java.lang.Object[]
object[]
N/A
N/A
可选值:空间几何类型,基于com.vividsolutions.jts
库,通常以文本格式表示。
映射:
com.vividsolutions.jts
包的类型N/A
N/A
N/A