Snowflake 简明教程

Snowflake - External Data Unloading

Snowflake也支持客户端的云存储。这意味着客户端可以将 Snowflake 中的数据导出到自有云存储中。目前,Snowflake 支持 3 个云存储:AWS S3,Microsoft Azure 和 Google Cloud Platform 位置。这些称为外部暂存。但 Snowflake 同时提供由 Snowflake 管理的暂存,称为内部暂存。

外部暂存是客户端的位置,而内部暂存是用户在其本地系统目录中工作时使用的。

要将数据卸载到外部云,需要以下设置:

  1. Snowflake 中有一个现有的数据库和架构,其中必须卸载 where 数据到 AWS S3。

  2. 指向 AWS S3 存储桶的外部阶段设置。

  3. 一个文件格式,用于定义要加载到 AWS S3 中的文件结构。

在此章节中,我们将讨论如何设置这些条件,以及将数据从表中卸载到 S3 中。

  1. 我们已经创建了一个数据库 TEST_DB,架构为 TEST_SCHEMA_1,表为 TEST_TABLE。如果这些不可用,请按照前面章节中的说明创建它们。

  2. 外部加载阶段可以通过 Snowflake 的用户界面以及使用 SQL 设置。

Using UI

要创建外部暂存,请遵循以下说明:

登录到 Snowflake。单击顶部功能区中的 Databases 。在“数据库”视图中,单击数据库名称 TEST_DB。下一步,单击 Stages 选项卡,然后单击顶部中的 Create 按钮,如下图所示:

using ui

这会弹出 Create Stage 对话框,在列表中选择 amazon|s3,然后单击“Next”,如下图所示:

using ui create stage

它将转到下一个屏幕,在该屏幕中,用户应输入以下详细信息:

  1. Name - 这是外部加载阶段的用户定义名称。将使用相同的名称将数据从加载阶段复制到表中。

  2. Schema Name - 选择表中存放要加载的数据的模式名称。

  3. URL - 从 Amazon 提供 S3 URL。它基于存储空间名称和密钥而唯一。

  4. AWS Key ID - 请输入您的 AWS 密钥 ID。

  5. AWS Secret Key - 输入您的密钥,以通过 AWS 方式进行连接。

  6. Encryption Master Key - 在有加密密钥的情况下,请提供加密密钥。

提供详细信息后,单击 Finish 按钮。下图说明了上述步骤:

create stage process

用户可以在“View” 面板中看到新创建的外部暂存。

Using SQL

使用 SQL 创建外部暂存非常简单。只需运行以下查询,提供所有详细信息,包括名称、AWS 密钥、密码、主密钥,即可创建暂存。

CREATE STAGE "TEST_DB"."TEST_SCHEMA_1".Ext_S3_stage URL = 's3://***/*****
CREDENTIALS = (AWS_KEY_ID = '*********' AWS_SECRET_KEY = '********') ENCRYPTION = (MASTER_KEY = '******');

文件格式定义了上传到 S3 中的文件结构。如果文件结构与表结构不匹配,加载将失败。

Using UI

要创建文件格式,请遵循以下说明:

登录到 Snowflake,然后单击顶部功能区中的 Databases 。在数据库视图中,单击数据库名称 TEST_DB。

下一步,单击 File Format 选项卡,然后单击顶部的“Create” 按钮。它弹出 Create File Format 对话框。输入以下详细信息:

  1. * 文件格式的名称。

  2. Schema Name − 创建文件格式只能在给定的模式中使用。

  3. * 文件格式的名称。

  4. Column separator − 如果 csv 文件是分离的,请提供文件分隔符。

  5. Row separator - 如何识别新行。

  6. Header lines to skip − 如果提供了标题则为 1,否则为 0。

其他部分可以保持原样。输入这些详细信息后,点击完成按钮。

以下屏幕截图显示了上述详细信息 -

process of creating file format

用户将能够在查看面板中查看创建的文件格式。

Using SQL

使用 SQL 创建文件格式非常容易。只需通过提供所有必需详细信息运行以下查询,如下所示。

CREATE FILE FORMAT "TEST_DB"."TEST_SCHEMA_1".ext_csv TYPE = 'CSV' COMPRESSION = 'AUTO'
FIELD_DELIMITER = ',' RECORD_DELIMITER = '\n' SKIP_HEADER = 0 FIELD_OPTIONALLY_ENCLOSED_BY =
'NONE' TRIM_SPACE = FALSE ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE ESCAPE = 'NONE'
ESCAPE_UNENCLOSED_FIELD = '\134' DATE_FORMAT = 'AUTO' TIMESTAMP_FORMAT = 'AUTO' NULL_IF = ('\\N');

Unload Data into S3

在本章中,我们讨论了设置所有必需参数,如阶段、文件格式、卸载数据到 S3 的数据库。

现在,要卸载数据,请运行以下查询 −

Syntax

COPY INTO @<database_name>.<schema_name>.<external_stage_name>
FROM (SELECT * FROM <table_name>)
FILE_FORMAT=(FORMAT_NAME=<database_name>.<schema_name>.<file_format_name>);

Example

COPY INTO @test_db.test_schema_1.EXT_Stage
FROM (SELECT * FROM TEST_TABLE)
FILE_FORMAT=(FORMAT_NAME=test_db.test_schema_1.CSV);