文章 查看内容

最近实践|如何用元数据批量查看数据集缓存配置

最近实践|如何用元数据批量查看数据集缓存配置

38 0 智能ETL 2026-6-29 15:14 发布者: 观小枫

基于 data_source 元数据解析数据集实时卡片数据与缓存配置,批量生成可筛选、可导出的数据集缓存配置明细表。

一、场景背景

在排查页面实时刷新、直连数据集查询压力、卡片数据延迟等问题时,我们经常需要确认一个信息:相关数据集当前是否开启了实时卡片数据,以及开启后使用的缓存策略是什么。

如果数据集数量不多,逐个进入数据集配置页查看当然可以。但在实际项目里,一个环境中可能有成百上千个数据集,逐个排查不仅效率低,也不方便后续筛选、导出和留痕。

这个场景可以换一个小角度来做:直接基于观远 BI 元数据中的 data_source 表,解析数据集配置字段,整理出一张“数据集缓存配置明细表”。

这张表一行代表一个数据集,重点输出数据集名称、数据集 ID、数据集类型、是否支持实时卡片数据、缓存配置、缓存有效时长、数据行数、字段数和更新时间。

二、实现思路

  1. 基于元数据库中的 data_source 表创建输入数据集。
  2. 在 ETL 中解析 config.realTimeUpdateSetting 配置。
  3. 将 JSON 配置转换成中文可读字段。
  4. 输出为一张可筛选、可导出的明细数据集。
  5. 在页面中用表格卡片展示,也可以直接基于输出数据集做二次分析。
data_source 元数据
        ↓
输入数据集
        ↓
ETL SQL 解析 config.realTimeUpdateSetting
        ↓
数据集缓存配置明细表
        ↓
页面表格 / 导出 / 筛选分析

三、关键元数据字段

本次主要使用 data_source 表中的字段:

  • name:数据集名称
  • ds_id:数据集 ID
  • display_type:数据集类型
  • config:数据集配置 JSON
  • row_count:数据行数
  • col_count:字段数
  • utime:更新时间
  • is_del:是否删除

缓存相关配置主要来自 config.realTimeUpdateSetting

  • enabled:是否开启支持实时卡片数据
  • cacheType:缓存类型
  • interval:自定义缓存周期,单位为秒
  • disableCache:历史兼容字段,用于识别无缓存

cacheType 可以按以下口径转换:DISABLE 表示无缓存,GLOBAL 表示使用全局默认缓存,CUSTOM 表示自定义缓存有效时长。

四、ETL 加工 SQL

在 ETL 中主要完成三件事:解析 config.realTimeUpdateSetting,将开关和缓存类型转换成中文描述,将自定义缓存周期从秒转换成分钟。

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、是否支持实时卡片数据、缓存配置、数据集类型等筛选器。默认排序可以按“更新时间”倒序,方便优先查看近期变更的数据集。

七、适用场景

  • 批量检查哪些数据集开启了实时卡片数据
  • 排查某些页面刷新不符合预期时,确认是否受数据集缓存影响
  • 检查直连数据集是否存在无缓存配置,辅助判断查询压力来源
  • 统计当前环境中使用全局默认缓存或自定义缓存的数据集范围
  • 将数据集缓存配置导出给管理员或项目团队做巡检

八、小结

这个场景本身不复杂,关键点是找准元数据字段。只要确认缓存配置来自 data_source.config 中的 realTimeUpdateSetting,就可以通过 ETL 将 JSON 配置解析成一张可读、可筛选、可导出的明细表。

相比逐个打开数据集配置页查看,这种方式更适合批量巡检,也更方便在问题排查时快速定位缓存相关影响。


路过

雷人

握手

鲜花

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去评论 去发文 返回顶部
返回顶部