您的位置:

Amundsen——实现数据发现与协作的平台

一、Amundsen的概述

Amundsen是由在Lyft工作的数据开发人员在解决数据发现和协作问题时开发的一个开源项目。该项目的目标是为数据方面工作人员更好地使用公司的数据提供支持,降低他们与数据之间的门槛,从而增加数据的可视性和可用性。

Amundsen的核心在于它实现了一个能够让人工智能、机器学习、数据科学、工程人员等方面的人员找到他们所需要的数据,协作开发模型和为新用户创建他们自己的数据服务的平台。

二、Amundsen实现的数据发现功能

Amundsen的发现模块是一个核心重点,它能够快速找到有价值的数据资源。用户可以使用Amundsen网站或者通过API访问数据源。这个模块可以从多个方面帮你发现你需要的数据资源,包括:

1、数据拥有者信息:除了相关的数据集元数据之外,Amundsen还可以展示关于数据拥有者的信息。通过这些信息,用户可以了解数据集是由哪个团队开发。", "2、准入信息:这是另一个有用的特性,通过它,用户可了解如何访问数据集、使用什么凭证和访问等等。", "3、端对端执行的图-开发工程师可以在这里展示他们如何开发数据集的过程。这里包括了一些工程的核心代码。", "4、最近的查询信息:Amundsen还会记录用户在数据集上查询的情况,这有助于增加他们对数据集的了解。", "5、数据预览:Amundsen还可以为数据集提供一个查看显著数据点的数据预览功能,这对于对数据形式有要求的人群非常有用。", "6、数据资源统计:Amundsen也会统计那些频繁被使用的资源和那些弃用的资源,帮助数据团队思考如何为可使用度高的资源制定清晰的开发优先级。", "7、标签:数据集可以被标记,以便认领、发现和过滤。

三、Amundsen的协作功能

除了数据发现模块之外,Amundsen还提供了一些重要的协作功能,让开发团队之间的协作变得更加容易和高效。

1、markdown档案:数据持有人可以使Amundsen页面成为实验室笔记或使用说明。Markdown功能可以实现本地格式良好的评论和代码示例,例如python代码示例。", "2、数据集的评论:每个数据集页面都可以通过评论部分进行评论,从而使维护人员可以与其他人员进行沟通,说服和建议等等。", "3、贡献图表:最近谁对特定的数据集进行了修复,更改或破坏性修改可以通过贡献图表展示,这使得对于其他具有相似兴趣的贡献者更容易进行交流和协作。", "4、谁正在使用这个数据集?:Amundsen还会展示该数据集的近期使用情况,并给出这个数据集是由哪些有权限的用户进行访问的。

四、Amundsen的代码示例

from typing import Any, Dict, List, Optional, Tuple

from pyhocon import ConfigFactory, ConfigTree
from sqlalchemy import or_, and_, text
from sqlalchemy.orm import Session, Query

from metadata_service.entity.table_detail import TableColumn, Table
from metadata_service.exception import NotFoundException
from metadata_service.proxy import get_proxy_client
from metadata_service.util import UserResourceRel
from metadata_service.util.db import create_engine
from metadata_service.util.helper import (
    get_user_id_from_user_email, get_user_email_domain,
    get_user_profile_by_user_id, UserException)
from metadata_service.db import (
    DEFAULT_PAGE_SIZE, make_offset_limit_clause, Pagination)
from metadata_service.entity.popular_table import PopularTable
from metadata_service.entity.resource_type import ResourceType

class TableColumnDao:
    """
    SQLAlchemy Data Access Object for TableColumn
    """
    def __init__(self, config: ConfigTree) -> None:
        self.db = create_engine(config)

    def _get_query(self, session: Session) -> Query:
        """
        Get the common query object with all model`s joined
        :param session:
        :return:
        """
        return session.query(TableColumn, Table.name)\
            .join(Table, and_(
                or_(TableColumn.table_id == Table.id,
                    TableColumn.table_id == Table.original_id)
        ))

    def get_table_columns(self, table_uri: str) -> List[TableColumn]:
        """
        Return the details columns of a table
        :param table_uri:
        :return:
        """
        with self.db.connect() as conn:
            query = self._get_query(Session(bind=conn))
            columns = query.filter(Table.uri == table_uri).all()
            if not columns:
                raise NotFoundException('TableColumns '
                    f'for table_uri: {table_uri} not found')

            return [column.TableColumn for column in columns]

五、Amundsen的优点

Amundsen已经被证明是一个非常有用的平台,对于数据方面的工作人员来说有如下的优点:

1、便于数据发现:Amundsen可以为开发人员提供方便快捷的数据发现流程,它可以帮助他们找到他们所需要的数据资源。同时,该平台还提供了一些其他的功能,例如数据资源拥有者细节、数据源准入信息、端到端的执行图、标签等等。通过这些功能,用户可以轻松找到自己需要的数据资源

2、提高协作效率:Amundsen提供了许多协作功能,可以帮助用户更好地协作开发和共享自己的数据资源。如markdown文件、评论、贡献表,以及最近使用该数据集的用户等等。通过这些功能,用户可以更好地互相沟通和协作,提高开发效率。

六、Amundsen的局限性

Amundsen虽然是一个功能非常强大的平台,但是它仍然有一些局限性:

1、支持的数据类型不够多;

2、还是需要用户手动去记录使用数据集并为数据集添加有价值的描述和标签等数据点。

七、结论

综合来说,Amundsen是一个功能强大的平台,对于数据工作人员来说非常有用。它可以为用户提供快速的数据发现功能,并提供了多种协作功能,可以帮助用户更好地协作开发和共享自己的数据资源,提高开发效率。不过它也存在局限性,例如它只支持有限的数据类型,用户仍需手动为数据集添加有意义的描述和标签等数据点。总之,Amundsen的优点远远大于局限性,值得尝试使用。