谈闻财经 > 技巧 > 大数据深度分析~大数据深度分析案例

大数据深度分析~大数据深度分析案例

2024-05-04 09:08:03技巧

在当前的经济形势下,财经知识的重要性愈发凸显。投资者们需要了解市场趋势、政策变化、公司财务等方面的信息,以更好地制定投资策略。接下来,谈闻财经带大家认识并深入了解大数据深度分析,希望能帮你解决当下所遇到的难题。

大数据深度分析~大数据深度分析案例

本文分享自华为云社区《GaussDB(DWS)性能调优:求字段全体值中大于本行值的最小值——多次关联发散导致数据爆炸案例分析改写-云社区-华为云》,作者: Zawami 。

1、【问题描述】

语句中存在同一个表多次自关联,且均为发散关联,数据爆炸导致性能瓶颈。

2、【原始SQL】

explain verbose WITH TMP AS ( SELECT WH_ID , (IFNULL(SUBSTR(THE_DATE,1,10),'1900-01-01') || ' ' || STOP_TIME)::TIMESTAMP AS STOP_TIME , (IFNULL(SUBSTR(THE_DATE,1,10),'1900-01-01') || ' ' || '23:59:59')::TIMESTAMP AS MAX_ASD FROM DMISC.DM_DIM_CBG_WH_HOLIDAY_D WHERE IS_OPEN = 'Y' AND STOP_TIME IS NOT NULL ) SELECT T1.WH_ID , T1.THE_DATE , T1.IS_OPEN , MIN(T2.STOP_TIME) AS STOP_TIME , MIN(T2.MAX_ASD) AS TODAY_MAX_ASD , MIN(T3.MAX_ASD) AS NEXT_MAX_ASD FROM (SELECT WH_ID , THE_DATE , IS_OPEN , (IFNULL(SUBSTR(THE_DATE,1,10),'1900-01-01') || ' ' || STOP_TIME)::TIMESTAMP AS STOP_TIME FROM DMISC.DM_DIM_CBG_WH_HOLIDAY_D ) T1 LEFT JOIN TMP T2 ON T1.WH_ID = T2.WH_ID AND T1.THE_DATE < T2.STOP_TIME LEFT JOIN TMP T3 ON T1.WH_ID = T3.WH_ID AND ADDDATE(T1.THE_DATE,1) < T3.STOP_TIME GROUP BY T1.WH_ID, T1.THE_DATE, T1.IS_OPEN;

从SQL中不难看出,物理表HOLIDAY_D使用WH_ID为关联键,并使用其它字段做不等值关联。

3、【性能分析】

QUERY PLAN | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| id | operation | E-rows | E-distinct | E-memory | E-width | E-costs | ---- ---------------------------------------------------------------------------------- --------------- ------------ --------------- --------- ----------------- | 1 | -> Row Adapter | 51584 | | | 67 | 377559930171.36 | 2 | -> Vector Streaming (type: GATHER) | 51584 | | | 67 | 377559930171.36 | 3 | -> Vector Hash Aggregate | 51584 | | 16MB | 67 | 377559929546.36 | 4 | -> Vector CTE Append(5, 7) | 5699739636332 | | 1MB | 43 | 292063834485.54 | 5 | -> Vector Streaming(type: BROADCAST) | 757752 | | 2MB | 22 | 1474.87 | 6 | -> CStore Scan on dmisc.dm_dim_cbg_wh_holiday_d [5, CTE tmp(1)] | 757752 | | 1MB | 22 | 1474.87 | 7 | -> Vector Hash Left Join (8, 11) | 5699739636332 | | 107MB(6863MB) | 43 | 292063833010.67 | 8 | -> Vector Hash Right Join (9, 10) | 542231841 | 50 | 16MB | 27 | 22365789.31 | 9 | -> Vector CTE Scan on tmp(1) t3 | 31573 | 50 | 1MB | 48 | 15155.04 | 10 | -> CStore Scan on dmisc.dm_dim_cbg_wh_holiday_d | 51584 | 50 | 1MB | 19 | 556.58 | 11 | -> Vector CTE Scan on tmp(1) t2 | 31573 | 50 | 1MB | 48 | 15155.04 |

由于SQL非常慢,难以打出performance计划,我们先看verbose计划。从计划中我们看到,经过两次的关联发散,估计数据量达到了5万亿行;因为hash join根据WH_ID列进行关联,实际不会有这么多。所以调优的思路就是取消一些发散,让中间结果集行数变少。

4、【改写SQL】

