我们回顾下,Hologres是一款实时HSAP产品,隶属阿里自研大数据品牌MaxCompute,兼容 PostgreSQL 生态、支持MaxCompute数据直接查询,支持实时写入实时查询,实时离线联邦分析,低成本、高时效、快速构筑企业实时数据仓库(Real-Time Data Warehouse)。具备如下优势:
说明 |
|
分析服务一体化 |
|
以实时为中心设计 |
|
计算存储分离 |
|
丰富生态 |
|
接下来,我们介绍下Hologres的使用。
1. Hologres 相关概念
- 实例∶使用和管理数据库存储服务的实体,一个实例可以看作是多个数据库的合集
- 数据库︰一个模式的合集,用户所有的操作,包括表、函数等都是在数据库里完成。系统会在用户完成实例申请后默认创建一个"postgres"的数据库,该 DB 仅用于运维管理,实际业务需要新建DB
- 表∶表是数据存储单元。它在逻辑上是由行和列组成的二维结构,列的数量和顺序是固定的,并且每一列拥有一个名字。行的数目是变化的,它反映了在一个给定时刻表中存储的数据量。
- 外表:外表是数据实际存储在其他系统里,但是通过 Hologres 来访问的一类表。Hologres 完全兼容 postgres 的 foreign data wrapper。目前内部支持直接访问 MaxComputer 中的数据
2. 连接开发工具
支持如下方式:
1、DataWorks数仓开发
2、HoloWeb
3、PSQL客户端
4、JDBC
5、Python(使用psycopg2模块访问Hologres)
6、其他工具(Navicat、DBeaver、DataGrip等)
2.1. DataWorks集成Holo
基于Dataworks开发,参考:如何在DataWorks上使用Hologres、如何绑定Hologres引擎,细节:
DataWorks绑定hologres引擎 ==> 独享资源组、依赖独享调度资源组。
Dataworks绑定后,即可在DataStudio开发相关任务流程,详情请参见绑定Hologres实例。如下:
功能介绍:
1、DI离线同步:数据源数据 <--> Holo
2、RI实时同步:数据源数据 <--> Holo
3、Hologres SQL
4、一键MaxCompute表结构同步:批量创建Hologres外部表
5、一键MaxCompute数据同步:导入MaxCompute数据至Hologres
其他:dataworks可以连接hologres,并操作hologres外表方法:
1、holo创建内部表
2、mc创建外部表 关联DataWorks
问题:大数据计算MaxCompute的计算资源还是holo的?
在MaxCompute中创建Hologres外部表,在MaxCompute中做计算,用的是MaxCompute计算资源。
2.2. HoloWeb
功能介绍:
1、元数据管理:数据管理模块提供对Hologres引擎对象(包括实例、数据库、schema、表、视图等)的管理功能
2、SQL编辑器:提供标准SQL开发界面。
- 可用PostgreSQL语句开发、
- 查看SQL的执行计划和运行分析、诊断优化
- 支持交互式分析(Ad Hoc分析,不支持执行时间超过60分钟的长运行SQL)
3、诊断与优化:提供实例级别的运维管控能力。
- 查看慢Query日志、活跃Query、连接管理
- 可结合管理控制台监控指标,对实例异常进行诊断
4、数据方案:提供数据接入能力。
- 本地文件上传
- 外表数据导入操作
5、安全中心:提供用户管理、DB管理、资源组管理
2.3. DBeaver
属于同一网络可以连通。
2.4. 永洪BI
参考:如何通过YonghongBI工具连接Hologres并进行数据分析
2.5. dataworks集成
1、数据地图(Beta)集成,参考:如何在数据地图中配置Hologres元数据采集器
2、数据血缘,参考:如何在DataWorks的数据地图中查看数据血缘信息
3. 开发规范
参考:Hologres开发规范
4. Hologres开发
4.1. 对象层级与模式(Schema)
hologres兼容PostgreSQL生态,因此也有模式相关概念如下图所示:
Hologres的Schema功能:
- 新增Schema,表存储结构由database.table变为database.schema.table。
- 创建数据库时,默认创建public Schema
如何理解Schema?
- PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。
- 一个模式可以包含视图、索引、数据类型、函数和操作符等。
- 模式类似于操作系统层的目录,但是模式不能嵌套。
使用模式的优势:
- 允许多个用户使用一个数据库并且不会互相干扰。
- 将数据库对象组织成逻辑组以便更容易管理。
- 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。即相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。
提示:
1、可以用于 OLAP表权限管理
如果其他用户想访问某个schema下的对象,则该schema的owner必须赋予其他用户的usage权限,如果需要做其他操作也需要赋予相应的权限在默认情况下,所有人都拥有在public模式上的CREATE和USAGE权限。
2、业务线隔离
3、数仓分层隔离
4.2. 表
- 创建表--CREATE TABLE
- 创建表--CREATE TABLE AS
- 创建表--CREATE TABLE LIKE
- 修改表--ALTER TABLE(重命名、增加列和修改表数据生存时间)
- 删除表--DROP TABLE
- 创建类型转换--CAST(删除、创建)
- 视图--物化视图、视图
begin;
create table [if not exists] [schema_name.]table_name ([
{
column_name column_type [column_constraints, [...]]
| table_constraints
[, ...]
}
]);
call set_table_property('<table_name>', property, value);
comment on column <tablename.column> is 'value';
comment on table <tablename> is 'value';
commit;
-- 给表增加注释
COMMENT ON TABLE table_name IS 'my comments on table table_name.';
-- 给列增加注释
COMMENT ON COLUMN table_name.col1 IS 'This my first col1';
-- 给外部表增加注释
COMMENT ON FOREIGN TABLE foreign_table IS ' comments on my foreign table';
设置默认值
smallint_col smallint DEFAULT 0,
4.2.1. 表分类及使用场景
1、内部表
内部表数据存储在Hologres数据库中,支持设置:
- 表数据生命周期(秒):默认生命周期为永久。
- Binlog:表是否开启Binlog。Binlog生命周期
- 各类索引等,后面介绍
相关语法:
-- 建表时开启
call set_table_property('test_message_src', 'binlog.level', 'replica');--设置表属性开启Binlog功能
call set_table_property('test_message_src', 'binlog.ttl', '86400');--binlog.ttl,Binlog的TTL,单位为秒
查询binlog
select hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* from test_message_src;
场景:各类高性能要求的OLAP分析、点查询、实时链路
2、分区表
Hologres的分区表必须提前创建好分区,不能用查询语句的值动态生成分区表。
Partition Table,也叫分区表。父表按分区键(Partition Key)的值划分为不同的子表,子表对外可见。
语法:
- 创建分区表--CREATE TABLE
- 修改分区表--ALTER TABLE (重命名、绑定分区、卸载分区)
- 删除分区表--DROP TABLE
使用:
- Hologres暂不支持插入数据至分区表父表,只支持插入数据至具体的分区表子表。
- 若是表有主键,分区键必须是主键的一个子集。
- 动态分区是自动调度创建,仅支持以time_unit作为分区
性能:
- 如果单日分区数据小于1亿条,不建议使用日作为分区条件,或创建分区表。分区表太小,查询加速效果不明显,可以选择较大粒度的分区。
- 分区表的任何一个子表在元数据存储上等同于一个非分区表,因此分区多会造成一定程度的元数据膨胀,以及小文件碎片。
场景:
- 如果您需要经常对某分区数据进行整体替换,包括执行truncate操作或者drop操作,建议使用分区表。
- 如果您的数据来源于数据库,不建议使用分区表。过多的分区表会引起额外的IO资源浪费,为改善此问题并实现索引过滤加速查询的效果,您可以将常用分区条件作为segment_key。
3、外部表
支持创建MaxCompute、OSS、DLF、Hologres类型的外部表,使用限制如下:
- 使用Hologres创建外部表查询数据时,当MaxCompute表增加字段后,Hologres不会自动更新Schema,需要您在Hologres中手动增加列。
- Hologres仅支持为外部表重命名、增加列及删除列等修改外部表操作。
语法:
- 批量创建外部表--IMPORT FOREIGN SCHEMA
- 修改外部表--ALTER FOREIGN TABLE (重命名、增加列、删除列)
- 删除表--DROP FOREIGN TABLE
-
- CASCADE 删除表时,级联删除依赖于表的对象,例如视图。
- RESTRICT 如果目标表存在依赖对象,则系统拒绝删除该表。
场景:
- 数据同步:①holo中通过创建外部表关联MC表;②holo中通过查询外部表导入holo内部表
- maxcompute加速查询-- Hologres揭秘:高性能原生加速MaxCompute核心原理
4.2.2. 表设置
1、表存储格式--行、列
Hologres支持三种表存储格式,分别为:行存、列存和行列共存。通过如下进行设置:
call set_table_property('<table_name>', 'orientation', '[column | row | row,column]');
建表时默认为列存(column storage)形式。
使用建议:
各类存储格式总结:
1、列存(OLAP查询场景)
- 数据按列存存储,ORC格式
- 主键:系统会为每张表在底层存储一个主键索引文件,列存表如果设置了主键PK,系统会自动生成一个Row Identifier(RID),用于