https://blog.csdn.net/seashouwang/article/details/82840356
https://blog.csdn.net/zhangxiaomei1952/article/details/79273599
https://blog.csdn.net/weixin_33310807/article/details/107074534
https://blog.csdn.net/u010429286/article/details/72722597
//创建好模型
//通过查询Sql
模型 == 数据集
由于星形模型 ,所以只有事实表才有度量,参与计算
//设置聚合组 ,包含 聚合组 包含维度|层次维度|强制维度|联合维度|衍生维度
聚合组 包含所有维度 如果找不到 优化维度 默认取它
层次维度 适合层级 省市区 年月日等
强制维度 适合 可以将确定在查询时一定会使用的维度设为强制维度。例如,时间维度。 适合一定会用到得查询条件
联合维度 用的频率不高的多个查询条件
联合维度:将几个维度视为一个维度。
适用场景: 1 可以将确定在查询时一定会同时使用的几个维度设为一个联合维度。
2 可以将基数很小的几个维度设为一个联合维度。
3 可以将查询时很少使用的几个维度设为一个联合维度。
优化效果:将N个维度设置为联合维度,则这N个维度组合成的cuboid个数会从2的N次方减少到1。
衍生维度:
在OLAP分析场景中,经常存在对某个id进行过滤,但查询结果要展示为name的情况,比如user_id和user_name。这类问题通常有三种解决方式:
a. 将ID和Name都设置为维度,查询语句类似select name, count(*) from table where id = 1 group by id,name。这种方式的问题是会导致维度增多,导致预计算结果膨胀;
b. 将id和name都设置为维度,并且将两者设置为联合。这种方式的好处是保持维度组合数不会增加,但限制了维度的其它优化,比如ID不能再被设置为强制维度或者层次维度;
c. 将ID设置为维度,Name设置为特殊的Measure,类型为Extended Column。这种方式既能保证过滤id且查询name的需求,同时也不影响id维度的进一步优化。
所以此类需求我们推荐使用 Extended Column。
{
"uuid": "5c30dfbf-3591-706f-1d70-fdc6588eef1b",
"last_modified": 1598857840165,
"version": "3.0.0.20500",
"name": "hy_data_model",
"owner": "ADMIN",
"is_draft": false,
"description": "",
"fact_table": "HY.HUNYIN_JHS",
"fact_table_alias": "HUNYIN_JHS",
"lookups": [
{
"table": "HY.HUNYIN_JHS_CP",
"kind": "LOOKUP",
"alias": "HUNYIN_JHS_CP",
"join": {
"type": "left",
"primary_key": [
"HUNYIN_JHS_CP.ID"
],
"foreign_key": [
"HUNYIN_JHS.ID"
]
}
}
],
"dimensions": [
{
"table": "HUNYIN_JHS",
"columns": [
"BIAX0001",
"ID",
"AIAX0001",
"AIAX0002",
"AIAE0004",
"AIAP0005",
"AIAP0006",
"AIAP0007",
"AIAP0008",
"AIAX0009",
"AIAX0010",
"AIAP0011",
"AIAP0012",
"AIAP0013",
"AIAP0014",
"AIAP0016",
"AIAP0017",
"AIAP0018",
"AIAP0019",
"AIAP0015",
"AIAP0020",
"AIAP0021",
"AIAP0022",
"AIAP0023",
"AIAP0024",
"AIAP0033",
"AIAP0034",
"AIAX0035",
"AIAX0036",
"AIAX0039",
"AIAX0040",
"AIAX0041",
"AIAX0042",
"AIAX0043",
"AIAE0045",
"AIAX0046",
"AIAX0047",
"AIAX0048",
"AIAX0049",
"AIAX0053",
"AIAX0054",
"AIAX0055",
"AIAX0062",
"AIAX0063",
"AIAX0064",
"AIAX0066",
"AIAX0067",
"AIAE0068"
]
},
{
"table": "HUNYIN_JHS_CP",
"columns": [
"ID",
"BIAX0001",
"AIAX0001",
"AIAX0002",
"AIAE0004",
"AIAP0005",
"AIAP0006",
"AIAP0007",
"AIAP0008",
"AIAX0009",
"AIAX0010",
"AIAP0011",
"AIAP0012",
"AIAP0013",
"AIAP0014",
"AIAP0015",
"AIAP0016",
"AIAP0017",
"AIAP0018",
"AIAP0019",
"AIAP0020",
"AIAP0021",
"AIAP0022",
"AIAP0023",
"AIAP0024",
"AIAP0033",
"AIAP0034",
"AIAX0035",
"AIAX0036",
"AIAX0040",
"AIAX0039",
"AIAX0041",
"AIAX0042",
"AIAX0043",
"AIAE0045",
"AIAX0046",
"AIAX0047",
"AIAX0048",
"AIAX0049",
"AIAX0053",
"AIAX0054",
"AIAX0055",
"AIAX0062",
"AIAX0063",
"AIAX0064",
"AIAX0066",
"AIAX0067",
"AIAE0068",
"AIAE0069",
"AIAE0070",
"AIAX0071",
"BIAX0030",
"BIAX0031",
"BIAX0032",
"BIAX0033",
"BIAX0034",
"BIAX0035"
]
}
],
"metrics": [
"HUNYIN_JHS.AIAE0070",
"HUNYIN_JHS.AIAX0071",
"HUNYIN_JHS.AIAE0069",
"HUNYIN_JHS.BIAX0030",
"HUNYIN_JHS.BIAX0031",
"HUNYIN_JHS.BIAX0032",
"HUNYIN_JHS.BIAX0033",
"HUNYIN_JHS.BIAX0034",
"HUNYIN_JHS.BIAX0035",
"HUNYIN_JHS.BIAX0036",
"HUNYIN_JHS.BIAX0037",
"HUNYIN_JHS.BIAX0038",
"HUNYIN_JHS.BIAX0039",
"HUNYIN_JHS.SUBJECT_FLAG",
"HUNYIN_JHS.TONG_TIME"
],
"filter_condition": "",
"partition_desc": {
"partition_date_column": null,
"partition_time_column": null,
"partition_date_start": 0,
"partition_date_format": "yyyy-MM-dd",
"partition_time_format": "HH:mm:ss",
"partition_type": "APPEND",
"partition_condition_builder": "org.apache.kylin.metadata.model.PartitionDesc$DefaultPartitionConditionBuilder"
},
"capacity": "MEDIUM",
"projectName": "test"
}
创建Cube
{
"uuid": "98a5ef2e-35a4-a4a9-f42b-602d1a037c31", //唯一ID
"last_modified": 1598691546180, ##修改时间戳
"version": "3.0.0.20500", ##当前版本
"name": "testc1", ## Cobe名称
"is_draft": false, ##是否草稿
"model_name": "test11", ##模型名称
"description": "", ##备注
"null_string": null,
"dimensions": [ ##尺寸 这个 Cube 用于在最高级别收集查询指标
{
"name": "ID", # 字段名
"table": "HUNYIN_JHS", #表名
"column": "ID", #列名
"derived": null #派生得列 可能记录得是字段名
},
{
"name": "AIAX0001",
"table": "HUNYIN_JHS",
"column": "AIAX0001",
"derived": null
}
],
"measures": [ #测量 此处代表 计算得列
{
"name": "_COUNT_", #名称
"function": { #计算方法
"expression": "COUNT", #表达式
"parameter": { #参数
"type": "constant", #类型
"value": "1" #值
},
"returntype": "bigint" #返回类型
}
}
],
"dictionaries": [], #词典
"rowkey": { #主键
"rowkey_columns": [ #主键列名
{
"column": "HUNYIN_JHS.ID", #主键列1 名
"encoding": "dict", #--编码 字段
"encoding_version": 1, #--编码版本
"isShardBy": false ## 是否分片 “shard by”维度列 选择基数高的维度做分片(sharding)如useid列 可以使MR构建过程按照该列进行重新分布,加快构建速度
},
{
"column": "HUNYIN_JHS.AIAX0001",
"encoding": "dict",
"encoding_version": 1,
"isShardBy": false
}
]
},
"hbase_mapping": { ##hbase 配置
"column_family": [ ## 柱族 将多个列聚合成一个列族 https://blog.csdn.net/u011974797/article/details/81511393
{
"name": "F1", #柱族名称
"columns": [ #包含列
{
"qualifier": "M", ##限定符
"measure_refs": [ ## --测量参考文献
"_COUNT_" ## 列名
]
}
]
}
]
},
"aggregation_groups": [ ## 聚合组
{
"includes": [ ## 包含字段
"HUNYIN_JHS.ID",
"HUNYIN_JHS.AIAX0001"
],
"select_rule": { ##查询规则
"hierarchy_dims": [], # 层次维度
"mandatory_dims": [], #强制维度
"joint_dims": [] #联合维度
}
}
],
"signature": "+bOiviiaq97An7FdRXaA5Q==", #签名
"notify_list": [], # -- 通知清单
"status_need_notify": [ #--状态需要通知
"ERROR",
"DISCARDED",
"SUCCEED"
],
"partition_date_start": 0,# 分区开始日期
"partition_date_end": 3153600000000, #分区结束日期
"auto_merge_time_ranges": [ # 合并时间范围 7天到28天
604800000,
2419200000
],
"volatile_range": 0, #最近 N 天的 Segments 不作合并,适用于因数据延迟导致最近 N 天数据会有波动,需要刷新 Segments 的情况。
"retention_range": 0, # 生命周期,自动删除 N 天以前的 Segment
"engine_type": 2, #engine_type对应的四个值,表示 int ID_MR_V1 = 0;int ID_MR_V2 = 2;int ID_MR_II = 3;int ID_SPARK = 4; 发动机引擎
"storage_type": 2, #表示立方体存储类型 ID_HBASE = 0; ID_HYBRID = 1; ID_SHARDED_HBASE = 2;
"override_kylin_properties": {}, #重写kylin属性
"cuboid_black_list": [], ##--长方体黑名单
"parent_forward": 3, #--父类转发
"mandatory_dimension_set_list": [],#--必须的维度集合表
"snapshot_table_desc_list": [] #--快照表描述列表
}