Snowflake 简明教程

Snowflake - Quick Guide

Snowflake - Introduction

Snowflake 是基于云的先进数据平台系统,以软件即服务 (SaaS) 的形式提供。Snowflake 提供来自 AWS S3、Azure、Google Cloud 的数据存储功能,处理复杂查询和不同的分析解决方案。由 Snowflake 提供的分析解决方案比传统数据库及其分析功能更快、更易于使用和更灵活。Snowflake 存储并提供接近实时的(非实际实时)数据。

Snowflake 是一款先进的 OLAP(在线分析处理)技术解决方案。OLAP 也称为使用历史数据进行在线数据检索和数据分析的系统。它处理复杂且汇总的查询以及少量交易。例如:获取过去一个月内公司的订单数、销售额,获取该公司过去一个季度内新用户列表等。Snowflake 不用作 OLTP(在线事务处理)数据库。OLTP 数据库通常包含实时数据和大量的较小数据事务。例如:插入客户订单详细信息,注册新客户,跟踪订单配送状态等。

Why Use Snowflake?

Snowflake 提供称为云服务的数据平台。

  1. 无需要从客户端选择、安装、配置或管理硬件(虚拟或物理)。

  2. 无需软件进行安装、配置或管理就可访问。

  3. 所有正在进行的维护、管理、升级和修补都归 Snowflake 自身所有。

用于分析解决方案的传统数据库在架构上复杂、昂贵且受制约,而 Snowflake 在数据工程、数据湖概念、数据仓库、数据科学、数据应用和数据交换或共享概念上非常丰富。它很容易访问和使用,不受数据大小和存储容量的限制。用户只需要管理其自身数据即可;所有与数据平台相关的管理均由 Snowflake 自身完成。

除此之外,Snowflake 还具有以下功能:

  1. 使用 Java、Python、PHP、Spark、Ruby 等多语言的简单、可靠的数据管道。

  2. 数据湖的安全访问、非常好的性能及安全性。

  3. 工具、数据存储和数据大小无需管理。

  4. 使用任何框架对建模人员进行简单的数据准备。

  5. 为构建数据密集型应用程序无操作负担。

  6. Share and collaborate live data across company’s ecosystem.

Snowflake - Data Architecture

Snowflake 数据架构重新发明了一个新的 SQL 查询引擎。它仅设计用于云。Snowflake 不利用或建立在任何现有数据库技术之上。它甚至不使用 Hadoop 等大数据软件平台。Snowflake 提供了分析数据库的所有功能以及许多其他独特功能和功能供用户使用。

Snowflake 具有用于存储结构化和半结构化数据的中央数据存储库。可以从 Snowflake 平台中所有可用计算节点访问这些数据。它使用虚拟仓库作为处理查询的计算环境。在处理查询时,它利用多集群、微分区和高级缓存概念。Snowflake 的云服务负责为用户提供端到端解决方案,例如将用户验证登录到选择查询的结果。

Snowflake 的数据架构 has three main layers

  1. Database Storage

  2. Query Processing

  3. Cloud Services

以下为 Snowflake 的架构图 data architecture

data architecture

Database Storage

Snowflake 支持 Amazon S3、Azure 和 Google Cloud,以使用文件系统将数据加载到 Snowflake 中。用户应将文件(.csv、.txt、.xlsx 等)上传到云中,并在创建 Snowflake 中的连接后获取数据。数据量不受限制,但文件大小最高为 5GB(根据云服务而定)。一旦数据加载到 Snowflake 中,它将利用其内部优化和压缩技术将数据以列格式存储到中央存储库中。中央存储库基于数据存储的云。

Snowflake 负责数据管理的所有方面,例如如何使用数据自动集群存储数据、数据的组织和结构、通过将数据保留在多个微分区中的压缩技术、元数据、统计信息等。Snowflake 将数据存储为数据对象,用户无法直接查看或访问它们。用户可以通过 SQL 查询(在 Snowflake 的 UI 中或使用 Java、Python、PHP、Ruby 等编程语言)访问这些数据。

Query Processing

查询执行是处理层或计算层的一部分。为了处理查询,Snowflake 要求计算环境,在 Snowflake 的世界中被称为“虚拟仓库”。虚拟仓库是一个计算集群。虚拟仓库由 CPU、内存和临时存储系统组成,以便它可以执行 SQL 执行和 DML(数据操作语言)操作。

  1. SQL SELECT executions

  2. 使用更新、插入、更新更新数据

  3. 使用 COPY INTO <表> 将数据加载到表中

  4. 使用 COPY INTO <位置> 从表中卸载数据

但是,服务器的数量取决于虚拟仓库的大小。例如,小型仓库每个集群有 1 台服务器,而小型仓库每个集群有 2 台服务器,并且随着大型、超大型等规模的增加而加倍。

在执行查询时,Snowflake 分析所请求的查询,并使用最新的微分区,并在不同的阶段评估缓存以提高性能并减少获取数据的时间。减少时间意味着减少用户使用的积分。

Cloud Services

云服务是 Snowflake 的“大脑”。它协调和管理 Snowflake 中的活动。它将 Snowflake 的所有组件整合在一起,以处理用户的请求,从日志验证到交付查询的响应。

以下服务在此层进行管理:−

  1. 它是所有存储的集中管理。

  2. 它管理计算环境以与存储一起工作。

  3. 它负责 Snowflake 在云中的升级、更新、修补和配置。

  4. 它对 SQL 查询执行基于成本的优化器。

  5. 它自动收集统计信息,如使用的积分、存储容量利用率

  6. 安全,例如基于角色和用户的身份验证、访问控制

  7. 它执行加密以及密钥管理服务。

  8. It stores metadata as data is loaded into the system.

And many more…​

Snowflake - Functional Architecture

Snowflake 支持结构化和半结构化数据。在完成数据加载后,Snowflake 自动组织和构建数据。在存储数据时,Snowflake 根据其智能将其划分并保存到不同微分区中。即使 Snowflake 也将数据存储到不同集群中。

在功能层面上,要从 Snowflake 访问数据,需要以下组件 −

  1. 登录后选择合适的角色

  2. 在 Snowflake 中,称作 Warehouse 的虚拟仓库可用于执行任何活动

  3. Database Schema

  4. Database

  5. Tables and columns

Snowflake 提供以下高级分析功能 −

  1. Data Transformation

  2. Supports for Business Application

  3. Business Analytics/Reporting/BI

  4. Data Science

  5. 与其他数据系统共享数据

  6. Data Cloning

下图展示了 Snowflake 的功能性架构 −

每个块中的“设置”符号可称为仓库,而 XS、XXL、XL、L、S 表示仓库的大小,需执行不同的操作。根据要求和使用情况,可以增减仓库的大小;甚至可以使其从单集群转换为多集群。

functional architecture

Snowflake - How to Access

Snowflake 是一个授权数据平台。它使用信用概念向客户收费。但是,它提供 30 天免费试用,并提供 400 美元的积分用于学习目的。

使用以下步骤获取 Snowflake 的 30 天免费访问权限−

  1. 打开网址 "www.snowflake.com" ,然后单击页面右上角的“START FOR FREE”(免费开始)。

snowflake homepage
  1. 它会导航到注册页面,用户需要在此页面中提供详细信息,如姓名、姓氏、电子邮件、公司和国家/地区。填写完表单后,单击“CONTINUE”(继续)按钮。

snowflake registration
  1. 在下一个屏幕上,要求选择 Snowflake 版本。根据您想要执行的功能选择版本。对于本教程,标准版就已足够,但对于使用 AWS S3 加载数据,则需要业务关键版。

  2. 选择 Business Critical ,然后单击 AWS 。选择 AWS 所在的区域。

  3. 选中条款和条件框,然后单击 Get Started(开始使用)按钮。

以下屏幕截图演示了上述步骤−

snowflake get started
  1. 创建帐户正在进行中,屏幕下方会显示一封电子邮件已发送到您的地址的消息。

snowflake signed up
  1. 查看电子邮件收件箱。收到 Snowflake 发送的电子邮件后(通常在 2-3 分钟内),单击“单击激活”按钮。

  2. 它会导航到 Snowflake 页面,用户需要在其中设置用户名和密码。此凭证将用于登录 Snowflake。

  3. 您的电子邮件中会提供一个 URL,如下所示: "https://ABC12345.us-east-1.snowflakecomputing.com/console/login" 。这是访问云端 Snowflake 的特定用户 URL。无论何时想要在 Snowflake 中工作,都可使用个人 URL 并登录。

Snowflake - Editions

Snowflake 根据用户/公司需求提供四种不同版本。

  1. Standard

  2. Enterprise

  3. Business Critical

  4. Virtual Private Snowflake (VPS)

Standard Edition

它是 Snowflake 的基本版本。在此版本中它提供以下功能:

  1. 支持完整的 SQL 数据仓库

  2. Secure Data Sharing

  3. Premier support for 24×365

  4. 1 天的时间回溯

  5. Data Encryption

  6. Dedicated virtual warehouses

  7. Federated Authentication

  8. Database Replication

  9. External Functions support

  10. Snowsight

  11. 支持用户自己创建数据交换

  12. Data Marketplace Access

Enterprise Edition

它是 Standard+ 版本,即 Standard 版本的所有功能加上以下附加功能:

  1. Multi-cluster warehouses

  2. 最长 90 天的时间回溯

  3. Encryption key changes annually

  4. Materialized Views

  5. Search Optimization Services

  6. Dynamic Data Masking

  7. External Data Tokenization

Business Critical Edition

它是 Enterprise+ 版本,即 Enterprise 和 Standard 版本的所有功能加上以下附加功能:

  1. HIPPA support

  2. PCI compliance

  3. Data Encryption everywhere

  4. AWS Private Link Support

  5. Azure Private Link Support

  6. Database Failover and fallback

Virtual Private Snowflake (VPS) Edition

它是 Business Critical+ 版本,是最高级版本。它支持 Snowflake 的所有产品。

  1. 客户专用的虚拟服务器,其中加密密钥存储在内存中。

  2. Customer dedicated metadata store.

Snowflake - Pricing Model

Snowflake 对其面向最终用户的服务使用 three different stageslayers

  1. Storage

  2. Virtual Warehouse (Compute)

  3. Cloud Services

Snowflake 没有任何许可费用。但是,其定价基于这三层以及无服务器功能的实际使用情况。Snowflake 收取固定费用,另加根据 Snowflake 信用使用情况支付的任何额外费用。

What is Snowflake Credit?

这是支付 Snowflake 资源使用费用的模式,通常包括虚拟仓库、云服务和无服务器功能。Snowflake 信用是计量单位。它根据利用的资源进行计算,如果客户不使用任何资源或资源处于休眠模式,则不收取任何费用。例如,当虚拟仓库正在运行并且云服务层正在执行一些用户定义的任务时,就会使用 Snowflake 信用。

Storage Cost

Snowflake 对数据存储按月收费。存储成本按每月存储在 Snowflake 中的平均数据量计算。此数据大小在 Snowflake 执行压缩后计算。此成本非常低,一个月的 1TB 数据约为 23 美元。

Virtual Warehouse (Compute)

它是一个或多个集群,用于将数据加载到 Snowflake 并执行查询。Snowflake 使用 Snowflake 信用作为客户付款。

Snowflake 信用根据仓库大小、群集数量以及执行查询所花费的时间计算。仓库的大小决定了查询运行的速度。当虚拟仓库未运行并且处于暂停模式时,它不会花费任何 Snowflake 信用。不同大小的仓库会以不同的速率花费 Snowflake 信用。

Warehouse Size

Servers

Credit/Hour

Credits/Second

X-Small

1

1

0.0003

Small

2

2

0.0006

Medium

4

4

0.0011

Large

8

8

0.0022

X-Large

16

16

0.0044

2X-Large

32

32

0.0089

3X-Large

64

64

0.0178

4X-Large

128

128

0.0356

Cloud Services

云服务管理用户的任务的端到端解决方案。它会根据任务的要求自动分配资源。Snowflake 每天提供高达 10% 的计算信用的云服务免费使用。

例如,如果用户每天花费 100 个信用作为计算,那么用于云服务的 10 个信用是免费的。

Serverless Features

Snowflake 提供了许多其他无服务器功能。这些是托管计算资源,Snowflake 在使用时消耗信用。

Snowpipe、数据库复制、物化视图维护、自动群集、搜索优化服务是 Snowflake 提供的无服务器功能。

Snowflake - Objects

Snowflake 在三个临时存储区内从逻辑上组织数据 − 帐户、数据库和模式。

数据库和模式在 Snowflake 帐户内从逻辑上组织数据。一个帐户可以有多个数据库和模式,但一个数据库必须与一个模式相关联,反之亦然。

Snowflake Objects

下面是 Snowflake 对象的列表 −

  1. Account

  2. User

  3. Role

  4. Virtual Warehouse

  5. Resource Monitor

  6. Integration

  7. Database

  8. Schema

  9. Table

  10. View

  11. Stored Procedure

  12. User Defined Functions (UDF)

  13. Stage

  14. File Format

  15. Pipe

  16. Sequence

模式之后的对象与模式相关联,模式与数据库相关联。其他实体(例如用户和角色)用于身份验证和访问管理。

以下是有关您应该了解的 Snowflake 对象的一些重要要点 −

  1. 所有 Snowflake 对象均位于逻辑容器中,其中顶级容器是帐户,即,所有对象均位于 Snowflake 的帐户中。

  2. Snowflake 分别保护所有对象。

  3. 用户可基于授予角色的权限,对对象执行操作和任务。权限示例 −

Snowflake - Table & View Types

Table Types

Snowflake categorizes tables into different types based on its uses and nature. There are four types of tables −

Permanent Table

  1. Permanent tables are created in the database.

  2. These tables persist until deleted or dropped from database.

  3. 这些表旨在存储需要最高级别的数据保护和恢复的数据。

  4. 这是默认表类型。

  5. 这些表中的时间旅行最长可达 90 天,也就是某人可以获取最多 90 天之前的数据。

  6. 它是故障安全的,如果由于故障丢失数据,则可以恢复数据。

Temporary Table

  1. 如名称所示,临时表存在的时间较短。

  2. 这些表在整个会话期间都存在。

  3. 如果用户希望为其后续查询和分析创建一个临时表,那么一旦会话完成,它将自动删除该临时表。

  4. 它主要用于临时数据,比如 ETL/ELT

  5. 临时表中可以进行时间旅行,但只能从 0 到 1 天。

  6. 它不是故障安全的,这意味着无法自动恢复数据。

Transient Table

  1. 这些表持续存在,直到用户删除它们。

  2. 多个用户可以访问临时表。

  3. 当需要“数据持久性”但不需要长时间“数据保留”时使用它。例如,网站的访客详细信息、访问网站并已注册该网站的用户的详细信息,所以在注册之后,可能不需要将详细信息存储在两个不同的表中。

  4. 临时表中可以进行时间旅行,但只能从 0 到 1 天。

  5. 它也不是故障安全的。

External Table

  1. 这些表持续存在,直到被删除。

  2. 这里,使用了单词 removed ,因为外部表类似于 Snowflake 之外,并且不能删除或丢弃它们。应该将其移除。

  3. 可以将其视作 Snowflake,外部数据湖,也就是数据湖的主要来源指向 Snowflake,以便根据用户需求使用数据。

  4. 不能直接访问数据。可以通过外部阶段在 Snowflake 中访问它。

  5. 外部表只适于读取。

  6. 外部表无法进行时间旅行。

  7. 它在 Snowflake 环境中并非万无一失。

View Types

Snowflake 中有三个主要分类的视图:

Standard View

  1. 它是默认视图类型。

  2. 用于查看数据表的查询。

  3. 用户可以根据角色和权限执行查询。

  4. 任何有权访问这些视图的角色都可以使用底层 DDL。

Secure View

  1. 安全视图意味着只有经过授权的用户才能访问它。

  2. 授权用户可以查看定义和详细信息。

  3. 具有适当角色的授权用户可以访问这些表并执行查询。

  4. 在安全视图中,Snowflake 查询优化器会绕过用于常规视图的优化。

Materialized View

  1. 物化视图更像一个表。

  2. 这些视图使用筛选条件存储主源中的结果。例如,一家公司从成立至今所有员工的记录(活跃、不活跃或已故)。现在,如果用户只需要活跃员工的详细信息,那么可以查询主表并将结果存储为物化视图以进行进一步分析。

  3. 物化视图会自动刷新,也就是说,每当主表获取其他/新的员工记录时,它也会刷新物化视图。

  4. Snowflake 也支持安全物化视图。

  5. 物化视图会自动维护,并且它会消耗大量的计算资源。

  6. 物化视图的总成本基于“数据存储 + 计算 + 无服务器服务”。

  7. 每个物化视图的计算费用会根据数据更改量进行计算。

Snowflake - Login

由于 Snowflake 是基于云的平台,因此登录非常容易。登录 Snowflake 帐户需要执行以下步骤 −

  1. 转到注册时收到 Snowflake 发送的电子邮件并复制唯一的 URL(每个用户唯一)。

  2. 转到浏览器并导航至该 URL。它将导航到 Login 页面。

  3. 提供您在注册期间设置的用户名和密码。最后,单击登录按钮。

以下屏幕截图显示了登录屏幕 −

snowflake login page
  1. 登录成功会将用户导航到 Snowflake 数据平台。用户可以在右上角看到自己的姓名,如下一屏幕截图所示。除了姓名,他们可以看到分配给他们的角色。

  2. 在左上角,有 Databases, Shares, Data Marketplace, Warehouses, Worksheet,History 等图标。用户可以单击此处并查看这些项目的详细信息。

  3. 在左侧面板中,Snowflake 提供了一些数据库和架构供实践使用,如“DEMO_DB, SNOWFLAKE_SAMPLE_DATA, UTILDB”。

  4. 数据库详细信息旁边的空白白色屏幕称为 Worksheet ,用户可以在此处编写查询并使用 Run 按钮执行这些查询。

  5. 在底部,有一个 Result 面板。查询的结果将显示在此处。

以下屏幕截图展示了登录后屏幕的不同区域 −

snowflake different sections of screen

Snowflake - Warehouse

由于仓库对于计算很重要。我们来讨论如何创建仓库,修改仓库以及查看仓库详细信息。

Snowflake 提供两种方式来创建/修改/查看仓库 - 第一种方式是 UI,另一种是 SQL 语句。

Working on Warehouses using Snowflake’s UI

让我们从创建仓库开始 −

Create Warehouse

使用唯一的 URL 登录到 Snowflake。单击以下屏幕截图中所示的顶部功能区上的 Warehouses

click warehouses

它导航到下一个屏幕。单击仓库列表上方的 Create ,如下所示。

create warehouses

它将打开 Create 仓库对话框。应该输入以下字段来创建仓库。

  1. Name − test_WH

  2. Size − Small

  3. Auto-Suspend 设置为 5 minutes

然后单击 Finish 按钮。

finish creating warehouse

一旦创建仓库,用户就可以在列表中查看,如下面的屏幕截图所示 −

warehouse is created

Edit/Modify/Alter Warehouse

Snowflake 提供根据要求修改或更改 Warehouses 的功能。例如,在创建和使用后,用户可以更新仓库大小、集群、暂停时间。

单击顶部功能区上的 Warehouse 按钮。它将显示仓库页面详细信息。从仓库列表中选择需要更改的 warehouse 。点击 Configure ,如下面的屏幕截图所示 −

click configure

它将弹出 Configure Warehouse 对话框。用户可以修改 Name 之外的所有详细信息。将 auto suspend time5 分钟更新为 10 分钟。单击 Finish 按钮,如下面的屏幕截图所示。

configure warehouse

当用户单击 Finish 按钮时,他们将能够在视图面板中看到更新的详细信息。

View Warehouse

单击顶部功能区上的 Warehouses 按钮。它显示了仓库的视图面板,其中存在所有已创建的仓库。

  1. 使用 Create 按钮创建新仓库。

  2. 使用 Configure 按钮更改/修改现有仓库。

  3. 若选定的仓库处于暂停模式,请使用 Resume 按钮激活仓库。

以下截图演示了如何 Resume 处于 suspended 模式的仓库 −

resume warehouse in suspended mode

单击 Resume 按钮后,将弹出对话框。在对话框中单击 Finish 按钮,如下图所示 −

click finish

现在,用户可以看到 warehousestarted ,如下图所示 −

warehouse started

同样,用户可以立即单击 Suspend 按钮 suspend 仓库。如果任何仓库处于 Started 模式,则启用此按钮。选择要暂停的 warehouse 并单击 Suspend 按钮。将弹出对话框,单击 Yes 暂停,否则单击否。

以下截图显示了 suspend 功能 −

suspend functionality

用户也可以删除仓库,方法是选择仓库并单击 Drop 按钮,如下图所示 −

delete warehouse

将弹出确认对话框。单击是删除,否则单击否。

Working on Warehouses using Snowflake’s SQL Interface

现在,我们来了解如何使用 Snowflake 的 SQL 界面处理仓库。

Create Warehouse

登录 Snowflake 并导航到 Worksheets 。用户登录后,默认情况下会打开工作表;否则,单击顶部功能区中的工作表,如下图所示。

navigate to worksheets

使用以下查询创建仓库 TEST_WH

CREATE WAREHOUSE "TEST_WH"
WITH WAREHOUSE_SIZE = 'SMALL'
AUTO_SUSPEND = 600
AUTO_RESUME = TRUE
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 2
SCALING_POLICY = 'STANDARD'
COMMENT = ' '

单击 Run 执行查询。结果将显示在 Results 面板中,说明已成功创建仓库“TEST_WH”。

以下屏幕截图显示了使用 SQL 处理的输出 −

click run for execution

Edit/Modify/Alter Warehouse

要更改/修改仓库,请使用以下查询并运行它 −

ALTER WAREHOUSE "TEST_WH"
SET WAREHOUSE_SIZE = 'SMALL'
AUTO_SUSPEND = 1200
AUTO_RESUME = TRUE
MIN_CLUSTER_COUNT = 1
MAX_CLUSTER_COUNT = 1
SCALING_POLICY = 'STANDARD'
COMMENT = ' '

用户可以转到 View 面板并验证更新后的详细信息,如下所示 −

view panel

View Warehouses

要查看所有列出的仓库,用户可以使用以下 SQL。它将显示所有列出仓库的详细信息。

SHOW WAREHOUSES

要暂停仓库,请使用以下 SQL −

ALTER WAREHOUSE TEST_WH SUSPEND

resume 仓库,请使用以下 SQL −

ALTER WAREHOUSE "TEST_WH" RESUME If SUSPENDED

delete 仓库,请使用以下 SQL −

DROP WAREHOUSE "TEST_WH"

Snowflake - Database

数据库是模式的逻辑分组,其中包含表和列。在此章节中,我们将讨论如何创建 database ,以及如何查看详细信息。

Snowflake 为用户提供 two 种创建 database 的方法,第一种方法是使用用户界面,第二种方法是执行 SQL 查询。

Working with Databases using Snowflake’s UI

Snowflake 中的所有数据都保存 databases 。每个数据库包含一个或多个模式,这是数据库对象的逻辑分组,如表和视图。 Snowflake 没有限制数据库的数量,您可以在数据库中创建模式(在模式内),或创建对象(在模式内)。

Creating a Database

使用唯一 URL 登入 Snowflake 账户。点击顶部功能区上方的 Databases ,如下图所示 −

click databases after login

它将导航到下一个屏幕。点击数据库列表上方的 Create 按钮,如下所示。

click create button above databases

它将带您到 Create Database 对话框。输入数据库 NameComment ,然后点击 Finish 按钮。

create a databases

数据库创建后,用户可以在列表中查看,如下图所示 −

database list

View Warehouse

现在要查看所有创建的 databases ,点击顶部功能区上方的数据库。它将显示数据库的视图面板,其中包含所有已创建的数据库。

使用 Create 按钮创建新仓库。通过选择一个数据库并点击 Clone ,用户还可以克隆数据库,如下图所示 −

clone

它弹出 Clone Database 对话框,要求输入名称、来源、注释等信息。输入这些详细信息后,点击 Finish 按钮,如下图所示 −

clone database

用户可以看到另一个数据库已创建,并且它将在视图面板中可见。通过选择一个数据库并点击 Drop 按钮,用户还可以 delete 数据库,如下图所示 −

deleting database

它弹出确认对话框。点击 Yes 删除,否则点击 No

drop database pop up

Working on Databases using Snowflake’s SQL Interface

此处,我们将了解如何使用 Snowflake 的 SQL 界面创建并查看数据库。

Create Database

要创建数据库,首先需要登入 Snowflake 并导航到 Worksheets 。在默认情况下,用户登入后工作表将打开,否则点击顶部功能区上的 Worksheets 图标。

写下如下查询,以创建数据库 “TEST_DB_2”

CREATE DATABASE "TEST_DB_2"

现在点击 Run 按钮来执行查询。当 TEST_DB_2 数据库创建成功后, Result 将显示在结果面板中。下图显示了使用 SQL 处理的输出 −

create database test DB 2

View Databases

view 所有列出的仓库,用户可以使用如下 SQL。它会呈现所有列出的仓库的详细信息。

SHOW DATABASES

要创建一个数据库,用户可以使用以下 SQL,此处的“TEST_DB_3”是一个新命名的数据库,而 DEMO_DB 用于克隆它。

CREATE DATABASE TEST_DB_3 CLONE "DEMO_DB"

要创建数据库,请使用以下 SQL。

DROP DATABASE "TEST_DB_3"

用户可以在每次操作后运行 SHOW DATABSE 查询以验证操作是否完成。

Snowflake - Schema

架构是对表、视图等数据库对象的分组。每个架构都属于单个数据库。“数据库架构”是 Snowflake 中的命名空间。在执行任何操作时,需要在查询中直接提供命名空间或在 Snowflake 的 UI 中设置命名空间。

本章我们将讨论如何创建数据库以及查看详细信息。Snowflake 为用户提供了创建数据库的两种方式,第一种方法是使用用户界面,第二种方法是使用 SQL 查询。

Working with Schema using Snowflake’s UI

让我们看看如何使用 GUI 功能创建架构。

Creating a schema

使用唯一 URL 登录 Snowflake 帐户。现在单击功能区顶部显示的图标 Databases 。它会导航到数据库视图屏幕。然后单击要创建新架构的数据库名称,如下图所示:

creating a schema

单击数据库名称后,它会导航到数据库属性页面,您可以在其中看到数据库内部创建的表/视图/架构等。现在单击图标 Schemas ,默认情况下选择表,如下图所示:

click the schemas option

它会显示为所选数据库创建的架构列表。现在单击架构列表上方的图标 Create 以创建新架构,如下图所示:

create a new schema

单击图标 Create 后,您将能够看到对话框 Create Schema 。输入架构名称并单击按钮 Finish ,如下图所示:

create schema dialog box

将创建一个新架构并与其他架构的列表一起使用。

Edit / Modify / Alter Schema

Snowflake 提供修改或更改架构名称的功能。让我们看看如何修改架构名称。

单击功能区顶部显示的图标 Database 。它会显示数据库页面详细信息。现在单击数据库的名称。它会导航到数据库属性视图页面。单击 Schemas 以查看可用架构的列表。选择一个架构以更改其名称,然后单击图标 Alter ,如下所示。

alter schema

它会弹出对话框 Alter Schema 。用户可以修改名称。单击完成按钮,如下图所示。

alter schema popup

现在,它会显示更新的架构名称。

View Schema

架构存在于数据库中。要查看架构,我们必须导航到数据库。让我们看看如何使用 UI 来查看架构。

单击功能区顶部显示的图标 Databases 。它将显示数据库的面板 View ,其中存在所有已创建的数据库。选择一个数据库并单击其名称以查看其下的架构。

单击模式列表正上方的 Schemas 以显示所有可用模式。创建数据库后,它默认生成 two schemas - Information SchemaPublic 。Information Schema 包含数据库的所有元数据。

  1. 使用 Create 按钮在同一数据库下创建新模式。用户可以创建任意数量的模式。

  2. 使用 Clone 按钮创建现有模式的另一个副本。要执行此操作,请选择一个模式并单击 Clone 图标。

以下屏幕截图演示了此功能 −

view schema

它会弹出 Clone Schema 对话框,输入新模式的名称,然后单击 Finish 按钮。

以下屏幕截图显示了克隆功能 −

clone schema

在视图面板中,可以看到克隆模式。用户还可以选择一个模式并单击 Drop 图标来删除该模式,如下图所示 −

delete schema

将弹出确认对话框。单击是删除,否则单击否。

Working on Schemas Using Snowflake’s SQL Interface

让我们了解如何使用 SQL 界面功能创建模式。

Create Schema

首先登录 Snowflake 并导航到 Worksheets 。用户登录后默认打开工作表,否则单击顶部功能区中显示的 Worksheets 图标。

编写以下查询以在数据库 TSET_DB 下创建模式 TEST_SCHEMA −

CREATE SCHEMA "TEST_DB"."TEST_SCHEMA"

单击 Run 按钮执行查询。 Result 将以 "成功创建模式 TEST_SCHEMA" 的形式显示在结果面板中。

Edit/Modify/Alter Schema

alter/modify 模式名称,使用以下查询并运行它 −

ALTER SCHEMA "TEST_DB"."TEST_SCHEMA" RENAME TO "TEST_DB"."TEST_SCHEMA_RENAME"

用户可以转到视图面板并验证更新后的名称。

View Schema

要查看所有列出的模式,用户可以使用以下 SQL。它提供所有列出模式的详细信息。

SHOW SCHEMAS

clone 模式,使用以下 SQL −

CREATE SCHEMA "TEST_DB"."TEST2" CLONE "TEST_DB"."TEST_SCHEMA_RENAME"

delete 模式,使用以下 SQL −

DROP SCHEMA "TEST_DB"."TEST2"

用户可以在每次操作后运行 SHOW SCHEMAS 查询,以验证操作是否已完成。

Snowflake - Table & Columns

在数据库中,创建了作为表逻辑分组的模式。表包含列。表和列是数据库的低级且最重要的对象。在本章中,我们将讨论如何在 Snowflake 中创建表和列。

Snowflake 为用户提供了两种方法,可以使用用户界面和 SQL 查询来创建表和相应的列。如果不提供列的详细信息,用户将无法创建表。

Working with Tables and Columns using Snowflake’s UI

让我们看看如何使用 Snowflake 的用户界面来处理表和列。

Create Table and Columns

使用唯一 URL 登录 Snowflake 帐户。单击 Databases 按钮,位于顶部功能区。它导航到数据库视图屏幕。

单击要创建新表的数据库名称。它将导航到数据库属性页面,您可以在其中看到在数据库内创建的表/视图/模式等。

如果未选择 Tables ,请单击它,默认情况下,选择“表”。您可以看到在同一数据库中创建的表的列表,否则为空。

create table

单击 Create 按钮添加表。它将弹出 Create Table 对话框。输入以下字段 -

  1. Table Name − test_table

  2. Schema Name - 从可用列表中选择 - 公共

  3. Columns - 单击 Add 按钮,然后输入名称、类型、非空或任何默认值。

  4. 要添加多列,请继续单击 Add 按钮,然后输入详细信息。现在,单击 Finish 按钮。

以下屏幕截图描述了如何添加表和列 -

adding tables and columns

您可以在视图面板中看到创建的表。

View Table and Columns

在本节中,我们将讨论如何 view 表格和列的详细信息、如何 create a like 表格、如何 clone 它以及如何 delete 表格。

单击 Databases 位于顶部的功能区。它将显示数据库的“视图”面板,其中列出了所有数据库。单击包含表的数据库名称。例如, TEST_DB 如下面屏幕截图所示 −

view tables

它将显示数据库中列出的所有表。使用 Create 按钮创建新表。使用 Create Like 按钮创建一个具有与现有表相同元数据的表。

通过单击 Create Like 按钮,将弹出 Create Table Like 对话框。输入新表的名称并单击 Finish 按钮。

以下屏幕截图说明了此功能 −

create table like

在“视图”面板中,可以看到新表。在本例中,TABLE_TEST_1。

  1. 使用 Clone 按钮创建现有表的另一个副本。要执行此操作,请选择一个表并单击 Clone 按钮。

  2. Clone Table 对话框将弹出现在屏幕上。输入新表的名称并单击 Finish 按钮。

以下屏幕截图显示了克隆功能。

clone table

您可以在“视图”面板中看到新表。

CloneCreate Like 的区别是“列数据”。克隆从现有表中获取实际数据,而“创建与之类似”只复制表的元数据,它不会复制表中已存在的数据。

用户还可以通过选择表并单击 Drop 按钮来删除表。 Drop Table 对话框弹出以进行确认。单击“是”进行删除,否则单击“否”。

drop table

Working on Tables and Columns using Snowflake’s SQL Interface

一旦用户开始处理表格和列,各个数据库和架构就成为重要因素。如果没有提供数据库和架构的详细信息,则查询将无法成功执行。

