Snowflake - 外部数据卸载



Snowflake 也支持客户端的云存储。这意味着客户端可以从 Snowflake 中导出其云中的数据。目前,Snowflake 支持 3 个云 - AWS S3、Microsoft Azure 和 Google Cloud Platform 位置。这些被称为外部阶段。但是,Snowflake 提供了 Snowflake 托管的阶段,这些阶段被称为内部阶段。

外部阶段是客户端端位置,而内部阶段是在用户使用其本地系统目录时使用的。

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

  • Snowflake 中现有的数据库和模式,该数据库和模式中将数据卸载到 AWS S3。

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

  • 文件格式定义加载到 AWS S3 中的文件的结构。

在本章中,我们将讨论如何设置这些要求以及如何将数据从表卸载到 S3。

  • 我们已经创建了一个名为 TEST_DB 的数据库、名为 TEST_SCHEMA_1 的模式和名为 TEST_TABLE 的表。如果这些不可用,请按照前面章节中的说明创建这些表。

  • 可以通过 Snowflake 的用户界面以及使用 SQL 来设置外部阶段。

使用 UI

要创建外部阶段,请按照以下说明操作:

登录 Snowflake。单击顶部功能区中显示的数据库。在数据库视图中,单击名为 TEST_DB 的数据库名称。接下来,单击阶段选项卡,然后单击顶部显示的创建按钮,如下面的屏幕截图所示:

Using UI

它将弹出创建阶段对话框,在列表中选择 amazon|s3,然后单击下一步,如下所示:

Using UI Create Stage

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

  • 名称 - 这是用户定义的外部阶段名称。相同的名称将用于将数据从阶段复制到表。

  • 模式名称 - 选择包含要加载数据的表的模式名称。

  • URL - 提供来自 Amazon 的 S3 url。它基于存储桶名称和密钥是唯一的。

  • AWS 密钥 ID - 请输入您的 AWS 密钥 ID。

  • AWS 密钥 - 输入您的密钥以通过您的 AWS 连接。

  • 加密主密钥 - 如果有,请提供加密密钥。

提供详细信息后,单击完成按钮。以下屏幕截图描述了上述步骤:

Create Stage Process

用户可以在“视图”面板中看到新创建的外部阶段。

使用 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 的文件的结构。如果文件结构与表结构不匹配,则加载将失败。

使用 UI

要创建文件格式,请按照以下说明操作。

登录 Snowflake 并单击顶部功能区中显示的数据库。在数据库视图中,单击数据库名称 TEST_DB。

接下来,单击文件格式选项卡,然后单击顶部显示的创建按钮。它将弹出创建文件格式对话框。输入以下详细信息:

  • 名称 - 文件格式的名称。

  • 模式名称 - 创建的文件格式只能在给定的模式中使用。

  • 格式类型 - 文件格式的名称。

  • 列分隔符 - 如果 csv 文件已分隔,请提供文件分隔符。

  • 行分隔符 - 如何识别新行。

  • 要跳过的标题行 - 如果提供了标题,则为 1,否则为 0。

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

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

Creating File Format Process

用户将能够在“视图”面板中看到创建的文件格式。

使用 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');

将数据卸载到 S3

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

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

语法

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>);

示例

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