非结构化数据简介¶
非结构化数据是不适合预定义数据模型或架构的信息。非结构化数据通常文本繁多,例如表单响应和社交媒体对话,还包括图像、视频和音频。VCF(基因组学)、KDF(半导体)或 HDF5(航空学)等行业特定的文件类型包含在此分类中。
Snowflake 支持以下操作:
安全地访问位于云存储中的数据文件。
与协作者和合作伙伴共享文件访问 URLs。
将文件访问 URLs 和其他文件元数据加载到 Snowflake 表中。
处理非结构化数据。
本主题介绍关键概念,并提供访问、共享和处理非结构化数据文件的说明。
本主题内容:
云存储服务支持¶
外部(外部云存储)和内部(即 Snowflake)暂存区都支持非结构化数据。
- 外部暂存区:
将文件存储在外部云存储中:Amazon S3、Google Cloud Storage 或所支持的 Microsoft Azure 云存储服务之一:
Blob 存储
Data Lake Storage Gen2
常规用途 v1
General-purpose v2
可用于访问文件的 URLs 类型¶
以下 URLs 类型可用于访问云存储中的文件:
- 有作用域的 URL:
编码 URL,允许临时访问暂存文件,而无需对暂存区授予权限。
当 持久化查询结果周期 结束时(即结果缓存过期),URL 到期,目前时限为 24 小时。
- 文件 URL:
标识一组文件的数据库、架构、暂存区和文件路径的 URL。在暂存区上具有足够权限的角色可以访问这些文件。
- 预签名 URL:
简单的 HTTPS URL,用于通过 Web 浏览器访问文件。通过此 URL,用户可以使用预签名的访问令牌临时访问文件。访问令牌的过期时间是可配置的。
下表描述了这些 URL 类型的主要特征:
有作用域的 URL |
文件 URL |
预签名 URL |
|
---|---|---|---|
用例 |
建议文件管理员向同一账户中的特定角色授予对数据文件的作用域访问权限。使用检索作用域 URLs 的视图提供对文件的访问权限。只有对视图具有权限的角色才能访问文件。Snowflake 在查询历史记录中记录有关谁使用作用域 URL 访问文件以及何时访问文件的信息。非常适合用于自定义应用程序,通过共享向其他账户提供非结构化数据,或在 Snowsight 中下载和分析非结构化数据。 |
暂存区文件的永久 URL。若要下载或访问文件,用户会以 GET 请求将文件 URL 与授权令牌一起发送到 REST API 端点。非常适合需要访问非结构化数据文件的自定义应用程序。 |
用于下载或访问文件,而无需向 Snowflake 进行身份验证或传递授权令牌。预签名 URLs 是开放的;任何用户或应用程序都可以直接访问或下载文件。非常适合需要显示非结构化文件内容的商业智能应用程序或报告工具。 |
如何生成 |
查询 BUILD_SCOPED_FILE_URL 函数。 |
为引用暂存文件的暂存区查询目录表 或 调用 BUILD_STAGE_FILE_URL 函数。 |
查询 GET_PRESIGNED_URL 函数。 |
用途 |
可使用以下选项:
|
可使用以下选项:
|
可使用以下选项:
|
数据使用者可以通过数据提供程序共享的安全视图中的此类型列值访问非结构化数据文件。 |
数据使用者 无法 通过数据提供程序共享的安全视图中的此类型列值访问非结构化数据文件。 |
数据使用者可以通过数据提供程序共享的安全视图中的此类型列值访问非结构化数据文件。 |
|
授权 |
只有生成作用域 URL 的用户才能使用 URL 来访问引用的文件。 |
在 GET REST API 调用中指定的角色必须在暂存区上具有足够的权限:USAGE(外部暂存区)或 READ(内部暂存区)。 |
任何拥有预签名 URL 的人都可以在令牌的生命周期内访问引用的文件。 |
有效期 |
查询结果缓存的有效期期限(当前为 24 小时)。 |
永久。 |
在 |
用于非结构化数据访问的服务器端加密¶
若要在内部暂存区启用非结构化数据访问,可以考虑在创建暂存区时使用服务器端加密。否则,默认情况下,暂存文件将在客户端进行加密。加密密钥归 Snowflake 所有,用户和外部工具使用预签名、文件或作用域 URLs 无法读取客户端加密文件。
要为内部暂存区配置服务器端加密,请在 CREATE STAGE 命令中指定 SNOWFLAKE_SSE
加密类型。有关更多信息,请参阅 内部暂存区参数 (internalStageParams)。
下面的示例会创建名为 my_int_stage
的内部暂存区,同时还会启用服务器端加密并创建一个目录表。
CREATE STAGE my_int_stage
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE')
DIRECTORY = ( ENABLE = true );
备注
创建内部暂存区后,无法更改该内部暂存区的加密类型。
目前,使用服务器端加密创建内部暂存区仅限于以下 Snowflake 客户端版本:JDBC 驱动程序 v3.12.11(或更高版本)
目录表¶
目录表将暂存文件的目录存储在云存储中。具有足够权限的角色可以查询目录表,以检索文件 URLs 来访问暂存文件。
有关详细信息,请参阅 目录表。
SQL 函数¶
提供以下 文件函数 来访问数据文件:
SQL 函数 |
描述 |
---|---|
为使用暂存区名称作为输入的外部或内部已命名暂存区返回 URL。 |
|
使用暂存区名称和云存储中的绝对文件路径作为输入,提取出暂存文件相对于其在暂存区中位置的路径。 |
|
使用暂存区名称和相对于暂存文件在暂存区中位置的路径作为输入,返回暂存文件的绝对路径。 |
|
使用暂存区名称和相对文件路径作为输入,生成指向暂存文件的预签名 URL。使用此函数可访问外部暂存区中的文件。 |
|
使用暂存区名称和相对文件路径作为输入,生成指向暂存文件的有作用域的 Snowflake 文件 URL。 |
|
使用暂存区名称和相关文件路径作为输入,将 Snowflake 文件 URL 生成为暂存文件。 |
在 Snowsight 中下载暂存文件¶
用户可以在 Snowsight 工作表的结果表中选择生成的作用域、预签名或文件 URL,然后下载引用的文件。
登录 Snowsight。
选择 Projects » Worksheets » My Worksheets,或通过导航到 Recent 或 Folders » <worksheet_name> 打开本地工作表。
使用任何一种受支持的方法,在查询中返回作用域、预签名或文件 URL。
选择结果表中的 URL。Snowsight 下载 URL 所引用的文件。
处理非结构化数据¶
Snowflake 支持以下函数,帮助您处理非结构化数据。
- External Functions
External Functions 是在 Snowflake 外部存储和执行的用户定义函数。通过 External Functions,可以使用无法从内部用户定义函数 (UDFs) 访问的库,例如 Amazon Textract、Document AI 或 Azure Computer Vision。
有关更多信息,请参阅 编写外部函数。
- 用户定义的函数和存储过程
Snowflake 支持多种方式在 Java 或 Python 代码中读取文件,以便您可以在用户定义的函数 (UDFs)、用户定义的表函数 (UDTFs) 或存储过程中处理非结构化数据或使用自己的机器学习模型。
您可以 扩展您在 Snowflake 中使用的 SQL,或使用 Snowpark API 构建一个应用程序。
有关更多信息和示例,请参阅以下主题。