阿里云ACP认证-数据仓库
数据仓库
Kappa架构:将实时和离线代码统一(优化lambda架构),但是不好修正数据,开发周期长,成本浪费,对于历史数据的高吞吐量力不从心
原一代数据仓库:
- 离线:hive+maxcompute
- 实时:clickhouse+driud
- 整合离线和实时:drill+presto
- 保存:mysql+redis
- 最后API
下一代:
- 要实时,很实时
- 离线和实时一体化,减少数据移动
- 通用性,要解耦
- 云原生,标准且生态
特点 | 数据库 | 缺点 |
---|---|---|
支持事务+ACID | Mysql+presetSQL | 弹性伸缩难做到PD级别,且不能做复杂查询 |
分析加速,分布式 | presto+druid+hive+clickhouse… | 面向分析师 |
面向服务产品,高并发,查询简单 | hbase+redis+casandra |
既可以支持分析也可以支持事务:HTAP混合事务分析系统
- 需要事务机制保证ACID + 适合模型简单,简单分析场景,TP解决AP问题
既可以分析也可以服务:HSAP服务/分析一体化:Hologres
- 无事务开销(分布式锁、同步)
- 以数据仓库模型(抽象、服用、标准)解决数据服务问题
Hologres
产品特性:
- 分析服务一体化:point(点查询hbase/redis遇到的) /Ad-hoc(即席分析clickhouse)/OLAP(联机分析) 分析
- 以实时为中心:很快,数据实时写入和更新,与Flink原生集成,写入即可见
- 计算存储分离:存储资源和计算资源分离部署并独立扩展+和Maxcompute无缝打通
- 开放生态:兼容PF生态+对接PG开发工具+对接BI
Flink+hologres组合:实时大屏等
hologres:报表等离线加速
Flink+hologres+maxcompute:数据中台+精准营销+多维分析
Hologres架构原理
计算和存储相分离
计算:
- 接入节点Frontend(FE):SQL认证解析和优化,可以包含多个,兼容postgres11
- worker:执行引擎HQE(hologres query engine,极致查询)/PQE(postgres query engine,兼容postgres)/SQE(对接maxcompute,本地兼容访问maxcompute)+存储引擎(SH,shard,CURD)+缓存+调度(HOS轻量级)
- MetraService(管理元数据信息,同时提供给FE)+Holo Master(拉起Worker)
存储:
- 盘古文件系统
- 数据湖
SQL发送请求-frontend解析分发-worker执行-走不同路径-SE存储获取数据,合并后返回给FE
(点查直接搜Fixed FE)
HSAP挑战和Hologres应对策略
存储计算分离:三种
存储使用盘古
流批统一:底层支持行(PK)、列(OLAP)、行列共存
执行引擎+优化器
名词解释:
hologres开发工具:
PSQL客户端
JDBC连接hologres
数据同步
支持多种异构数据源的离线、实时写入
实时写入数据到hologres
进入hologres控制台–建库建表(1)-进入实时计算Flink控制台-作业开发-新建作业-创建原表和目标表(2)-执行-上线-运维-进入作业运维可以看到提交的作业-启动作业即可-在holoweb控制台查看是否成功(3)
(1)create table if not exists test1(a int ,b bigint ,c text,d timestamp);
(2_1)create temporary table datagen_source(a int ,b bigint,c string,proctime as proctime()) with ('connector'='datagen')
flink随机源
(2_2)create temporary table holo_sink(a int,b bigint,c varchar,d timestamp) with ('connector'='hologres','endpoint'='XXX(hologres实例列表控制台查看)','username'='XX','password'='XX','dbname'='XX','tablename'='test1(上面建的表)')
holo目标表
(2_3)insert into holo_sink select * from datagen_source;
数据实时写入目标表
(3)select * from test1 order by d limit 2;/select count(1) from test1;
Maxcompute离线加速查询
单表创建/批量外表创建
dataworks控制台
- 数据开发
- 临时查询-新建数据源
- 创建表并插入数据
create table if not exists odps_test(
shop_name string,
customer_id string,
total_price int
)
partitioned by (
sale_date string
)
#插入数据
insert into odps_test partition(sale_date='20221111') values('a','张三',50),('b','李四',55);# 查看数据
read odps_test;
- 创建holoweb外部表(元数据管理可视化创建/sql创建)
create foreign table t_odps(shop_name text,customer_id text,total_price int8,sale_date text
)
server odps_server
options(project_name 'XXX项目空间名',table_name 'odps_test');# 验证是否创建,相应会很快,dataworks慢,hologres加速查询!
select * from t_odps;
- 外表完成加速查询完成
COPY命令导入导出数据
在psql里面,连接后测试copy命令
#\d查看数据表
#建表
create table copy_test(
id int,
age int,
name text
);
# 从控制台(stdin)输入数据并复制到表
copy copy_test from stdin with delimiter as ',' null as '';
# 验证
select * from copy_test;#从txt文件导入数据
cmd
psql -U XXX -p 80 -h XX -d X数据库名X -c "copy copy_test from stdin with delimiter ','; " < X文件路径X#COPY N,代表写入了多少条数据# 下载数据到本地
psql
\copy (select * from copy_test) to '本地路径/写入OSS';#下载数据到OSS
psql/HoloWEB SQL编辑器
\copy (select * copy_test limit 2) to program '
hg_dump_to_odd
--AccessKeyId XX
--AccessKeySecret XX
--BucketName XX
--DirName X路径X
--FileName X文件名X
--BatchSize X多少记录X
'
# 最后到OSS查看验证即可