有两种方法可以设置数据库和架构详细信息 - 一种使用 Snowflake 的 UI,另一种是在查询中的表名前提供数据库名称和架构名称,如下面的示例所示 −

SELECT * FROM DATABSE_NAME.SCHEMA_NAME.TABLE_NAME.

在 UI 中,需要执行以下步骤 −

单击“选择架构”旁边的右上角处的向下箭头。它弹出对话框,用户可以在其中提供以下详细信息 −

  1. ROLE

  2. Warehouse

  3. Database

  4. Schema

以下屏幕截图说明了上述步骤 −

snowflake sql interface

现在,当用户在查询中不提供数据库名称和架构名称时,它将针对如上所示的已设置数据库和架构运行。如果您需要切换到另一个数据库/架构,您可以随时进行更改。

Setup Database, Warehouse and Schema in SQL

使用以下查询为会话设置 warehouse

USE WAREHOUSE <WAREHOUSE_NAME>

使用以下查询设置会话中的 database

USE DATABASE <DATABASE_NAME>

使用以下查询设置会话中的 schema

USE SCHEMA <SCHEMA_NAME>

Create TABLE and COLUMNS

登录 Snowflake 并导航到工作表。默认情况下,工作表在您登录后打开,否则单击顶部功能区中存在的 Worksheets 图标。

使用以下查询在 TEST_DB 数据库和 TEST_SCHEMA_1 模式下创建表和列−

CREATE TABLE "TEST_DB"."TEST_SCHEMA_1"."TEST_TABLE"
   ("ID" NUMBER (10,0) NOT NULL DEFAULT 0, "NAME" VARCHAR (50), "ADDRESS" VARCHAR (100))

单击 Run 按钮来执行查询。结果将显示在 Results 面板中,因为已成功创建 TEST_TABLE。

View Table and Columns

要查看所有列出的表,可以使用以下 SQL。它带来了所有列出模式的详细信息。

SHOW TABLES

要查看列定义,请使用以下 SQL−

DESCRIBE TABLE TEST_DB.TEST_SCHEMA_1.TEST_TABLE

要克隆表,请使用以下 SQL−

CREATE TABLE "TEST_DB"."TEST_SCHEMA_1".TEST_TABLE_2 CLONE "TEST_DB"."TEST_SCHEMA_1"."TEST_TABL_1"

要创建 Like 表,请使用以下查询−

CREATE TABLE "TEST_DB"."TEST_SCHEMA_1".TEST_TABL_1 LIKE "TEST_DB"."TEST_SCHEMA_1"."TEST_TABLE"

要删除表,请使用以下 SQL−

DROP TABLE "TEST_DB"."TEST_SCHEMA_1"."TEST_TABLE_2"

用户可以在每次操作后运行 SHOW TABLES 查询,以验证操作是否已完成。

Snowflake - Load Data From Files

在数据库中,创建模式,它是表的逻辑分组。表包含列。表和列是低级别的,并且是数据库中最重要的对象。现在,表和列中最重要的功能是存储数据。

在本节中,我们将讨论如何在 Snowflake 中将数据存储到表和列中。

Snowflake 通过用户界面和 SQL 查询为用户提供了两种将数据存储到表和相应列中的方法。

Load Data into Tables and Columns using Snowflake’s UI

在本章节中,我们将讨论应该遵循的步骤,以使用 CSV、JSON、XML、Avro、ORC、Parquet 等文件将数据加载到表及其相应列中。

此方法仅限于加载少于 50 MB 的少量数据。

以任何格式创建示例文件。在创建文件时,请确保文件中的列数与表中的列数相匹配,否则在加载数据时操作将失败。

在 TEST_DB.TEST_SCHEMA.TEST_TABLE 中,共有三列:ID、NAME 和 ADDRESS。

以下示例数据已在“data.csv”中创建。

ID

NAME

ADDRESS

1

aa

abcd

2

ab

abcd

3

aa

abcd

4

ab

abcd

5

aa

abcd

6

ab

abcd

7

aa

abcd

8

ab

abcd

9

aa

abcd

现在,单击位于顶部功能区的图标。单击要上传数据的表名。它显示列数和定义。

以下屏幕截图显示“加载数据”功能。

load data funtionality

针对列重新验证示例文件。单击列名称顶部的按钮。它会弹出“加载数据”对话框。在第一个屏幕上,选择仓库名称并单击按钮。

load data pop up

在下一个屏幕上,单击,从本地计算机中选择一个文件。上传文件后,您可以看到该文件名,如以下屏幕截图所示。单击按钮。

select files

现在通过单击,创建文件格式,如以下屏幕截图所示。

create file format

它会弹出对话框。输入以下详细信息。

  1. * 文件格式的名称。

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

  3. * 文件格式的名称。

  4. Column separator - 如果 CSV 文件被分隔,请提供文件分隔符。

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

  6. Header lines to skip - 如果提供了表头,则为 1,否则为 0。

其他内容可以保持不变。在输入详细信息后单击 Finish 按钮。

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

create file format details

从下拉列表中选择文件格式,然后单击 Load ,如下面的屏幕截图所示 -

click load

加载结果后,您将获得摘要,如下所示。单击 OK 按钮。

click ok

要查看数据,请运行“SELECT * from TEST_TABLE”查询。在左面板中,用户还可以查看数据库、架构和表详细信息。

run the query

Load Data into Tables and Columns using SQL

要从本地文件加载数据,可以执行以下步骤 -

使用 SnowSQL(Snowflake 提供的插件)将文件上载到 Snowflake 的暂存区域。要执行此操作,请转到 help ,然后单击“下载”,如下所示 -

go to help and click download

单击 CLI 客户端 (snowsql),然后单击 Snowflake Repository ,如下面的屏幕截图所示 -

click cli client

用户可以转到 bootstrap → 1.2 → windows_x86_64 → 单击下载最新版本。

以下屏幕截图显示了上述步骤 -

snowflake repository

现在,安装已下载的插件。安装完成后,在您的系统中打开 CMD。运行以下命令以检查连接:

snowsql -a <account_name> -u <username>

它会要求提供密码。输入您的 snowflake 密码,然后按 ENTER。您将看到连接成功。现在使用命令行 -

<username>#<warehouse_name>@<db_name>.<schema_name>

现在使用以下命令将文件上传到 Snowflake 阶段:

PUT file://C:/Users/*******/Documents/data.csv @csvstage;

别忘了在末尾加上“分号”符号,否则它将永远运行。

文件上载后,用户可以在工作表中运行以下命令 -

COPY INTO "TEST_DB"."TEST_SCHEMA_1"."TEST_TABLE" FROM @/csvstage ON_ERROR = 'ABORT_STATEMENT' PURGE = TRUE

数据将加载到表中。

Snowflake - Sample Useful Queries

在本章中,我们将在 Snowflake 中提供一些有用的示例查询及其输出。

使用以下查询以在 Select 语句中获取有限数据:

"SELECT * from <table_name>" Limit 10

此查询将仅显示前 10 行。

使用以下查询以显示过去 10 天的使用情况。

SELECT * FROM TABLE (INFORMATION_SCHEMA.DATABASE_STORAGE_USAGE_HISTORY
   (DATEADD('days', -10, CURRENT_DATE()), CURRENT_DATE()))

使用以下查询以检查在 Snowflake 中创建的阶段和文件格式:

SHOW STAGES
SHOW FILE FORMATS

要检查变量,请按顺序运行以下查询:

SELECT * FROM snowflake_sample_data.tpch_sf1.region
JOIN snowflake_sample_data.tpch_sf1.nation
ON r_regionkey = n_regionkey;
select * from table(result_scan(last_query_id()));
SELECT * FROM snowflake_sample_data.tpch_sf1.region
JOIN snowflake_sample_data.tpch_sf1.nation
ON r_regionkey = n_regionkey;
SET q1 = LAST_QUERY_ID();
select $q1;
SELECT * FROM TABLE(result_scan($q1)) ;
SHOW VARIABLES;

使用以下查询以查找数据库的登录历史记录:

select * from table(test_db.information_schema.login_history());

结果提供时间戳、用户名、使用密码或 SSO 所执行登录的方式、登录期间的错误等。

使用以下命令查看所有列:

SHOW COLUMNS
SHOW COLUMNS in table <table_name>

使用以下命令显示 snowflake 提供的所有参数 −

SHOW PARAMETERS;

以下仅通过运行查询 "SHOW PARAMETERS;" 便可查看的几个详细信息

