关于 Openflow Connector for Salesforce Bulk API¶
备注
此连接器受 Snowflake 连接器条款 的约束。
本主题介绍 Openflow Connector for Salesforce Bulk API 的基本概念、工作流程和限制。
与 Salesforce Data Cloud 的零拷贝集成¶
Snowflake 提供与 Salesforce 的零拷贝双向共享与集成。如果您使用 Salesforce Data Cloud 并需要近乎实时的双向集成,建议使用此集成。
有关与 Salesforce Data Cloud 零拷贝集成的更多信息,请参阅以下博客文章:
将数据从 Salesforce Data Cloud 共享到 Snowflake (https://developer.salesforce.com/blogs/2024/08/share-your-data-from-salesforce-data-cloud-to-snowflake)
与 Snowflake 和 Salesforce Data Cloud 的零拷贝数据联合 (https://developer.salesforce.com/blogs/2024/08/zero-copy-data-federation-with-snowflake-and-salesforce-data-cloud)
关于 Openflow Connector for Salesforce Bulk API¶
Openflow Connector for Salesforce Bulk API 提供基于复制的数据集成。此连接器专为不使用 Salesforce Data Cloud 且更喜欢完全托管的 Snowflake Openflow 连接器的用户而设计。该连接器使用公共 Salesforce REST APIs 以用户定义的频率将数据从 Salesforce 复制到 Snowflake。该连接器支持变更数据捕获 (CDC),并使 Snowflake 中的数据与 Salesforce 保持同步。
您可以根据具体用例使用一种或两种类型的数据集成。本主题介绍如何设置和使用 Openflow Connector for Salesforce Bulk API 将数据从 Salesforce 复制到 Snowflake。
用例¶
使用 Openflow Connector for Salesforce Bulk API 以用户指定的频率将标准或自定义对象从 Salesforce 复制到 Snowflake,并使其在 Snowflake 中保持最新状态。
工作流程¶
以下工作流程描述了设置和使用 Openflow Connector for Salesforce Bulk API 的步骤。
Salesforce 管理员在 Salesforce 中创建和配置外部客户端应用程序,并为特定用户批准该应用程序。
Openflow 管理员执行以下任务:
为连接器创建服务用户、数据仓库和用于复制的目标数据库和架构。
安装连接器。
为流模板指定必需的参数。
数据工程师运行流程,将对象从 Salesforce 复制到 Snowflake。
限制¶
使用连接器时,请注意以下限制:
不支持自定义 Salesforce 域。
不支持遍历对象关系和提取相关对象。
连接器不支持在 Snowflake 中执行硬删除操作。您可以对目标表运行查询,以删除
isDeleted列为true的所有行,也可以对目标表执行完全刷新以反映“硬删除”。location、address或base64类型的字段不受支持,将被忽略。您无法将多个 Salesforce 实例中的数据合并到 Snowflake 中的单个数据库中。单个 Salesforce 实例或组织中的数据会引入到 Snowflake 中的单个数据库中。在此数据库中为复制的每个 Salesforce 对象创建一个表。
忽略附加到 Salesforce 记录中的文件。
无法增量引入公式字段。
身份验证¶
连接器通过外部客户端应用程序使用 JWT 身份验证方法连接到 Salesforce 并检索数据。有关如何在 Salesforce 上配置客户端应用程序的文档,请参阅 Openflow Connector for Salesforce Bulk API:选择使用 时默认使用的角色和仓库。设置 Salesforce。
复制生命周期¶
连接器分两个阶段复制数据:初始复制和增量复制。
初始复制¶
连接器会调用 Salesforce Bulk API 2.0 来发现连接器配置中指定的标准对象和自定义对象。连接器遵循 Bulk API 2.0 API 限制。
连接器为每个自定义对象或标准对象创建一个表,每个字段对应一列。
连接器使用 Snowpipe Streaming 进行初始加载,以根据 Salesforce 对象中的字段值在表中插入行。
增量复制¶
增量更新使用可在连接器参数中配置的 Snowflake 仓库。根据您的延迟和数据新鲜度要求,您可以将更新的刷新频率配置为 1 分钟到 24 小时,这决定了 Snowflake 中表的刷新频率。
连接器使用您指定的刷新频率,调用 Salesforce Bulk API 来检测之前引入的对象的变化。连接器通过检查 Salesforce 对象中的特定时间戳字段来识别已更改的记录。
对于大多数对象,连接器使用 SystemModstamp 字段。如果 SystemModstamp 不可用,连接器会尝试按优先顺序使用以下字段:
LastModifiedDateCreatedDateLoginTime
备注
对于历史记录表(启用了历史记录跟踪功能的对象),连接器始终使用 CreatedDate 字段来检测变更。
然后,连接器使用 Snowpipe Streaming 将增量数据推送到暂存表中,并执行合并查询以将数据加载到最终目标表中。
架构演化¶
当 Salesforce 中的源对象发生更改时,连接器支持架构演化。
- 将新字段添加到源对象时:
连接器向 Snowflake 中的目标表中添加新列。
- 在源对象中重命名现有字段时:
连接器将重命名视为字段删除和字段添加。字段添加会在目标表中添加新列。字段删除的处理方式如下所述。
- 在源对象中删除现有字段时:
连接器支持三种策略:
删除:在 Snowflake 中删除目标表中的相应列。这是默认行为。
忽略:忽略源中已删除的字段,并在后续操作中跳过该字段。
重命名:重命名目标表中已删除的字段。
例如,如果删除策略已设置为 Ignore,并且 Salesforce 对象中的某个字段进行了重命名,Snowflake 中的现有列将保持不变,并会添加带有新字段名称的新列。
如何删除对象¶
在 Salesforce 中删除对象时,连接器不会从 Snowflake 中“硬删除”对象。连接器对 Salesforce 中删除的对象执行“软删除”,并通过将相应 Snowflake 表中的 isDeleted 列设置为 true 来指示源对象已删除。
连接器不支持“硬删除”。您可以对目标表运行查询,以删除 isDeleted 列为 true 的所有行,也可以对目标表执行完全刷新以反映“硬删除”。
如果连接器未运行(例如,如果连接器已暂停或停止),在 Salesforce 中删除对象并从 Salesforce 的回收站中清除对象的情况下,连接器可能会错过删除操作。在这些情况下,必须对目标表执行完全刷新才能恢复。
自动重试处理¶
连接器使用指数退避策略来自动重试失败的操作或 API 错误。连接器在第一次重试之前等待一秒钟,然后将后续每次重试的等待时间翻倍(2 秒、4 秒,依此类推)。如果仍然失败,连接器将停止重试,直到下一次计划运行。您可以在 事件表 中监控此活动。
使用多个连接器实例来处理不同的同步计划¶
如果您需要以不同的频率同步不同的对象,例如,有些对象每 30 分钟同步一次,有些对象每 24 小时同步一次,Snowflake 建议在同一运行时中部署两个单独的连接器实例。然后,您可以为每个实例独立配置同步参数。
备注
在同一运行时中部署多个连接器实例不会产生额外成本。
同样,如果您需要在每次连接器运行时完全提取某些对象(例如规避公式的限制),Snowflake 建议在同一运行时中部署两个单独的连接器实例,并为每个实例配置参数。
后续步骤¶
有关如何设置连接器的信息,请参阅以下主题: