ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

DataHub Redash 数据源接入指南:仪表盘与图表元数据摄取及 SQL 表血缘解析实战

DataHub Redash 数据源接入指南:仪表盘与图表元数据摄取及 SQL 表血缘解析实战 DataHub Redash 数据源接入指南仪表盘与图表元数据摄取及 SQL 表血缘解析实战【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本指南围绕 DataHub 仓库中的redash摄取模块redash.py系统讲解如何将 Redash BI 平台的仪表盘Dashboard、图表Chart/Visualization及其依赖的数据集元数据摄取到 DataHub并重点剖析通过parse_table_names_from_sql开启 SQL 解析、为图表生成表级血缘的能力与原理。读完本文你将掌握 Redash 接入的完整配置方法、各配置项的作用与默认值、图表血缘的开启方式以及遇到摄取失败时的排查思路。模块概览与能力定位Redash 是一款开源的 BI 与数据分析协作平台支持连接多种数据源并构建交互式仪表盘。DataHub 提供的redash模块平台类型标识为 BI Tool、连接方式为 Pull见 integrations_catalog.json用于把 Redash 中的 BI 实体仪表盘、图表、数据集及相关的表级血缘、归属上下文ownership context摄取进 DataHub并支持基于状态的有状态删除检测stale entity removal。该模块在源码中通过装饰器声明了自身能力redash.py声明项取值说明平台名称Redash对应platform redash支持状态BETA模块处于 Beta 支持阶段能力LINEAGE_COARSE默认开启默认提供粗粒度血缘即图表 → 数据集Dataset的关联表级血缘细粒度需额外配置通过parse_table_names_from_sql: true开启详见下文从模块 docstring 可以看出本模块摄取两类核心内容Redash 仪表盘、查询及其可视化图表Redash 图表的表级血缘默认关闭。前置条件在运行摄取之前请确认以下前提是否满足网络可达DataHub 摄取进程能够访问 Redash 实例的 API 地址认证有效持有具备读取权限的 Redash API Key权限就绪用于该模块所依赖的元数据 API 的读取权限已配置妥当。快速开始完整 Recipe 配置redash模块的完整配置样例位于 redash_recipe.yml同时仓库还提供了一份可直接落盘到文件 sink 的示例 redash_to_file.dhub.yaml。最精简的配置如下source: type: redash config: connect_uri: http://localhost:5000/ api_key: REDASH_API_KEY其中connect_uri为 Redash 基础 URLapi_key为 Redash 用户 API Key在 Redash 的用户设置页面中生成。源码中 RedashConfig 定义了完整的可选参数汇总如下配置项默认值说明connect_urihttp://localhost:5000Redash 基础 URL初始化时源码会自动去除尾部斜杠redash.pyapi_keyREDASH_API_KEYRedash 用户 API Key作为敏感字段处理TransparentSecretStrdashboard_patterns全部允许正则表达式allow/deny过滤器用于筛选要摄取的仪表盘chart_patterns全部允许正则表达式allow/deny过滤器用于筛选要摄取的图表skip_drafttrue仅摄取已发布published的仪表盘与图表跳过草稿page_size25每次 API 查询返回的条目数量上限api_page_limitsys.maxsize无限制摄取仪表盘与图表 API 时允许翻页查询的最大页数parallelism1处理时的并发线程数parse_table_names_from_sqlfalse是否通过 SQL 解析提取图表依赖的表名详见下一节envPRODDEFAULT_ENV构造 URN 时使用的环境命名空间以下是一个开启了全部可选配置的完整示例source: type: redash config: connect_uri: http://localhost:5000/ api_key: REDASH_API_KEY # Optionals api_page_limit: 1 # 默认不限制仪表盘和图表 API 分页 skip_draft: true # 默认true只摄取已发布的仪表盘和图表 dashboard_patterns: deny: - ^denied dashboard.* allow: - .*allowed dashboard.* chart_patterns: deny: - ^denied chart.* allow: - .*allowed chart.* parse_table_names_from_sql: false sink: type: file config: filename: ${HOME}/redash_output_mces.json需要注意的是dashboard_patterns/chart_patterns使用的是 DataHub 的AllowDenyPattern机制先应用deny规则、再应用allow规则。源码中被过滤掉的仪表盘或图表会通过report_dropped记录到RedashSourceReport.filteredredash.py。图表血缘parse_table_names_from_sql深度解析这是redash模块最核心的可选能力。默认情况下图表只会关联到它所属的数据源Data Source对应的数据集血缘粒度较粗开启parse_table_names_from_sql: true后模块会使用基于sqlglot包的 SQL 解析器尝试解析出图表查询语句实际依赖的表从而生成表级血缘。触发条件与解析逻辑从源码 _get_datasource_urns 可以看到SQL 解析仅在同时满足以下条件时才会执行parse_table_names_from_sql配置为true该图表所用数据源的syntax字段为sql即 SQL 类数据源。解析通过create_lineage_sql_parsed_result来自datahub.sql_parsing.sqlglot_lineage完成传入查询文本、平台类型、环境与默认数据库名最终取in_tables作为图表的输入数据集 URN 列表若解析过程中产生表错误table_error模块会把该查询 ID 记入report.queries_problem_parsing并产生一条sql-parsing告警redash.py。当解析结果为空时_get_datasource_urns返回None图表快照的inputs会被置空并在报告中记录charts_no_input与queries_no_dataset告警。数据源到 DataHub 平台的映射Redash 支持多种数据源类型模块通过REDASH_DATA_SOURCE_TO_DATAHUB_MAPredash.py将其映射到 DataHub 的 dataset 平台并利用连接配置中的db_name_key从数据源 options 中提取数据库名常见映射如下Redash 数据源类型DataHub 平台数据库名取值键pgpostgresdbnamemysql/rds_mysqlmysqldbredshiftredshiftdbnamesnowflakesnowflakedatabasebigquerybigqueryprojectIdathenaathenaschemamssqlmssqldbhive/hive_httphive默认dbprestoprestoschemaresultsexternal取数据源名称其他未映射类型external默认db缺失时回退为default未在映射表中的数据源统一回退为external平台这正是源码注释中提到的 TODO 项目前对未映射平台统一使用external。全限定表名的解析为了让血缘指向准确的 Dataset URN模块针对不同数据库实现了各自的QualifiedNameParserredash.pyPostgreSQL默认 schema 为public格式database.schema.tableSQL Server (mssql)默认 schema 为dbo格式database.schema.tableMySQL格式database.tableAthena格式database.tableBigQuery格式database.schema.tableschema 缺失时报错其他平台直接拼接database.table。单元测试 test_redash_source.py 对上述规则做了完整验证。例如 Postgres 下table_nameschema.orders且数据库名为postgres_db时全限定名为postgres_db.schema.orders而若表名中自带数据库名other_db.schema.orders则以表名中的数据库名为准。开启前后血缘对比测试佐证仓库测试 test_get_chart_snapshot_parse_table_names_from_sql 直观展示了两种模式下的差异。对于一条 join 了orders、order_items、staffs三张表的 MySQL 查询关闭解析默认图表inputs仅包含一条粗粒度数据集 URN即urn:li:dataset:(urn:li:dataPlatform:mysql,Rfam,PROD)开启解析图表inputs变为三条表级 URNurn:li:dataset:(urn:li:dataPlatform:mysql,rfam.order_items,PROD) urn:li:dataset:(urn:li:dataPlatform:mysql,rfam.orders,PROD) urn:li:dataset:(urn:li:dataPlatform:mysql,rfam.staffs,PROD)解析失败时如 SQL 语法错误测试 test_sql_parsing_error_generates_warning 验证了模块会记录queries_problem_parsing并产生警告同时返回None即该图表不产出血缘输入。摄取原理与实现细节连接与容错模块基于redash_toolbelt的Redash客户端与 Redash API 通信redash.py并配置了请求重试机制最多重试 3 次、退避因子为 10、对500/503/502/504状态码进行重试。启动时通过GET /api校验连通性validate_connection非 200 状态码会直接抛出ValueError。仪表盘摄取_emit_dashboard_mces先请求第一页获取仪表盘总数据此计算最大页数再通过ThreadedIteratorExecutor按parallelism并发处理各页redash.py。单个仪表盘快照_get_dashboard_snapshot包含描述提取将仪表盘左上角col 0且row 0的文本框组件视为仪表盘描述redash.py图表关联遍历所有 widget 中的 visualization生成urn:li:chart:(redash,viz_id)列表版本差异处理通过status.json读取 Redash 版本号v9 及更早版本使用/dashboard/slug形式的 URLv10 及以上使用/dashboards/idredash.py变更审计记录最后修改时间与修改者corpuserURN。图表摄取与类型映射在 Redash 中“图表”即查询的 visualization。_emit_chart_mces遍历查询列表对每个查询下的每个 visualization 生成 Chart 快照redash.py。图表标题为“查询名 可视化名”URL 形如connect_uri/queries/query_id#viz_id。由于 Redash 的可视化类型众多模块维护了两张映射表将可视化类型转换为 DataHub 的ChartTypeClassPLOTLY_CHART_MAPredash.py针对CHART类型依据options.globalSeriesType映射 line→LINE、column→BAR、area→AREA、pie→PIE、scatter→SCATTER、box→BOX_PLOTVISUALIZATION_TYPE_MAPredash.py针对其他类型如 COUNTER/DETAILS/PIVOT/TABLE → TABLE、BOXPLOT → BOX_PLOT。凡未映射的类型如 SANKEY、MAP、FUNNEL、WORD_CLOUD 等统一回退为默认类型TABLE并记录一条 warning。测试 test_get_unknown_viz_chart_snapshot 验证了 SANKEY 类型回退为 TABLE 的行为。分页与有状态摄取page_size控制单页条数api_page_limit控制最大翻页数超出即停止防止抓取过深模块继承StatefulIngestionSourceBase报告类RedashSourceReport继承StaleEntityRemovalSourceReport说明其支持 DataHub 的有状态摄取机制——即摄取时自动清理源端已删除的实体。概念映射redash 模块 README 给出了 Redash 概念与 DataHub 概念之间的通用映射Redash 概念DataHub 概念说明平台/账户/项目范围Platform Instance、Container在平台上下文内组织资产核心技术资产表/视图/主题/文件Dataset主要摄取的技术资产Schema 字段/列SchemaField支持 schema 提取时包含所有权与协作者CorpUser、CorpGroup由支持所有权与身份元数据的模块发出依赖与处理关系Lineage edges支持并开启血缘提取时可用对redash模块而言实际落地的是仪表盘 →urn:li:dashboard:(redash,id)、图表 →urn:li:chart:(redash,viz_id)、数据集 →urn:li:dataset:(platform,database.table,env)血缘边通过 Chart 的inputs字段建立。限制说明模块行为受制于 Redash 平台暴露的 API、权限与元数据范围主要包括血缘粒度依赖配置默认仅提供粗粒度血缘图表 → 数据源数据集表级血缘需显式开启parse_table_names_from_sql且仅对syntax sql的数据源生效可视化类型覆盖有限源码中的两套映射表均标注了 TODO尚未覆盖所有 Redash 可视化类型未映射类型会回退为 TABLE平台映射不完整部分 Redash 数据源如 Cassandra、clickhouse、cockroach、db2 等会回退为external平台草稿与归档skip_draft默认跳过草稿图表/仪表盘的过滤同时受dashboard_patterns与chart_patterns控制。故障排查如果摄取失败建议按以下顺序排查校验凭证与权限确认api_key有效且具备读取对应 API 的权限校验连通性确认摄取进程到connect_uri的网络连通性模块启动时会请求/api校验非 200 会直接报错校验范围过滤检查dashboard_patterns/chart_patterns的正则是否误过滤了目标实体查看摄取日志重点检索RedashSourceReport输出的告警与失败信息例如queries_problem_parsingSQL 解析失败、charts_no_input/queries_no_dataset未找到数据源以及sql-parsing告警据此调整 SQL 或配置。以 SQL 解析相关的告警为例源码在解析失败时会把查询 ID 加入queries_problem_parsing并记录异常详情与数据源 IDredash.py日志格式为exception error in parsing query-query_id-datasource-data_source_id可直接用于定位是哪个查询、哪个数据源出了问题。相关文件索引模块配置与示例redash_recipe.yml、redash_to_file.dhub.yaml模块说明文档redash_pre.md、redash_post.md、redash 模块 README核心实现redash.py单元测试test_redash_source.py平台目录元数据integrations_catalog.json【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表