Sr.No

Keys & Description

1

ABORT_DETACHED_QUERY 如果为真,那么 Snowflake 会在检测到客户端消失时自动中止查询。

2

AUTOCOMMIT auto-commit 属性确定是否应将语句隐式包装在事务中。如果 auto-commit 设置为 true,则隐式地在事务中执行需要事务的语句。如果 auto-commit 为 false,则需要显式提交或回滚才能关闭事务。默认的 auto-commit 值为 true。

3

AUTOCOMMIT_API_SUPPORTED 是否为该客户端启用 auto-commit 功能。此参数仅供 Snowflake 使用。

4

BINARY_INPUT_FORMAT input format for binary

5

BINARY_OUTPUT_FORMAT display format for binary

6

CLIENT_ENABLE_CONSERVATIVE_MEMORY_USAGE 为 JDBC 启用保守内存使用

7

CLIENT_ENABLE_DEFAULT_OVERWRITE_IN_PUT 如果在 sql 命令中未指定 overwrite 选项,则将 put 命令的 overwrite 选项的默认值设置为 true。

8

CLIENT_ENABLE_LOG_INFO_STATEMENT_PARAMETERS 为 Prepared Statement 绑定参数启用信息级日志记录

9

CLIENT_MEMORY_LIMIT 将客户端使用的内存量限制为 MB

10

CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX 对于客户端元数据请求 (getTables()),如果设置为 true,则使用会话目录和模式

11

CLIENT_METADATA_USE_SESSION_DATABASE 对于客户端元数据请求 (getTables()),如果设置为 true (与 CLIENT_METADATA_REQUEST_USE_CONNECTION_CTX 结合使用),则使用会话目录但多个模式

12

CLIENT_PREFETCH_THREADS 控制线程的客户参数,0=自动

13

CLIENT_RESULT_CHUNK_SIZE 在客户端设置最大结果块大小(单位为 MB)

14

CLIENT_RESULT_COLUMN_CASE_INSENSITIVE 在客户端中,列名搜索不区分大小写

15

CLIENT_SESSION_CLONE 如果为真,那么客户端将从先前用于该帐户和用户的令牌克隆新会话。

16

CLIENT_SESSION_KEEP_ALIVE 如果为真,那么客户端会话不会自动过期

17

CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY CLIENT_SESSION_KEEP_ALIVE 的心跳频率(单位:秒)。

18

CLIENT_TIMESTAMP_TYPE_MAPPING 如果变量使用 bind API 绑定到 TIMESTAMP 数据类型,则确定它应该映射到的 TIMESTAMP* 类型:TIMESTAMP_LTZ(默认)、TIMESTAMP_NTZ

19

C_API_QUERY_RESULT_FORMAT 用于序列化查询结果以发回 C API 的格式

20

DATE_INPUT_FORMAT input format for date

21

DATE_OUTPUT_FORMAT display format for date

22

ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION Enable physical-type optimizations used in Snowflake to affect the Parquet output

23

ERROR_ON_NONDETERMINISTIC_MERGE 当尝试合并更新连接多行的行时引发错误

24

ERROR_ON_NONDETERMINISTIC_UPDATE 当尝试更新连接多行的行时引发错误

25

GEOGRAPHY_OUTPUT_FORMAT 地理格式:GeoJSON、WKT 或 WKB(不区分大小写)

26

GO_QUERY_RESULT_FORMAT 用于序列化查询结果以发回至 golang 驱动程序的格式

27

JDBC_FORMAT_DATE_WITH_TIMEZONE 当为 true 时,ResultSet#getDate(int columnIndex, Calendar cal) 和 getDate(String columnName, Calendar cal) 将使用日历的输出显示日期。

28

JDBC_QUERY_RESULT_FORMAT 用于序列化查询结果以发回至 jdbc 的格式

29

JDBC_TREAT_DECIMAL_AS_INT 当标度为 0 时,是否将 Decimal 视为 JDBC 中的 Int

30

JDBC_TREAT_TIMESTAMP_NTZ_AS_UTC 当为 true 时,Timestamp_NTZ 值始终存储在 UTC 时区

31

JDBC_USE_SESSION_TIMEZONE 当为 true 时,JDBC 驱动程序不会显示 JVM 和会话之间的时区偏移量。

32

JSON_INDENT JSON 输出中的缩进宽度(紧凑为 0)

33

JS_TREAT_INTEGER_AS_BIGINT 如果为 true,则 nodejs 客户端将把所有整数列转换为 bigint 类型

34

LANGUAGE UI、GS、查询协调和 XP 使用的选择语言。输入语言应采用 BCP-47 格式。又名连字符格式。有关详细信息,请参见 LocaleUtil.java。

35

LOCK_TIMEOUT 尝试锁定资源时等待秒数,然后超时并中止语句。值为 0 会关闭锁定等待,即该语句必须立即获取锁或中止。如果需要由该语句锁定多个资源,则超时将分别应用于每个锁定尝试。

36

MULTI_STATEMENT_COUNT 提交查询文本中包含的语句数。此参数由用户提交,以避免 SQL 注入。值 1 表示一个语句,值 > 1 表示可以执行 N 个语句,如果相等则引发异常。值 0 表示可以执行任意数量的语句

37

ODBC_QUERY_RESULT_FORMAT 用于序列化查询结果以发回至 ODBC 的格式

38

ODBC_SCHEMA_CACHING 当为 true 时,在 ODBC 中启用模式缓存。这可以加快 SQL 列 API 调用的速度。

39

ODBC_USE_CUSTOM_SQL_DATA_TYPES ODBC 返回结果集元数据中的 Snowflake 特定的 SQL 数据类型

40

PYTHON_CONNECTOR_QUERY_RESULT_FORMAT 用于序列化查询结果以发回至 Python 连接器的格式

41

QA_TEST_NAME 如果在 QA 模式下运行,则测试名称。用作共享池的分离器

42

QUERY_RESULT_FORMAT 用于将查询结果序列化为发送给客户端的格式

43

QUERY_TAG 用于标记会话执行的语句的字符串(最多 2000 个字符)

44

QUOTED_IDENTIFIERS_IGNORE_CASE 如果为真,则忽略带引号的标识符的大小写

45

ROWS_PER_RESULTSET 结果集中行数的最大值

46

SEARCH_PATH 不合格对象引用的搜索路径。

47

SHOW_EXTERNAL_TABLE_KIND_AS_TABLE 通过 SHOW TABLES 和 SHOW OBJECTS 更改外部表 KIND 信息的显示方式。如果为真,则外部表的 KIND 列显示为 TABLE,否则显示为 EXTERNAL_TABLE。

48

SIMULATED_DATA_SHARING_CONSUMER 数据共享视图将返回行,就像在指定的使用者帐户中执行一样。

49

SNOWPARK_LAZY_ANALYSIS 为 Snowpark 启用延迟结果架构分析

50

STATEMENT_QUEUED_TIMEOUT_IN_SECONDS 排队语句的超时时间以秒为单位:如果语句在仓库中排队时间长于此时间,则会自动取消;如果设置为零,则会被禁用。

51

STATEMENT_TIMEOUT_IN_SECONDS 语句的超时时间以秒为单位:如果语句运行时间过长,则会自动取消;如果设置为零,则会强制执行最大值 (604800)。

52

STRICT_JSON_OUTPUT JSON 输出严格遵守规范。

53

TIMESTAMP_DAY_IS_ALWAYS_24H 如果设置,则对日期进行算术运算始终使用每天 24 小时,可能不会保留时间(由于夏令时更改)

54

TIMESTAMP_INPUT_FORMAT input format for timestamp

55

TIMESTAMP_LTZ_OUTPUT_FORMAT TIMESTAMP_LTZ 值的显示格式。如果为空,则使用 TIMESTAMP_OUTPUT_FORMAT。

56

TIMESTAMP_NTZ_OUTPUT_FORMAT TIMESTAMP_NTZ 值的显示格式。如果为空,则使用 TIMESTAMP_OUTPUT_FORMAT。

57

TIMESTAMP_OUTPUT_FORMAT 所有时间戳类型默认的显示格式。

58

TIMESTAMP_TYPE_MAPPING 如果使用 TIMESTAMP 类型,则指定它应映射到的具体 TIMESTAMP* 类型:TIMESTAMP_LTZ、TIMESTAMP_NTZ(默认)或 TIMESTAMP_TZ

59

