☰
Pathway 实战:使用官方示例程序验证 SharePoint 连接器连通性
2026/11/1 8:57:19 网站建设 项目流程

Pathway 实战:使用官方示例程序验证 SharePoint 连接器连通性

【免费下载链接】pathwayPython ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pathway

本篇文章围绕 Pathway 仓库中 sharepoint-test 示例程序 与其 README 说明 展开,系统讲解如何配置并运行 Pathway 的 SharePoint 连接器以打通微软 SharePoint 站点的数据读取链路。读完本文,你将掌握该示例的完整运行步骤、sharepoint.read全部核心参数的含义与取值,并借助仓库源码与集成测试理解底层认证、快照扫描与数据输出的工作原理,从而快速判断你的 SharePoint 环境(应用注册、证书、目录权限)是否配置正确。

示例程序定位:一个专为连通性测试设计的最小案例

在部署任何真实的"读取 SharePoint → 进入 Pathway 实时管道"业务之前,先用最小程序验证连接是成本最低的排障手段。仓库中的 examples/projects/sharepoint-test 目录正是为此而生,它仅包含两个文件:

  • README.md:用法说明;
  • sharepoint_test.py:可运行的测试脚本。

从仓库结构看,该示例还同时在开发者文档的模板库中维护了一份镜像说明,见 docs/2.developers/7.templates/ETL/_readmes/sharepoint-test.md,其内容与示例 README 完全一致,方便在模板目录中浏览。

示例脚本的完整源码如下(sharepoint_test.py):

