声明:本文章仅为个人学习笔记,方便个人学习,不用做任何商业用途,转载请说明出处。参考 星环Inceptor使用手册

1 基本介绍

系统架构

功能:提供完整的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)等

  • ARRAY
    创建数据表array_test,将person_id参数定义为 ARRAY < INT> 数据类型(即一组由 INT 数据组成的数列),然后将已存在的文本text.txt导入至array_test中。text.txt中的数据如下:
    创建表array_test的语句为:(执行LOAD DATA之前请注意如何访问本地文件)
    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;
    查看array_test全表,并检索其中一列的信息。结果如下:
    SELECT * FROM array_test;
    name person_id
    034 [1,2,3,4]
    035 [5,6]
    036 [7,8,9,10]
    SELECT person_id[1] AS person_1 FROM array_test;
    person_1
    2
    6
    8
  • MAP
    创建数据表map_test,将perf字段定义为 MAP<string,int> 数据类型(键为 STRING 类型,值为 INT 类型),然后将已存在的文本test_map.txt导入至map_test中。test_map.txt中的数据为:

    创建表map_test的语句为:(执行LOAD DATA之前请注意如何访问本地文件)
    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;
    查看map_test全表,并检索perf中“job”和“Person”的信息。结果如下:
    SELECT * FROM map_test;
    id perf
    1 {“job”:80,“team”:60,“person”:70}
    2 {“job”:60,“team”:80}
    3 {“job”:90,“team”:70,“person”:100}
    SELECT perf['job'] AS job FROM map_test;
    job
    80
    60
    90
  • STRUCT
    创建数据表person,将info定义为 STRUCT< name:STRING,age:INT> 数据类型(由name和age构成的字段,其中name为 STRING 类型,age为 INT 类型),然后将已存在的文本person.txt导入至person表中。person.txt中的数据为:

    创建person.txt的语句为:(执行LOAD DATA之前请注意如何访问本地文件)
    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;
    查看person全表,并检索info中“name”和“age”的信息。结果如下:
    SELECT * FROM person;
    id info
    1 {“name”:“zhou”,“age”:30}
    2 {“name”:“yan”,“age”:30}
    3 {“name”:“chen”,“age”:20}
    4 {“name”:“li”,“age”:80}
    SELECT info.name AS info_name FROM person;
    info_name
    zhou
    yan
    chen
    li

如何操作Inceptor中的对象:nceptor SQL、Inceptor PL/SQL以及Inceptor SQL PL

Inceptor的两种执行模式:Local和Cluster。切换方式:SET ngmr.exec.mode = local/cluster;

  • Cluster模式是默认执行模式,适用于批处理业务。它通过InceptorServer将SQL转换成Job分发到各个节点的Executor,并由Task具体处理,各个Task将结果汇总写入HDFS的结果目录,由Fetch Task显示结果,如果Task执行的是CTAS(CREATE TABLE …​ AS…​)则将结果Move到对应表的数据存储目录下。
  • Local模式适用于一些低延时、高并发、参与计算数据量少的场景。Local模式本身要求数据源检索有较快的速度,所以Local模式的优势是可以较快的返回结果,满足低延时需求。

Inceptor中数据库对象的元数据保存位置:在Inceptor Metastore中

数据库对象内的数据存放位置:内存或者SSD中(Holodesk表)、HDFS中(TEXT表/ORC表/CSV表)

数据库

  • 1.是存放一组表的目录,默认的数据库default
    2.通过beeline连接Inceptor数据库:beeline -u "jdbc:hive2://<server_ip/hostname>:10000/<database>"
    3.每个Inceptor中的数据库都是HDFS上的目录,路径为:hdfs://<nameservice>/<id>/user/hive/warehouse/<database_name>.db
    < nameservice > 是HDFS的nameservice名称;< id> 是Inceptor的服务名;< database_name> 是数据库名。数据库中的表都存在数据库对应的HDFS目录下。
    4.HDFS上属于Inceptor对象的目录和文件管理由Inceptor执行。


数据的对象。逻辑上,Inceptor的表用行(row)和列(column)来组织存储在其中的数据
表的分类:(Inceptor中的表可以按以下不同维度划分)

  • 1.按 Inceptor的所有权 分类可分为:外部表(或简称为外表)和托管表
    2.按 表的存储格式 分类可分为:TEXT表、ORC表、CSV表和Holodesk表
    3.按表 是否分区 可分为:分区表和非分区表
    4.按表 是否分桶 可分为:分桶表和非分桶表
    同一维度下一张表只能有一个属性,而不同维度不互相干涉,例如一张表可以同时有下面属性:(外部表,TEXT表,分区表,分桶表)

以下是对各种表的说明:

表分类 创建 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) 的,也就是说视图中没有实际的数据,每次对视图进行查询时,建视图所用的查询语句会被再次执行一次。所以,我们也可以将视图理解为 查询的封装。视图不能和表重名

  • 视图的作用:简化查询、对表中内容的权限控制等,例如:
    1.简化查询:下面的语句查询所有在trans_info中有交易记录的账户持有人名字:
    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;
    2.权限控制:user_info表中包含涉及账户安全的信息,如身份证号码、密码等。现在我们想要做到让一部分Inceptor用户(例如Inceptor用户Alice和Bob)只能读到user_info表中不涉及账户安全的信息,我们可以做下面的操作:
    1)确保Alice和Bob对user_info表没有读权限。
    2)建视图user_info_secure,包含user_info中不涉及账户安全的列:
    DROP VIEW IF EXISTS user_info_secure; CREATE VIEW user_info_secure AS SELECT name, acc_num, reg_date, acc_level FROM user_info;
    3)赋予用户Alice和Bob对视图user_info_secure的读权限:
    GRANT SELECT ON user_info_secure TO USER alice, USER bob;

