- 博客(47)
- 收藏
- 关注
原创 Kylin查询下压
例如,构建cube时使用的model是fact join dimension,在不开启查询下压时执行query会报错,在开启查询下压后执行可以提交至sparksql方式进行查询。对于cube不支持的查询sql,kylin4.0支持将这类查询下压至sparksql进行查询。(2)刷新配置(重启服务也可使配置生效,但为避免不可用建议页面刷新配置)(1)需要设置参数进行开启。
2023-02-14 09:20:05
368
原创 kylin使用注意事项
创建Model时设置的是fact left join dimension,在查询时不能使用其他方式的连接条件,如inner join。构建Cube时,选择了X,Y,Z三个维度,查询时只能按这三个维度或组合的维度聚合查询,使用其他Cube中没有的维度聚合时会报错。构建Cube时,只选择了sum(aa),默认有count(*),即只有两个度量值。4.做查询时必须事实表在前,维表在后,否则执行报错。2.只能按构建Cube时选择的维度字段分组统计。3.只能对构建Cube时选择的度量字段做统计。
2023-02-14 09:11:13
247
原创 kylin、druid、clickhouse
因为数据预聚合,Kylin可以说是最快的查询引擎(group-by查询这样的复杂查询,可能只需要扫描1条数据);Clickhouse的索引有点类似MySQL的联合索引,当查询前缀元组能命中的时候效率最高,可是一旦不能命中,几乎会扫描整个表,效率波动巨大;每个维度都有创建索引,所以每个查询都很快,并且没有类似Kylin的巨大的查询效率波动。Druid数据模型比较简单,它将数据进行预聚合,只不过预聚合的方式与Kylin不同,Kylin是Cube化,Druid的预聚合方式是将所有维度进行Group-by。
2023-02-09 09:27:22
624
原创 hql连续登录
表中有登录日期,user_id,统计连续登录3天及以上学员idselect user_id,count(*) as continuous_daysfrom (select login_date,user_id,date_sub(login_date,row_number() over(partition by user_id order by login_date)) as flag_datefrom (select '2020-12-30' as login_date,'001' as
2021-06-11 15:07:32
254
原创 元数据有哪些
技术元数据,比如表结构、字段定义、文件存储等信息 业务元数据,比如业务定义、业务术语、业务规则、业务指标等 管理元数据,比如数据所有者、数据质量定责、数据安全等级等 ...
2021-06-11 14:23:11
3346
1
原创 doris-join优化
Broadcast/Shuffle Join系统默认实现 Join 的方式,是将小表进行条件过滤后,将其广播到大表所在的各个节点上,形成一个内存 Hash 表,然后流式读出大表的数据进行Hash Join。但是如果当小表过滤后的数据量无法放入内存的话,此时 Join 将无法完成,通常的报错应该是首先造成内存超限。如果遇到上述情况,建议使用 Shuffle Join 的方式,也被称作 Partitioned Join。即将小表和大表都按照 Join 的 key 进行 Hash,然后进行分布式的 Join
2021-06-10 15:38:57
2079
转载 Kylin优化
调整rowkey顺序优化原则:将更高基维度, 更加常用的查询维度, 拖动到最前面, 这样检索的时候效率更高调整方式:在Advanced Setting -> Rowkeys 这步设置时
2021-06-08 10:19:42
352
原创 hive排序
order by:全局排序,因此只有一个reducer(多个reducer无法保证全局有序)如果指定了hive.mapred.mode=strict(默认值是nonstrict),这时就必须指定limit来限制输出条数,原因是:所有的数据都会在同一个reducer端进行,数据量大的情况下可能不能出结果,那么在这样的严格模式下,必须指定输出的条数。sort by:不是全局排序,分区内有序,其在数据进入reducer前完成排序在每个reducer端做排序,也就是说保证了局部有序(每个reducer出来.
2021-06-04 17:59:03
117
2
原创 分区表和分桶表区别
分区使用的是表外字段,需要指定字段类型 分区通过关键字partitionedby(partition_name string)声明 分区划分粒度较粗 将数据按区域划分开,查询时不用扫描无关的数据,加快查询速度 ...
2021-06-04 17:13:00
1860
2
原创 hive之连续考题
select min(read_hour),max(read_hour),flagfrom (select read_hour,row_number() over( order by read_hour) as rowid,case when read_user_cnt>=10000 then 1 else 0 end as flagfrom (select 0 as read_hour,0 as flag union allselect 1 as read_hour,0 as .
2021-06-04 11:29:51
786
5
原创 hive谓词下推
关系型数据库借鉴而来,关系型数据中谓词下推到外部数据库用以减少数据传输 基本思想:尽可能早的处理表达式 属于逻辑优化,优化器将谓词过滤下推到数据源,使物理执行跳过无关数据 参数打开设置:hive.optimize.ppd=true ...
2021-06-04 10:39:32
1848
1
原创 在doris实现lag时间字段
select id,wechat_id,online,happen_time,STR_TO_DATE(lag(happen_time,1,99991231000000)over(partition by wechat_id order by id ),'%Y%m%d%H%i%s')from rt_ods.rt_ods_skynet_statistic_online_status_record where wechat_id='wxid_8074350742812'
2021-06-03 16:29:24
867
原创 星型&雪花&星座模型
根据事实表和维度表之间的关系,我们将常见的模型分为星型模型、雪花模型。星型模型:当所有的维度表都是和事实表直接相连的时候,整个图形看上去就像是一个星星,我们称之为星型模型。星型模型是一种非正规化的架构,因为多维数据集的每一个维度都和事实表直接相连,不存在渐变维度,所以有一定的数据冗余,因为有数据的冗余,很多的统计情况下,不需要和外表关联进行查询和数据分析,因此效率相对较高...
2021-06-02 11:50:50
2236
原创 归并、快排、二分查找
归并def MergeSort(lists): if len(lists) <= 1: return lists num = int( len(lists) / 2 ) left = MergeSort(lists[:num]) right = MergeSort(lists[num:]) return Merge(left, right)def Merge(left,right): r, l=0, 0 result=[]
2021-05-18 17:50:36
110
原创 Doris三种数据模型
在 Doris 中,数据以表(Table)的形式进行逻辑上的描述。一张表包括行(Row)和列(Column)。Row 即用户的一行数据。Column 用于描述一行数据中不同的字段。Column 可以分为两大类:Key 和 Value。从业务角度看,Key 和 Value 可以分别对应维度列和指标列。Doris 的数据模型主要分为3类:Aggregate Uniq DuplicateAggregate 模型 聚合模型假设有如下表,其中aggregate key为user_id,date
2021-04-22 15:57:06
3573
原创 按不同维度组合并聚合
grouping sets 在一个 group by 查询中,根据不同的维度组合进行聚合,等价于将不同维度的 group by 结果集进行 union allcube 根据 group by 的维度的所有组合进行聚合rollup 是 cube 的子集,以最左侧的维度为主,从该维度进行层级聚合。grouping setsselect order_id, departure_date, count(*) as cnt from ord_test group by order_id..
2021-04-07 19:08:11
910
原创 hive日期时间函数
to_date(string timestamp):日期时间转日期函数:返回值: string说明: 返回日期时间字段中的日期部分。select to_date(’2021-02-08 10:03:01′) from dual;2021-02-08current_date():当前日期select current_date() --2021-02-09current_timestamp():当前日期时间selectcurrent_timestamp() ; --2.
2021-02-09 11:46:29
337
原创 Lateral View explode
Lateral View explode使用过程中的问题一般使用select id,con,con_detailfrom (select 1 as id,'a,b,c' as conunion all select 2 as id,null as con union all select 3 as id,'' as con)tlateral view explode(split(con,',')) aa as con_detail结果如下,发现其中id为2的行不见了,原因是
2020-12-10 19:44:28
451
1
原创 数据同步策略
我们需要将源数据库数据同步至数仓,此时涉及数据同步策略,具体应该如何选择对应的数据更新机制呢?参照:表类别 数据量 描述 增长变化方式 同步策略 实体表 中等 一般指客观存在的对象,如用户、课程、商品等 增加、变化 近期每日全量,远期拉链表,更久远存磁盘 维度表 常规维度 小 一般对应业务状态,如地区,订单类型等 增加、变化 每日全量 固定维度 小 不变 无需同步 事实表 事务型事实
2020-10-16 19:37:17
437
原创 拉链表
拉链,通俗来讲即打开和关闭数据,设计表的时候添加start_date 和 end_date 两个字段,数据更新时,通过修改 END_DATE 来设置数据的有效时间。数据的拉链表只存一份全量数据,其余都是增量数据,查询时使用 start_date 和 end_date 作为约束条件来筛选某日的数据快照。同时可以节省存储空间,记录历史变化。--提取全量最新数据drop table if exists tmp.tmp_zip_one;create table tmp.tmp_zip_one ...
2020-10-16 15:24:37
542
原创 缓慢变化维
缓慢变化维在维度建模的数据仓库中,通常会有一个概念叫Slowly Changing Dimensions,译为“缓慢变化维”,经常会被简写为SCD。缓慢变化维的提出是因为在实际中某些情况下,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。这种随时间发生变化的维度我们一般称之为缓慢变化维。处理缓慢变化维的方法通常分为以下几种第一种方式是直接覆盖原值。这样处理最简单,且容易实现,但是没有保留历史数据,无法分析历史变化信息。只关注最新的数据状态下可以采用此方式。 第二种方式是添加维度行
2020-10-16 11:34:21
303
原创 数据倾斜及解决
数据倾斜的表现任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大导致key值分布不均。单一reduce的记录数与平均记录数差异过大,通常可能达到3倍甚至更多。最长时长远大于平均时长。数据倾斜的原因key分布不均匀 业务数据本身的特性 建表时考虑不周 某些SQL语句本身就有数据倾斜进行哪些操作时可能会出现数据倾斜group by distinct join关键词
2020-10-15 18:47:55
533
原创 map reduce原理
shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。shuffle的目的是以下三点:完整地从map task端读取数据到reduce 端。 在跨节点读取数据时,尽可能地减少对带宽的不必要消耗。 减少磁盘IO对task执行的影响。在进入map这一步之前,首先是split(分片),按输入文件大小和数量切分多个片,每一个片对应一个maptask。MR过程中共涉及三次.
2020-10-14 15:19:13
239
原创 hive之array操作
array_col[n]取array_col第n个元素,n始自0 size(array_col)计算array_col元素个数 sort_array(array_col)对array_col中元素进行升序排序,不可指定降序 array_contains(array_col,x)检索array_col中是否包含x元素,若包括则为true,否则false一个SQL让你认识array相关函数with tmp as ( select t.node,t.parent,collect_s...
2020-10-13 19:17:59
20668
原创 开窗——聚合函数与分析函数
开窗——聚合函数与分析函数应用场景(1)排序(2)动态分组group by(3)top n(4)累计计算(5)层次查询窗口函数first_value(col):取分组内排序后,截止到当前行,第一个值last_value(col): 取分组内排序后,截止到当前行,最后一个值lead(col,n,default) :用于统计窗口内往下第n行值。第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为null时候,取默认值,如不指定,则为null)
2020-10-13 18:47:47
669
原创 hive序列函数之ntile
ntile(n)over(order byxx)它把有序的数据集合【平均分配】到指定的数量(n)个桶中, 将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。例, 计算总成绩前50%用户select name,sum(grade) as grade,ntile(2)over(order by sum(grade) desc) as levelfrom (select '李一' as name,'语' as subject,80 as gr..
2020-10-13 17:23:59
1236
原创 hive分析函数
排序1.row_number() 直排,相同的也有序row_number() over(partition by col1 order by col2) as rowid结果:1,2,3,42.rank() 并列的,下一个数字会跳过rank() over(partition by col1 order by col2) as rowid结果:1,2,2,4,53.dense_rank() 并列的,下一个数据不会跳过dense_rank() over(partitio
2020-10-13 15:17:35
1609
原创 hive聚合函数
聚合函数是hive内置函数,聚合函数对一组数据进行计算,并返回单个值。常用聚合函数count计数count(*) --统计检索出的行的个数,包括NULL值的行 count(col) --返回指定列非空值个数 count(distinct col[, col_.]) --返回指定列不同的非空值的个数sum求和sum(col) --col累计加和 sum(distinct col) --不同col值累计加和max最大值max(col) --col中最大值min最小值m...
2020-10-13 14:59:25
4808
原创 hive-使用开窗函数实现百分比、topN、前百分比
问题2:SQL有一个订单表A,分别有order_id(订单id)、user_id(用户id)、amt(金额)三个字段,用sql实现以下功能: i. 求订单总量为top3的用户及交易笔数,同时求出其交易笔数占全量订单笔数的占比。 ii. 求每个用户top3交易金额的订单。 iii. 求订单总量从大到小排名在50%之前的用户。-------------------------------------------------------- i. 求订单总量为t...
2020-10-13 10:59:05
9202
原创 SQL遍历二叉树
遍历二叉树 1 2 34 5 6 7输入 输出node parent 4 2 5 2 6 3 7 3 2 1 3 1 1 null node new_column 1 Root ...
2020-10-13 10:25:39
852
原创 udf、udaf、udtf等自定义方法
UDF 一进一出。继承UDF类,添加方法 evaluate()UDAF 多进一出。用户定义聚合函数,可对多行数据产生作用;等同与SQL中常用的SUM(),AVG(),也是聚合函数UDTF 一进多出。User-Defined Table-Generating Functions,用户定义表生成函数,用来解决输入一行输出多行;继承GenericUDTF类,重写initialize(返回输出行信息:列个数,类型), process, close三方法...
2020-10-12 17:33:56
212
原创 Hive调优
1.表设计优化(1)利用分区表优化建表的时候建立分区,能够提高查询速度,如果筛选条件里面有分区字段的话,那么Hive只需要遍历对用分区目录下的文件即可,不需要遍历全局数据,使得处理的数据量大大减少。(2)利用桶表优化指定桶的个数后,存储数据时,根据某一个字段进行哈希后,确定存储在哪个桶里,跟分区表类似也是使得筛选时不用全局遍历所有的数据,只需要遍历所在桶就可以了。2.存储压缩优化(1)选择合适的文件存储格式TextFile默认格式,如果建表时不指定默认为此格式。存储方式:行存储。O
2020-10-12 16:25:24
310
原创 Hive 和关系型数据库比较
数据存储位置Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库则可以将数据保存在块设备或者本地文件系统中。数据更新由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进 行修改的,因此可以使用INSERT INTO … VALUES 添加数据,使用UPDATE … SET 修改数据。执行延迟Hive 在查询数据的...
2020-10-12 16:04:55
551
原创 SQL转MapReduce的过程及执行顺序
SQL转化为MapReduce的过程一起来看看Hive是如何将SQL转化为MapReduce任务的,整个编译过程分为六个阶段:Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree 遍历AST Tree,抽象出查询的基本组成单元QueryBlock 遍历QueryBlock,翻译为执行操作树OperatorTree 逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量 遍历O.
2020-10-10 16:12:05
1333
1
原创 按不同维度组合并聚合方法
grouping sets,在一个 group by 查询中,根据不同的维度组合进行聚合,等价于将不同维度的 group by 结果集进行 union allcube,根据 group by 的维度的所有组合进行聚合rollup,是 cube 的子集,以最左侧的维度为主,从该维度进行层级聚合。grouping setsselect order_id, departure_date, count(*) as cntfrom order_infogroup by order_id, d
2020-09-29 16:27:33
970
原创 如何设计事实表
一、确定主题即确定数据分析或前端展现的主题(例:某年某月某地区的用户注册量情况)。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑.二、确定度量确定主题后,需要考虑分析的技术指标(例:年注册量等等)。它们一般为数据值型数据,其中有些度量值不可以汇总;有些可以进行汇总计算,以便为分析者提供有用的信息。度量是要统计的指标,必须事先选择恰当,基于不同的度量可以进行复杂关键性指标(KPI)的设计和计算。三、确定事实数据粒度确定度量之后,需要考虑该度量的汇
2020-09-29 16:04:36
339
原创 Kimball多维体系结构中的三个关键性概念
总线架构(Bus Architecture)在多维体系结构(MD)的数据仓库架构中,主导思想是分步建立数据仓库,由数据集市组合成企业的数据仓库。但是,在建立第一个数据集市前,架构师首先要做的就是设计出在整个企业内具有统一解释的标准化的维度和事实,即一致性维度和一致性事实。而开发团队必须严格的按照这个体系结构来进行数据集市的迭代开发。一致性维度就好比企业范围内的一组总线,不同数据集市的事实的就好比插在这组总线上的元件。这也是称之为总线架构的原因。实际设计过程中,我们通常把总线架构列表成矩阵的形式,
2020-09-29 14:43:17
900
原创 事实表划分
在维度建模的数据仓库中,事实表是指其中保存了大量业务度量数据的表。事实表中的度量值一般称为事实。在事实表中最有用的事实就是数字类型的事实和可加类型的事实。事实表的粒度决定了数据仓库中数据的详细程度。以粒度划分事实表,主要分三种:事务事实表(Transaction Grain Fact Table) 周期快照事实表(Periodic Snapshot Grain Fact Table) 累积快照事实表(Accumulating Snapshot Grain Fact Table)事务事实表表
2020-09-29 14:23:10
567
原创 数据仓库为何分层,各层作用?
优秀的分层设计能够让整个数据体系更易理解和使用为什么要设计数据分层?数据有秩序地流转,数据的整个生命周期能够清晰明确被设计者和使用者感知。简单说就是使数仓整体看起来层次清晰、依赖关系直观。因此,我们需要一套行之有效的数据组织和管理方法来让我们的数据体系更有序,这就是谈到的数据分层。数据分层并不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:数据结构清晰:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解 避免重复开发:规范数据分层,开发一些通用的中间层数
2020-09-29 11:31:44
11602
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人