分析SQL,可知发散是为了寻找所有STOP_TIME中大于本行THE_DATE的最小值。像这种每行都需要用到本行数据和所有数据的逻辑,或许可以使用窗口函数进行编写;但囿于笔者能力,先提供单次自关联的方法。

SQL改写如下:

explain performance WITH TMP AS ( SELECT WH_ID , (IFNULL(SUBSTR(THE_DATE,1,10),'1900-01-01') || ' ' || STOP_TIME)::TIMESTAMP AS STOP_TIME , (IFNULL(SUBSTR(THE_DATE,1,10),'1900-01-01') || ' ' || '23:59:59')::TIMESTAMP AS MAX_ASD FROM DMISC.DM_DIM_CBG_WH_HOLIDAY_D WHERE IS_OPEN = 'Y' AND STOP_TIME IS NOT NULL ) SELECT T1.WH_ID , T1.THE_DATE , T1.IS_OPEN , MIN(CASE WHEN T1.THE_DATE < T2.STOP_TIME THEN STOP_TIME ELSE NULL END) AS STOP_TIME , MIN(CASE WHEN T1.THE_DATE < T2.STOP_TIME THEN T2.MAX_ASD ELSE NULL END) AS TODAY_MAX_ASD , MIN(CASE WHEN ADDDATE(T1.THE_DATE, 1) < T2.STOP_TIME THEN T2.MAX_ASD ELSE NULL END) AS NEXT_MAX_ASD FROM (SELECT DISTINCT WH_ID , THE_DATE , IS_OPEN FROM DMISC.DM_DIM_CBG_WH_HOLIDAY_D ) T1 LEFT JOIN TMP T2 ON T1.WH_ID = T2.WH_ID GROUP BY T1.WH_ID , T1.THE_DATE , T1.IS_OPEN ;

经过改写,取消了一次自关联,SQL的中间结果集变小。在关联后,通过条件聚合来得到需要的值。

id | operation | A-time | A-rows | E-rows | E-distinct | Peak Memory | E-memory | A-width | E-width | E-costs ---- ----------------------------------------------------------------- ---------------------- ---------- -------- ------------ ---------------- ---------- ----------- --------- ---------- 1 | -> Row Adapter | 7490.354 | 34035 | 200 | | 70KB | | | 58 | 15149.80 2 | -> Vector Streaming (type: GATHER) | 7488.129 | 34035 | 200 | | 216KB | | | 58 | 15149.80 3 | -> Vector Hash Aggregate | [7481.430, 7481.430] | 34035 | 200 | | [9MB, 9MB] | 16MB | [112,112] | 58 | 15137.30 4 | -> Vector Hash Left Join (5, 7) | [909.377, 909.377] | 31204164 | 109803 | | [2MB, 2MB] | 16MB | | 34 | 3880.50 5 | -> Vector Sonic Hash Aggregate | [5.876, 5.876] | 34035 | 34036 | 6807 | [3MB, 3MB] | 16MB | [51,51] | 18 | 1127.67 6 | -> CStore Scan on dmisc.dm_dim_cbg_wh_holiday_d | [0.199, 0.199] | 34036 | 34036 | | [792KB, 792KB] | 1MB | | 18 | 532.04 7 | -> CStore Scan on dmisc.dm_dim_cbg_wh_holiday_d | [40.794, 40.794] | 25122 | 21960 | 19 | [1MB, 1MB] | 1MB | [59,59] | 24 | 617.13

从执行计划中可以看到,中间结果集大小已经在可接受的范围内。但是又看到聚合3千万数据使用了6s 的时间,这是过慢的,需要看执行计划中的DN信息寻找原因 。

Datanode Information (identified by plan id) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 --Row Adapter (actual time=7486.4987490.354 rows=34035 loops=1) (CPU: ex c/r=107, ex row=34035, ex cyc=3668104, inc cyc=22468059912) 2 --Vector Streaming (type: GATHER) (actual time=7486.4667488.129 rows=34035 loops=1) (Buffers: shared hit=1) (CPU: ex c/r=660037, ex row=34035, ex cyc=22464391808, inc cyc=22464391808) 3 --Vector Hash Aggregate dn_6083_6084 (actual time=7479.6447481.430 rows=34035 loops=1) (projection time=4488.807) dn_6083_6084 (Buffers: shared hit=40) dn_6083_6084 (CPU: ex c/r=631, ex row=31204164, ex cyc=19718763112, inc cyc=22443886288) 4 --Vector Hash Left Join (5, 7) dn_6083_6084 (actual time=48.009909.377 rows=31204164 loops=1) dn_6083_6084 (Buffers: shared hit=36) dn_6083_6084 (CPU: ex c/r=43699, ex row=59157, ex cyc=2585141400, inc cyc=2725123176) 5 --Vector Sonic Hash Aggregate dn_6083_6084 (actual time=5.1775.876 rows=34035 loops=1) dn_6083_6084 (Buffers: shared hit=11) dn_6083_6084 (CPU: ex c/r=500, ex row=34036, ex cyc=17027544, inc cyc=17619064) 6 --CStore Scan on dmisc.dm_dim_cbg_wh_holiday_d dn_6083_6084 (actual time=0.0430.199 rows=34036 loops=1) (CU ScanInfo: smallCu: 0, totalCu: 1, avrCuRow: 34036, totalDeadRows: 0) dn_6083_6084 (Buffers: shared hit=11) dn_6083_6084 (CPU: ex c/r=17, ex row=34036, ex cyc=591520, inc cyc=591520) 7 --CStore Scan on dmisc.dm_dim_cbg_wh_holiday_d dn_6083_6084 (actual time=6.46440.794 rows=25122 loops=1) (filter time=0.872 projection time=33.671) (RoughCheck CU: CUNone: 0, CUTagNone: 0, CUSome: 1) (CU ScanInfo: smallCu: 0, totalCu: 1, avrCuRow: 34036, totalDeadRows: 0) dn_6083_6084 (Buffers: shared hit=25) dn_6083_6084 (CPU: ex c/r=3595, ex row=34036, ex cyc=122362712, inc cyc=122362712)

从中可以看出,所有算子都只在一个DN上运行了。这可以视为严重的计算倾斜,若对单点性能有更高要求需要继续优化。查看DMISC.DM_DIM_CBG_WH_HOLIDAY_D表的定义,发现它是一个复制表(distribute by replication),在进行各层运算的时候只用其中一个DN来算。而在本SQL中,使用到这张表的时候,关联键都是WH_ID

再查看调整分布列为WH_ID的倾斜情况:

select * from pg_catalog.table_skewness('DMISC.DM_DIM_CBG_WH_HOLIDAY_D', 'wh_id');

结果有23行,小于集群DN个数,且存在倾斜。但是本SQL需要使用该表的全量数据,故可以把这张表改为使用WH_ID作为分步键进行重分布。

由表分布方式为复制表导致的计算倾斜无法使用skew hint解决,可以改变物理表分布方式或者创建临时表来解决(复制表通常较小)。由于表在SQL中的使用情况和表的倾斜情况,不适合更改物理表分步键为WH_ID,故本例中试使用创建临时表指定重分布方式的办法解决。

DROP TABLE IF EXISTS holiday_d_tmp; CREATE TEMP TABLE holiday_d_tmp WITH ( orientation = COLUMN, compression = low ) distribute BY hash ( wh_id ) AS ( SELECT * FROM DMISC.DM_DIM_CBG_WH_HOLIDAY_D ); EXPLAIN performance WITH TMP AS ( SELECT WH_ID, ( IFNULL ( SUBSTR( THE_DATE, 1, 10 ), '1900-01-01' ) || ' ' || STOP_TIME ) :: TIMESTAMP AS STOP_TIME, ( IFNULL ( SUBSTR( THE_DATE, 1, 10 ), '1900-01-01' ) || ' ' || '23:59:59' ) :: TIMESTAMP AS MAX_ASD FROM holiday_d_tmp WHERE IS_OPEN = 'Y' AND STOP_TIME IS NOT NULL ) SELECT T1.WH_ID, T1.THE_DATE, T1.IS_OPEN, MIN ( CASE WHEN T1.THE_DATE < T2.STOP_TIME THEN STOP_TIME ELSE NULL END ) AS STOP_TIME, MIN ( CASE WHEN T1.THE_DATE < T2.STOP_TIME THEN T2.MAX_ASD ELSE NULL END ) AS TODAY_MAX_ASD, MIN ( CASE WHEN ADDDATE ( T1.THE_DATE, 1 ) < T2.STOP_TIME THEN T2.MAX_ASD ELSE NULL END ) AS NEXT_MAX_ASD FROM ( SELECT WH_ID, THE_DATE, IS_OPEN FROM holiday_d_tmp ) T1 LEFT JOIN TMP T2 ON T1.WH_ID = T2.WH_ID GROUP BY T1.WH_ID, T1.THE_DATE, T1.IS_OPEN;

下面是对应的执行计划:

id | operation | A-time | A-rows | E-rows | E-distinct | Peak Memory | E-memory | A-width | E-width | E-costs ---- -------------------------------------------------------------------------------------- ------------------ ---------- ---------- ------------ ---------------- ---------- --------- --------- ---------- 1 | -> Row Adapter | 673.495 | 34035 | 34032 | | 70KB | | | 58 | 68112.60 2 | -> Vector Streaming (type: GATHER) | 671.103 | 34035 | 34032 | | 216KB | | | 58 | 68112.60 3 | -> Vector Hash Aggregate | [0.079, 672.724] | 34035 | 34032 | | [1MB, 1MB] | 16MB | [0,114] | 58 | 67794.10 4 | -> Vector Hash Left Join (5, 6) | [0.047, 76.395] | 31205167 | 27587201 | | [324KB, 485KB] | 16MB | | 34 | 8876.88 5 | -> CStore Scan on pg_temp_cn_5003_6_22022_139764371019520.holiday_d_tmp | [0.004, 0.098] | 34036 | 34036 | 1 | [760KB, 792KB] | 1MB | | 18 | 1553.65 6 | -> CStore Scan on pg_temp_cn_5003_6_22022_139764371019520.holiday_d_tmp | [0.008, 3.253] | 25122 | 22018 | 1 | [880KB, 1MB] | 1MB | [0,61] | 24 | 1557.76

从计划中我们可以看到,耗时比单个DN运算快了不少,当然这里没有算上创建临时表的时间约0.2s。

5、【调优总结】

在本案例中,因为实际执行SQL时间太长先看了verbose计划而非performance计划,发现中间结果集发散问题后,进行等价逻辑改写,把两个(等值-不等值)关联改为一个等值关联和条件聚合。之后,我们发现SQL因复制表存在计算倾斜问题,考虑SQL消费表数据的方式表的统计数据,采用了使用临时表重新指定分布方式的方法,解决了计算倾斜问题,SQL从单点25min 优化到单点800ms。

关注#华为云开发者联盟#点击下方,第一时间了解华为云新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

人天天都会学到一点东西,往往所学到的是发现昨日学到的是错的。从上文的内容,我们可以清楚地了解到大数据深度分析。如需更深入了解,可以看看谈闻财经的其他内容。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息储存空间服务,不拥有所有权,不承担相关法律责任。如有发现本站涉嫌抄袭侵权/违法违规的内容,请发送邮件,一经查实,本站将立刻删除。