TIMESTAMP_TZ_OUTPUT_FORMAT TIMESTAMP_TZ 值的显示格式。如果为空,则使用 TIMESTAMP_OUTPUT_FORMAT。

60

TIMEZONE time zone

61

TIME_INPUT_FORMAT input format for time

62

TIME_OUTPUT_FORMAT display format for time

63

TRANSACTION_ABORT_ON_ERROR 如果此参数为真并且在非自动提交事务中发出的语句返回错误,则非自动提交事务将中止。在该事务中发出的所有语句都将失败,直到执行提交或回滚语句来关闭该事务。

64

TRANSACTION_DEFAULT_ISOLATION_LEVEL 当启动交易时默认隔离级别,在未指定隔离级别时

65

TWO_DIGIT_CENTURY_START 对于两位数日期,定义世纪开始年份,例如,当设置为 1980 时:- 解析字符串 '79' 将产生 2079 - 解析字符串 '80' 将产生 1980

66

UI_QUERY_RESULT_FORMAT 用于序列化查询结果以发送回 Python 连接器的格式

67

UNSUPPORTED_DDL_ACTION 遇到不受支持的 DDL 语句时采取的操作

68

USE_CACHED_RESULT 如果启用,只要原始结果尚未过期,查询结果便可在同一查询的连续调用之间重用

69

WEEK_OF_YEAR_POLICY 定义将星期分配给年的策略:0:该星期必须在给定年份中有 4 天;1:1 月 1 日所在的星期始终属于给定年份。

70

WEEK_START 定义星期的第一天:0:传统 Snowflake 行为;1:星期一 .. 7:星期日。

Snowflake - Monitor Usage and Storage

Snowflake 按 storageusagecloud services 向客户收费。监控存储的数据和使用情况变得非常重要。

个别用户可以查看长时间查询的历史记录,而帐户管理员可以查看每个用户、每个用户或按日期使用的服务消耗和利用情况等账单。

Checking Storage

用户可以查看各个表以及数据大小中包含了多少行。如果用户有表的访问权限,他们只需要选择一个表就能查看这些详细信息。在左下方的面板中,用户可以看到 Table Name 及行数和数据存储大小。之后,它会显示表的列定义。

以下屏幕截图显示了如何查看存储详细信息−

checking storage

History

在此部分中,用户可以查看他们在 Snowflake 中的活动,比如他们正在使用哪些查询、查询当前的状态、查询花费了多少时间等等。

要查看历史记录,请单击顶部功能区中显示的 History 选项卡。它将显示用户的历史记录。如果用户已访问或以帐户管理员身份登录,他们可以根据各个用户筛选历史记录。它显示以下信息−

  1. 查询正在运行/失败/成功的状态

  2. Query ID −查询 ID 对于所有执行的查询都是唯一的

  3. SQL Text −它显示用户运行了哪个查询。

  4. User −执行操作的用户。

  5. Warehouse −用于运行查询的仓库。

  6. Cluster −如果它是多群集,则是使用群集的数量

  7. Size − Warehouse size

  8. Session ID −每个工作表都有唯一的会话 ID。

  9. Start Time −查询开始执行时

  10. End Time −查询完成执行的时间

  11. Total Duration −查询运行的总持续时间。

  12. Bytes Scanned −它显示为获得结果而扫描了多少数据

  13. Rows −扫描的行数

以下屏幕截图显示了历史记录视图 −

history

在筛选器中,用户可以通过单击 "+" 符号放置一个或多个筛选器,并且可以通过使用 "–" 符号来移除筛选器。以下屏幕截图显示了可用筛选器的列表 −

filter

Monitoring

要执行帐户级别的监控,用户必须以 ACCOUNTADMIN 角色登录。

出于监视的目的,以 Account Admin 的身份登录。单击顶部功能区中显示的 Account link 。它将默认显示帐户使用情况。用户可以看到创建的数据仓库的数量、已使用的信用额度、平均使用的存储(这意味着我们在运行查询期间扫描了多少数据与整体存储相比)以及传输了多少数据。

它还会显示每个数据仓库使用的信用额度,并显示一个饼状图。在右侧,用户可以看到表格形式的 DateCredit Used 。用户甚至可以通过单击“下载数据”来下载数据。可以通过更改右上角的月份来查看当月的使用情况。

以下屏幕截图显示了 Usage 选项卡信息:

usage

单击下一选项卡 Billing 。在此处,用户可以看到之前添加的任何付款方式。用户也可以通过单击“添加信用卡”链接并提供常规详细信息(如信用卡号、CVV、到期日期、姓名等)来添加一个新的付款方式。

以下屏幕截图显示了 Billing 部分:

billing

单击下一选项卡 USERS 。它显示帐户中所有用户的名称。

  1. 通过选择 Users ,帐户管理员可以使用 Reset PasswordDisable UserDrop 按钮分别重置用户密码、禁用用户或删除用户。通过单击用户列表顶部的“创建”按钮,帐户管理员可以创建一个新用户。

以下屏幕截图显示用户选项卡功能:

users tab

现在单击下一选项卡 ROLES 。可以通过单击角色列表顶部的 Create 按钮在此处创建新角色。通过选择一个角色,它还可以通过单击 Edit 按钮和 Drop 按钮启用或删除角色。

以下屏幕截图显示了 Roles 选项卡的功能:

roles

除此之外,还有策略、会话、资源监视器和阅读器帐户选项卡。帐户管理员可以创建/编辑/删除策略、创建/编辑/删除会话、创建/编辑/删除资源监视器,以及类似地对阅读器帐户进行操作。

Snowflake - Cache

Snowflake 有一个独特的缓存功能。它基于此缓存提供快速的结果,扫描更少的数据。它甚至可以帮助客户降低账单。

Snowflake 中基本上有三种类型的缓存。

  1. Metadata Caching

  2. Query Result Caching

  3. Data Caching

默认情况下,为所有雪花会话启用缓存。但用户可以根据自己的需要将其禁用。但是,用户只能禁用“查询结果”缓存,但不能禁用 Metadata CachingData Caching

在本章中,我们将讨论不同类型的缓存以及 Snowflake 如何确定缓存。

Metadata Caching

元数据存储在云服务层中,因此缓存也在同一层中。这种元数据缓存始终对每个人启用。

它基本上包含以下详细信息:

  1. 表中的行数。

  2. 列的最小/最大值

  3. Number of DISTINCT values in a column>

  4. Number of NULL values in a column

  5. Details of different table versions

  6. References of physical files

This information is basically used by SQL optimizer to execute faster and quicker. There could be a few queries those can be answered completely by metadata itself. For such kind of queries no virtual warehouse is required but Cloud service charges may be applicable.

Such queries are like −

  1. All SHOW commands

  2. MIN, MAX but limited to only Integer/Number/Date data types of columns.

  3. COUNT

Let’s run a query to see how Metadata Caching works and user can validate.

Login into Snowflake and go to Worksheets. Suspend the warehouse by running following query −

ALTER WAREHOUSE COMPUTE_WH SUSPEND;

Now, run following queries sequentially −

USE SCHEMA SNOWFLAKE_SAMPLE_DATA.TPCH_SF100;
SELECT MIN(L_orderkey), MAX(l_orderkey), COUNT(*) FROM lineitem;

User will be able to see the result in less than 100ms as shown in the following screenshot. Click the Query Id. It will display the link of query Id. Then click the link as shown below −

query id

By default, it opens the details page where SQL is mentioned. Click the Profile tab. It displays 100% Metadata-Based Result. It means that without any compute warehouse it ran the result and fetched details based on Metadata caching.

The following screenshot displays above steps −

profile

Query Result Caching

Query Results are stored and managed by Cloud Service Layer. It is very useful if the same query run multiple times, but condition is underlying data or base tables are not changed between time duration when query has to run multiple times. This caching has unique feature that is available for other users within the same account.

For example, If user1 runs a query first time, the result gets stored in caching. When user2 also tries to run same query (by assuming that base tables and data are not changed), it fetches the result from Query Result caching.

Result cached are available for 24hours. But, counter of 24hours get reset each time when the same query re-run. For example, if a query ran at 10AM, its caching will be available until 10AM next day. If the same query re-run at 2PM on same day, now the caching will be available until 2PM next day.

There are some criteria to fulfil to use query result cache −

  1. Exact same SQL query should be re-run.

  2. There should not be any random function in the SQL.

  3. User must have right permissions to use it.

  4. 在运行查询时应用启用查询结果。默认情况下会启用,直至另行设置。

