Salesforce 和外部 Analytics 平台之间的大多数企业集成漏斗依赖于自定义代码。它们一直工作到有东西坏了模式偏差、API 耗尽和硬删除差距需要持续的工程干预。随着公司向敏捷、支持公民开发人员的架构推进,这种模式成为一个瓶颈:分析团队等待工程进度将 Salesforce 字段添加到下游方案,夜间加载失败会延迟周一早晨的报告,简单的配置更改需要代码审查和部署。

Salesforce 本地分析和商业智能平台 CRM Analytics 通过使公司能够探索数据、构建交互式仪表板和发现 AI 驱动的见解而无需离开 Salesforce 生态系统来解决这个问题。此功能的核心是本地内置到平台中的声明性低代码数据同步功能:CRM Analytics SyncOut 和 CRM Analytics SyncIn。

CRM Analytics SyncOut 按照配置的计划将 Salesforce 记录移动到外部数据存储中,使用变更数据捕获 (CDC) 进行增量加载,并使用内置的硬删除跟踪来标记永久删除的记录。CRM Analytics SyncIn 将外部数据带回 Salesforce,将列映射到对象字段,并使用批量 API 2.0 更新插入记录。两者完全通过 Salesforce 设置配置。没有漏斗,没有暂存脚本,没有自定义监控。管理员在单个设置会话中配置同步作业;平台会自动处理执行、重试、错误记录和模式映射。

本指南解释了模式、何时使用、如何使用 Snowflake 作为工作示例实施,以及确定它是否适合给定集成问题的架构注意事项。

**许可说明:**如果没有 CRM Analytics 许可证加载项,CRM Analytics SyncIn 和 SyncOut 在基础 Salesforce 版本中不可用。在设计依赖于这些功能的同步架构之前,请确认许可证权利。

数据集成是企业架构中摩擦力最大的领域之一。从 Salesforce 到 Analytics 平台的自定义 ETL 漏斗通常需要用于身份验证的连接的应用程序、用于 SOQL 提取的计划作业、用于协调字段类型的转换层、用于批量加载的暂存区域以及用于捕获失败的监控层。自定义代码的每个组件都代表一个失败点。

随着时间的推移,这种摩擦的成本会发生变化。Salesforce 中的模式偏差(重命名字段、新选项列表值、更改的 API 名称)会静默地中断漏斗。使用高峰期间的 API 耗尽会停止提取。硬删除的记录永远不会出现在目标表中,而是留下下游 Analytics 视为实时的过时数据。工程团队成为日常数据操作的瓶颈。

CRM Analytics SyncIn 和 SyncOut 会更改操作模式。配置会替换代码。平台负责执行、错误处理、模式映射和可观察性。管理员可以定义、修改和监控同步作业,而无需出示开发工单。

这种新操作模型的结果是减少了从集成设计到操作同步的时间,降低了工程开销,并且集成模型可以在平台约束范围内扩展,而不是需要自定义代码维护。

SyncIn 和 SyncOut 是 CRM Analytics 数据同步的两种定向模式。SyncOut 将 Salesforce 记录移动到外部平台。SyncIn 会将外部记录导入 Salesforce。两者都在声明性配置模型上运行,不需要自定义代码。

声明性配置意味着所有同步行为都是通过 Salesforce 设置中的指点单击式 UI 定义的。源对象、目标表、字段映射、同步计划、同步模式和筛选器都通过配置元数据设置。平台从该元数据派生执行计划,并对其进行端到端管理。

完全同步与增量同步控制每次运行时移动哪些数据。完全同步会在每次执行时查询匹配筛选条件的所有记录。增量同步使用 CDC 仅查询自上次运行以来发生变化的记录。增量同步是高用量对象的推荐模式,因为它大大减少了 API 消耗和同步持续时间。

变更数据捕获是一项Salesforce平台功能,可将对象的字段级变更记录为事件流。SyncOut 使用 CDC 检测创建、更新和删除,而无需执行全表扫描。在同步配置引用前,必须在 Salesforce 设置中为每个对象启用 CDC。

硬删除跟踪解决了 Salesforce 对外部 ETL 中一个最持久的问题。在 Salesforce 中硬删除记录时,它会从标准 SOQL 查询中消失。如果没有显式跟踪,外部平台永远不会知道记录被删除。SyncOut 的硬删除跟踪在启用时,使用 DEL_FLAG = 'Y' 标记目标表中已删除的记录,为下游系统提供可靠的信号来筛选过时数据。

同步频率可配置为从 15 分钟到每周。该选择是在数据新鲜度、API 消耗和 Snowflake 仓库计算成本之间进行权衡。对于操作仪表板,15 分钟同步近乎实时;每日同步适用于批处理报表工作负载。

**管理者限制约束同步作业设计:**Salesforce API 请求限制(Unlimited Edition 每 24 小时 15,000 次调用)、10000 条记录的批量 API 2.0 批量大小以及每个事务的 SOQL 查询行限制为 50,000 个,所有这些都会告知如何调整和计划同步作业的大小。该平台会自动处理分块和分页,但架构师必须在组织中运行的所有同步作业中考虑有限的剩余空间。

Snowflake 是与 Salesforce CRM Analytics 进行数据同步的主要目标和来源。它是批处理和增量数据移动如何端到端工作的具体示例。

本节概述了使用 Snowflake 作为外部分析平台实施 CRM Analytics SyncOut 和 SyncIn。它涵盖了每种方法、共享身份验证模型、安全框架、密钥平台注意事项和可观察性实践。

在此 SyncOut 配置中,Salesforce 使用 CRM Analytics SyncOut 将记录推送到 Snowflake。该平台通过 SOQL 提取数据,自动处理类型转换,并按照配置的计划(从 15 分钟到每周)将其加载到 Snowflake 表中。有关特定加载语义,请参考当前的 Salesforce 和 Snowflake 文档。

SyncOut 架构

在此 SyncIn 配置中,Salesforce 使用 CRM Analytics SyncIn 将数据拉回 Salesforce。该平台通过语句 API 查询 Snowflake,并使用批量 API 2.0 将结果更新插入 Salesforce。大型结果集会自动分页,以保持在 API 限制内。同步按照配置的计划运行,范围从 15 分钟到每周。

SyncIn 架构

Salesforce 同步支持多种身份验证方法,以安全地连接到 Snowflake。企业集成的两种主要方法是密钥对(私钥)和委派 OAuth 2.0。

方法 1:密钥对(私钥)身份验证:密钥对身份验证是自动化系统到系统数据移动的推荐方法,例如 CRM Analytics SyncIn 和 SyncOut。身份验证依赖于 JSON Web 令牌 (JWT),而不是密码或可刷新令牌,这使得它非常适合不需要令牌刷新的无人参与的计划作业。

  • **Salesforce 证书:**生成私钥,并将其安全地存储在 Salesforce 证书和密钥管理中。
  • **外部/命名凭据:**配置为使用 JWT 交换。Salesforce 使用存储的私钥对出站连接请求进行签名。
  • **Snowflake 用户公钥:**匹配的公钥会直接分配到专用 Snowflake 服务帐户(例如,ALTER USER CRM_ANALYTICS_SYNC_USER SET RSA_PUBLIC_KEY = ’…’)。然后,Snowflake 使用此密钥来验证传入的 JWT 签名。此方法不需要安全集成。

**方法 2:委派 OAuth 2.0 身份验证:**或者,Salesforce 可以使用 OAuth 握手进行身份验证。关键组件是:

  • **身份验证提供商:**使用从 Snowflake 安全集成检索的客户端凭据,管理与 Snowflake 的 OAuth 握手。
  • **外部凭据:**在 Salesforce 中安全保存 OAuth 令牌,并将其自动注入同步标注。
  • **命名凭据:**定义 Snowflake 端点 URL(例如 https://<account>.snowflakecomputing.com)并引用外部凭据。
  • **Snowflake 安全集成:**将 Salesforce 注册为 Snowflake 中的受信 OAuth 客户端 (OAUTH_CLIENT = CUSTOM)。定义允许的重定向 URI,并启用刷新标记。

**配置依赖性:**无论选择哪种方法,这些组件都会形成将同步配置连接到端点的依赖链。需要授予相关 Salesforce 简档对命名凭据的访问权限;如果没有此访问权限,无论所有其他配置如何,同步作业都会由于身份验证错误而失败。

后台同步依赖于单个集成身份。

  • **专用服务帐户:**创建专用 Snowflake 服务帐户,其最低权限角色的范围仅限于同步所需的数据库、模式和表。
  • **粒度权限:**对于 SyncOut,此角色需要在目标表上插入、更新和选择。请勿使用高权限角色,例如 ACCOUNTADMIN、SecurityADMIN 或 SYSADMIN。
  • **管理者限制和分块:**在 SyncOut 提取期间,大型结果集会自动分块,以遵守 Salesforce SOQL 调控器的限制。SyncIn 通过自动分页从 Snowflake 语句 API 获取大型结果集,以高效管理数据量。
  • **变更数据捕获(CDC):**增量同步输出依赖于 Salesforce CDC 事件流来识别创建、更新或删除的记录。如果启用硬删除跟踪,已删除的 Salesforce 记录不会删除,而是在 Snowflake 中使用DEL_FLAG = 'Y'标记。
  • **更新插入约束:**SyncIn 依赖批量 API 2.0 将数据加载回 Salesforce。这需要在目标 Salesforce 对象上配置指定的外部 ID 字段,以用作更新插入密钥。
  • **设计指导:**始终从策划的 Snowflake 视图同步,而不是从原始表同步。视图允许预筛选行、列选择和应用业务逻辑,减少了数据量、同步持续时间和 Snowflake 仓库计算成本,与应用的预筛选成正比。

每次同步运行都会生成全面的审计跟踪来验证数据移动。同步作业监控器仪表板为 SyncIn 和 SyncOut 提供实时状态、已处理记录计数、执行持续时间和详细的错误日志。在 Snowflake 方面,Salesforce 提交的每个查询都记录在 Snowflake 查询历史记录中,提供了对执行延迟、扫描的行和仓库计算机使用情况的完整可见性。此外,架构师定义专用 Snowflake 审计表来捕获同步运行元数据 — 时间戳、记录计数和错误;这些不是由平台自动生成的。对于端到端验证,比较两个平台的记录计数:验证 Snowflake (WHERE DEL_FLAG = 'N') 中用于 SyncOut 运行的活动记录,并将 Salesforce 目标对象计数直接与用于 SyncIn 运行的原始 Snowflake 源视图进行比较。

在以下情况下使用 CRM Analytics SyncIn 和 SyncOut:

  • **双向同步是以下要求:**数据通过 SyncIn 流入 Salesforce,并通过 SyncOut 流出到外部平台。
  • **硬删除跟踪至关重要:**SyncOut 的内置标记解决了历史上复杂的 ETL 问题,而无需自定义协调逻辑。
  • **基于 CDC 的增量同步是可行的:**对于高用量 Salesforce 对象,CDC 与完全扫描相比,显著减少了 API 消耗和同步持续时间。
  • **计划批处理同步满足延迟要求:**最小同步频率为 15 分钟,适用于操作仪表板和近乎实时的 Analytics 报表。
  • **降低运营开销是当务之急:**内置仪表板提供完全同步可见性,无需自定义日志记录或提醒基础设施,声明性设置 UI 允许管理员定义、修改和监控同步作业,无需出示开发工单。

在以下情况下,请勿使用此模式:

  • **需要复杂的转换:**在同步之前或之后,在 Snowflake 视图或专用转换层中,进行多表连接、JSON 解析或处理高级业务逻辑。
  • **需要低于 15 分钟的延迟:**对于实时用例,使用平台事件或串流 API。
  • **非常大的流工作负载在范围内:**每小时有数百万交易的对象由专用流漏斗更好地提供服务(Kafka、平台事件)。
  • **需要自定义错误处理逻辑:**该平台提供标准的重试和错误日志记录。复杂的重试模式或自定义提醒需要 Apex 或外部编排。
  • **多组织或跨云同步:**CRM Analytics SyncIn 和 SyncOut 在单个 Salesforce 组织中运行。多组织场景需要 MuleSoft 或自定义集成层。

一个团队运行复杂的 ETL 漏斗,将 Snowflake Analytics 数据上传到 CRM Analytics 数据集。管道缓慢、脆弱,需要经常进行工程维护。

CRM Analytics SyncIn 被配置为将策划的 Snowflake 聚合视图直接同步到 Salesforce 自定义对象中。团队重新配置了 CRM Analytics 仪表板,以从这些对象而不是 CRM Analytics 数据集读取。结果:消除了两个 ETL 漏斗,同步持续时间从 4 小时减少到 30 分钟,管理员能够修改同步配置,而无需出示工程工单。

数据团队需要跟踪 Snowflake 操作数据存储中硬删除的 Salesforce 记录。传统方法需要拆分作业和复杂的 ID 协调逻辑,这需要几个小时才能运行,并且在模式更改时非常脆弱。

团队配置了 CRM Analytics SyncOut,启用了 CDC 和硬删除跟踪。已删除的记录现在会自动在 Snowflake 消耗表中标记为 DEL_ Flag = ‘Y’。下游 Analytics 查询应用 WHERE DEL_ Flag = ‘N’,以仅查看活动记录。完全消除了协调逻辑,同步持续时间从 8 小时减少到 15 分钟增量运行。

在收购期间,收购公司将六个高用量 Salesforce 对象同步到 Snowflake,以便在固定时间内实现跨组织报告和监管合规。

该团队使用基于 CDC 的增量同步为所有六个对象配置了 CRM Analytics SyncOut。审计元数据表在整个集成期间跟踪的模式更改和记录计数。他们没有编写任何自定义代码。数据新鲜度从每天提高到 15 分钟,审计元数据表提供了合规报告所需的可追溯性。

同步作业共享组织的 API 预算。针对大型对象运行多个高频同步作业的组织可能会耗尽每 24 小时 15000 次 API 调用的限制。清点所有同步作业,估计每次运行的 API 消耗,并错开计划来分配负载。对于更改率低到中等的对象,与完全同步相比,基于 CDC 的增量模式可以大大减少每次运行的 API 消耗。

SyncIn 和 SyncOut 对 Snowflake 仓库执行查询和数据加载,消耗计算信用。对于简单的 SELECT 查询,X-Small 或 Small 仓库通常就足够了。对于大型 SyncOut 负载,可能需要中或大。配置自动暂停(不活动 5 分钟)和自动恢复仓库。使用生产同步作业的专用仓库来隔离成本,并防止与用户查询产生冲突。

如果重命名、删除或更改 API 名称,相应的 SyncOut 字段映射会静默失败或记录错误。建立变更管理流程,其中包括作为任何 Salesforce 元数据变更的一部分检查活动同步配置。Snowflake 审计表提供了变更历史,有助于确定何时发生漂移事件。

SyncOut 中的硬删除跟踪需要在 Salesforce 对象上启用 CDC。如果未启用 CDC,“跟踪硬删除”选项无效。作为同步配置核对清单的一部分,验证 CDC 启用,特别是在初始设置期间或组织迁移后。

最常见的失败类是凭据过期或权限丢失。命名凭据必须保持有效,Snowflake 服务帐户必须保留仓库使用授权和表权限。对于基于 OAuth 的设置,令牌刷新失败会静默停止同步作业。监控同步作业监控器仪表板的身份验证错误模式,并为作业失败配置 Chatter 或电子邮件通知。

SyncIn 使用 Salesforce 外部 ID 字段作为更新插入密钥。如果源 Snowflake 视图在关键字段上包含重复值,则受影响记录的更新插入失败。在达到同步配置之前,在 Snowflake 视图层的关键字段上强制执行唯一性。

当同步作业失败时,平台会在同步作业监视器中记录每个记录的详细错误消息。常见故障情况及其解决方法:

  • **验证失败:**验证命名凭据状态和 Snowflake 帐户到期。如果令牌刷新失败,请重新验证 OAuth。
  • 字段映射错误: 检查 Snowflake 列和 Salesforce 字段之间的类型兼容性。查看运行用户的字段级安全性。
  • **超出调控器限制:**降低同步频率或转到增量 CDC 模式,以分散 API 消耗。
  • **Snowflake 仓库暂停:**在下一次计划的同步之前,配置仓库上的自动恢复或触发手动恢复。
  • 硬删除跟踪不起作用: 请确认在对象上启用了 CDC,并在同步配置中设置了“跟踪硬删除”标志。

CRM Analytics 数据同步与 Salesforce 良好架构框架的多个支柱保持一致。

  • **可靠性(容错):**该平台会自动管理执行、重试逻辑和部分失败处理。失败的记录会单独记录在同步作业监视器中。在失败后实施记录计数协调,以确认一致性,用失败通知进行补充,并监控同步作业监视器以了解重复的错误模式。基于 CDC 的增量同步通过限制范围中的数据窗口,减少了失败运行的爆发半径。
  • **Trust:**凭据模型(命名凭据、外部凭据、身份验证提供商)强制执行加密存储、自动令牌刷新和集中管理。Snowflake 侧的最低权限访问权限会限制已泄露凭据的爆炸半径。字段级安全性在同步期间强制执行;用户无法同步无权访问的字段。
  • **资源和成本优化:**增量 CDC 模式是性能优化的主要杠杆。与完全同步相比,它降低了 API 消耗、同步持续时间和 Snowflake 计算成本。Snowflake 视图预筛选进一步减少了传输中的数据量。仓库自动暂停防止闲置计算支出。
  • **卓越运营:**声明性配置模型意味着同步作业是在元数据中定义的,而不是在代码中。这使得它们无需工程参与即可审计、复制和管理。内置监控仪表板提供完全可观察性,无需自定义日志记录基础设施。
  • **可靠性(可扩展性):**该平台会自动处理分块、分页和批量 API 批处理。对于具有非常高的记录量的对象,增量 CDC 模式和非高峰计划是在调控器限制约束内保持吞吐量的主要架构手段。

此核对清单涵盖了设置和验证同步配置的最低步骤。

配置前核对清单:

  • 在准备用于 SyncOut 增量模式的所有 Salesforce 对象上启用变更数据捕获(设置 → 变更数据捕获)。
  • 创建具有最低权限角色的专用 Snowflake 服务帐户;仅授予所需的表格和仓库权限。
  • 如果使用 OAuth 身份验证,创建 Snowflake 安全集成。
  • 识别 SyncIn 将用作更新插入密钥的每个 Salesforce 对象上的外部 ID 字段;确认源数据中的唯一性。

连接:

  • 在 Salesforce 中创建身份验证提供商(设置 → 身份验证提供商)。
  • 创建外部凭据并链接到身份验证提供商(设置 → 命名凭据 → 外部凭据)。
  • 创建命名凭据并链接到外部凭据(设置 → 命名凭据)。
  • 授予对相关 Salesforce 简档的命名凭据访问权限。

SyncOut 配置:

  • 创建 Snowflake 连接(设置 → Analytics Studio → 数据管理器 → 连接 → Snowflake 连接)。
  • 创建同步输出配置:源对象、目标表、同步模式、字段映射、CDC、硬删除跟踪、计划。
  • 从每日同步开始;在增加频率之前,验证数据质量和性能。

SyncIn 配置:

  • 创建外部数据源(设置 → Analytics Studio → 数据管理器 → 连接 → Snowflake 连接)。
  • 创建 SyncIn 配置:源视图、目标对象、外部 ID 字段、字段映射、计划。
  • 从 Snowflake 视图同步,而不是从原始表同步。

验证:

  • 在首次执行后查看同步作业监视器(设置 → Analytics Studio → 数据管理器 → 同步作业监视器)。
  • 查询 Snowflake 审计表,以确认同步元数据已写入。
  • 通过确认 DEL_ Flag 列存在并填充,验证硬删除标记。
  • 比较源和目标之间的记录计数。
  • 通过 Chatter 或电子邮件配置失败通知。

当计划的批处理同步满足延迟要求时,使用此模式,双向数据流是必要的,减少对集成操作的工程依赖性是当务之急。

本指南中的 Snowflake 工作示例说明了整个生命周期:连接设置、配置、执行流和验证。相同原则适用于任何支持的外部数据平台。

当低于 15 分钟的延迟、复杂转换或多组织场景在范围内时,请将平台事件、串流 API 或 MuleSoft 评估为补充或替代方法。

Yugandhar Bora 是 Salesforce 的软件工程架构师,专门从事数据和智能应用程序平台中的数据架构。他领导企业架构审查委员会 (EARB) 专注于数据治理和统一数据模型的举措,同时为自动化平台配置解决方案做出贡献。