一、场景背景在排查页面实时刷新、直连数据集查询压力、卡片数据延迟等问题时,我们经常需要确认一个信息:相关数据集当前是否开启了实时卡片数据,以及开启后使用的缓存策略是什么。 如果数据集数量不多,逐个进入数据集配置页查看当然可以。但在实际项目里,一个环境中可能有成百上千个数据集,逐个排查不仅效率低,也不方便后续筛选、导出和留痕。 这个场景可以换一个小角度来做:直接基于观远 BI 元数据中的 这张表一行代表一个数据集,重点输出数据集名称、数据集 ID、数据集类型、是否支持实时卡片数据、缓存配置、缓存有效时长、数据行数、字段数和更新时间。 二、实现思路
data_source 元数据
↓
输入数据集
↓
ETL SQL 解析 config.realTimeUpdateSetting
↓
数据集缓存配置明细表
↓
页面表格 / 导出 / 筛选分析
三、关键元数据字段本次主要使用
缓存相关配置主要来自
四、ETL 加工 SQL在 ETL 中主要完成三件事:解析 SELECT
d.name AS `数据集名称`,
d.ds_id AS `数据集ID`,
cast(d.display_type AS string) AS `数据集类型`,
CASE
WHEN lower(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.enabled'), 'false')) IN ('true', '1')
THEN '已开启'
ELSE '未开启'
END AS `是否支持实时卡片数据`,
CASE
WHEN lower(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.enabled'), 'false')) NOT IN ('true', '1')
THEN '未开启实时卡片数据'
WHEN upper(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.cacheType'), '')) = 'DISABLE'
OR lower(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.disableCache'), 'false')) IN ('true', '1')
THEN '无缓存'
WHEN upper(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.cacheType'), 'GLOBAL')) = 'CUSTOM'
THEN '自定义缓存有效时长'
ELSE '使用全局默认缓存'
END AS `缓存配置`,
CASE
WHEN lower(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.enabled'), 'false')) NOT IN ('true', '1')
THEN '未开启'
WHEN upper(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.cacheType'), '')) = 'DISABLE'
OR lower(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.disableCache'), 'false')) IN ('true', '1')
THEN '无缓存'
WHEN upper(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.cacheType'), 'GLOBAL')) = 'CUSTOM'
THEN concat(cast(round(cast(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.interval'), '0') AS double) / 60, 2) AS string), '分钟')
ELSE '全局默认'
END AS `缓存有效时长`,
upper(coalesce(get_json_object(d.config, '$.realTimeUpdateSetting.cacheType'), '')) AS `缓存类型原始值`,
cast(get_json_object(d.config, '$.realTimeUpdateSetting.interval') AS string) AS `缓存周期秒数`,
cast(d.row_count AS string) AS `数据行数`,
cast(d.col_count AS string) AS `字段数`,
cast(d.utime AS string) AS `更新时间`
FROM input1 d
WHERE coalesce(cast(d.is_del AS string), 'false') IN ('false', '0')
ORDER BY d.utime DESC, d.name ASC
这里建议过滤掉已删除数据集,这样输出结果更贴近当前实际可用的数据集范围。 五、输出结果ETL 输出后,可以得到一张数据集缓存配置明细表。从结果中可以直接看到哪些数据集开启了实时卡片数据,开启后是无缓存、全局默认缓存,还是自定义缓存时长。
六、页面展示建议页面不需要做复杂设计,建议做成一个查询型页面即可。推荐使用一个表格卡片展示数据集名称、数据集 ID、数据集类型、是否支持实时卡片数据、缓存配置、缓存有效时长、数据行数、字段数和更新时间。 如果希望更方便排查,可以增加数据集名称、数据集 ID、是否支持实时卡片数据、缓存配置、数据集类型等筛选器。默认排序可以按“更新时间”倒序,方便优先查看近期变更的数据集。 七、适用场景
八、小结这个场景本身不复杂,关键点是找准元数据字段。只要确认缓存配置来自 相比逐个打开数据集配置页查看,这种方式更适合批量巡检,也更方便在问题排查时快速定位缓存相关影响。 |