Starrocks实时指标-物化视图SQL示例

举报
Smy1121 发表于 2025/05/26 18:08:31 2025/05/26
【摘要】 CREATE MATERIALIZED VIEW mv_realtime_alarm_statisticsCOMMENT '实时报警等级统计:高等级/中等级/低等级'REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) PROPERTIES ("replication_num" = "1")AS WITH...


CREATE MATERIALIZED VIEW mv_realtime_alarm_statistics

COMMENT '实时报警等级统计:高等级/中等级/低等级'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS 

WITH sort_values AS (

    SELECT 1 AS Sort UNION ALL

    SELECT 2 UNION ALL

    SELECT 3

)

SELECT 

    COALESCE(alarm_info.DeviceAlarmLevelId, NULL) AS DeviceAlarmLevelId,

    sv.Sort,

    alarmlevel.Name,

    COALESCE(alarm_info.cnt, 0) AS cnt

FROM sort_values sv

LEFT JOIN (

    SELECT 

        AlarmLevelId AS DeviceAlarmLevelId, 

        AlarmLevelSort AS Sort, 

        COUNT(*) AS cnt

    FROM bigdata_bi.ods_db_evoc_deviceinfo_alarm_info

    WHERE ParkId = 1625043522838081536

    AND NOT IsWhiteList

    AND HandleStatus = 1

    GROUP BY AlarmLevelId, AlarmLevelSort

) alarm_info ON sv.Sort = alarm_info.Sort

LEFT JOIN (

    SELECT 

        ALevelId, Custom, Name, ParkId, Remark, Sort

    FROM bigdata_bi.ods_evoc9_message_ms_alarmlevel

    WHERE ParkId = 1625043522838081536

) alarmlevel ON sv.Sort = alarmlevel.Sort;

 

CREATE MATERIALIZED VIEW mv_alarm_list_show

COMMENT '告警列表展示'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS 

SELECT 

alarm_info.Id, 

alarm_info.alarmlevelsort,

alarmlevel.Name as alarmlevel_name,

alarm_info.AlarmId,

alarm_info.AlarmType,

alarm_type.alarm_incident_name,

alarm_info.DeviceTypeId,

alarm_info.captureposition,

device_type.Name,

alarm_info.DeviceAlarmLevelId,

alarm_info.AlarmTime

FROM (

SELECT 

Id, 

AlarmId,

AlarmType,

AlarmLevelId AS DeviceAlarmLevelId,

CapturePosition,

DeviceTypeId,

AlarmTime,

AlarmLevelSort

FROM bigdata_bi.ods_db_evoc_deviceinfo_alarm_info

WHERE ((ParkId = 1625043522838081536) AND NOT (IsWhiteList)) 

AND HandleStatus = 1

ORDER BY AlarmLevelSort, AlarmTime DESC

LIMIT 20

) alarm_info

left join (

SELECT 

ALevelId,Custom,Name,ParkId,Remark, Sort

FROM bigdata_bi.ods_evoc9_message_ms_alarmlevel

where ParkId = 1625043522838081536

) alarmlevel on alarm_info.AlarmLevelSort = alarmlevel.Sort 

left join (

select 

DeviceTypeId,

Name

from bigdata_bi.ods_db_evoc_deviceinfo_device_type

) device_type on alarm_info.DeviceTypeId = device_type.DeviceTypeId

left join dim_alarm_incident_type as alarm_type 

on alarm_info.AlarmType = alarm_type.alarm_incident_id

 

CREATE MATERIALIZED VIEW mv_alarm_list_show

COMMENT '告警列表展示'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS 

SELECT 

alarm_info.Id, 

alarm_info.alarmlevelsort,

alarmlevel.Name as alarmlevel_name,

alarm_info.AlarmId,

alarm_info.AlarmType,

alarm_type.alarm_incident_name,

alarm_info.DeviceTypeId,

alarm_info.captureposition,

device_type.Name,

alarm_info.DeviceAlarmLevelId,

alarm_info.AlarmTime

FROM (

SELECT 

Id, 

AlarmId,

AlarmType,

AlarmLevelId AS DeviceAlarmLevelId,

CapturePosition,

DeviceTypeId,

AlarmTime,

AlarmLevelSort

FROM bigdata_bi.ods_db_evoc_deviceinfo_alarm_info

WHERE ((ParkId = 1625043522838081536) AND NOT (IsWhiteList)) 

AND HandleStatus = 1

ORDER BY AlarmLevelSort, AlarmTime DESC

LIMIT 20

) alarm_info

left join (

SELECT 

ALevelId,Custom,Name,ParkId,Remark, Sort

FROM bigdata_bi.ods_evoc9_message_ms_alarmlevel

where ParkId = 1625043522838081536

) alarmlevel on alarm_info.AlarmLevelSort = alarmlevel.Sort 

left join (

select 

DeviceTypeId,

Name

from bigdata_bi.ods_db_evoc_deviceinfo_device_type

) device_type on alarm_info.DeviceTypeId = device_type.DeviceTypeId

left join dim_alarm_incident_type as alarm_type 

on alarm_info.AlarmType = alarm_type.alarm_incident_id

 

CREATE MATERIALIZED VIEW mv_today_visitor_person_statistics

COMMENT '今日来访人员统计'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS 

WITH person_stats AS (

    SELECT 

        COUNT(DISTINCT CASE WHEN person_detail.GuestStatus = 2 AND person_detail.ReviewStatus = 1 THEN person_detail.PersonId END) AS await_interview_person_num, -- 待访人数

        COUNT(DISTINCT CASE WHEN person_detail.GuestStatus = 2 AND person_detail.ReviewStatus = 2 THEN person_detail.PersonId END) AS already_visited_person_num, -- 已到访

        COUNT(DISTINCT CASE WHEN person_detail.GuestStatus = 1 THEN person_detail.PersonId END) AS have_already_reserved_person_num,  -- 已预约

        COUNT(DISTINCT CASE WHEN person_detail.GuestStatus = 2 AND person_detail.ReviewStatus = 1 THEN person_detail.PersonId END) +

        COUNT(DISTINCT CASE WHEN person_detail.GuestStatus = 2 AND person_detail.ReviewStatus = 2 THEN person_detail.PersonId END) +

        COUNT(DISTINCT CASE WHEN person_detail.GuestStatus = 1 THEN person_detail.PersonId END) AS total_person_num -- 预约总数

    FROM (

        SELECT 

            PersonId,

            DateTimeFrom,

            DateTimeTo, 

            GuestStatus,

            ParkId,

            ReviewStatus, 

            Status, 

            SyncStatus

        FROM bigdata_bi.ods_db_evoc9_person_ps_person

        WHERE (

            ((Type = 2) AND (ParkId = 1625043522838081536)) 

            AND (DateTimeFrom <= NOW())

            AND (DateTimeTo >= NOW())

        )

        AND (IsDelete = 0)

    ) person_detail

)

SELECT 

    '待访人数' AS name,

    COALESCE(await_interview_person_num, 0) AS value

FROM person_stats

UNION ALL

SELECT 

    '已到访' AS name,

    COALESCE(already_visited_person_num, 0) AS value

FROM person_stats

UNION ALL

SELECT 

    '已预约' AS name,

    COALESCE(have_already_reserved_person_num, 0) AS value

FROM person_stats

UNION ALL

SELECT 

    '预约总数' AS name,

    COALESCE(total_person_num, 0) AS value

FROM person_stats;

 

CREATE MATERIALIZED VIEW mv_today_person_through_proportion

COMMENT '今日人员通行类别占比统计'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS

WITH entry_modes AS (

    SELECT 1 AS EntryMode UNION ALL

    SELECT 2 UNION ALL

    SELECT 3 UNION ALL

    SELECT 99

)

