嘿,老铁们,今天我们来聊聊Airbyte,特别是如何利用Airbyte CDK来实现数据集成。Airbyte是一款强大的数据集成平台,用于从API、数据库以及文件到数据仓库和数据湖的ELT管道构建。你可能会问,这个Airbyte CDK(注意,它已经被弃用了,需要用AirbyteLoader代替)到底有多强大?说白了,它就是让你轻松跑各种连接器,把数据源的记录提取成文档。
让我们从安装开始:
安装
首先,你需要安装airbyte-cdk
Python包:
%pip install --upgrade --quiet airbyte-cdk
接着,你可以选择从Airbyte的Github仓库安装现成的连接器,或者自己动手,打造个性化连接器。比如,想安装Github连接器,只需运行:
%pip install --upgrade --quiet "source_github@git+https://github.com/airbytehq/airbyte.git@master#subdirectory=airbyte-integrations/connectors/source-github"
有些数据源的连接器还能直接从PyPI上获取。
实战演示
现在,我们来看看如何基于刚刚安装的源创建一个AirbyteCDKLoader。它需要一个config
配置对象传递给连接器,同时你也得选择要获取哪些记录的流(stream_name)。关于配置对象和可用流的更多信息,请查看连接器的文档和spec定义。例如Github连接器的文档链接为:
通过以下代码,我们可以加载Github中的问题:
from langchain_community.document_loaders.airbyte import AirbyteCDKLoader
from source_github.source import SourceGithub # 插入自己的数据源
config = {
# 你的GitHub配置
"credentials": {"api_url": "api.github.com", "personal_access_token": "<token>"},
"repository": "<repo>",
"start_date": "<date, e.g. 2020-10-20T00:00:00Z>",
}
issues_loader = AirbyteCDKLoader(
source_class=SourceGithub, config=config, stream_name="issues"
)
# 加载文档
docs = issues_loader.load()
这波操作可以说是相当丝滑。如果你想要更多的控制权,用lazy_load
方法返回一个迭代器:
docs_iterator = issues_loader.lazy_load()
默认情况下,页面内容是空的,metadata对象包含了所有记录信息。要生成不同的文档格式,可以在创建loader时传入一个record_handler
函数:
from langchain_core.documents import Document
def handle_record(record, id):
return Document(
page_content=record.data["title"] + "\n" + (record.data["body"] or ""),
metadata=record.data,
)
issues_loader = AirbyteCDKLoader(
source_class=SourceGithub,
config=config,
stream_name="issues",
record_handler=handle_record,
)
docs = issues_loader.load()
增量加载
有些流支持增量加载,这意味着源会跟踪同步记录并且不会再次加载它们。这对于数据量大且更新频繁的源非常有用。要利用这一点,得存储loader的last_state
属性,并在再次创建loader时传入。这能保证只加载新记录。
last_state = issues_loader.last_state # 安全存储
incremental_issue_loader = AirbyteCDKLoader(
source_class=SourceGithub, config=config, stream_name="issues", state=last_state
)
new_docs = incremental_issue_loader.load()
相关资源
想要了解更多Document loader的概念指南或者如何实践,请参考相关的Airbyte文档。
今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~
—END—