《SQL训练营——基于Presto的华为开源组建openLookeng的SQL语法》
作者:互联网
《基于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