数据工程数据集成ETL后端大数据【免费下载链接】airbyteOpen-source data movement for ELT pipelines and AI agents — from APIs, databases files to warehouses, lakes, and AI applications. Both self-hosted and Cloud.项目地址https://gitcode.com/gh_mirrors/ai/airbyte点击查看免费下载本篇以 Airbyte 开源仓库中的 Finage 数据源连接器airbyte-integrations/connectors/source-finage为主线从连接器 README、manifest.yaml、metadata.yaml与验收测试配置出发逐层拆解一个纯声明式Declarative / manifest-only连接器的完整实现。读完本文你将掌握 Low-Code CDK 的 YAML 结构version / definitions / streams / check / spec、多数据流的组织方式、API Key 认证、Symbol 列表分区、基于日期游标的增量同步以及如何将金融行情数据股票、外汇、加密市场新闻、技术指标、财务三大报表、机构持仓等 18 个数据流接入 Airbyte 平台。连接器是什么一个 manifest-only 的声明式数据源Finage 是一个提供实时与历史市场数据的金融数据 API 服务覆盖股票、外汇与加密货币等领域。Airbyte 官方并未为该连接器手写 Python 源码而是以一份约 1600 行的 YAML 清单文件manifest.yaml完整定义了连接器的全部行为——这种连接器形态在 Airbyte 中被称为Declarative Source声明式数据源由 Connector Builder 生成或手工编写。metadata.yaml 记录了该连接器的关键元信息连接器类型source子类型api定义 ID 为5220663f-d87b-498e-8aed-1f2d59371a61镜像与版本airbyte/source-finage:0.0.67基于声明式清单基础镜像airbyte/source-declarative-manifest:7.33.0构建标签为language:manifest-only与cdk:low-code即纯清单、零手写代码发布阶段alpha支持级别community社区维护允许的主机仅api.finage.co.ukallowedHosts.hosts这是连接器网络策略层面的白名单许可证ELv2说明该连接器代码并非纯开源许可。所谓声明式正如仓库中的 Low-code connector development 文档 所解释的API 连接器解决的问题高度公式化——同一 API 根地址下的多个端点、常见的 OAuth/API Key 认证、为数不多的分页策略、限流退避、返回数据格式解码、增量同步游标等。Low-Code CDK 把这些问题的解法封装成可配置的现成组件开发者只需在 YAML 中挑选组件并填参数由框架Python CDK 中 manifest YAML 到行为实现之间的映射层负责执行逻辑。Finage 连接器正是这一范式的典型产物。manifest.yaml 总览声明式连接器的四段式结构manifest.yaml当前版本6.4.0type: DeclarativeSource遵循 Low-Code CDK 的通用骨架组件Finage 连接器中的实际内容version清单格式版本号当前为6.4.0definitions定义可复用的组件对象重点是streams18 个数据流与base_requester共享 HTTP 请求器streams通过$ref引用definitions.streams下全部 18 个数据流作为对外暴露的同步流列表check连接检查器CheckStream通过尝试读取market_news流中的记录来验证连接配置是否有效spec连接器配置规范连接器说明声明用户需要填写的参数metadata自动导入 schema 的开关与已测试流的校验记录schemas每个数据流的 JSON Schema描述返回记录的字段与类型其中check一节只做了两件事声明使用CheckStream类型并指定被检查的流为market_news。也就是说Airbyte 在测试连接阶段会实际请求一次市场新闻接口能读到记录即视为连接成功——这也是连接器不额外写自定义 check 逻辑的轻量做法。请求层解剖base_requester 与 API Key 认证definitions.base_requester是全部数据流共享的 HTTP 请求配置base_requester: type: HttpRequester url_base: https://api.finage.co.uk/ authenticator: type: ApiKeyAuthenticator api_token: {{ config[\api_key\] }} inject_into: type: RequestOption field_name: apikey inject_into: request_parameter关键点有三统一 API 根地址所有流的path都拼接在https://api.finage.co.uk/之下各流只声明各自的相对路径避免重复书写完整 URLAPI Key 注入方式采用ApiKeyAuthenticator把配置项api_key以查询参数apikeyxxx的形式附加到每次请求上inject_into: request_parameter。这是 Finage API 文档所要求的认证方式——在 metadata.yaml 的externalDocumentationUrls中也同时登记了 Finage 的 API 参考文档与认证入门文档两类外部资料模板表达式{{ config[\api_key\] }}是 Low-Code CDK 的 Jinja 风格内插语法在运行时从用户填写的连接配置中取值这也是整个清单文件反复使用的机制。18 个数据流能力全景与配置分组manifest.yaml的streams列表通过$ref引用了 18 个流覆盖 Finage 的多类接口。按业务域可归为五组市场新闻与行情榜单market_news请求/news/market/{{ stream_partition.symbol }}带limit30查询参数与Accept-Encoding: Gzip请求头服务端 Gzip 压缩解码返回字段从news数组路径提取DpathExtractor的field_path: [news]记录字段为description / date / source / title / urlmost_active_us_stocks请求/fnd/market-information/us/most-actives主键为symbol并通过AddFields变换为每条记录追加Datetime字段值为{{ now_utc() }}同步时刻的 UTC 时间戳用于记录行情快照的采集时间most_gainers/most_losers分别请求/fnd/market-information/us/most-gainers与most-losers主键symbol记录包含change / change_percentage / company_name / price / symbolsector_performance请求/fnd/market-information/us/sector-performance主键为sector。技术指标technical_indicators路径由三段模板组成——fnd/technical-indicator/{{ config[tech_indicator_type] }}/{{ config[time] }}/{{ stream_partition.symbol }}即指标类型 / 时间周期 / 标的代码并携带period参数。该流通过AddFields变换把symbol写入每条记录方便按标的区分记录字段包含type / close / date / high / low / open / value / volume / symbol等。日历类数据economic_calendar请求/fnd/economic-calendar记录字段actual / change / changePercentage / country / countryFlag / date / estimate / event / previousdate为必填且是该流的游标字段earning_calendar请求/fnd/earning-calendar记录字段date / eps / estimated_eps / estimated_revenue / revenue / symbol / timeipo_calendar请求/fnd/ipo-calendar主键为symboldate记录字段含company / exchange / market_cap / price_range / shares / status等historical_stock_split请求/fnd/historical-stock-splits/{{ stream_partition.symbol }}记录字段date / denominator_factor / label / numerator_factor。注意该流的 name 与 schema 键在清单中写作historical_stock_split 名称带一个尾随空格这是清单文件中的一个真实细节引用该流时需保持一致historical_dividends_calendar请求/fnd/historical-dividends/{{ stream_partition.symbol }}记录字段adj_dividend / date / declaration_date / dividend / label / payment_date / record_date。财务报表cash_flow_statements/balance_sheet_statements/income_statement分别请求/fnd/cash-flow-statement/、/fnd/balance-sheet-statements/、/fnd/income-statement/加{{ stream_partition.symbol }}三者均携带period参数由配置项time_period提供主键均为datesymbol。从 schema 看现金流量表含operatingCashFlow / capitalExpenditure / freeCashFlow / netIncome / dividendsPaid等约 40 个字段资产负债表含totalAssets / totalLiabilities / totalStockholdersEquity / cashAndCashEquivalents / longTermDebt等约 60 个字段利润表含revenue / grossProfit / ebitda / eps / netIncome及其对应比率字段。持仓与股本institutional_holders请求/fnd/funds/institutional-holder/{{ stream_partition.symbol }}主键holder字段change / holder / report_date / sharesmutual_fund_holder请求/fnd/funds/mutual-fund-holder/{{ stream_partition.symbol }}字段change / holder / report_date / shares / weight_percentageshares_float请求/fnd/shares-float/{{ stream_partition.symbol }}字段date / outstanding_shares / public_float / stock_float / symboldelisted_companies请求/fnd/delisted-companies/固定携带limit1000与period: annual主键symbol字段company_name / delisted_date / exchange / ipo_date / symbol。从上面的分组可以看出连接器对按股票代码逐一拉取与全市场一次性拉取两类接口做了区分前者全部配置了partition_router按symbols分区后者榜单、日历类直接整表读取仅靠DpathExtractor的field_path: []将响应顶层数组整体作为记录集。spec 参数详解用户如何配置 Finage 连接器连接器的spec连接器说明定义了用户在界面上需要填写的 7 个参数其中 3 个为必填参数类型必填取值/默认值说明api_keystring是—Finage API Keyairbyte_secret: true在 UI 中以密码框展示symbolsarray是—股票/交易标的代码列表如AAPL, TSLA作为多流的分区输入tech_indicator_typestring否SMA技术指标类型枚举DEMA, EMA, SMA, WMA, RSI, TEMA, Williams, ADXtimestring否daily指标时间周期枚举daily, 1min, 5min, 15min, 30min, 1hour, 4hourperiodstring否10指标回看周期清单描述中注明默认 10time_aggregatesstring否day时间聚合粒度枚举minute, hour, day, week, month, quarter, yeartime_periodstring否—财务报表报告周期枚举annual, quarterstart_datestring是—增量同步起始时间格式要求YYYY-MM-DDTHH:MM:SSZ正则^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$可以推断period、time、time_period分别与technical_indicators流period参数和三大财务报表流period参数直接挂钩time_aggregates与time则在技术指标路径模板中共同决定数据粒度。start_date则是下面增量同步的起点。增量同步与分区路由Symbol 列表驱动的多标的抓取声明式连接器的两个核心运行机制在 Finage 清单中有清晰体现1.ListPartitionRouter列表分区路由。凡是路径中带{{ stream_partition.symbol }}的流市场新闻、技术指标、历史拆股、历史分红、三大报表、机构/共同基金持仓、股本流通量都配置了partition_router: type: ListPartitionRouter values: {{ config[\symbols\] }} cursor_field: symbol运行效果是读取用户配置的symbols列表逐标的生成请求分区每个分区的symbol值通过stream_partition.symbol注入路径模板。这也是文档中Partition Router 描述如何对数据流分区、从而支持增量同步与检查点这一能力的直接落地——每个标的是一个独立分区Airbyte 可按分区记录同步进度。2.DatetimeBasedCursor基于日期时间的游标。economic_calendar与ipo_calendar两个流配置了增量同步incremental_sync: type: DatetimeBasedCursor cursor_field: date cursor_datetime_formats: - %Y-%m-%d %H:%M:%S datetime_format: %Y-%m-%d start_datetime: type: MinMaxDatetime datetime: {{ config[\start_date\] }} datetime_format: %Y-%m-%dT%H:%M:%SZ start_time_option: type: RequestOption inject_into: request_parameter field_name: from end_time_option: type: RequestOption inject_into: request_parameter field_name: to end_datetime: type: MinMaxDatetime datetime: {{ now_utc().strftime(%Y-%m-%dT%H:%M:%SZ) }} datetime_format: %Y-%m-%dT%H:%M:%SZ行为拆解以响应记录中的date字段为游标识别上次同步位置起始时间取用户配置的start_date结束时间默认为当前 UTC 时刻now_utc()起始与结束时间分别以查询参数from、to注入请求实现只拉取时间窗口内的日历记录响应中的日期格式%Y-%m-%d %H:%M:%S与查询参数使用的%Y-%m-%d格式分开声明互不干扰。schema 与主键设计数据落库的字段契约manifest.yaml尾部为全部 18 个流定义了内联 JSON SchemaInlineSchemaLoaderschemas区块这就是同步到目标端后建表/建模的字段契约。几个值得注意的设计选择宽松字段类型绝大多数字段声明为[string, null]或[number, null]的可空联合类型additionalProperties: true对上游返回字段变化有较强容忍度主键声明primary_key用于记录去重设计上区分了单标的单键如most_active_us_stocks、most_gainers、most_losers、delisted_companies、sector_performance用symbol/sector、复合键ipo_calendar用symboldate三大报表用datesymbol以及机构持仓键institutional_holders用holder字段命名风格不统一同一清单中同时存在camelCase财务报表类如freeCashFlow、snake_case如change_percentage、delisted_date与PascalCaseDatetime三种风格这是直接映射上游 API 原始字段名的结果建模时需注意。验收测试与本地开发无密钥环境下的测试策略acceptance-test-config.yml 展示了该连接器的测试策略——由于是 Connector Builder 社区贡献、当时没有可用的测试密钥测试配置采取了spec 真测、其余绕过的务实方案spec测试正常执行spec_path直接指向manifest.yaml校验清单中的连接器说明结构合法connection、discovery、basic_read、incremental、full_refresh五类验收测试均声明bypass_reason理由统一为This is a builder contribution, and we do not have secrets at this time构建器社区贡献暂无密钥。即便如此manifest.yaml 的metadata.testedStreams区块保留了每个流的校验记录hasResponse / responsesAreSuccessful / hasRecords / primaryKeysArePresent / primaryKeysAreUnique均为 true说明这些流在开发阶段已通过真实响应做过冒烟验证。连接器 README 指出本地开发与测试请参考 Airbyte 官方文档中的本地连接器开发指南关于清单 YAML 格式的底层机制可直接研读仓库内文档 Low-code connector development其中解释了version / definitions / streams / check / spec各组件职责以及 Requester、Record Selector、Partition Router、Cursor field、Transformations 等流级子组件。README 还提到连接器特有的故障排查与测试指引可能记录在连接器目录内的CONTRIBUTING.md中——不过当前仓库中该连接器目录airbyte-integrations/connectors/source-finage/仅包含README.md、manifest.yaml、metadata.yaml、acceptance-test-config.yml与icon.svg尚未提供这份专属指引。运行与接入方式该连接器以 Docker 镜像airbyte/source-finage:0.0.67发布metadata.yaml在 Airbyte 平台自托管或云端中新建 Source 时选择 Finage填写上述api_key、symbols、start_date三个必填参数其余参数按需调整即可建立连接。随后可对 18 个数据流按需启用同步将其导入数据仓库、数据湖或进一步接入 AI 应用的数据链路中。需要留意的是该连接器处于alpha/community支持级别功能可用但迭代可能较快清单格式version: 6.4.0与镜像版本会随 Airbyte 发布节奏更新生产使用前建议核对当前仓库中manifest.yaml与metadata.yaml的实际内容。小结Finage 连接器是理解 Airbyte 声明式连接器范式的理想标本一份 YAML 清单同时承载了 API Key 认证、18 个 REST 数据流、Symbol 列表分区、日期游标增量同步、字段 Schema 与主键设计全程零手写代码。通过本文对 manifest.yaml、metadata.yaml、acceptance-test-config.yml 及 Low-Code CDK 文档 的逐层解析你可以把同样的组件选择 参数填充方法迁移到任何 REST API 数据源连接器的构建中。赞分享数据工程数据集成ETL后端大数据【免费下载链接】airbyteOpen-source data movement for ELT pipelines and AI agents — from APIs, databases files to warehouses, lakes, and AI applications. Both self-hosted and Cloud.项目地址https://gitcode.com/gh_mirrors/ai/airbyte点击查看免费下载相关推荐Airbyte Toggl 声明式连接器深度解析基于 Low-Code CDK 的工时数据同步实现Airbyte Toggl 声明式连接器深度解析基于 Low Code CDK 的工时数据同步实现 本文以 Airbyte 仓库中的 Toggl 源连接器s数据工程数据集成ETL后端大数据Airbyte Mixmax 连接器深度解析基于 Low-Code CDK 声明式清单的数据同步实现Airbyte Mixmax 连接器深度解析基于 Low Code CDK 声明式清单的数据同步实现 Mixmax 是面向销售与商务沟通场景的邮件增强平台A数据工程数据集成ETL后端大数据Airbyte Productboard 声明式 Source 连接器深度解析基于 Low-Code CDK 的 Manifest-only 实现Airbyte Productboard 声明式 Source 连接器深度解析基于 Low Code CDK 的 Manifest only 实现 本篇技术指数据工程数据集成ETL后端大数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考