import pathway as pw from pathway.xpacks.connectors import sharepoint if __name__ == "__main__": table = sharepoint.read( url=..., # Example: "https://company.sharepoint.com/sites/MySite" root_path=..., # Example: "Shared Documents/Indexer" tenant=..., # Normally uuid4 client_id=..., # Normally uuid4 thumbprint=..., # Certificate's thumbprint cert_path=..., # A path to the .pem-file for the certificate mode="static", ) pw.io.jsonlines.write(table, "contents.txt") pw.run(monitoring_level=pw.MonitoringLevel.NONE)

它的逻辑非常简洁:用sharepoint.read读取指定 SharePoint 站点目录中的文件,通过 jsonlines 输出 写入本地contents.txt,最后调用pw.run启动引擎执行整张数据流图。这正是典型的"最小可验证程序"结构——如果连接配置有误,程序会直接报错;如果配置正确,运行结束后contents.txt中会出现数据行。

前置条件:证书认证、应用授权与许可证

由于该连接器采用微软 Azure AD(Entra ID)的应用 + 客户端证书方式进行认证,示例 README 提到的占位参数背后对应着一整套 SharePoint 应用注册与授权工作:

参数含义典型形态
urlSharePoint 站点 URL(含站点路径)https://company.sharepoint.com/sites/MySite
tenant租户 ID,即 Azure AD 中的目录 ID形如 UUID(Guid)的字符串
client_id已授权访问 SharePoint 的应用(Application)Client ID形如 UUID(Guid)的字符串
thumbprint客户端证书的指纹(thumbprint)证书十六进制指纹
cert_path证书文件路径,通常为.pem格式如./certificate.pem

从连接器源码 python/pathway/xpacks/connectors/sharepoint/init.py 可以确认认证链路的具体实现:_ContextWrapper内部使用 office365 Python 库的ClientContext(url).with_client_certificate(tenant=..., client_id=..., thumbprint=..., cert_path=...)构造 SharePoint 客户端上下文,随后加载context.web并执行一次查询来验证凭据是否可用。也就是说,示例中填写的五个认证参数会被原样传递给微软的证书认证接口,任何一项错误都会导致认证失败。

此外还有两点需要注意:

  1. 许可证要求:该连接器属于 Pathway 的扩展包(xpack)能力。连接器入口read的文档字符串明确注明"Requires a valid Pathway Live Data Framework Scale license key",同时_SharePointSubject在初始化时会调用_check_entitlements("xpack-sharepoint")进行授权校验(源码)。示例 README 中给出的运行方式是把它作为环境变量注入:

    PATHWAY_LICENSE_KEY=... python sharepoint_test.py

    如果本地未配置许可证,可通过该环境变量在运行时提供。

  2. 测试目录必须非空:README 在末尾特别提示 "Ensure that your SharePoint space contains at least one file for this test to work."。这是因为整个测试的判断标准是contents.txt中是否出现内容——若目标目录为空,即使连接成功也不会有任何数据行写入,从而无法与失败场景区分。建议在root_path指向的目录中预先放置一个已知文件用于验证。

逐参数深入:sharepoint.read完整参数语义

示例只使用了 6 个必要参数并把mode固定为"static",但连接器实际支持更丰富的配置。以源码中的完整函数签名为准(python/pathway/xpacks/connectors/sharepoint/init.py):

def read( url: str, *, tenant: str, client_id: str, cert_path: str, thumbprint: str, root_path: str, mode: str = "streaming", format: Literal["binary", "only_metadata"] = "binary", recursive: bool = True, object_size_limit: int | None = None, with_metadata: bool = False, refresh_interval: DurationLike = 30, max_failed_attempts_in_row: int | None = 8, max_backlog_size: int | None = None, ) -> Table

各参数要点如下:

url与root_path(定位读取范围)

  • url指向 SharePoint 站点本身,例如https://company.sharepoint.com/sites/Datasets。仓库开发者文档同时指出,从站点子站(subsite)读取数据同样受支持——将子站 URL 填入url即可(如https://company.sharepoint.com/sites/Datasets/vendor)。
  • root_path指向站点内要读取的目录或单个文件,采用服务器相对路径,如Shared Documents/Data。

mode(读取模式,示例中固定为"static")

  • 默认值为"streaming":连接器每隔refresh_interval秒扫描一次目录,增量地反映新增、更新与删除的文件,输出为 Upsert 语义的实时表;
  • "static":只考虑运行时刻的已有数据,一次性以单个 commit 摄入全部文件后结束。

从实现看(源码 run 方法),两种模式的差异体现在会话类型与循环行为上:static使用SessionType.NATIVE会话,摄入完一个快照 diff 后立即break退出循环;streaming使用SessionType.UPSERT会话,循环执行并在每次扫描后time.sleep(refresh_interval)。示例选用static模式非常合理——它让程序在一次性读取后自然结束,适合连通性测试;而streaming模式会持续轮询,适合长期运行的实时管道。

format(输出表结构)

  • "binary"(默认):结果表含data列,保存每个文件的二进制内容;
  • "only_metadata":只输出_metadata列(含路径、大小、时间等元数据),不会下载文件内容,从而节省时间与流量。源码中该模式通过向 UpsertSession 注入随机合成载荷来触发变更,配合table.select(_metadata=...)实现(源码)。

recursive(是否递归扫描子目录):默认True,扫描root_path下的所有嵌套目录;设为False则只处理指定目录内直接放置的文件。

object_size_limit(文件大小上限,单位字节):默认None表示不按大小过滤。超过上限的文件内容不会被下载,其元数据中的状态会被标记为STATUS_SIZE_LIMIT_EXCEEDED。

with_metadata(是否附带元数据列):默认False。设为True时,输出表会额外增加_metadata列,包含path、created_at、modified_at、size、seen_at、status、url等字段,其中创建/修改时间为 UNIX 时间戳。需要说明,only_metadata格式会自动强制开启该列。

refresh_interval(扫描间隔):默认 30 秒,仅streaming模式生效;可接受秒数、datetime.timedelta或pw.Duration。

max_failed_attempts_in_row(连续失败上限):默认 8。连续读取失败达到该次数后连接器抛出错误终止;设为None则无论凭据是否错误都无限重试。

max_backlog_size(积压上限):默认None不设限。限制任一时刻积压在处理的输入条目数,达到上限时暂停读取、处理完部分条目后恢复,适用于源端初始爆发式吐出大量数据、需要避免内存尖峰的大规模读取场景。

实操运行步骤与结果判定

根据示例 README 的说明,完整运行流程如下:

第 1 步:填写占位参数。打开 sharepoint_test.py,把url、root_path、tenant、client_id、thumbprint、cert_path六个占位符替换为真实值。可对照源码文档字符串中的参考示例(python/pathway/xpacks/connectors/sharepoint/init.py):

table = sharepoint.read( url="https://company.sharepoint.com/sites/Datasets", tenant="c2efaf1f-8add-4334-b1ca-32776acb61ea", client_id="f521a53a-0b36-4f47-8ef7-60dc07587eb2", cert_path="certificate.pem", thumbprint="33C1B9D17115E848B1E956E54EECAF6E77AB1B35", root_path="Shared Documents/Data", )

如需只读取Datasets/Animals/2023目录且不递归子目录,可将root_path改为"Datasets/Animals/2023"并追加recursive=False。

第 2 步:运行程序。在脚本所在目录执行:

python sharepoint_test.py

第 3 步(按需):注入许可证。若本机环境已配置 Pathway Scale 许可证则可跳过;否则以环境变量方式提供:

PATHWAY_LICENSE_KEY=... python sharepoint_test.py

第 4 步:判定结果。程序运行结束后,检查脚本同目录下生成的contents.txt:

  • 若其中包含数据行,说明认证、授权与目录路径全部配置正确,连接成功;
  • 若文件为空或程序报错,则应优先核对五个认证参数的准确性(尤其是thumbprint与证书文件的匹配关系)、应用对目标站点的授权范围,以及root_path是否真实存在且非空。

连接成功后,contents.txt中的每一行对应一个被读取的 SharePoint 文件,由 jsonlines writer 序列化输出,通常除data(base64 编码的文件二进制内容)外还会附带引擎侧自动补充的time、diff等列。

源码视角:一次连接测试背后发生了什么

为了让验证更有把握,不妨理解连接器在示例脚本启动后的完整内部流程。根据 连接器实现,其运行可以拆解为四层:

  1. 认证层:_ContextWrapper.context使用with_client_certificate建立带证书认证的ClientContext,并立即加载context.web、执行一次查询以确认租户/应用/证书三元组有效;
  2. 调度层:_SharePointSubject(继承自ConnectorSubject)作为数据源主体接入 Pathway,在静态模式下以NATIVE会话一次性摄入;它还负责把元数据以_metadata(JSON 序列化)随文件内容一并 Upsert 进表;
  3. 扫描层:每次循环由_SharePointScanner.get_snapshot_diff完成——通过web.get_folder_by_server_relative_path(root_path)定位目录,再以get_files(recursive)拉取文件清单;对每个文件提取path、size、created_at、modified_at等元数据并与上次快照比对,得到updated_entries(新增/变更)与deleted_entries(已消失)两个 diff;文件内容经get_content()拉取;
  4. 容错层:所有 SharePoint 查询统一经_execute_with_retries执行(源码),最多重试QUERY_MAX_ATTEMPTS = 5次、间隔QUERY_RETRY_INTERVAL_SECONDS = 5秒,且重试范围覆盖 HTTP 错误与网络连接错误两类瞬时故障,避免一次 DNS 抖动或 socket 重置就让整个测试失败。

针对上述容错逻辑,仓库还提供了专门的单元测试 python/pathway/xpacks/connectors/tests/test_sharepoint.py,其中验证了"瞬时失败(连接错误或 503)会被重试直至成功"以及"重试次数耗尽后会向调用方抛出错误而非静默返回空结果"两个关键行为——这说明连接测试报错时,大概率是配置层面的硬性问题,而非可自愈的瞬时抖动。

集成测试给出的进阶验证视角

若希望从"最小连通性测试"走向更完整的参数化验证,可以参照仓库中的真实集成测试 integration_tests/sharepoint/test_sharepoint.py。它展示了生产级用法中如何把凭据与配置解耦:

sharepoint_connector.read( url="https://navalgo.sharepoint.com/sites/ConnectorSandbox", root_path=root_path, tenant=os.environ["SHAREPOINT_TENANT"], client_id=os.environ["SHAREPOINT_CLIENT_ID"], thumbprint=os.environ["SHAREPOINT_THUMBPRINT"], mode="static", cert_path=..., )

从中可以确认几个与示例程序互补的细节:

  • 凭据应通过环境变量注入(SHAREPOINT_TENANT、SHAREPOINT_CLIENT_ID、SHAREPOINT_THUMBPRINT),证书文件与凭据分离管理,避免把密钥写死在脚本里;
  • object_size_limit行为可验证:超过限制的文件不会下载内容,其元数据状态为STATUS_SIZE_LIMIT_EXCEEDED,且data为空(测试用例);
  • only_metadata输出形态可验证:该格式下输出行只有_metadata、time、diff三列,不包含data列,但文件大小仍可从清单中准确上报(测试用例);
  • recursive语义可验证:对仅含嵌套子目录文件的测试目录,recursive=False时输出 0 行、recursive=True时输出 1 行(测试用例)。

这些用例恰好覆盖了示例程序未启用的参数分支,可作为你验证连接成功后、继续扩展真实业务管道时的手册。

从连通性测试走向真实数据管道

连接测试通过意味着最困难的环境配置环节已经打通。在示例基础上,可以沿两条主线继续深入:

  1. 切换到流式消费:将mode改为默认的"streaming"(或省略该参数),并调整refresh_interval,连接器便会周期性地把 SharePoint 目录中的新增、修改与删除以实时方式推入 Pathway 表,适合持续同步文档库的场景。注意streaming下pw.run()不会自行退出,需按业务需要配合合适的输出目标运行。
  2. 用模板管道替换手写脚本:仓库开发者文档的 连接器总览 与 YAML 数据源示例 说明了如何通过配置驱动方式编排数据源;安装说明 与 许可证指南 则分别覆盖了运行环境准备与许可证配置,帮助你在更大规模下落地 SharePoint → Pathway 的实时数据管道。

【免费下载链接】pathwayPython ETL framework for stream processing, real-time analytics, LLM pipelines, and RAG.项目地址: https://gitcode.com/GitHub_Trending/pa/pathway

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询