ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

《SQL训练营——基于Presto的华为开源组建openLookeng的SQL语法》

2020-12-16 00:01:38  阅读:529  来源: 互联网

标签:openLookeng Presto TIMESTAMP 预留 SQL TIME 类型 gitee


##

《基于Presto的华为开源查询组件openLookeng的SQL语法》

看这里—>>>学习官网

0.简介:

openLooKeng是一款开源的高性能数据虚拟化引擎,提供统一SQL接口,为大数据用户提供极简的数据分析体验,让用户像使用“数据库”一样使用“大数据”。因此,openLooKeng极致性能是十分重要的一个维度,也是openLooKeng社区一直以来所追求的目标。

1.优点:

极简数据分析体验

统一的SQL接口访问多种数据源,支持跨数据中心、跨云数据源分析

灵活、易扩展

可以通过增加Connector来增加数据源,采集变连接、数据零搬迁

高可靠

全 Active/Active 架构,业务零中断

2. 缺点:

支持的开源数据库接口语法开发不完备,缺少支持,功能尚待开发

3.社区贡献:

openLooKeng喊您登记您的组织信息喽
Fred Li | December 8, 2020 | 社区 度量

简介
首先感谢贡献者在openLooKeng社区做成贡献。

为了了解各位贡献者所在的公司/学校/组织的整体贡献情况,Infrastructure小组开发了一个度量功能,需要各位贡献者填写自己所在的公司信息。

本文是指导贡献者如何填写个人的组织信息。

操作步骤
Fork https://gitee.com/openlookeng/community to your Gitee.

1.on your local PC

git clone [https://gitee.com/YOUR_ID/community.openlookeng](https://gitee.com/YOUR_ID/community.openlookeng)

cd YOUR_FOLDER

git checkout -b NEW_BRANCH_NAME

vi ./om-data/data.yaml

Search your Gitee ID and then edit your profile. Then save it and quit.

git add. 

git commit

git push --set-upstream orgin NEW_BRANCH_NAME

3.Creat a PR on your Gitee.

4.Wait for PR reviewed and merged.

4.数据结构介绍

gitee_id: gitee login id
github_id: generalfuzz

companies:
  - company_name: Huawei
    organization_name: openlookeng
    end_date: '2015-10-31'
user_name: test
emails:
  - generalftes@gmail.com
  - g.reseasdtes@gmail.com
gitee_id(必选):gitee的login账号名,比如https://gitee.com/zhongjun2 中的zhongjun2

github_id(可选):github的login账号名

company_name(必选): 公司名称,如果不填将会被列入独立组织(independent)

organization_name(可选): 公司下面的组织名称

end_date(可选):在这个公司的结束时间,如果不填表示当前一直在该公司,格式:YYYY-MM-DD

user_name(可选): 显示在统计看板上面的名称,如果不填展示gitee账号的名称,github_id、gitee_id等统一对外显示成user_name

emails(可选): 使用的email信息,比如订阅过maillist的email,注册gitee的email,注册github的email

场景,如果您分时段在不同的公司,则这样填写companies

companies:
  - company_name: CompanyA
    organization_name: 
    end_date: '2020-10-31'
  - company_name: CompanyB
    organization_name: 
    end_date: '2099-12-31'

如果需要,可以访问https://gitee.com/openlookeng/community/blob/master/om-data/readme_cn.md获取更详细的信息。

5.动态:

开源数据虚拟化引擎openLooKeng助力CCF大数据与计算智能大赛:https://openlookeng.io/zh-cn/news/2020-11-11-ccf-bdci.html

6.SQL语言特性

数据类型
openLooKeng有一组内置的数据类型,如下所述。可能通过插件提供更多的类型。

注意

连接器不需要支持所有的数据类型。连接器支持的数据类型,请参见连接器文档。

布尔类型 BOOLEAN 捕获布尔值true和false。

整数类型 TINYINT 一个8比特带符号的2补码整数,最小值为-27,最大值为27 - 1。

SMALLINT 一个16比特带符号的2补码整数,最小值为-215,最大值为215 - 1。

INTEGER 一个32比特带符号的2补码整数,最小值为-231,最大值为231 - 1。该类型也被称为INT。

BIGINT 一个64比特带符号的2补码整数,最小值为-263,最大值为263 - 1。

浮点类型 REAL 一种不精确的可变精度的32比特的数据类型,实现IEEE 754标准定义的二进制浮点运算。

此类型也被称为FLOAT。

例如: REAL ‘10.3’, REAL ‘10.3e0’, REAL ‘1.03e1’

DOUBLE 一种不精确的可变精度的64比特的数据类型,它实现了IEEE 754标准定义的二进制浮点运算。

该类型也被称为DOUBLE PRECISION。

固定精度类型 DECIMAL 固定精度的十进制数。精度最高可达38位,但性能最高可达18位。

该类型也被称为NUMERIC和DEC。

此数据类型有两个参数:

precision - 表示总位数。 scale - 小数位数。Scale可选,默认为0。 类型定义示例:

DECIMAL(10,3),
> DECIMAL(20)

文本示例:DECIMAL ‘10.3’, DECIMAL ‘1234567890’, 1.1

注意

由于兼容性原因,没有显式类型说明符的十进制文字(例如
1.2)默认作为DOUBLE类型的值处理。但在以后的版本中也可能会有变化。此行为受以下控制:

系统属性: parse-decimal-literals-as-double 会话属性:
parse_decimal_literals_as_double 字符串类型 VARCHAR 可变长度字符数据,最大长度可选。

该类型也被称为STRING。请注意,STRING定义的是一个无限长的字符数据,您不能指定长度,否则它就成为VARCHAR(length)类型了。

类型定义示例:varchar, varchar(20), string

SQL语句支持简单文字和Unicode使用:

文本字符串: ‘Hello winter !’ 含默认转义字符的Unicode字符串:U&‘Hello winter \2603 !’
含自定义转义字符的Unicode字符串:U&'Hello winter #2603 !'UESCAPE ‘#’
Unicode字符串以U&为前缀,任何4位Unicode字符前都需要转义符。 在上例中,\2603和#2603代表雪人符号。
对于6位的Unicode长编码,需要在代码前使用一个加号。例如,您需要在笑脸表情前使用+01F600。

CHAR
固定长度字符。对于不指定长度的CHAR类型,默认长度为1。一个CHAR(x)包含x个字符。例如,将dog转换为CHAR(7)会增加4个隐式尾部空格。在比较CHAR值时包括前导和尾部空格。因此,两个不同长度的字符值(CHAR(x)和CHAR(y),其中x
!= y)永远不会相等。

类型定义示例:char, char(20)

VARBINARY 可变长度二进制数据。

注意

目前仍不支持带长度的二进制字符:varbinary(n)

JSON JSON数值类型,可以是JSON对象、JSON数组、JSON数字、JSON字符串、true、false或null。

日期和时间类型 另见旧时间戳和新时间戳。

DATE 日历日期(年、月、日)

例如: DATE ‘2001-08-22’

TIME 不带时区的时间(时、分、秒、毫秒)此类型的值将在会话时区中解析和呈现。

例如: TIME ‘01:02:03.456’

TIME WITH TIME ZONE 带时区的时间(时、分、秒、毫秒)。此类型的值将使用该值中的时区进行呈现。

例如: TIME ‘01:02:03.456 America/Los_Angeles’

TIMESTAMP 包含日期和时间的即时时间,不包含时区。此类型的值将在会话时区中解析和呈现。

例如: TIMESTAMP ‘2001-08-22 03:04:05.321’

TIMESTAMP WITH TIME ZONE 即时时间,包括日期、时间和时区。此类型的值将使用该值中的时区进行呈现。

例如: TIMESTAMP ‘2001-08-22 03:04:05.321 America/Los_Angeles’

INTERVAL YEAR TO MONTH 年和月的跨度。

例如: INTERVAL ‘3’ MONTH

INTERVAL DAY TO SECOND 天数、小时、分钟、秒和毫秒的跨度。

例如: INTERVAL ‘2’ DAY

结构类型 ARRAY 指定组件类型的数组。

例如: ARRAY[1, 2, 3]

MAP 指定组件类型之间的映射。

例如: MAP(ARRAY[‘foo’, ‘bar’], ARRAY[1, 2])

ROW 由混合类型的字段组成的结构。字段可以是任何SQL类型。

行字段默认不命名,但可以指定名称。

例如: CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE))

