赞
踩
声明:本文章仅为个人学习笔记,方便个人学习,不用做任何商业用途,转载请说明出处。参考 星环Inceptor使用手册
系统架构:
功能:提供完整的SQL支持,支持主流的SQL模块化扩展,兼容通用开发框架和工具,支持事务特性保证数据的准确性,允许多租户的隔离与管理,且能够利用内存或者SSD来加速数据的读取,支持与关系型数据库实时对接并做统计分析,辅以高性能的SQL执行引擎,为企业提供高性价比和高度可扩展的解决方案
用途:用于数据仓库和交互式分析
Inceptor中的对象:数据库(database),表(table),视图(view)和函数(function)
Inceptor中的数据类型:TINYINT,INT,FLOAT,DOUBLE,DECIMAL(m,n),BOOLEAN,STRING,CHAR,VARCHAR,DATE,TIMESTAMP,复杂数据类型(ARRAY,MAP,STRUCT)等
DROP TABLE IF EXISTS array_test; CREATE TABLE array_test( name STRING, person_id array<INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY ':'; LOAD DATA LOCAL INPATH '/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/test.txt' INTO TABLE array_test;
SELECT * FROM array_test;
SELECT person_id[1] AS person_1 FROM array_test;
DROP TABLE IF EXISTS map_test; CREATE TABLE map_test( id STRING, perf map<STRING, INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':'; LOAD DATA LOCAL INPATH '/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/test_map.txt' INTO TABLE map_test;
SELECT * FROM map_test;
SELECT perf['job'] AS job FROM map_test;
DROP TABLE IF EXISTS person; CREATE TABLE person( id INT, info struct<name:STRING, age:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY ':'; LOAD DATA LOCAL INPATH "/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/person.txt" INTO TABLE person;
SELECT * FROM person;
SELECT info.name AS info_name FROM person;
如何操作Inceptor中的对象:nceptor SQL、Inceptor PL/SQL以及Inceptor SQL PL
Inceptor的两种执行模式:Local和Cluster。切换方式:SET ngmr.exec.mode = local/cluster;
Inceptor中数据库对象的元数据保存位置:在Inceptor Metastore中
数据库对象内的数据存放位置:内存或者SSD中(Holodesk表)、HDFS中(TEXT表/ORC表/CSV表)
数据库:
beeline -u "jdbc:hive2://<server_ip/hostname>:10000/<database>"
hdfs://<nameservice>/<id>/user/hive/warehouse/<database_name>.db
表:
数据的对象。逻辑上,Inceptor的表用行(row)和列(column)来组织存储在其中的数据
表的分类:(Inceptor中的表可以按以下不同维度划分)
以下是对各种表的说明:
表分类 | 创建 | Inceptor是否有所有权 | drop删除 | 其他 |
---|---|---|---|---|
外表 | CREATE EXTERNAL TABLE ,需指定路径 | 否 | 只删除表在metastore中的元数据 | |
托管表(内表) | CREATE TABLE ,默认路径 | 是 | 将表中数据全部删除 |
表分类 | 存储格式 | 说明 | 其他 |
---|---|---|---|
TEXT表 | txt文本格式的表 | 不支持事务,数据量大时性能低,通常用于将文本文件中的数据导入Inceptor中。导入方式:建外部TEXT表,让该表指向HDFS上的一个目录,Inceptor会将目录下文件中的数据都导入该表 | 针对不同的使用场景,用户可以将其中的数据放入ORC表或Holodesk表中 |
CSV表 | csv格式的表 | 记录间以换行符分隔,每条记录由字段组成,字段间的分隔符是逗号或制表符。所有记录都有完全相同的字段序列。和TEXT表相似,CSV表常用于向Inceptor中导入原始数据 | 同TEXT表 |
ORC表 | orc格式的表 | 分为ORC事务表和非事务表,ORC事务表支持事务处理和更多增删改语法(INSERT VALUES/UPDATE/DELETE/MERGE);ORC非事务表则主要用来做统计分析 | 需要对表进行事务处理,应该选择使用ORC事务表 |
Holodesk表 | 内存或SSD | Holodesk表上进行大批量复杂查询能达到极高的性能 | 数据量特别大,查询非常复杂,选择使用Holodesk表 |
表分类 | 创建 | 说明 |
---|---|---|
分区表 | 使用了PARTITIONED BY | 分区表下的数据按分区键的值(或值的范围)放在HDFS下的不同目录中 |
非分区表 | 不使用PARTITIONED BY | 续:可以有效减少查询时扫描的数据量,提升查询效率 |
表分类 | 创建 | 说明 |
---|---|---|
分桶表 | 使用了CLUSTERED BY … INTO … BUCKETS | 分桶表下的数据按分桶键的哈希值放在HDFS下的不同目录中 |
非分桶表 | 不使用CLUSTERED BY … INTO … BUCKETS | 续:可以有效减少查询时扫描的数据量,提升查询效率 |
视图:
视图的创建:CREATE VIEW … AS SELECT
Inceptor中的视图是 非实物化(unmaterialized) 的,也就是说视图中没有实际的数据,每次对视图进行查询时,建视图所用的查询语句会被再次执行一次。所以,我们也可以将视图理解为 查询的封装。视图不能和表重名
SELECT DISTINCT name FROM (SELECT name FROM user_info JOIN trans_info ON user_info.acc_num = trans_info.acc_num);
DROP VIEW IF EXISTS user_join_trans; CREATE VIEW user_join_trans AS SELECT name FROM user_info JOIN trans_info ON user_info.acc_num = trans_info.acc_num; SELECT DISTINCT name FROM user_join_trans;
DROP VIEW IF EXISTS user_info_secure; CREATE VIEW user_info_secure AS SELECT name, acc_num, reg_date, acc_level FROM user_info;
GRANT SELECT ON user_info_secure TO USER alice, USER bob;
函数:
分类:内置函数、用户自定义函数
SELECT A < B AS result FROM system.dual LIMIT 1;
A和B可以为任何基本类型,如果A小于B,则返回TRUE,否则返回FALSE。如果A或B值为“NULL”,结果返回“NULL”SELECT ~A AS result FROM system.dual LIMIT 1;
A可以为TinyInt,Int,BitInt类型。对表达式 A 执行按位“非”(取反)SELECT A==B and true AS result FROM system.dual LIMIT 1;
A和B必须是Boolean类型,返回二者的逻辑与的结果。即A和B同时正确时,返回TRUE,否则FALSE。如果A或B值为NULL,返回NULLSELECT round(1.4523,3) AS result FROM system.dual LIMIT 1;
,结果:(result:1.452)。未指定d时,四舍五入到小数点后一位;若指定了d,则四舍五入到小数点后第d位SELECT CAST('38' AS INT) AS result FROM system.dual LIMIT 1;
expr 代表被转换的对象,TYPE 代表指定目标类型SELECT EXTRACT(YEAR FROM '2015-01-15') AS result FROM system.dual LIMIT 1;
结果:(result:2015)。参数date应该是datetime value,或者可以隐性转换成DATE类型SELECT IF(true,'trans','age') AS result FROM system.dual LIMIT 1;
。如果booleantestCondition为true,返回valueTrue,否则返回TvalueFalseOrNullSELECT concat(1,2,3) AS result FROM system.dual LIMIT 1;
结果:(result:123)SELECT xmlforest(name, age) a FROM student_age ORDER BY a LIMIT 1;
结果:(a:< name >Han Meimei < /name> < age >20</ age>)Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。