以下是一些使用查询结果缓存的情况 −

  1. 需要大量计算的查询,如聚合函数和半结构化数据分析。

  2. 非常频繁运行的查询。

  3. Queries those are complex.

  4. 重构另一个查询的输出,如“使用表函数 RESULT_SCAN(<query_id>)”。

让我们运行一个查询,看看查询结果缓存是如何工作的,用户可以验证。

登录 Snowflake 并转到工作表。通过运行以下查询恢复仓库 −

ALTER WAREHOUSE COMPUTE_WH Resume;

Now, run following queries sequentially −

USE SCHEMA SNOWFLAKE_SAMPLE_DATA.TPCH_SF100;
SELECT l_returnflag, l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice * (l_discount)) AS sum_disc_price,
SUM(l_extendedprice * (l_discount) * (1+l_tax)) AS sum_charge,
AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) AS count_order
FROM lineitem
WHERE l_shipdate <= dateadd(day, 90, to_date('1998-12-01'))
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

单击查询 ID。它将显示查询 ID 的链接。然后单击链接,如上一个示例(Metadata-Caching)中所示。检查查询概要文件,它将如下所示 −

query profile

它显示已扫描 80.5% 的数据,因此未涉及缓存。通过运行以下查询暂停仓库 −

ALTER WAREHOUSE COMPUTE_WH Suspend;

再次运行与之前相同的查询 −

USE SCHEMA SNOWFLAKE_SAMPLE_DATA.TPCH_SF100;
SELECT l_returnflag, l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice * (l_discount)) AS sum_disc_price,
SUM(l_extendedprice * (l_discount) * (1+l_tax)) AS sum_charge,
AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) AS count_order
FROM lineitem
WHERE l_shipdate <= dateadd(day, 90, to_date('1998-12-01'))
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

单击 Query ID。它将显示查询 ID 的链接。然后单击链接,如上一个示例(Metadata-Caching)中所示。检查查询概要文件,它将如下所示 −

query result

它显示查询结果重复使用。这意味着它在没有仓库查询的情况下成功运行,整个结果集已从查询结果缓存中获取。

Data Cache

数据缓存发生在存储层。它缓存存储文件标头和查询列数据。它存储来自所有查询的数据,但并不完全像查询结果一样。它将这些数据存储到虚拟仓库的 SS 中。当运行类似查询时,Snowflake 尽可能使用数据缓存。用户无法禁用数据缓存。数据缓存适用于在同一虚拟仓库上运行的所有查询。这意味着与元数据和查询结果缓存不同,数据缓存无法在没有虚拟仓库的情况下运行。

当运行查询时,其标头和列数据存储在虚拟仓库的 SSD 上。虚拟仓库首先读取本地可用数据(虚拟仓库的 SSD),然后从远程云存储(Snowflake 的实际存储系统)读取剩余数据。当缓存存储空间填满时,数据会根据最近最少使用(LRU)原则进行丢弃。

让我们运行一个查询,看看查询结果缓存是如何工作的,用户可以验证。

登录 Snowflake 并转到 Worksheets 。通过运行以下查询恢复仓库 −

ALTER WAREHOUSE COMPUTE_WH Resume;

使用以下 SQL 禁用 Query_Result 缓存 −

ALTER SESSION SET USE_CACHED_RESULT = FALSE;

运行以下查询 −

SELECT l_returnflag, l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice * (l_discount)) AS sum_disc_price, SUM(l_extendedprice *
(l_discount) * (1+l_tax))
AS sum_charge, AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) as count_order
FROM lineitem
WHERE l_shipdate <= dateadd(day, 90, to_date('1998-12-01'))
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

单击 Query ID。它将显示查询 ID 的链接。然后单击链接,如上一个示例(Metadata-Caching)中所示。检查查询概要文件,它将如下所示 −

data cache

根据查询概要文件,已扫描 88.6% 的数据。如果您注意到右侧,则本地磁盘 IO = 2%,而远程磁盘 IO = 80%。这意味着几乎没有使用或根本没有使用数据缓存。现在,运行以下查询。WHERE 子句略有不同 −

SELECT l_returnflag, l_linestatus,
SUM(l_quantity) AS sum_qty,
SUM(l_extendedprice) AS sum_base_price,
SUM(l_extendedprice * (l_discount)) AS sum_disc_price, SUM(l_extendedprice *
(l_discount) * (1+l_tax))
AS sum_charge,
AVG(l_quantity) AS avg_qty,
AVG(l_extendedprice) AS avg_price,
AVG(l_discount) AS avg_disc,
COUNT(*) as count_order
FROM lineitem
WHERE l_shipdate <= dateadd(day, 90, to_date('1998-12-01'))
and l_extendedprice <= 20000
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;

单击 Query ID。它将显示查询 ID 的链接。然后单击链接,如上一个示例(Metadata-Caching)中所示。检查查询概要文件,它将如下所示 −

click query id

根据查询概要文件,已扫描 58.9% 的数据,这比第一次低得多。如果你注意到右侧,则本地磁盘 IO 已增至 4%,而远程磁盘 IO = 0%。这意味着几乎没有使用或根本没有从远程使用数据。

Unload Data from Snowflake to Local

在数据库中,创建了表面的逻辑分组架构。表面包含列。表面和列是低级别且是最重要的数据库对象。现在,表面和列最重要的功能是存储数据。

在本章中,我们将讨论如何将 Snowflake 中表面和列的数据卸载到本地文件中。Snowflake 为用户提供了两种将数据卸载到本地文件的方法:使用用户界面和使用 SQL 查询。

Unload Data into local file using Snowflake’s UI

在本部分中,我们将讨论将数据作为 csv 或 tsv 卸载到本地文件所需遵循的步骤。UI 的一个限制是用户无法直接将整个数据保存到本地目录。

要从 UI 保存数据,用户需要先运行查询,然后将结果保存为 ".csv" 或 ".tsv" 文件。但是,使用 SQL 和 SNOWSQL 数据可以直接保存到本地驱动器,而无需运行查询。在下一部分中,我们将讨论后续过程。

来讨论用户界面方法。

登录 Snowflake。根据需要保存到本地目录的数据运行查询。查询成功运行后,单击下载图标,如下面的屏幕截图所示:

click download icon

它会填充一个对话框,如下面的屏幕截图所示,并要求将“ File Format ”选为 CSV 或 TSV。选择后,单击“ Export ”。它会下载一个结果文件。

以下屏幕截图显示了卸载数据功能:

unloading data

Unload Data into Tables and Columns using SQL

要将数据卸载到本地文件,首先选择一个需要卸载其数据的数据列。接下来,运行以下查询:

USE SCHEMA "TEST_DB"."TEST_SCHEMA_1";
COPY INTO @%TEST_TABLE
FROM (SELECT * FROM TEST_TABLE)
FILE_FORMAT=(FORMAT_NAME=TEST_DB.TEST_SCHEMA_1.CSV);

请注意“@%”用于 Snowflake 创建的默认阶段。如果您需要使用您自己的内部阶段,只需传递为“@<stage_name>”

成功执行查询表示数据已复制到内部阶段。Snowflake 默认情况下为所有表创建一个表阶段,如“@%<table_name>”。

现在运行以下查询以确认文件是否存储在内部阶段。

LIST @%TEST_TABLE;

它会显示存储在内部阶段的所有文件,即使是在加载数据时不成功的文件。

现在,要将文件引入本地目录,我们需要使用“ snowsql ”。确保将其下载到系统中。如果未下载,请按照以下屏幕截图中的步骤进行下载。

单击“ CLI Client (snowsql) ”并单击 Snowflake 存储库,如下面的屏幕截图所示:

snowsql

用户可以切换到 bootstrap → 1.2 → windows_x86_64 → 点击下载最新版本。以下屏幕截图显示了上述步骤:

download latest version

现在,安装已下载的插件。安装完成后,在您的系统中打开 CMD。运行以下命令以检查连接:

"snowsql -a <account_name> -u <username>"

它会要求密码。输入您的 Snowflake 密码。输入密码并按 ENTER。用户将看到成功的连接。现在,命令行显示为:

"<username>#<warehouse_name>@<db_name>.<schema_name>"

现在使用以下命令将文件上传到 Snowflake 阶段:

"GET @%TEST_TABLE file://C:/Users/*******/Documents/"

注释 @% 用于 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>)”

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