- Snowflake 教程
- Snowflake - 首页
- Snowflake - 简介
- Snowflake - 数据架构
- Snowflake - 功能架构
- Snowflake - 如何访问
- Snowflake - 版本
- Snowflake - 定价模型
- Snowflake - 对象
- Snowflake - 表和视图类型
- Snowflake - 登录
- Snowflake - 数据仓库
- Snowflake - 数据库
- Snowflake - 模式
- Snowflake - 表和列
- Snowflake - 从文件加载数据
- Snowflake - 有用的示例查询
- Snowflake - 监控使用情况和存储
- Snowflake - 缓存
- 将数据从 Snowflake 卸载到本地
- 外部数据加载(从 AWS S3)
- 外部数据卸载(到 AWS S3)
- Snowflake 资源
- Snowflake - 快速指南
- Snowflake - 有用资源
- Snowflake - 讨论
Snowflake - 外部数据加载
Snowflake 也支持客户端的云存储。这意味着客户端可以在其云中拥有数据,并且可以通过引用位置将其加载到 Snowflake 中。目前,Snowflake 支持 3 个云 – AWS S3、Microsoft Azure 和 Google Cloud Platform 位置。这些被称为外部阶段。但是,Snowflake 提供 Snowflake 托管的阶段,这些阶段被称为内部阶段。
外部阶段是客户端位置,而内部阶段在用户使用其本地系统目录时使用。
要从外部云上传数据,需要进行以下设置:
Snowflake 中现有的数据库和模式,数据必须加载到其中。
指向 AWS S3 存储桶的外部阶段设置。
文件格式,它定义加载到 AWS S3 中的文件的结构。
在本章中,我们将讨论如何设置这些要求并将数据加载到表中。
我们已经创建了一个名为 TEST_DB 的数据库、名为 TEST_SCHEMA_1 的模式和名为 TEST_TABLE 的表。如果这些不存在,请按照前面章节中的说明创建这些。
可以通过 Snowflake 的用户界面以及使用 SQL 来设置外部阶段。
使用 UI
要创建外部阶段,请按照以下说明操作:
登录 Snowflake。单击顶部功能区中显示的数据库。在数据库视图中,单击名为 TEST_DB 的数据库名称。现在,单击阶段选项卡。现在,单击顶部显示的创建按钮,如下面的屏幕截图所示:
将弹出创建阶段对话框,在列表中选择 amazon|s3 并单击下一步按钮,如下所示:
它将进入下一个屏幕,用户应在其中输入以下详细信息:
名称 - 这是用户定义的外部阶段名称。相同的名称将用于将数据从阶段复制到表。
模式名称 - 选择包含要加载数据的表的模式名称。
URL - 提供来自 Amazon 的 S3 url。它基于存储桶名称和密钥是唯一的。
AWS 密钥 ID - 请输入您的 AWS 密钥 ID
AWS 密钥 - 输入您的密钥以通过您的 AWS 连接
加密主密钥 - 提供任何加密密钥。
提供这些详细信息后,单击完成按钮。下面的屏幕截图描述了上述步骤:
用户可以在视图面板中看到新创建的外部阶段。
使用 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
其他内容可以保持不变。输入详细信息后,单击完成按钮。下面的屏幕截图显示了上述详细信息:
用户将能够在视图面板中看到已创建的文件格式。
使用 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 加载数据。
用户可以运行以下查询以查看给定阶段中存在的所有文件:
LS @<external_stage_name>
现在,要加载数据,请运行以下查询:
语法
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>);
示例
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>)”。