SELECT 

    em.EntryMode,

    COALESCE(p.entry_mode_name, CASE 

        WHEN em.EntryMode = 1 THEN '人脸'

        WHEN em.EntryMode = 2 THEN '二维码'

        WHEN em.EntryMode = 3 THEN '刷卡'

        WHEN em.EntryMode = 99 THEN '其他'

    END) AS entry_mode_name,

    COALESCE(p.count, 0) AS count,

    COALESCE((p.count * 100.0 / total.total_count), 0.00) AS ratio_percent

FROM entry_modes em

LEFT JOIN (

    SELECT 

        EntryMode AS RecordType,

        CASE 

            WHEN EntryMode = 1 THEN '人脸'

            WHEN EntryMode = 2 THEN '二维码'

            WHEN EntryMode = 3 THEN '刷卡'

            WHEN EntryMode = 99 THEN '其他'

        END AS entry_mode_name,

        COUNT(*) AS count

    FROM bigdata_bi.ods_db_evoc9_person_ps_personvisit

    WHERE ParkId = 1625043522838081536

    AND SignDate >= TIMESTAMP(CURDATE())

    AND SignDate < TIMESTAMP(CURDATE() + INTERVAL 1 DAY)

    GROUP BY EntryMode

) p ON em.EntryMode = p.RecordType

JOIN (

    SELECT 

        COUNT(*) AS total_count

    FROM bigdata_bi.ods_db_evoc9_person_ps_personvisit

    WHERE ParkId = 1625043522838081536

    AND SignDate >= TIMESTAMP(CURDATE())

    AND SignDate < TIMESTAMP(CURDATE() + INTERVAL 1 DAY)

) total;

 

CREATE MATERIALIZED VIEW mv_24hour_traffic_statistics

COMMENT '近24小时人流量统计'

