教程:Snowflake Native SDK for Connectors 示例 Java 连接器¶
简介¶
欢迎学习关于使用 Snowflake Native SDK for Connectors 构建的连接器示例的教程。本指南将向您展示如何构建、部署、安装和配置示例连接器。
提供的示例应用程序通过连接到 GitHub API 从指定存储库中获取有关问题的信息,从而引入 GitHub 问题数据。
在本教程中,您将学习如何执行以下操作:
从源构建示例连接器
部署新的应用程序包和版本
安装新的应用程序实例
配置连接器实例以引入数据
先决条件¶
在开始之前,请确保您满足以下要求:
Java 基础知识
Streamlit UI (https://docs.streamlit.io/) 基础知识
访问具有
ACCOUNTADMIN
角色的 Snowflake 账户GitHub 账户,可以创建 GitHub 应用程序 (https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)
构建项目和运行部署脚本的 MacOS 或 Linux 计算机
准备本地环境¶
在继续之前,您需要先确保计算机上安装了所有必要的软件,并克隆示例连接器存储库。
Java 安装¶
Snowflake Native SDK for Connectors 需要 Java LTS(长期支持)版本 11 或更高版本。如果计算机上未安装所需的最低 Java 版本,则必须安装 Oracle Java 或 OpenJDK。
Oracle Java¶
JDK 的最新 LTS 版本可在 Oracle NFTC 下免费下载和使用。有关下载和安装说明,请访问 Oracle 页面 (https://www.oracle.com/java/technologies/downloads/)。
OpenJDK¶
OpenJDK 是 Java 的一个开源实施。有关下载和安装说明,请访问 openjdk.org (https://openjdk.org/install/) 和 jdk.java.net (https://jdk.java.net/)。
您也可以使用第三方 OpenJDK 版本,如 Eclipse Temurin (https://adoptium.net/temurin/releases/) 或 Amazon Corretto (https://aws.amazon.com/corretto/)。
存储库克隆¶
将 connectors-native-sdk (https://github.com/snowflakedb/connectors-native-sdk) 存储库克隆到计算机。
Snowflake CLI 配置¶
构建、部署和安装连接器需要 Snowflake CLI 工具。如果计算机上没有 Snowflake CLI – 根据`此处 <https://docs.snowflake.cn/en/developer-guide/snowflake-cli/installation/installation>`_ 的说明进行安装。
安装该工具后 – 您需要在 配置文件 中配置与 Snowflake 的连接。
如果您没有配置任何连接 – 请创建一个名为 native_sdk_connection
的新连接。您可以在 deployment/snowflake.toml
文件中找到示例连接。
如果您已经配置了连接,并希望将其与连接器一起使用 – 在本教程中使用此连接时,请使用其名称而不是 native_sdk_connection
。
项目结构¶
Snowflake Native SDK for Connectors 项目由几个主要元素组成。
连接器原生 SDK Java¶
connectors-native-sdk-java
目录包含所有 Snowflake Native SDK for Connectors Java 代码,并针对 SDK 组件进行了单元测试和集成测试。由于 Snowflake 内部原生应用程序的性质,这不仅意味着 Java 代码,还有 SQL 代码,这是创建正常工作的应用程序所必需的。数据库对象的定义可以在 src/main/resources
目录中找到。这些文件在创建应用程序时用于自定义应用程序内部可用的对象。在示例连接器中,我们使用 all.sql
文件,该文件为所有可用功能创建对象。此文件将在应用程序实例的安装过程中执行。
连接器原生 SDK 测试 Java¶
connectors-native-sdk-test-java
目录包含单元测试中使用的 helper 库的源代码,例如用于模拟特定组件的对象、自定义断言等。这些文件不是连接器应用程序的一部分。
Java GitHub 连接器示例¶
实际示例连接器位于 examples/connectors-native-sdk-example-java-github-connector
目录内部。app/
目录包含运行 Native App 所需的所有文件:
app/streamlit/
目录包含运行连接器的 Streamlit UI 所必需的源文件。setup.sql
文件在应用程序安装期间运行,负责创建必要的数据库对象。此文件将执行前面提到的all.sql
文件,以及一些自定义 sql 代码。manifest.yml
文件是 Native App 的清单。需要先创建一个应用程序包,然后再创建应用程序实例本身。此文件指定应用程序属性以及应用程序所需的权限。
此外,examples/connectors-native-sdk-example-java-github-connector
目录还包含 src/
子目录,其中包含自定义连接器逻辑,例如实施所需类和自定义默认 SDK 组件。
连接器原生 SDK 模板¶
模板 Gradle Java 项目,使用 Snowflake Native SDK for Connectors 作为依赖项来帮助您快速构建新连接器。您可以在 教程:Snowflake Native SDK for Connectors Java 连接器模板 阅读更多相关内容。
构建、部署和安装¶
以下各节将向您展示如何构建、部署和安装示例连接器。
构建连接器¶
构建使用 Snowflake Native SDK for Connectors 创建的连接器与构建典型的 Java 应用程序略有不同。除了使用源构建 .jar 存档之外,还必须进行一些其他操作。构建应用程序包括以下步骤:
将自定义内部组件复制到构建目录
将 SDK 组件复制到构建目录
复制内部组件¶
此步骤构建连接器 .jar 文件,然后将该文件(连同 UI、清单和设置文件一起)复制到 sf_build
目录。
要运行此步骤,请执行命令:./gradlew copyInternalComponents
。
复制 SDK 组件¶
此步骤将 SDK .jar 文件(作为依赖项添加到连接器 Gradle 模块)复制到 sf_build
目录,并从 .jar 存档中提取捆绑的 .sql 文件。
这些 .sql 文件允许自定义在应用程序安装期间将创建哪些提供的对象。初次使用时,不建议用户自定义,因为如果操作不正确,省略对象可能会导致某些功能失败。示例连接器应用程序使用 all.sql
文件,该文件创建所有推荐的 SDK 对象。
要运行此步骤,请执行命令:./gradlew copySdkComponents
。
部署连接器¶
要部署 Native App,需要在 Snowflake 内创建应用程序包。之后,需要将 sf_build
目录中的所有文件上传到 Snowflake。
请注意 – 出于开发目的,可以选择版本创建,可以直接从暂存文件创建应用程序实例。此方法允许您查看大多数连接器文件中的变化,无需重新创建版本和应用程序实例。
将执行以下操作:
创建新的应用程序包(如果不存在)
在包中创建架构和文件暂存区
将文件从
sf_build
目录上传到暂存区(此步骤可能需要一些时间)
要部署连接器,请执行命令 snow app deploy --connection=native_sdk_connection
。
有关 snow app deploy
命令的更多信息,请参阅 snow app deploy。
创建的应用程序包现在将在 App packages
选项卡、Data products
类别、账户的 Snowflake UI 中可见。

安装连接器¶
安装应用程序是该过程的最后一步。该步骤会使用之前创建的应用程序包创建应用程序。
要安装连接器,请执行命令:snow app run --connection=native_sdk_connection
。
有关 snow app run
命令的更多信息,请参阅 Snow 应用程序运行。
安装的应用程序现在将在 Installed apps
选项卡、Data products
类别、账户的 Snowflake UI 中可见。

更新连接器文件¶
如果在任何时候希望修改任何连接器文件,您可以轻松地将修改的文件上传到应用程包暂存区。上传命令取决于更新了哪些文件。
在运行任何更新命令之前,您必须通过运行以下命令将连接器的新文件复制到 sf_build
目录中:./gradlew copyInternalComponents
UI .py files or connector .java files¶
使用 snow app deploy --connection=native_sdk_connection
命令,当前应用程序实例将使用新文件,无需重新安装。
setup.sql 或 manifest.yml 文件¶
使用 snow app run --connection=native_sdk_connection
命令,将在新文件上传到暂存区后重新安装当前应用程序实例。
连接器流¶
在开始配置连接器和引入数据之前,我们应该先快速浏览连接器的实际工作原理。下面您可以看到本教程后续步骤中将要完成的所有步骤。首先是完成先决条件并查看向导。
连接器的向导阶段将引导用户完成连接器所需的所有配置。日常使用阶段允许用户查看统计信息、配置存储库以引入和暂停/恢复连接器。
配置向导¶
打开应用程序后,将打开向导 UI 页面。连接器需要用户提供的一些信息,然后才能开始引入数据。向导将指导您完成应用程序本身以及整个 Snowflake 账户的所有必要步骤,有时还加上作为引入数据来源的外部系统,在本例中是 GitHub。完成所有这些步骤后 – 连接器将准备开始引入数据。
先决条件¶
向导的第一步是先决条件。此步骤将为您提供配置连接器前应做好的准备的清单。不需要完成先决条件,但为确保之后的配置过程更顺利,建议先完成先决条件。
在示例 GitHub 连接器的情况下,需要先注意以下亮点,然后才能继续:
准备 GitHub 账户
确认对要引入的 GitHub 存储库的访问权限

连接器配置¶
向导的下一步是连接器配置。此步骤让用户可以:
授予应用程序权限,将使用 `Native Apps 权限 SDK<https://docs.snowflake.com/en/developer-guide/native-apps/requesting-ui>`_ 请求
选择在计划引入任务时要引用的仓库
为要引入的数据选择目标数据库和架构
权限¶
应用程序需要两个账户级权限才能操作:CREATE DATABASE
和 EXECUTE TASK
。
需要第一个特权来为引入的数据创建目标数据库。此数据库应在应用程序外创建,这样,如果卸载应用程序,引入的数据可以保持不变。但是,本示例不支持此功能,始终会创建新的数据库。
需要第二个权限来计划周期性任务,这些任务将从 GitHub 提取数据并将其保存在目标数据库中。
可以使用安全选项卡或通过在连接器配置屏幕中按下 Grant privileges
按钮授予这些权限。后者将使屏幕上出现弹出窗口。

仓库引用¶
连接器需要仓库来运行和计划引入任务。应用程序将通过 引用 使用仓库。仓库引用在 manifest.yml
文件中定义:
references:
- WAREHOUSE_REFERENCE:
label: "Warehouse used for ingestion"
description: "Warehouse which will be used to schedule ingestion tasks"
privileges: [USAGE]
object_type: WAREHOUSE
register_callback: PUBLIC.REGISTER_REFERENCE
引用可以使用安全选项卡设置,与上述权限相同,也可以通过按 Choose warehouse
按钮设置。

目标数据库和架构¶
如前所述,连接器需要一个数据库来存储引入的数据。在后续的一个步骤中,将使用用户指定的架构创建此数据库。数据库的名称由用户决定,只要提供的数据库不存在。
完成的连接器配置屏幕应类似于:

连接配置¶
向导的下一步是连接配置。此步骤允许用户设置与外部数据源的连接。我们建议尽可能使用 OAuth2 身份验证,而不是使用用户/密码或纯文本令牌。
GitHub 目前支持两种 OAuth2 身份验证方式:OAuth 应用程序和 GitHub 应用程序。OAuth 应用程序的设置和使用更简单,但无法提供相同级别的权限控制精度。我们建议在此例中使用 GitHub 应用程序,但是如果您希望使用 OAuth 应用程序,连接器也会按预期工作。
权限 SDK 设置¶
OAuth2 身份验证要求在用户账户中创建安全集成、密钥和外部访问集成。我们的连接器使用 Native Apps 权限 SDK 请求创建这些对象。
连接器所需的外部访问集成和密钥的引用在 manifest.yml
文件中定义:
references:
- GITHUB_EAI_REFERENCE:
label: "GitHub API access integration"
description: "External access integration that will enable connection to the GitHub API using OAuth2"
privileges: [USAGE]
object_type: "EXTERNAL ACCESS INTEGRATION"
register_callback: PUBLIC.REGISTER_REFERENCE
configuration_callback: PUBLIC.GET_REFERENCE_CONFIG
- GITHUB_SECRET_REFERENCE:
label: "GitHub API secret"
description: "Secret that will enable connection to the GitHub API using OAuth2"
privileges: [READ]
object_type: SECRET
register_callback: PUBLIC.REGISTER_REFERENCE
configuration_callback: PUBLIC.GET_REFERENCE_CONFIG
此外,需要在 setup.sql
文件中添加一个特殊程序。在 configuration_callback
属性中引用了上述每个引用:
CREATE OR REPLACE PROCEDURE PUBLIC.GET_REFERENCE_CONFIG(ref_name STRING)
RETURNS STRING
LANGUAGE SQL
AS
BEGIN
CASE (ref_name)
WHEN 'GITHUB_EAI_REFERENCE' THEN
RETURN OBJECT_CONSTRUCT(
'type', 'CONFIGURATION',
'payload', OBJECT_CONSTRUCT(
'host_ports', ARRAY_CONSTRUCT('api.github.com'),
'allowed_secrets', 'LIST',
'secret_references', ARRAY_CONSTRUCT('GITHUB_SECRET_REFERENCE')
)
)::STRING;
WHEN 'GITHUB_SECRET_REFERENCE' THEN
RETURN OBJECT_CONSTRUCT(
'type', 'CONFIGURATION',
'payload', OBJECT_CONSTRUCT(
'type', 'OAUTH2',
'security_integration', OBJECT_CONSTRUCT(
'oauth_scopes', ARRAY_CONSTRUCT('repo'),
'oauth_token_endpoint', 'https://github.com/login/oauth/access_token',
'oauth_authorization_endpoint', 'https://github.com/login/oauth/authorize'
)
)
)::STRING;
ELSE
RETURN '';
END CASE;
END;
对于外部访问集成引用,该过程提供:
host_ports
– 外部数据源的主机名,将在引入期间访问secret_references
– OAuth 密钥引用名称数组allowed_secrets
–LIST
,告知权限 SDK 使用secret_references
字段中指定的密钥
对于密钥参考,该过程提供:
type
– 使用我们的密钥时,为OAUTH2
security_integration
– 创建的安全集成的属性:oauth_scopes
– 连接器请求的 OAuth 作用域列表(如果使用 GitHub 应用程序 – 此字段为可选字段)oauth_token_endpoint
– 将从中获取刷新和访问令牌的端点oauth_authorization_endpoint
– 将向其发送授权请求的端点
GitHub 应用程序设置¶
下一步是在用户账户中设置 GitHub 应用程序。此应用程序将用于授予对该账户的有限访问权限,以便引入数据。
第一步是按下连接器 UI 中的 Request access
按钮。

第一个屏幕允许您查看允许外部连接的端点。

按下 Next
后,您将看到第二个屏幕。选择 OAuth2
以创建新的集成和密钥,然后复制提供的重定向 URL,其中将包含您的组织名称和账户区域。

接下来,进入 GitHub 账户设置页面,然后进入 开发者设置 > GitHub Apps
,并按下 New GitHub App
按钮:
输入应用程序的名称和主页 URL
将您复制的重定向 URL 粘贴到
Callback URL
字段确保选中
Expire user authorization tokens
选项确保未选中
Request user authorization (OAuth) during installation
如果不需要,取消选中
Webhook
部分的Active
选项选择连接器工作所需的权限:
具有
Read-only
访问权限的存储库权限 > Issues
具有
Read-only
访问权限的存储库权限 > Metadata
如果应用程序仅供您使用,则使用此示例连接器,最好在安装访问部分选择
Only on this account
创建应用程序后,按左侧边栏中的 Install app
选项,然后在账户中安装应用程序。您可以选择应用程序(以及扩展连接器)能够访问的存储库。如果没有进行此安装,连接器将只能访问公共存储库。
OAuth 集成设置¶
安装完成后返回 GitHub 应用程序,并生成新的客户端密钥。确保立即复制该密钥,因为不会再次显示。将客户端密钥粘贴到连接器的 OAuth 配置弹出窗口中。最后,复制应用程序的客户端 ID(不是应用程序 ID),并将其粘贴到连接器的 OAuth 配置弹出窗口中。

按下 Connect
后,将弹出一个 GitHub 窗口,要求您为 GitHub 账户进行应用程序授权。授权后,系统会将您自动重定向回连接器 UI。成功授权后(可能需要几秒钟才能完成并关闭弹出窗口),页面将填充外部访问集成和密钥引用的 IDs。

按下 Connect
按钮将触发连接器内的 TEST_CONNECTION
过程。此过程将尝试访问 GitHub API octocat 端点 (https://api.github.com/octocat),以检查是否正确配置外部连接,以及是否正确获得 OAuth 访问令牌。
测试成功时,应用程序将进入最终步骤。
配置完成¶
“完成”是向导的最后一步。在此步骤中,系统将要求您提供组织和存储库名称。必须使用连接配置步骤中获得的 OAuth 令牌才能访问此存储库。提供的存储库将仅用于连接验证目的。
这与上一步有些不同,因为 TEST_CONNECTION
过程只检查 GitHub API 是否可以访问,以及提供的令牌是否有效。
最终步骤确保可以使用提供的 GitHub API 令牌访问用户提供的存储库。如果令牌没有访问存储库所需的权限,将会失败。如果您要从私有存储库引入数据,我们建议使用私有存储库完成配置,以确保其正常工作。
此外,在此步骤中,连接器配置阶段指定的数据库和架构最终将在您的账户中创建。

日常使用¶
配置向导成功完成后,您现在可以开始使用示例 GitHub 连接器了。
接下来的步骤将说明:
如何配置资源以引入数据
引入流程的工作原理
如何查看引入记录的统计信息
如何查看引入的数据
如何暂停和恢复连接器
配置资源¶
要配置资源,请转到 Data Sync
选项卡。此选项卡显示已为引入配置的存储库的列表。首次打开时,列表为空。
要配置资源,请在指定字段中输入组织和存储库名称,然后按下 Queue ingestion
按钮。例如:

将保存新资源的定义,排程器将根据全局计划来获取该资源。需要一段时间才能引入数据并在接收器表中可见。 它将在下表中可见:

引入时间表和状态¶
Data Sync
选项卡的顶部有一个部分,其中包含有关引入的一般信息。此部分允许用户查看引入配置资源的全局计划。右下角的标签显示当前的引入状态。一开始会显示 NOT SYNCING
状态,直到定义第一个资源。之后,将转换为 SYNCING
,最后至少一个资源引入成功完成时,将显示该引入的完成日期。

引入进程¶
引入过程使用 Scheduler Task
和 Task Reactor
组件处理。排程器根据全局计划获取定义的资源,并将它们作为 Work Items
提交到队列中。然后,名为 Dispatcher
的任务反应器组件将获取它们,并在定义的处理器数量间分配。每个处理器都对其获取的队列中的每个项目执行实际引入。
资源的单次引入包括从 GitHub API 中的端点提取数据,然后将它们保存在接收器数据库中指定的表中。对于此示例而言,每次运行都会提取所有数据,从而导致向表中添加新记录并更新旧记录。此外,每个 Work Item
的执行还包括将开始和结束日期、引入行数、状态等数据记录到内部连接器表中,然后用于统计目的。
查看统计数据¶
Home
屏幕包含过去引入运行的统计数据。数据基于 PUBLIC.AGGREGATED_CONNECTOR_STATS
视图。视图根据引入当天的时间来汇总引入的行数。可以使用工作表中运行的 SELECT
查询来检索此视图中的数据,这样也可以按大于一小时的时间窗口进行汇总。
还有一个视图可以通过工作表获得:PUBLIC.CONNECTOR_STATS
。使用此数据,您可以看到状态、开始和结束日期、平均每秒引入的行数以及有关数据引入的一些其他信息。
引入统计数据图表示例:

查看引入的数据¶
引入的数据在 UI 中不可见,但可以由具有 ADMIN
或 DATA_READER
角色的用户通过查询特定表中的数据来查看。要查看数据,您必须转到 SQL 工作表,并选择目标数据库。目标数据库使用连接器配置步骤中定义的名称和架构。您可以从以下位置 SELECT
数据:
ISSUES
表,其中包含以下列:ORGANIZATION
REPOSITORY
RAW_DATA
ISSUES_VIEW
视图,其中包含以下列:ID
ORGANIZATION
REPOSITORY
STATE
TITLE
CREATED_AT
UPDATED_AT
ASSIGNEE
ISSUES_VIEW
视图中可见的数据从 ISSUES
表中的 raw_data
列提取。要查看数据,您可以使用以下查询之一:
SELECT * FROM DEST_DATABASE.DEST_SCHEMA.ISSUES;
SELECT * FROM DEST_DATABASE.DEST_SCHEMA.ISSUES_VIEW;
暂停和恢复¶
您可以随时暂停和恢复连接器。为此,只需按 Data Sync
选项卡中的 Pause
按钮。触发暂停时,底层排程和工作执行机制被禁用。但是,系统将在连接器实际进入 PAUSED
状态前完成任何活跃的引入工作。因此,连接器可能需要几分钟的时间才能完全暂停。
要恢复连接器,只需按下 Resume
按钮,该按钮将代替 Pause
按钮显示。此操作将恢复排程任务,从而开始对新 Work Items
进行排队。

连接器设置¶
配置完成后,另一个名为 Settings
的选项卡变为可用。此选项卡允许用户查看当前的连接器和连接配置。此选项卡中的数据是从底层 APP_CONFIG
配置表中提取的,并且是只读数据。


故障排除¶
如果连接器遇到任何问题,在账户中创建并设置好表后,这些问题将在 event table
日志中可见。
有关在 Native Apps 中启用和使用 event table
、事件日志和事件共享的详细信息,请参阅文档:
清理¶
完成教程后,您可以按照日常使用部分的说明暂停连接器,或者使用以下命令将其完全从账户中删除:
snow app teardown --connection=native_sdk_connection --cascade --force
需要使用 --cascade
选项才能移除目标数据库,而不将所有权转移给账户管理员。在真正的连接器中,请勿移除数据库,以保留引入的数据,所有权应归属于账户管理员,或者在卸载前转移所有权。
如果跳过清理部分,示例连接器将使用 credit,直到暂停或删除为止,即使没有配置可引入的存储库!
自定义¶
本教程展示了一个使用 Snowflake Native SDK for Connectors 构建的连接器示例。要详细了解如何自定义连接器,或从头构建自己的连接器,请参阅: