哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過SQL計算同時在線問題

數(shù)據(jù)分析與開發(fā) ? 來源:CSDN博客 ? 作者:石榴公子YYDS ? 2021-09-30 14:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文是通過 SQL 計算同時在線問題,即求最高在線人數(shù)以及最高峰時間段。

0 需求分析

數(shù)據(jù)為主播ID,stt表示開播時間,edt表示下播時間。

idsttedt

10012021-06-14 12122021-06-14 1812

10032021-06-14 13122021-06-14 1612

10042021-06-14 13122021-06-14 2012

10022021-06-14 15122021-06-14 1612

10052021-06-14 15122021-06-14 2012

10012021-06-14 20122021-06-14 2312

10062021-06-14 21122021-06-14 2312

10072021-06-14 22122021-06-14 2312

求:

(1)該平臺某一天主播同時在線人數(shù)最高為多少?

(2)出現(xiàn)最高峰的時間段是哪個時間?

1 數(shù)據(jù)準(zhǔn)備

(1)數(shù)據(jù)

vim play.txt

idstt edt

10012021-06-14 1212 2021-06-14 1812

10032021-06-14 13122021-06-14 1612

10042021-06-14 13122021-06-14 2012

10022021-06-14 15122021-06-14 1612

10052021-06-14 15122021-06-14 2012

10012021-06-14 20122021-06-14 2312

10062021-06-14 21122021-06-14 2312

10072021-06-14 22122021-06-14 2312

(2) 建表

create table if not exists play(

id string,

stt string,

edt string

row format delimitedfields terminated by ‘ ’

;

(3 )加載數(shù)據(jù)

load data local inpath “/home/centos/dan_test/play.txt” into table play;

(4) 查詢數(shù)據(jù)

hive》 select * from play;

OK

1001 2021-06-14 12:12:12 2021-06-14 18:12:121003 2021-06-14 13:12:12 2021-06-14 16:12:121004 2021-06-14 13:15:12 2021-06-14 20:12:121002 2021-06-14 15:12:12 2021-06-14 16:12:121005 2021-06-14 15:18:12 2021-06-14 20:12:121001 2021-06-14 20:12:12 2021-06-14 23:12:121006 2021-06-14 21:12:12 2021-06-14 23:15:121007 2021-06-14 22:12:12 2021-06-14 23:10:12

Time taken: 0.087 seconds, Fetched: 8 row(s)

2 數(shù)據(jù)分析

問題1分析:

本題如果直接從SQL本身很難下手,無從做起,不妨我們換個思路,假定我們拿到的是一條數(shù)據(jù),現(xiàn)在用java程序怎么做?其實就是一個累加器的思想(如SPARK的累加器)。首先我們需要將這樣一條記錄進行拆分,分成不同的記錄或數(shù)據(jù)流進入累加器,然后給每條記錄進行標(biāo)記,如果開播的話該條記錄記為1,下播的話記為-1,此時的數(shù)據(jù)流按照時間順序依次進入累加器,然后在累加器中進行疊加,其中累計的結(jié)果最大時候就是所求的結(jié)果。其實本質(zhì)是利用累加器思想,但進入累加器的數(shù)據(jù)是按時間排好序的時序流數(shù)據(jù)(數(shù)據(jù)進入按時間先后順序進入)。

上述思路總結(jié)如下:

(1)將數(shù)據(jù)切分(按起始時間和結(jié)束時間)

(2)數(shù)據(jù)進行標(biāo)簽,開播的記錄為記為1,下播的記錄記為-1用于累加

(2)將數(shù)據(jù)按時間進行排序

(3)數(shù)據(jù)進入累加器進行累加

(4)獲取累加器中當(dāng)前累加值最大的數(shù)值

有了以上思路后,我們將其轉(zhuǎn)換為SQL求解思路。

(1)將數(shù)據(jù)切分:實際上就是將開播時間和下播時間轉(zhuǎn)換成一條條記錄。也就是列轉(zhuǎn)行,我們用熟悉的UNION操作,進行轉(zhuǎn)換。

select id,stt dt from play

unionselect id,edt dt from play

--------------------------------------------------------------------------------

OK

1001 2021-06-14 12:12:121001 2021-06-14 18:12:121001 2021-06-14 20:12:121001 2021-06-14 23:12:121002 2021-06-14 15:12:121002 2021-06-14 16:12:121003 2021-06-14 13:12:121003 2021-06-14 16:12:121004 2021-06-14 13:15:121004 2021-06-14 20:12:121005 2021-06-14 15:18:121005 2021-06-14 20:12:121006 2021-06-14 21:12:121006 2021-06-14 23:15:121007 2021-06-14 22:12:121007 2021-06-14 23:10:12

Time taken: 20.502 seconds, Fetched: 16 row(s)

(2) 數(shù)據(jù)標(biāo)記。在上述SQL基礎(chǔ)上直接進行標(biāo)記即可。如果數(shù)據(jù)本來就是分開的則用case when進行標(biāo)記。

select id,stt dt , 1 flag from play

unionselect id,edt dt ,-1 flag from play

--------------------------------------------------------------------------------

OK

1001 2021-06-14 12:12:12 11001 2021-06-14 18:12:12 -11001 2021-06-14 20:12:12 11001 2021-06-14 23:12:12 -11002 2021-06-14 15:12:12 11002 2021-06-14 16:12:12 -11003 2021-06-14 13:12:12 11003 2021-06-14 16:12:12 -11004 2021-06-14 13:15:12 11004 2021-06-14 20:12:12 -11005 2021-06-14 15:18:12 11005 2021-06-14 20:12:12 -11006 2021-06-14 21:12:12 11006 2021-06-14 23:15:12 -11007 2021-06-14 22:12:12 11007 2021-06-14 23:10:12 -1

Time taken: 7.408 seconds, Fetched: 16 row(s)

(3)數(shù)據(jù)按照時間排序,進入累加器進行累加(按時間排序是累加的關(guān)鍵)

select id

,dt

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

--------------------------------------------------------------------------------

OK

1001 2021-06-14 12:12:12 11003 2021-06-14 13:12:12 21004 2021-06-14 13:15:12 31002 2021-06-14 15:12:12 41005 2021-06-14 15:18:12 51002 2021-06-14 16:12:12 31003 2021-06-14 16:12:12 31001 2021-06-14 18:12:12 21001 2021-06-14 20:12:12 11004 2021-06-14 20:12:12 11005 2021-06-14 20:12:12 11006 2021-06-14 21:12:12 21007 2021-06-14 22:12:12 31007 2021-06-14 23:10:12 21001 2021-06-14 23:12:12 11006 2021-06-14 23:15:12 0

Time taken: 8.133 seconds, Fetched: 16 row(s)

(4) 獲取累加器中當(dāng)前時刻累加的最大值,即為同時開播最多的人數(shù)

select max(cur_cnt)

from(

select id

,dt

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

) m

--------------------------------------------------------------------------------

OK

5

Time taken: 13.087 seconds, Fetched: 1 row(s)

問題2分析:

第二問求的是出現(xiàn)高峰時的時間段,也就是高峰時間的起始時間及結(jié)束時間,或持續(xù)時長。

借鑒第一問的結(jié)果進行分析:

select *,max(cur_cnt) over()

from(

select id

,dt

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

) m

通過上圖我們可以看出當(dāng)由峰值出的記錄時間到下一條記錄人數(shù)減少的時候這一段時間即為峰值持續(xù)的時間,或高峰的時間段,也就是求出峰值的下一條記錄的時間與峰值對應(yīng)記錄的時間即為高峰時間段,因此利用lead()函數(shù)很容易求出問題的答案。SQL如下:

select max_cur_cnt

,dt as start_time

,lead_dt as end_time

from(

select *

,lead(dt,1,dt) over(order by dt) lead_dt

from(

select *,max(cur_cnt) over() as max_cur_cnt

from(

select id

,dt

,flag

,sum(flag) over(order by dt) as cur_cnt

from(

select id,stt dt , 1 flag from play

union

select id,edt dt ,-1 flag from play

) t

) m

) n

) p

where cur_cnt=max_cur_cnt

計算結(jié)果如下:

--------------------------------------------------------------------------------

OK

5 2021-06-14 15:18:12 2021-06-14 16:12:12

Time taken: 17.513 seconds, Fetched: 1 row(s)

3 小結(jié)

本文針對SQL統(tǒng)計同時在線人數(shù)問題進行了分析,利用累加器思想對該問題進行求解,最終劃歸為時序數(shù)據(jù),進行時序數(shù)據(jù)分析(常用技巧:打標(biāo)簽,形成序列,多序列進行分析),最后利用sum() over()對標(biāo)簽進行累加求出當(dāng)前在線人數(shù)本題最關(guān)鍵的點在于轉(zhuǎn)換為時序數(shù)據(jù)及累加器的思想,望讀者能夠掌握。

事實上該問題的分析在業(yè)務(wù)上具有重要的意義,我們能夠?qū)崟r跟蹤隨著時間變化的在線人數(shù),了解服務(wù)器的負載變化情況,服務(wù)器的實時并發(fā)數(shù)等。該問題在不同業(yè)務(wù)場景下,有不同意義,比如某個游戲的同時在線人數(shù),比如某個服務(wù)器的實時并發(fā)數(shù),比如某個倉庫的貨物積壓數(shù)量,某一段時間內(nèi)的同時處于服務(wù)過程中的最大訂單量等。實際上求最大在線人數(shù)和求實時在線人數(shù)是一回事,最大人數(shù)依賴于當(dāng)前在線人數(shù)表,只有先求出當(dāng)前在線人數(shù)表,才能求出最大同時在線人數(shù)。

不謀全局者,不足以謀一域。

不謀萬世者,不足以謀一時。

作者: 石榴公子YYDS

https://blog.csdn.net/godlovedaniel/article/details/118651811

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7348

    瀏覽量

    95017
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    807

    瀏覽量

    46937

原文標(biāo)題:3 小結(jié)

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    郭燕濤SQL Server 全能管理員在線課程分享

    ”的 SQL Server 管理員核心在線課程,絕不是幾個數(shù)據(jù)庫控制臺的點擊演示,它實際上是一份企業(yè)級“數(shù)字資產(chǎn)風(fēng)控指南”,是一門關(guān)于算力精算與信任契約的隱性經(jīng)濟學(xué)。 一、 實例配置:對抗“算力通貨膨脹”的微觀
    發(fā)表于 04-19 16:28

    通過JLINK在線仿真運行HSE DEMO失敗原因

    S32K344 hse DEMO在S32K314上無法通過JLINK在線仿真正常運行,運行后直接進入HardFault。請幫忙分析原因,謝謝。
    發(fā)表于 04-15 09:13

    NineData SQL AI 智能補全上線:寫 SQL,不必每次都從頭敲

    NineData推出SQLAI智能補全功能,通過AI技術(shù)實現(xiàn)上下文感知的SQL語句智能提示。該功能不僅能補全關(guān)鍵字,還能根據(jù)當(dāng)前輸入內(nèi)容預(yù)測后續(xù)查詢意圖,顯著提升多表關(guān)聯(lián)、復(fù)雜條件等場景下的編寫效率
    的頭像 發(fā)表于 04-01 20:19 ?272次閱讀
    NineData <b class='flag-5'>SQL</b> AI 智能補全上線:寫 <b class='flag-5'>SQL</b>,不必每次都從頭敲

    SQL分析選型:DMS/DAS與NineData該如何選擇

    阿里云 DMS 的慢SQL 趨勢、DAS 的 SQL 審計能力成熟,可滿足阿里云用戶基礎(chǔ)需求。NineData 側(cè)重跨云統(tǒng)一工作臺、研發(fā)與 DBA 協(xié)同,打通慢日志分析、性能診斷、規(guī)范審核、索引建議全鏈路,更適配企業(yè)級慢查詢持續(xù)治理。
    的頭像 發(fā)表于 03-25 17:20 ?1536次閱讀
    慢<b class='flag-5'>SQL</b>分析選型:DMS/DAS與NineData該如何選擇

    NineData 社區(qū)版的慢SQL分析,比查看日志+看EXPLAIN適合中小團隊

    本文探討 NineData 社區(qū)版在 MySQL 慢 SQL 場景對中小團隊的適用性。與 “查看日志 + 看 EXPLAIN” 傳統(tǒng)方式不同,它將慢 SQL 按模板聚合,能從大盤、模板、診斷等多維
    的頭像 發(fā)表于 03-17 14:07 ?120次閱讀
    NineData 社區(qū)版的慢<b class='flag-5'>SQL</b>分析,比查看日志+看EXPLAIN適合中小團隊

    MySQL 慢 SQL 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    DBeaver Community 和 Navicat Premium Lite 都是很有價值的客戶端工具,在單條 SQL 的查詢和驗證上,依然是 DBA 最順手的入口。 但 NineData
    的頭像 發(fā)表于 03-17 11:53 ?128次閱讀
    MySQL 慢 <b class='flag-5'>SQL</b> 排查這件事,NineData 社區(qū)VS DBeaver/ Navicat 技術(shù)分析

    如何計算適合電能質(zhì)量在線監(jiān)測裝置的外部UPS容量?

    計算適合電能質(zhì)量在線監(jiān)測裝置的外部 UPS 容量,核心邏輯是 **“覆蓋總功率需求 + 預(yù)留冗余”**,需通過 “確定總功率→引入功率因數(shù)→疊加冗余→匹配標(biāo)準(zhǔn)規(guī)格” 四步完成,關(guān)鍵是不能僅計算
    的頭像 發(fā)表于 11-05 11:11 ?948次閱讀

    電纜隧道在線監(jiān)測的技術(shù)及其應(yīng)用難點

    電纜隧道在線監(jiān)測是保障電纜隧道運行安全的一種有效方法,其通過集成應(yīng)用多種技術(shù)(如物聯(lián)網(wǎng)、云計算及智能分析、傳感器等),在實現(xiàn)故障預(yù)防與快速定位的同時,提升運維效率,保障安全。此外也在很
    的頭像 發(fā)表于 10-24 11:14 ?420次閱讀
    電纜隧道<b class='flag-5'>在線</b>監(jiān)測的技術(shù)及其應(yīng)用難點

    不用編程不用聯(lián)網(wǎng),實現(xiàn)倍福(BECKHOFF)PLC對接SQL數(shù)據(jù)庫,上報和查詢數(shù)據(jù)的案例

    的數(shù)值;查看過程數(shù)據(jù)(工具->網(wǎng)關(guān)數(shù)據(jù)監(jiān)控):顯示當(dāng)前任務(wù)組對應(yīng)的過程數(shù)據(jù), 即SQL語句。 倍福PLC內(nèi)需要添加智能網(wǎng)關(guān)的IP地址,同時要確認PLC的AMS ID,AMS網(wǎng)絡(luò)端口等參數(shù)
    發(fā)表于 10-10 11:14

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫表中的每個列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?856次閱讀

    Text2SQL準(zhǔn)確率暴漲22.6%!3大維度全拆

    基于 BIRD 數(shù)據(jù)集展開。 方法:提出 J-Schema 呈現(xiàn)數(shù)據(jù)庫結(jié)構(gòu)并合理提供示例值,結(jié)合思維鏈引導(dǎo)模型推理。采用 Iterative DPO 迭代訓(xùn)練,多輪迭代提升性能。用自洽性方法,通過硬 / 軟投票從多個候選答案中選最優(yōu),軟投票更優(yōu)。 結(jié)果:解決 Text2SQL
    的頭像 發(fā)表于 08-14 11:17 ?821次閱讀
    Text2<b class='flag-5'>SQL</b>準(zhǔn)確率暴漲22.6%!3大維度全拆

    不用編程序無需聯(lián)外網(wǎng),將Rockwell羅克韋爾(AB)PLC的標(biāo)簽數(shù)據(jù)存入SQL數(shù)據(jù)庫

    IGT-DSER網(wǎng)關(guān)的網(wǎng)口1,先配置網(wǎng)絡(luò)參數(shù)(默認IP:192.168.1.244,確認PC的網(wǎng)口與網(wǎng)關(guān)默認IP同網(wǎng)段),通過‘工具’->‘搜索在線網(wǎng)關(guān)’,搜索到網(wǎng)關(guān)后,修改IP地址等參數(shù)
    發(fā)表于 07-31 10:33

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?841次閱讀
    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—<b class='flag-5'>SQL</b> Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    達夢數(shù)據(jù)庫常用管理SQL命令詳解

    達夢數(shù)據(jù)庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?7646次閱讀
    達夢數(shù)據(jù)庫常用管理<b class='flag-5'>SQL</b>命令詳解

    大促數(shù)據(jù)庫壓力激增,如何一眼定位 SQL 執(zhí)行來源?

    你是否曾經(jīng)遇到過這樣的情況:在大促活動期間,用戶訪問量驟增,數(shù)據(jù)庫的壓力陡然加大,導(dǎo)致響應(yīng)變慢甚至服務(wù)中斷?更讓人頭疼的是,當(dāng)你試圖快速定位問題所在時,卻發(fā)現(xiàn)難以確定究竟是哪個業(yè)務(wù)邏輯中的 SQL
    的頭像 發(fā)表于 06-10 11:32 ?659次閱讀
    大促數(shù)據(jù)庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執(zhí)行來源?
    丹凤县| 荔浦县| 双桥区| 科尔| 那曲县| 夹江县| 周宁县| 调兵山市| 长治县| 吉隆县| 华安县| 图片| 云浮市| 长春市| 道孚县| 武平县| 尉犁县| 石台县| 紫阳县| 济南市| 青海省| 万载县| 曲麻莱县| 舒城县| 渭南市| 卓资县| 南雄市| 湟源县| 普陀区| 隆回县| 班玛县| 右玉县| 漳州市| 乐至县| 泽库县| 襄汾县| 连江县| 株洲市| 南川市| 越西县| 靖边县|