从云存储加载数据:Amazon S3

简介

本教程向您展示如何使用 SQL 将数据从云存储加载到 Snowflake 中。您将在 Snowsight 中使用模板工作表以完成这些任务。您可以选择要使用的云提供商:Amazon S3、Microsoft Azure 或 Google Cloud Storage (GCS)。该工作表包含自定义的 SQL 命令,用于与每种存储类型兼容。

注意

本教程中提供的示例特定于 Amazon S3,并显示用于从 S3 桶加载数据的 SQL 命令。

备注

Snowflake 对本教程中示例数据使用的磁盘存储收取最低费用。本教程提供删除数据库并最大程度地降低存储成本的步骤。

Snowflake 需要一个 虚拟仓库 加载数据并执行查询。正在运行的虚拟仓库会使用 Snowflake Credit。在本教程中,您将使用 30 天试用账户 (https://signup.snowflake.com/),该账户提供免费 Credit,您无需支付任何费用。

您将学习的内容

在本教程中,您将学习如何:

  • 使用具有创建和使用本教程所需的 Snowflake 对象的权限的角色。

  • 使用仓库访问资源。

  • 创建数据库和架构。

  • 创建表。

  • 为您的云平台创建存储集成。

  • 为您的存储集成创建暂存区。

  • 将数据从暂存区加载到表中。

  • 查询表中的数据。

先决条件

本教程假定满足以下条件:

备注

本教程仅适用于拥有试用账户的用户。示例工作表不适用于其他类型的账户。

第 1 步:使用 Snowsight 登录

要通过公共互联网访问 Snowsight,请执行以下操作:

  1. 在支持的 Web 浏览器中,导航至 https://app.snowflake.cn

  2. 提供 账户标识符 或账户 URL。如果您之前登录过 Snowsight,可能会看到一个可以选择的账户名称。

  3. 使用 Snowflake 账户凭据登录。

第 2 步:打开 Load data from cloud storage 工作表

您可以使用工作表来编写和运行数据库上的 SQL 命令。您的试用账户有权访问本教程的模板工作表。该工作表具有 SQL 命令,可运行以创建数据库对象、加载数据和查询数据。因为它是一个模板工作表,所以系统将邀请您为特定的 SQL 参数输入自己的值。有关工作表的更多信息,请参阅 工作表入门

本教程的工作表未预加载到试用账户中。要打开本教程的工作表,请按照下列步骤操作:

  1. 如果您是首次登录到 Snowsight 试用账户,请在 Where do you want to start? 屏幕上的 Load data into Snowflake 下选择 Start

    如果您已离开 Where do you want to start? 屏幕,请转到 Worksheets 选项卡,然后选择横幅中的 Continue

  2. 在中间名为 Load data from cloud storage 的面板上点击任意位置。

    [Template] Load data from cloud storage worksheet 会打开,您的浏览器显示的内容与下图类似。

从云模板工作表加载的 SQL,其中包含本教程的 SQL 命令,以及描述性注释。

第 3 步:设置要使用的角色和仓库

您使用的角色决定了您拥有的权限。在本教程中,使用 ACCOUNTADMIN 系统角色,以便您查看和管理账户中的对象。有关更多信息,请参阅 使用 ACCOUNTADMIN 角色

仓库提供执行 DML 操作、加载数据和运行查询所需的计算资源。这些资源包括 CPU、内存和临时存储。您的试用账户拥有一个虚拟仓库 (compute_wh),可用于本教程。有关更多信息,请参阅 虚拟仓库

要设置要使用的角色和仓库,请执行以下操作:

  1. 在打开的工作表中,将光标置于 USE ROLE 行。

    USE ROLE accountadmin;
    
    Copy
  2. 在工作表的右上角,选择 Run

    备注

    在本教程中,每次运行一个 SQL 语句。不要选择 Run All

  3. 将光标置于 USE WAREHOUSE 行,然后选择 Run

    USE WAREHOUSE compute_wh;
    
    Copy

第 4 步:设置可以加载的表

数据库是数据的存储库。数据存储在您可以管理和查询的表中。架构是数据库对象(如表和视图)的逻辑分组。例如,架构可能包含特定应用程序所需的数据库对象。有关更多信息,请参阅 数据库、表和视图 – 概览

要创建可以加载的数据库、架构和表,请执行以下操作:

  1. 在打开的工作表中,将光标置于 CREATE OR REPLACE DATABASE 行,输入数据库的名称和可选的注释,然后选择 Run。例如:

    CREATE OR REPLACE DATABASE cloud_data_db
      COMMENT = 'Database for loading cloud data';
    
    Copy
  2. 将光标置于 CREATE OR REPLACE SCHEMA 行,输入架构的名称和可选的注释,然后选择 Run。例如:

    CREATE OR REPLACE SCHEMA cloud_data_db.s3_data
      COMMENT = 'Schema for tables loaded from S3';
    
    Copy
  3. 将光标置于 CREATE OR REPLACE TABLE 行,完成表定义,添加可选注释,然后选择 Run。例如,下表包含六个列:

    CREATE OR REPLACE TABLE cloud_data_db.s3_data.calendar
      (
      full_date DATE
      ,day_name VARCHAR(10)
      ,month_name VARCHAR(10)
      ,day_number VARCHAR(2)
      ,full_year VARCHAR(4)
      ,holiday BOOLEAN
      )
      COMMENT = 'Table to be loaded from S3 calendar data file';
    
    Copy
  4. 要确认表已成功创建,请将光标置于 SELECT 行,然后选择 Run

    SELECT * FROM cloud_data_db.s3_data.calendar;
    
    Copy

    输出将显示您创建的表的列。目前,该表中没有任何行。

第 5 步:创建存储集成

在您可以从云存储加载数据之前,您必须配置特定于您的云提供商的存储集成。以下示例特定于 Amazon S3 存储。

存储集成是已命名的第一类 Snowflake 对象,无需传递显式云提供商凭据(如密钥或访问令牌)。集成对象存储 AWS Identity and Access Management (IAM) 用户 ID。

要为 Amazon S3 创建存储集成,请执行以下操作:

  1. 使用 AWS 管理控制台以创建 IAM 策略和 IAM 角色。这些资源提供对 S3 桶的安全访问,以便加载数据。您将需要这些资源才能在 Snowflake 中创建存储集成。登录控制台后,完成 选项 1:配置 Snowflake 存储集成以访问 Amazon S3 下的 第 1 步和第 2 步

  2. 在打开的工作表中,将光标置于 CREATE OR REPLACE STORAGE INTEGRATION 行,定义所需的参数,然后选择 Run。例如:

    CREATE OR REPLACE STORAGE INTEGRATION s3_data_integration
      TYPE = EXTERNAL_STAGE
      STORAGE_PROVIDER = 'S3'
      STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::631373164455:role/tutorial_role'
      ENABLED = TRUE
      STORAGE_ALLOWED_LOCATIONS = ('s3://snow-tutorial-bucket/s3data/');
    
    Copy

    将 STORAGE_AWS_ROLE_ARN 设置为之前创建的 IAM 角色的唯一标识符。您可以在 AWS 管理控制台中的 IAM > Roles 下找到此值。

  3. 将光标置于 DESCRIBE INTEGRATION 行,指定您创建的存储集成的名称,然后选择 Run

    DESCRIBE INTEGRATION s3_data_integration;
    
    Copy

    此命令会检索自动为您的 Snowflake 账户创建的 AWS IAM 用户的 ARN 和 ID。您将使用这些值在 AWS 管理控制台中配置 Snowflake 的权限。

    此命令的输出类似于以下内容:

    DESCRIBE INTEGRATION 命令的输出,包含以下列:property、property_type、property_value、property_default。
  4. 将光标置于 SHOW INTEGRATIONS 行并选择 Run。此命令会返回有关您创建的存储集成的信息。

    SHOW INTEGRATIONS;
    
    Copy

    此命令的输出类似于以下内容:

    SHOW INTEGRATIONS 命令的输出,包含以下列:name、type、category、enabled、comment、created_on。
  5. 使用 AWS 管理控制台,用于配置 IAM 用户(为您的试用账户自动创建的用户)的权限,以便访问存储桶。遵照 选项 1:配置 Snowflake 存储集成以访问 Amazon S3 下的 第 5 步

    如果您使用的是 Azure 或 GCS,您可以在 从 Microsoft Azure 批量加载从 Google Cloud Storage 批量加载 下找到等效的配置程序。

第 6 步:创建暂存区

暂存区是保存要加载到 Snowflake 数据库的数据文件的位置。本教程会创建一个暂存区,该暂存区可以从特定类型的云存储(例如 S3 桶)加载数据。

要创建暂存区,请执行以下操作:

  1. 在打开的工作表中,将光标置于 CREATE OR REPLACE STAGE 行,指定名称、您创建的存储集成、桶 URL、正确的文件格式,然后选择 Run。例如:

    CREATE OR REPLACE STAGE cloud_data_db.s3_data.s3data_stage
      STORAGE_INTEGRATION = s3_data_integration
      URL = 's3://snow-tutorial-bucket/s3data/'
      FILE_FORMAT = (TYPE = CSV);
    
    Copy
  2. 返回有关您创建的暂存区的信息:

    SHOW STAGES;
    
    Copy

    此命令的输出类似于以下内容:

    SHOW STAGES 命令的输出,包含以下列:created_on、name、database_name、schema_name、URL。

第 7 步:从暂存区加载数据

使用 COPY INTO <table> 命令从您创建的暂存区加载表。有关从 S3 桶加载的详细信息,请参阅 从 S3 暂存区复制数据

要将数据加载到表中,请将光标放在 COPY INTO 行,指定表名称、创建的阶段以及要加载的文件(或文件)的名称,然后选择 Run。例如:

COPY INTO cloud_data_db.s3_data.calendar
  FROM @cloud_data_db.s3_data.s3data_stage
    FILES = ('calendar.txt');
Copy

您的输出看起来类似于下图。

五行将被复制到表中。输出包含以下列:file、status、rows_parsed、rows_loaded error_limit。

第 8 步:查询表

现在数据已加载,您可以在 calendar 表上运行查询了。

要在打开的工作表中运行查询,请选择 SELECT 命令的一行或多行,然后选择 Run。例如,运行以下查询:

SELECT * FROM cloud_data_db.s3_data.calendar;
Copy

您的输出看起来类似于下图。

表中的所有行均已选中。此示例有 full_date、day_name、month_name、day_num、year_num 和 holiday 列。

第 9 步:清理、总结和其他资源

恭喜!您已成功完成此试用账户教程。

请花几分钟时间查看简短的总结和教程中涵盖的要点。您可能还需要考虑删除在教程中创建的任何对象进行清理。例如,您可能希望删除已创建和加载的表:

DROP TABLE calendar;
Copy

只要不再需要它们,您还可以删除创建的其他对象,例如存储集成、暂存区、数据库和架构。有关详细信息,请参阅 DDL(数据定义语言)命令

总结和要点

总之,您会使用在 Snowsight 中预先加载的模板工作表来完成以下步骤:

  1. 设置要使用的角色和仓库。

  2. 创建数据库、架构和表。

  3. 创建存储集成并配置云存储的权限。

  4. 创建暂存区,并将该暂存区的数据加载到表中。

  5. 查询数据。

以下是有关加载和查询数据的一些要点:

  • 您需要所需的权限才能在账户中创建和管理对象。在本教程中,您将使用这些权限的 ACCOUNTADMIN 系统角色。

    此角色通常不用于创建对象。相反,我们建议创建与组织中的业务职能保持一致的角色层次结构。有关更多信息,请参阅 使用 ACCOUNTADMIN 角色

  • 您需要一个存储所需资源的仓库,用于存储创建和管理对象,以及运行 SQL 命令。本教程使用包含在您的试用账户中的 compute_wh 仓库。

  • 您创建了一个用于存储数据的数据库和一个用于对数据库对象进行逻辑分组的架构。

  • 您创建了一个存储集成和一个暂存区,用于从存储在 AWS S3 桶中的 CSV 文件加载数据。

  • 将数据加载到数据库中后,您会使用 SELECT 语句对其进行查询。

下一步是什么?

请使用以下资源继续了解 Snowflake :

语言: 中文