已命名的行字段通过字段引用运算符.访问。

例如: CAST(ROW(1, 2.0) AS ROW(x BIGINT, y DOUBLE)).x

已命名或未命名的行字段通过下标运算符[]按位置访问。位置从1开始且必须是常量。

例如: ROW(1, 2.0)[1]

网络地址 IPADDRESS 可表示IPv4地址或IPv6地址。对内为纯IPv6地址。可通过IPv4-mapped IPv6 address
range (RFC
4291#section-2.5.5.2)来支持对IPv4地址的处理。在创建IPADDRESS时,IPv4地址将映射到指定的范围。格式化IPADDRESS时,在映射范围内的任何地址都会被格式化为IPv4地址。其他地址将使用RFC
5929中定义的规范格式格式化为IPv6地址。

例如: IPADDRESS ‘10.0.0.1’, IPADDRESS ‘2001:db8::1’

UUID UUID 此类型表示UUID(通用唯一标识符),也称为GUID(全局唯一标识符),使用RFC 4122中定义的格式。

例如: UUID ‘12151fd2-7586-11e9-8f9e-2a86e4085a59’

HyperLogLog 计算近似的非重复计数比使用HyperLogLog数据草图进行精确计数成本低得多。 请参见 HyperLogLog
函数。

HyperLogLog HyperLogLog 草图可高效地计算
approx_distinct()。它开始时是稀疏表示,当效率提高时,就切换到密集表示。

P4HyperLogLog P4HyperLogLog草图类似于hyperloglog_type,但它从始至终都采用密集表示形式。

分位点摘要 QDigest
分位点摘要(qdigest)是一种摘要结构,它捕捉指定输入集的数据的近似分布,并且可以通过查询从分布中检索近似分位点值。
qdigest的准确程度是可调的,使更精确的结果会占用更多空间。

对于在某一分位数处属于什么值的查询,可用qdigest提供近似回答。qdigest的一个有用的特性是它们是可加的,这意味着它们可以合并在一起而不损失精度。

当approx_percentile的部分结果可以重用时,qdigest就会发挥更大作用。例如,人们可能对在一周内每天读取的第99百分位数值感兴趣。
这种情况下,与其使用approx_percentile计算过去一周的数据,不如使用qdigest。qdigest可以每天存储,并快速合并以检索第99个百分位值。

关键字 SQL:2016 SQL-92

ALTER	预留	预留
AND	预留	预留
AS	预留	预留
BETWEEN	预留	预留
BY	预留	预留
CASE	预留	预留
CACHE		
CAST	预留	预留
CONSTRAINT	预留	预留
CREATE	预留	预留
CROSS	预留	预留
CUBE	预留	
CURRENT_DATE	预留	预留
CURRENT_PATH	预留	
CURRENT_ROLE	预留	预留
CURRENT_TIME	预留	预留
CURRENT_TIMESTAMP	预留	预留
CURRENT_USER	预留	
DEALLOCATE	预留	预留
DELETE	预留	预留
DESCRIBE	预留	预留
DISTINCT	预留	预留
DROP	预留	预留
ELSE	预留	预留
END	预留	预留
ESCAPE	预留	预留
EXCEPT	预留	预留
EXECUTE	预留	预留
EXISTS	预留	预留
EXTRACT	预留	预留
FALSE	预留	预留
FOR	预留	预留
FROM	预留	预留
FULL	预留	预留
GROUP	预留	预留
GROUPING	预留	
HAVING	预留	预留
IN	预留	预留
INNER	预留	预留
INSERT	预留	预留
INTERSECT	预留	预留
INTO	预留	预留
IS	预留	预留
JOIN	预留	预留
LEFT	预留	预留
LIKE	预留	预留
LOCALTIME	预留	
LOCALTIMESTAMP	预留	
NATURAL	预留	预留
NORMALIZE	预留	
NOT	预留	预留
NULL	预留	预留
ON	预留	预留
OR	预留	预留
ORDER	预留	预留
OUTER	预留	预留
OVERWRITE	预留	
PREPARE	预留	预留
RECURSIVE	预留	
RIGHT	预留	预留
ROLLUP	预留	
SELECT	预留	预留
TABLE	预留	预留
THEN	预留	预留
TRUE	预留	预留
UESCAPE	预留	
UNION	预留	预留
UNNEST	预留	
UPDATE	预留	
USING	预留	预留
VALUES	预留	预留
VACUUM		
WHEN	预留	预留
WHERE	预留	预留
WITH	预留	预留

旧时间戳和新时间戳

新的TIMESTAMP和TIME语义使类型与SQL标准保持一致。详见以下章节。

注意

新的TIMESTAMP语义仍在试验中。建议保持原有TIMESTAMP语义为启用状态。您可以通过全局配置或基于每个会话配置新的语义来验证新语义。在新版本中,可能会废弃旧版的语义。

配置
可以使用deprecated.legacy-timestamp配置属性启用旧语义。将其设置为true(默认)将启用旧语义,而将其设置为false将启用新语义。

此外,可以通过legacy_timestamp会话属性实现基于会话的语义启用或禁用。

TIMESTAMP语义变化
以前,TIMESTAMP类型描述的是openLooKeng会话时区中的时间实例。现在,openLooKeng将TIMESTAMP值视为一组表示实际时间的字段:

YEAR OF ERA
MONTH OF YEAR
DAY OF MONTH
HOUR OF DAY
MINUTE OF HOUR
SECOND OF MINUTE - as DECIMAL(5, 3)
因此,除非明确需要某个时区,例如在转换为TIMESTAMP WITH TIME ZONE 或 TIME WITH TIME ZONE时,TIMESTAMP值不会以任何方式与会话时区链接。在这些情况下,如SQL标准中所约定的,将会使用会话时区的时区偏移量。

TIME语义变化
TIME类型变得与TIMESTAMP类型相似。

TIME with TIME ZONE语义变化
由于兼容性要求,TIME WITH TIME ZONE还不可能与SQL标准完全对齐。因此,在计算TIME WITH TIME ZONE的时区偏移量时,openLooKeng使用会话的开始日期和时间。

在使用TIME WITH TIME ZONE的查询中可以看到,查询的时区已经发生了时区策略更改或使用了夏令时。例如,会话开始时间为2017-03-01:

查询: SELECT TIME '10:00:00 Asia/Kathmandu' AT TIME ZONE 'UTC'
旧的查询结果: 04:30:00.000 UTC
新的查询结果: 04:15:00.000 UTC

标签:openLookeng,Presto,TIMESTAMP,预留,SQL,TIME,类型,gitee
来源: https://blog.csdn.net/weixin_45091011/article/details/111243139

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有