猜你喜欢

  • 080080技巧

    080080

    万代高达有什么区别?答PG(Prefact Grade)顾名思义完美模型,万代公司于1998年开始发售本级别的高达模型.被广大玩家认做是最梦寐以求的高达模型.本系列只有...

    2024-05-04 80
  • ┏ 久其报表系统的现金流量如何填报 ┛久其报表是什么报表技巧

    ┏ 久其报表系统的现金流量如何填报 ┛久其报表

    人工智能在医疗保健中的飞速进步人工智能(AI)正在迅速改变医疗保健行业,为患者、医生和整个医疗系统带来了众多好处。从诊断到治疗,再到药物发...

    2024-05-04 56
  • 达安基因股票前景如何技巧

    达安基因股票前景如何

    技术的双刃剑:对社会的影响技术作为不可否认的人类进步推动者,随着时间的推移,已经对社会产生了深远的影响,既产生了积极后果,也带来了负面影...

    2024-05-04 196
  • 华安证券杯金融知识大赛感想—华安证券杯安徽省答案技巧

    华安证券杯金融知识大赛感想—华安证券杯安徽

    华安证券在广州有几个营业部最佳答案华安是个较小的券商,在广州相对少营业部;1、华安证券广州东湖西路证券营业部2、华安证券广州番禺广华南路证...

    2024-05-04 175
  • 板块与版块意思的区别,板块还是版块?技巧

    板块与版块意思的区别,板块还是版块?

    板块与版块意思的区别,板块还是版块?最佳答案区别1、释义:板块是板块构造学说所提出来的概念;版块是具有共性的事、物的集合;2、运用:板块运用在...

    2024-05-04 81
  • 中国黄金股票明天预测分析;中国黄金股票行情走势今天技巧

    中国黄金股票明天预测分析;中国黄金股票行情走

    黄金价格、金价下跌、市场波动、投资金融、财经新闻## 暴跌!3日国际黄金价格下跌!今日金价!国内今日金价价格波动!大家好,我是你的头条号编辑。...

    2024-05-04 131
  • 中联电气股票好不好。中字头股票有哪些技巧

    中联电气股票好不好。中字头股票有哪些

    中字头股票有哪些优质回答1、中国电建[601669]2、中国中车[601766]3、中国中铁[601390]4、中国出版[601949]5、中国电影[600977]6、中国动力[600482]7、中国国航[6011...

    2024-05-04 73
  • 永清环保股票多少钱-永清环境股票技巧

    永清环保股票多少钱-永清环境股票

    ppt股票有哪些优质回答你好,你说的应该是PPP吧,国中水务 东江环保 中国中铁 中国交建 富煌钢构 围海股份 中电环保中国铁建 宝德股份 中国建筑 华控赛...

    2024-05-04 180
  • 600216浙江医药股票行情分析—浙江医药股票分析报告技巧

    600216浙江医药股票行情分析—浙江医药股票分析

    今日浙江医药(600216)涨9.97%,收盘报16.21元。2022年8月26日,光大证券研究员赵乃迪发布了对浙江医药的研报《2022年半年报点评:VA价格下跌Q2业绩承压下滑...

    2024-05-04 68
  • 杭萧钢构招聘代表怎么样!杭萧钢构贴吧技巧

    杭萧钢构招聘代表怎么样!杭萧钢构贴吧

    本文通过对杭萧钢构(600477)进行全面的分析和研究,从公司的背景、业绩表现、市场前景等方面进行了深入剖析,并给出投资建议。杭萧钢构(600477)作...

    2024-05-04 148
  • 量价分析云南白药股票走势技巧

    量价分析云南白药股票走势

    人工智能的双刃剑:机遇与风险人工智能(AI)是现代科技领域最引人注目的发展之一,它拥有改变我们生活的巨大潜力。然而,正如任何强大的技术一样...

    2024-05-04 66
  • 财通证券股票买卖怎么收费;股票交易手续费怎么算?技巧

    财通证券股票买卖怎么收费;股票交易手续费怎么

    股票交易手续费怎么算?答一、举例1、假设股民A在上交所以每股15元的价格,购买了10000股某股票,3个月之后,又以18元的价格全部卖出,股民A需要缴纳的...

    2024-05-04 95
  • 股票趋势分析技巧

    股票趋势分析

    股票趋势分析答600963,受益人民币升值预期,该股近期在5日线和10日线宽幅震荡,但是收盘都没有破位,说明主力控盘力度较大,后市有望上行,但是要注...

    2024-05-04 140
  • 安居乐业的词语意思技巧

    安居乐业的词语意思

    “安居乐业”是人们的美好愿望,人们经常用到“安居乐业”这个成语,可朋友们知道是谁说出“安居乐业”这个成语吗?今天我们就来聊聊“安居乐业”...

    2024-05-04 137
  • 银泰黄金可以长期持有吗?技巧

    银泰黄金可以长期持有吗?

    银泰黄金可以长期持有吗?答银泰黄金可以长期持有。原因是,黄金作为一种稀缺资源和避险资产,具有保值和增值的特性。在经济不稳定或通货膨胀的情...

    2024-05-04 125
  • ┏ 联众打码怎么用 ┛联众打码怎么了技巧

    ┏ 联众打码怎么用 ┛联众打码怎么了

    数字革命:技术对社会的深刻影响信息和通信技术在当今社会发展中正发挥着至关重要的作用。数字革命,即以计算机、互联网和移动技术为特色的技术进...

    2024-05-04 79
  • 还有硅矿目前的行情是什么?技巧

    还有硅矿目前的行情是什么?

    还有硅矿目前的行情是什么?最佳答案三峡新材(600293)是一只拥有中南地区最大的硅矿的上市企业 在太阳能行业里,所谓得硅者得天下! 多晶硅是一种太阳...

    2024-05-04 169
  • 〈佳通轮胎雪地胎质量怎么样〉佳通雪地轮胎怎么样?技巧

    〈佳通轮胎雪地胎质量怎么样〉佳通雪地轮胎怎

    佳通轮胎冬季产品怎么样?佳通品牌靠谱吗?答你好,佳通轮胎还是可以的,也是老牌子了,相对比较还算性价比高的,轮胎质量也可以。雪地轮胎怎么样...

    2024-05-04 63
  • 分期付款交易日是什么意思技巧

    分期付款交易日是什么意思

    分期付款交易日是什么意思优质回答是指你申请成功分期付款那一天。例如你今天向银行申请分期(账单分期),银行审核通过后,审核通过那天就是交易...

    2024-05-04 192
  • 东方证券交易系统怎么安装.东方证券电脑交易软件技巧

    东方证券交易系统怎么安装.东方证券电脑交易软

    东方证券软件有什么特点?答东方证券钱龙金典版是以钱龙券商营业部版为蓝本开发的新一代因特网股票分析软件,继承了传统钱龙的界面和功能特点,东...

    2024-05-04 65