跳转至

增强您的数据发现之旅:使用 DataHub Vertica 插件

DataHub 是一个元数据平台,支持端到端的数据血缘和数据发现。本YouTube视频演示了如何使用 DataHub Vertica 插件将 Vertica 数据有效集成到 DataHub 中,使您能够利用该平台的先进功能获得更深入的洞察。

DataHub 是现代数据栈的开源元数据平台。它是一个数据目录,旨在实现端到端的数据发现、数据可观测性和数据治理。这个可扩展的元数据平台专为开发者构建,帮助他们管理快速发展的数据生态系统的复杂性,同时让数据从业者能够充分利用其组织内数据的全部价值。

DataHub Vertica 插件

自 2022 年 12 月起,DataHub 支持从多种数据源摄取元数据,包括 PostgreSQL、Snowflake、Vertica 等数据库。测试版 Vertica DataHub 插件最初由 DataHub 社区贡献。该测试版插件仅支持表、视图和数据平台的元数据摄取。

目前 Vertica 插件使用 SQLAlchemy dialect 连接到 Vertica。

然而,该插件缺少重要的元数据信息,例如投影(Projections)、机器学习模型(MLModels)、EON 模式信息、OAuth 元数据以及表-视图-投影之间的血缘关系。我们开展了一个项目来编写一个能够提取这些信息的 Vertica 插件。这也要求重写 SQLAlchemy Vertica Dialect,因为 DataHub 使用 SQLAlchemy dialects 来连接数据库。

Vertica 的 DataHub 插件现在拥有经过认证的 DataHub 摄取插件,可用于将元数据摄取到 DataHub。这使得数据从业者能够在其 DataHub 实例中与其他元数据一起拥有 Vertica 元数据,从而充分利用 DataHub 端到端的数据发现和可观测性能力。他们可以获得关于 Vertica 对象(如表、视图和投影)使用情况的有意义洞察,并可视化血缘关系。

本文档提供了一个使用 Vertica 进行元数据摄取的示例,包括配置环境以及使用 DataHub Vertica 插件连接到 Vertica 的步骤。

测试环境

  • DataHub 0.13.2.4
  • RHEL 8.3
  • Vertica Python driver 1.3.8
  • Vertica Server 24.1

配置环境以将 DataHub 与 Vertica 结合使用

本节介绍如何安装 DataHub Vertica 插件并初始化项目。该配置基于 Linux (RHEL) 环境。

前提条件

要从 Vertica 摄取元数据,您需要:

  • Vertica Server 版本 10.1.1-0 及以上(较低版本也可能可用)
  • Vertica 凭据(用户名/密码)
  • Docker for Linux
  • Docker Compose
  • Python 3.8 或更高版本

安装 DataHub Vertica 插件

  • 为您的平台安装 Docker 和 Docker Compose v2。
  • 在 Linux 上,安装 Docker for Linux 和 Docker Compose。
  • 从命令行或桌面应用程序启动 Docker 引擎。
  • 安装 DataHub CLI。
  • 确保您已安装并配置了 Python 3.8+(使用命令 python3 --version 检查)。
  • 在终端中运行以下命令:
python3 -m pip install --upgrade pip wheel setuptools
python3 -m pip install --upgrade acryl-datahub
datahub version
  • 要在本地部署 DataHub 实例,请在终端中运行以下 CLI 命令:
datahub docker quickstart
  • 要安装 Vertica 插件,请在命令行中运行以下命令:
pip install 'acryl-datahub[vertica]'

注意:此命令将自动安装 Vertica-python 客户端驱动和 Vertica-SQLAlchemy dialect。您无需手动安装它们。

有关更多详细信息,请参阅 DataHub Quickstart Guide

基于 GUI 的摄取

通过 GUI 运行摄取的步骤:

  • 访问 localhost:9002
  • 输入您的凭据登录。
  • 在右上角,点击 Ingestion。在 Sources 中,点击 Create new source,然后选择 Vertica

DataHub 图片 11

  • 使用您的 Vertica 数据库凭据填写表单。
  • 点击 Advance 以配置您的元数据对象。选择您想要摄取到 DataHub GUI 的对象。

DataHub 图片 12

  • 点击 Next,配置摄取调度,然后再次点击 Next
  • 输入摄取名称,然后点击 Advance

DataHub 图片 13

  • 检查运行摄取时使用的 CLI 版本。确保您输入的 CLI 版本为 0.10.5.4V 或更高版本,以便在摄取 Vertica 元数据时获得性能改进。
  • 点击 Save & Run 开始摄取。
  • 如果摄取成功,您将看到以下内容:

DataHub 图片 14

基于 CLI 的摄取

对于基于 CLI 的摄取,请转到您机器上的 DataHub 目录。创建 recipe.yml 文件并在其中添加 Vertica 源详情。

请查看以下 recipe 以开始摄取!有关所有配置选项,请参阅 Integration Details。

DataHub 图片 1

注意:默认情况下,您可以根据偏好更改所有设置为 true 的配置属性。您可以根据需要添加 profiling 和其他配置选项。

在 DataHub 目录中添加 recipe.yml 文件后,运行以下命令开始摄取:

datahub ingest -c recipe.yml

当摄取开始运行时,日志如下所示:

DataHub 图片 2

现在您可以进入 DataHub UI 并检查元数据。您将在平台部分看到 Vertica,并显示已摄取的对象数量:

DataHub 图片 3

点击 Vertica 徽标,它将带您进入 schema 列表。您可以选择任意 schema,然后选择表、视图、投影来查看元数据。

DataHub 图片 4

新的 DataHub Vertica 插件功能——支持 Vertica 元数据

  • 基于 UI 的数据摄取。 您现在可以使用 UI recipe 表单轻松摄取数据。这意味着无需 CLI,将数据导入 DataHub 对于经验丰富和新手用户都变得同样简单。

  • 支持查看表、投影和视图的元数据。 您可以可视化 Vertica 表及其关联的投影。

  • 一站式获取元数据信息,例如行数、投影数、分区数、列数、表大小、列大小、数据类型、每列的 min/max 统计信息。

  • 对于投影,您还可以检测列列表、投影类型、固定投影、ROS 计数等信息。

DataHub 图片 5

注意:列的默认值(如有)将显示在 Description 中。

DataHub 图片 6

  • 支持查看表、投影和视图的血缘关系。 您可以可视化 Vertica 对象的"下游"和"上游"血缘关系。例如,一个表可以有 2 个基于该表创建的投影,这些可以在 DataHub 中作为下游血缘关系查看。

DataHub 图片 7

注意:如果表、投影或视图为空,则不显示血缘关系。

  • 视图可以有多个上游表,这些也可以被可视化。
  • 这对于确定删除或修改 Vertica 表/视图/投影对其依赖项的影响尤为有用。

DataHub 图片 8

  • 支持 UDX 元数据。 您可以查看所有 schema 级别的 UDX(已授权的)及其对应的语言。

DataHub 图片 9

  • 支持 EON 模式元数据。 您可以确定数据是从哪种数据库模式(Enterprise/EON)摄取的,以及公共存储路径和子集群大小。

  • 支持机器学习模型(ML Models)。 您可以在 schema 级别查看 Vertica 数据库中创建的任何 ML 模型的摘要。模型运行的相应结果以及使用它的用户也会一并显示。

  • 支持已删除实体。 在摄取期间,启用 stateful_ingestion 将使您能够确定相对于上次摄取已删除的任何对象。

  • 已摄取数据的所有者。 Vertica 插件使用"owners"(所有者)扩展了 DataHub 的数据联邦支持。每个已摄取的数据只能由 DataHub 中授权的人员查看。

  • 改进的 SQLAlchemy Dialect。 将元数据提取到 DataHub 的相关逻辑需要物化到 SQLAlchemy-vertica dialect 中。此前该功能由未知的第三方开发。因此,作为此次开发的副产品,我们现在拥有一个全新的、改进的 Vertica-dialect for SQLAlchemy,它支持比之前开源版本更多的新特性。将逻辑添加到我们的 dialect 而不是 DataHub 中的另一个好处是,任何其他产品现在都可以使用新的 dialect 来访问 Vertica。

视图的列级血缘支持

Vertica 现在支持视图的列级血缘(Column Level Lineage, CLL)。请按照以下步骤在 Vertica 中获取视图的列级血缘:

  • DataHub 生产环境就绪后,在以下位置查找 Python 安装目录,并在该位置新建一个 vertica.py 文件:
{python_location}/site-packages/sqlglot/dialects
  • 在新文件中添加以下代码并保存:
from sqlglot import exp, generator, tokens
from sqlglot.dialects.dialect import Dialect
from sqlglot.tokens import Tokenizer, TokenType

class Vertica(Dialect):
    class Tokenizer(tokens.Tokenizer):
        QUOTES = ["'", '"']
        IDENTIFIERS = ["`"]

        KEYWORDS = {
            **Tokenizer.KEYWORDS,
        }

    class Generator(generator.Generator):
        TYPE_MAPPING = {
            **generator.Generator.TYPE_MAPPING,
            exp.DataType.Type.INTERVAL: "BIGINT",
        }
  • 修改同一目录下的 __init__.py,在文件末尾添加以下代码:
from sqlglot.dialects.vertica import Vertica

详情请参见下图:

DataHub 图片 15

  • 修改同一目录下的 dialect.py,在 Dialects 类中添加以下代码:
VERTICA = "vertica"

详情请参见下图:

DataHub 图片 16

  • 按照以下说明修改 {python_location}/site-packages/datahub/ingestion/source/sql/vertica.py 文件中的代码:

注释掉 loop_viewsget_upstream_lineage_info 函数,因为它们会覆盖视图血缘的列级血缘(CLL)特性,然后保存文件。

现在您可以运行 CLI 摄取来查看 Vertica 中视图的列级血缘关系。以下是使用 Vertica 作为数据源的视图 CLL 示例说明。

注意:完成这些修改后,您只能通过 CLI 运行摄取。

DataHub 图片 17

Vertica 驱动附加参数

DataHub 使用 Vertica Python 驱动进行连接。有关连接选项的更多详细信息,请参阅 vertica-python 驱动 readme。您需要将这些参数传递到您正在使用的 recipe 文件中。以下是一个示例 recipe 文件:

source:
  type: vertica
  config:
    host_port: 'localhost:5433'
    database: db_name
    username: {"username"}
    password: {"password"}
    include_tables: true
    include_views: true
    include_projections: true
    include_models: true
    include_view_lineage: true
    include_view_column_lineage: true
    profiling:
      enabled: false
    stateful_ingestion:
      enabled: false
    options:
      connect_args:
        connection_load_balance: true
        oauth_access_token: token_value

sink:
  type: datahub-rest
  config:
    server: 'http://localhost:8080'

请确保缩进正确。我们仅在 recipe 文件中添加了部分参数,但所有其他 Vertica-Python 连接属性也同样适用。

已知限制

  • 在统计信息中,主键(primary keys)不显示最大值和最小值。
  • 对于 integer、boolean 和 date 类型的列,不显示列长度,因为在 Vertica 数据库中这些列的长度是固定的。

更多信息