REFRESH ASYNC START ('2024-11-14 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS

WITH hour_segments AS (

    SELECT 

        DATE_SUB(NOW(), INTERVAL 1 DAY) + INTERVAL h HOUR AS StartDateTime,

        DATE_SUB(NOW(), INTERVAL 1 DAY) + INTERVAL (h + 1) HOUR AS EndDateTime

    FROM (

        SELECT 00 AS h UNION ALL SELECT 01 UNION ALL SELECT 02 UNION ALL SELECT 03 UNION ALL SELECT 04 UNION ALL

        SELECT 05 UNION ALL SELECT 06 UNION ALL SELECT 07 UNION ALL SELECT 08 UNION ALL SELECT 09 UNION ALL

        SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL

        SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL

        SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23

    ) AS hours

),

person_stats AS (

    SELECT

        p.Type,

        p.PersonId,

        CONVERT(p.SignDate, date) AS Date, 

        EXTRACT(hour FROM p.SignDate) AS Hour

    FROM bigdata_bi.ods_db_evoc9_person_ps_personvisit AS p

    WHERE 

        p.ParkId = 1625043522838081536

        AND p.SignDate >= DATE_SUB(NOW(), INTERVAL 1 DAY)

        AND p.SignDate < NOW()

        AND p.Type IN (1, 2)

),

default_types AS (

    SELECT 

        hs.StartDateTime,

        hs.EndDateTime,

        t.Type

    FROM hour_segments hs

    CROSS JOIN (SELECT 1 AS Type UNION ALL SELECT 2) t

)

SELECT 

    DATE(dt.StartDateTime) AS Date,

    EXTRACT(hour FROM dt.StartDateTime) AS Hour,

    COALESCE(SUM(CASE WHEN ps.Type = 1 THEN 1 ELSE 0 END), 0) AS employee_person_num,

    COALESCE(SUM(CASE WHEN ps.Type = 2 THEN 1 ELSE 0 END), 0) AS visitor_person_num,

    CASE 

        WHEN dt.Type = 1 THEN '员工'

        WHEN dt.Type = 2 THEN '访客'

    END AS name

FROM default_types dt

LEFT JOIN person_stats ps ON DATE(dt.StartDateTime) = ps.Date AND EXTRACT(hour FROM dt.StartDateTime) = ps.Hour AND dt.Type = ps.Type

GROUP BY DATE(dt.StartDateTime), EXTRACT(hour FROM dt.StartDateTime), dt.Type

ORDER BY DATE(dt.StartDateTime), EXTRACT(hour FROM dt.StartDateTime), dt.Type;

 

#卡片统计

CREATE MATERIALIZED VIEW mv_card_building_statistics

COMMENT '卡片数量统计-楼栋数量'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS

SELECT 

    COALESCE(t2.cnt, 0) AS cnt,

    '楼栋数量' AS description

FROM (

    SELECT 1 AS dummy

) t1

LEFT JOIN (

    SELECT 

        COUNT(*) AS cnt

    FROM bigdata_bi.ods_evoc_platform_pf_building

    WHERE ParkId = 1625043522838081536

    AND Type = 1

    AND IsDeleted = 0

) t2 ON t1.dummy = 1;

 

CREATE MATERIALIZED VIEW mv_card_firm_statistics

COMMENT '卡片数量统计-入驻企业数'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS

SELECT 

    COALESCE(t2.cnt, 0) AS cnt,

    '入驻企业' AS description

FROM (

    SELECT 1 AS dummy

) t1

LEFT JOIN (

    SELECT 

        COUNT(*) AS cnt

    FROM bigdata_bi.ods_evoc_platform_pf_company

    WHERE ParkId = 1625043522838081536

    AND IsDeleted = 0

) t2 ON t1.dummy = 1;

 

CREATE MATERIALIZED VIEW mv_card_employee_person_statistics

COMMENT '卡片数量统计-员工人数'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS

SELECT 

    t1.Type AS PersonType, 

    CASE 

        WHEN t1.Type = 1 THEN '员工人数'

        WHEN t1.Type = 2 THEN '访客人数'

    END AS name,

    COALESCE(t2.cnt, 0) AS cnt

FROM (

    SELECT 1 AS Type 

) t1

LEFT JOIN (

    SELECT 

        Type, 

        COUNT(*) AS cnt

    FROM bigdata_bi.ods_db_evoc9_person_ps_person

    WHERE ParkId = 1625043522838081536

    AND Type = 1

    AND IsDelete = 0

    GROUP BY Type

) t2 ON t1.Type = t2.Type;

 

CREATE MATERIALIZED VIEW mv_card_visitor_person_statistics

COMMENT '卡片数量统计-访客人数'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 SECOND) 

PROPERTIES ("replication_num" = "1")

AS

SELECT 

    t1.Type AS PersonType, 

    CASE 

        WHEN t1.Type = 1 THEN '员工人数'

        WHEN t1.Type = 2 THEN '访客人数'

    END AS name,

    COALESCE(t2.cnt, 0) AS cnt

FROM (

    SELECT 2 AS Type 

) t1

LEFT JOIN (

    SELECT 

        Type, 

        COUNT(*) AS cnt

    FROM bigdata_bi.ods_db_evoc9_person_ps_person

    WHERE ParkId = 1625043522838081536

    AND Type = 2

    AND IsDelete = 0

    GROUP BY Type

) t2 ON t1.Type = t2.Type;

################################################################################

#设备类型、设备接入

#设备信息表—吴鸿洲(不同设备种类的设备数量)

-- 设备种类数量,就是去重后的DeviceCode的设备信息数量

CREATE MATERIALIZED VIEW mv_device_info_statistics

COMMENT '设备信息表-统计设备类型数和总设备数'

REFRESH ASYNC START ('2024-11-12 00:00:00') EVERY (INTERVAL 10 MINUTE)

PROPERTIES ("replication_num" = "1")

AS

SELECT 

    COUNT(DISTINCT DeviceCode) AS device_type_count,  -- 设备类型数

    COUNT(*) AS total_devices                         -- 总设备数

FROM bigdata_bi.ods_db_evoc_deviceinfo_device_info

WHERE ParkId = 1625043522838081536

AND IsDelete = 0

###########################################################

#能效设备信息表—宁承恒

#设备种类数量、设备数量