函数
分类:内置函数、用户自定义函数

  • 内置函数(详见参考文档):
    1.关系运算符:>,<,=,==,>=,<=,<>,like等。例子:SELECT A < B AS result FROM system.dual LIMIT 1;A和B可以为任何基本类型,如果A小于B,则返回TRUE,否则返回FALSE。如果A或B值为“NULL”,结果返回“NULL”
    2.算术运算符:+,-,*,/,%,&,|,^,~等。例子:SELECT ~A AS result FROM system.dual LIMIT 1;A可以为TinyInt,Int,BitInt类型。对表达式 A 执行按位“非”(取反)
    3.逻辑运算符:AND,OR,NOT,IN,EXISTS等。SELECT A==B and true AS result FROM system.dual LIMIT 1;A和B必须是Boolean类型,返回二者的逻辑与的结果。即A和B同时正确时,返回TRUE,否则FALSE。如果A或B值为NULL,返回NULL
    4.数学函数:round(double a[, int d]),floor(double a),ceil(double a),rand([int seed]),exp(double n),sqrt(double a),bin(BIGINT a),sin(double a),regr_slope(col y,col x)等。例子:SELECT round(1.4523,3) AS result FROM system.dual LIMIT 1;,结果:(result:1.452)。未指定d时,四舍五入到小数点后一位;若指定了d,则四舍五入到小数点后第d位
    5.类型转换函数:CAST( AS )。例子:SELECT CAST('38' AS INT) AS result FROM system.dual LIMIT 1;expr 代表被转换的对象,TYPE 代表指定目标类型
    6.日期函数:EXTRACT(DAY|MONTH|YEAR FROM )。例子:SELECT EXTRACT(YEAR FROM '2015-01-15') AS result FROM system.dual LIMIT 1;结果:(result:2015)。参数date应该是datetime value,或者可以隐性转换成DATE类型
    7.条件函数:IF(booleantestCondition, T valueTrue, T valueFalseOrNull)。例子:SELECT IF(true,'trans','age') AS result FROM system.dual LIMIT 1;。如果booleantestCondition为true,返回valueTrue,否则返回TvalueFalseOrNull
    8.字符串函数:concat(a,b,c……)。例子:SELECT concat(1,2,3) AS result FROM system.dual LIMIT 1;结果:(result:123)
    9.XML函数:xmlforest(, [, …​])。例子:SELECT xmlforest(name, age) a FROM student_age ORDER BY a LIMIT 1;结果:(a:< name >Han Meimei < /name> < age >20</ age>)
    此外,还有复杂函数类型、表生成函数、聚合函数、窗口函数、Context函数、脱敏函数等。
    自定义函数:

Inceptor简介相关推荐

  1. TDH和CDH的简介和对比

    前言 hadoop是一个开源项目,所以很多公司在这个基础进行商业化,下面简单介绍下应用比较广泛的TDH和CDH两个版本. [TDH] TDH:Transwarp Data Hub 1 Transwar ...

  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  3. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  4. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  5. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  6. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  7. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  8. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  9. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  10. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. java语言中if语句的基本语法_java中if语句有哪些形式和用法
  2. 运行代码后总是会出现很多的的debug [main请问如何解决_Flutter的Hot Reload是如何做到的...
  3. Mozilla Labs Apps Developer Preview发布了
  4. Jackcard相似度和余弦相似度(向量空间模型)的java实现
  5. c语言getchar用法_C语言 — 关键字
  6. 王道考研 计算机网络5 分层结构 协议 服务 接口
  7. 监控SRE的黄金信号
  8. linux c解析配置文件,linux中C的配置文件
  9. 苹果电脑拷贝文件到u盘很慢_小米最硬核U盘!20g,3.1接口,120MB/S读取速度,可连iphone华为...
  10. 世界坐标和本地坐标之间的转换
  11. 一位程序员社畜的2021闲读书单!
  12. 健全营销体制是打造营销生态系统的命脉
  13. 新的掌舵手已就位,汽车之家这艘船将驶向何方?
  14. apollo学习之---(17)commen-math学习
  15. 随机过程基础3--宽平稳随机过程的谱分析
  16. MNN C++输入图片多通道
  17. 博客园自定义背景图片
  18. java正则基本用法
  19. 终于有人把“计算机底层原理“整理出来了
  20. win7 正在锁定计算机 卡住,win7关机关不掉怎么办_win7一直卡在关机的解决办法

热门文章

  1. win10家庭版 mysql_win10家庭版64位下mysql 8.0.15 安装配置方法图文教程
  2. ubuntu16.04安装opencv3.3
  3. pyqt之qprocess使用【详细教程】
  4. mac install torch0.4.1
  5. LibXML2不支持中文补遗
  6. 网页脚本基本java语法_JSP学习(一)JSP基础语法
  7. 【专题】CSDN下载频道4月热门资源top100汇总
  8. c语言程序设计教程pdf下载,C语言程序设计教程PDF合集-中国科技大学.pdf
  9. Wet Shark and Two Subsequences
  10. php中简单ubb案例,PHP中开发自己的UBB代码