Snowflake 简明教程

Snowflake - External Data Loading

Snowflake 也支持来自客户端的云存储。这意味着客户端可以将数据保存在其云中,并且可以通过引用位置将其加载到 Snowflake 中。截至目前,Snowflake 支持 3 个云——AWS S3、Microsoft Azure 和 Google 云平台位置。这些被称为外部阶段。但是, Snowflake 提供了 Snowflake 管理的阶段,这些阶段被称为 Internal Stages

External Stages 是客户端位置,当用户使用其本地系统目录时,将使用内部阶段。

要从外部云上传数据,需要以下设置 −

  1. Snowflake 中数据必须加载到的现有数据库和架构。

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

  3. 文件格式,它定义了加载到 AWS S3 中的文件的结构。

在本章中,我们将讨论如何设置这些要求并将数据加载到表中。

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

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

Using UI

要创建外部加载阶段,请遵照下列说明操作:

登录 Snowflake。单击最上方的带 Databases 图标。在数据库视图中,单击数据库名称,如 TEST_DB。现在,单击 Stages 选项卡。接着,单击顶部所示的 Create 按钮,如下图所示:

external storage

它会弹出一个 Create Stage 对话框,在列表中选择 amazon|s3 并单击“下一步”按钮,如下图所示:

create stage dialog box

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

  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

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

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. Name - 文件格式的名称

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

  3. Format Type − 文件格式名称

  4. Column separator − 如果 csv 文件已分隔,提供文件分隔符

  5. Row separator − 如何识别新行

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

其他内容可以保持原样。输入详细信息后,单击 Finish 按钮。下面的截图显示了上述详细信息 −

process of 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');

Load data from S3

在本章中,我们将讨论如何设置所有必需参数,例如临时存储区、文件格式、数据库,以从 S3 加载数据。

用户可以运行以下查询来查看给定临时存储区中存在的所有文件 −

LS @<external_stage_name>

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

Syntax

COPY INTO @<database_name>.<schema_name>.<table_name>
FROM @<database_name>.<schema_name>.<ext_stage_name>
FILES=('<file_name>')
FILE_FORMAT=(FORMAT_NAME=<database_name>.<schema_name>.<file_format_name>);

Example

COPY INTO @test_db.test_schema_1.TEST_USER
FROM @test_db.test_schema_1.EXT_STAGE
FILES=('data.csv')
FILE_FORMAT=(FORMAT_NAME=test_db.test_schema_1.CSV);

运行上述查询后,用户可以通过运行以下简单查询来验证数据是否已放入表中 −

Select count(*) from Test_Table

如果用户想要上传外部临时存储区中存在的所有文件,无需传递“FILES=(<file_name>)”