CREATE MATERIALIZED VIEW mv_device_energy_efficiency_statistics

COMMENT '能效设备信息表-统计设备类型数和总设备数'

REFRESH ASYNC START ('2024-11-12 00:00:00') EVERY (INTERVAL 10 MINUTE)

PROPERTIES ("replication_num" = "1")

AS

SELECT 

 COUNT(DISTINCT device_platform_type) AS device_type_count,  -- 设备类型数

 COUNT(device_type_id) AS total_devices          -- 总设备数

FROM bigdata_bi.ods_yx_energy_device_info

WHERE del_flag = 0

AND park_id = 1625043522838081536

###########################################################

#定位设备信息表—佘虎

#设备类型数

-- 定位设备为固定的3种数量类型,三张表就是代表3种类型。

CREATE MATERIALIZED VIEW mv_device_orientation_statistics

COMMENT '定位设备信息表-统计设备类型数和总设备数'

REFRESH ASYNC START ('2024-11-12 00:00:00') EVERY (INTERVAL 10 MINUTE)

PROPERTIES ("replication_num" = "1")

AS

select 

3 device_type_count,

sum(orientation_device.device_total) total_devices

from (

select 

'device_beacon' name,

count(*) device_total

from bigdata_bi.ods_positioning_device_beacon 

where del_flag=0 and park_id=1625043522838081536

union all

select 

'device_label' name,

count(*) device_total

from bigdata_bi.ods_positioning_device_label 

where del_flag=0 and park_id=1625043522838081536

union all

select 

'device_station' name,

count(*) device_total

from bigdata_bi.ods_positioning_device_station 

where del_flag=0 and park_id=1625043522838081536

) orientation_device

#######################################################################

#设备机房信息表—王仕林

#设备类型、设备数量统计

CREATE MATERIALIZED VIEW mv_device_room_statistics

COMMENT '设备机房信息表-统计设备类型数和总设备数'

REFRESH ASYNC START ('2024-11-12 00:00:00') EVERY (INTERVAL 10 MINUTE)

PROPERTIES ("replication_num" = "1")

AS

SELECT 

 COUNT(DISTINCT device_type) AS device_type_count,   -- 设备类型数

 COUNT(device_type_id) AS total_devices        -- 总设备数

FROM bigdata_bi.ods_devicex_app_device_info

WHERE del_flag = 0

and park_id = 1625043522838081536

 

#统计总设备类型数和总设备数

CREATE MATERIALIZED VIEW mv_deviceTyep_statistics

COMMENT '卡片数量统计-统计设备类型总数'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 MINUTE)

PROPERTIES ("replication_num" = "1")

AS

SELECT 

    COALESCE(SUM(device_type_count), 0) AS total_device_types

FROM (

    SELECT device_type_count FROM bigdata_bi.mv_device_info_statistics

    UNION ALL

    SELECT device_type_count FROM bigdata_bi.mv_device_energy_efficiency_statistics

    UNION ALL

    SELECT device_type_count FROM bigdata_bi.mv_device_orientation_statistics

    UNION ALL

    SELECT device_type_count FROM bigdata_bi.mv_device_room_statistics

) AS device_data;

 

CREATE MATERIALIZED VIEW mv_deviceConnection_statistics

COMMENT '卡片数量统计-统计设备接入总数'

REFRESH ASYNC START ('2024-11-13 00:00:00') EVERY (INTERVAL 10 MINUTE)

PROPERTIES ("replication_num" = "1")

AS

SELECT

    COALESCE(SUM(total_devices), 0) AS total_devices

FROM (

    SELECT total_devices FROM bigdata_bi.mv_device_info_statistics

    UNION ALL

    SELECT total_devices FROM bigdata_bi.mv_device_energy_efficiency_statistics

    UNION ALL

    SELECT total_devices FROM bigdata_bi.mv_device_orientation_statistics

    UNION ALL

    SELECT total_devices FROM bigdata_bi.mv_device_room_statistics

) AS device_data;

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。