Snowflake - 快速指南


Snowflake - 简介

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

Snowflake 是 OLAP(在线分析处理)技术的高级解决方案。OLAP也称为使用历史数据的在线数据检索和数据分析系统。它处理事务数量较少的复杂聚合查询。例如:获取公司上个月的订单数量、销售额、公司上季度列出的新用户数量等。Snowflake 不用作 OLTP(在线事务处理)数据库。OLTP 数据库通常包含具有大量小数据事务的实时数据。例如:插入客户的订单详细信息、注册新客户、跟踪订单交付状态等。

为什么使用Snowflake?

Snowflake 提供数据平台即云服务。

  • 客户端无需选择、安装、配置或管理任何虚拟或物理硬件。

  • 无需安装、配置或管理软件即可访问它。

  • 所有正在进行的维护、管理、升级和修补均归 Snowflake 本身所有。

用于分析解决方案的传统数据库架构复杂、成本高昂且受到限制,而 Snowflake 富含数据工程、数据湖概念、数据仓库、数据科学、数据应用和数据交换或共享的概念。易于访问和使用,不受数据大小和存储容量的限制。用户必须仅管理自己的数据;所有数据平台相关的管理工作均由Snowflake自己完成。

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

  • Java、Python、PHP、Spark、Ruby 等多种语言的简单、可靠的数据管道。

  • 安全的访问、非常好的数据湖性能和安全性。

  • 对工具、数据存储和数据大小的零管理。

  • 使用任何框架进行建模的简单数据准备。

  • 构建数据密集型应用程序没有操作负担。

  • 在公司的生态系统中共享和协作实时数据。

Snowflake - 数据架构

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

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

Snowflake 的数据架构具有三个主要层-

  • 数据库存储
  • 查询处理
  • 云服务

以下是Snowflake 的数据架构图 -

Snowflake数据架构

数据库存储

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

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

查询处理

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

  • SQL SELECT 执行

  • 使用 Update、Insert、Update 更新数据

  • 使用 COPY INTO <tables> 将数据加载到表中

  • 使用 COPY INTO <locations> 从表中卸载数据

但是,服务器的数量取决于虚拟仓库的大小。例如,XSmall 仓库每个集群有 1 台服务器,而小型仓库每个集群有 2 台服务器,并且在增加大型、XLarge 等大小时会增加一倍。

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

云服务

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

以下服务在这一层管理 -

  • 它是对所有存储的集中管理。

  • 它管理计算环境以与存储一起使用。

  • 它负责Snowflake在云端的升级、更新、修补和配置。

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

  • 它自动收集统计信息,例如使用的信用、存储容量利用率

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

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

  • 当数据加载到系统中时,它会存储元数据。

还有很多...

Snowflake - 功能架构

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

在功能级别,要访问 Snowflake 的数据,需要以下组件 -

  • 登录后选择合适的角色

  • 虚拟仓库在 Snowflake 中被称为仓库,用于执行任何活动

  • 数据库架构

  • 数据库

  • 表和列

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

  • 数据转换

  • 商业应用支持

  • 业务分析/报告/BI

  • 数据科学

  • 与其他数据系统的数据共享

  • 数据克隆

下图显示了 Snowflake 的功能架构 -

每个块中的“设置”符号可以称为仓库,并且可以称为XS、XXL、XL、L、S,因为仓库的大小需要执行不同的操作。根据需求和用途,可以增加或减少仓库的面积;甚至可以从单集群转换为多集群。

功能架构

Snowflake - 如何访问

Snowflake 是一个获得许可的数据平台。它使用信用的概念向客户收费。不过,它提供 30 天免费试用以及 400 美元的学习积分。

使用以下步骤即可免费使用 Snowflake 30 天 -

Snowflake主页
  • 它导航到注册页面,用户需要在其中提供名字、姓氏、电子邮件、公司和国家/地区等详细信息。填写表格后,单击“继续”按钮。

Snowflake注册
  • 在下一个屏幕上,它要求选择Snowflake版本。根据您要执行的功能选择版本。对于本教程,标准版本就足够了,但对于使用 AWS S3 加载数据,我们需要业务关键版本。

  • 选择关键业务,然后单击AWS。选择您的 AWS 所在的区域。

  • 选中“条款和条件”框并单击“开始”按钮。

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

Snowflake-开始
  • 您将收到一条消息,表明帐户创建正在进行中,并且一封电子邮件将发送到您的地址,如下图所示。

Snowflake-注册
  • 检查您的电子邮件收件箱。一旦您收到来自 Snowflake 的电子邮件(通常在 2-3 分钟内),请单击“单击激活”按钮。

  • 它将导航到 Snowflake 的页面,用户需要在其中设置用户名和密码。该凭据将用于登录 Snowflake。

  • 您的电子邮件中将提供一个 URL,例如:“https://ABC12345.us-east-1.snowflakecomputing.com/console/login”。它是用于访问云端 Snowflake 的用户特定 URL。每当您想在 Snowflake 中工作时,请使用单独的 URL 并登录。

Snowflake - 版本

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

  • 标准
  • 企业
  • 业务关键型
  • 虚拟专用Snowflake (VPS)

标准版

它是 Snowflake 的基本版本。此版本提供以下功能 -

  • 支持完整的SQL数据仓库
  • 安全数据共享
  • 对 24×365 的卓越支持
  • 1天的时间旅行
  • 数据加密
  • 专用虚拟仓库
  • 联合身份验证
  • 数据库复制
  • 外部函数支持
  • 雪景
  • 支持用户自己创建数据交换
  • 数据市场访问

企业版

它是标准+版本,即标准版的所有功能加上以下附加功能 -

  • 多集群仓库
  • 长达90天的时间旅行
  • 加密密钥每年更改一次
  • 物化视图
  • 搜索优化服务
  • 动态数据脱敏
  • 外部数据标记化

商业关键版

它是企业+版,即企业版和标准版的所有功能加上以下附加功能 -

  • 健康保险法案 (HIPPA) 支持
  • PCI 合规性
  • 数据加密无处不在
  • AWS 私有链接支持
  • Azure 专用链接支持
  • 数据库故障转移和回退

虚拟专用Snowflake (VPS) 版

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

  • 加密密钥位于内存中的客户专用虚拟服务器。

  • 客户专用元数据存储。

Snowflake - 定价模型

Snowflake 使用三个不同的阶段为最终用户提供服务 -

  • 贮存
  • 虚拟仓库(计算)
  • 云服务

Snowflake 没有任何许可费用。但是,定价是基于这三层加上无服务器功能的实际使用情况。Snowflake 收取固定金额以及基于 Snowflake 积分使用情况的任何额外费用。

什么是Snowflake信用?

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

仓储成本

Snowflake 按月收取数据存储费用。存储成本以 Snowflake 中每月存储的平均数据量来衡量。该数据大小是Snowflake进行压缩后计算出来的。这一成本非常低,一个月大约 23 美元/1TB 数据。

虚拟仓库(计算)

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

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

仓库规模 服务器 学分/小时 学分/秒
X 小号 1 1 0.0003
小的 2 2 0.0006
中等的 4 4 0.0011
大的 8 8 0.0022
XL 号 16 16 0.0044
2X 大号 32 32 0.0089
3 倍大 64 64 0.0178
4X 大号 128 128 0.0356

云服务

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

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

无服务器特性

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

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

Snowflake - 对象

Snowflake 在逻辑上将数据组织为三个阶段:帐户、数据库和架构。

数据库和模式在Snowflake帐户内逻辑组织数据。一个帐户可以有多个数据库和模式,但一个数据库必须仅与一个模式绑定,反之亦然。

Snowflake对象

这是Snowflake对象的列表 -

  • 帐户
  • 用户
  • 角色
  • 虚拟仓库
  • 资源监控器
  • 一体化
  • 数据库
  • 模式
  • 桌子
  • 看法
  • 存储过程
  • 用户定义函数 (UDF)
  • 阶段
  • 文件格式
  • 管道
  • 顺序

Schema 之后的对象与 Schema 绑定,而 Schema 与数据库绑定。其他实体(例如用户和角色)用于身份验证和访问管理。

与Snowflake对象相关的要点

以下是您应该注意的有关Snowflake对象的一组重要要点 -

  • 所有Snowflake对象都属于逻辑容器,其中顶级容器是帐户,即所有内容都在Snowflake的帐户下。

  • Snowflake 单独固定所有物体。

  • 用户可以根据授予角色的权限对对象执行操作和任务。

    权限示例 -

    • 创建虚拟仓库
    • 列出架构中的表
    • 将数据插入表中
    • 从表中选择数据
    • 不删除/截断表

Snowflake - 表和视图类型

表格类型

Snowflake 根据其用途和性质将表分为不同类型。有四种类型的表 -

永久表

  • 永久表是在数据库中创建的。

  • 这些表将一直存在,直到从数据库中删除删除

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

  • 这些是默认表类型。

  • 这些表中的时间旅行最长可达 90 天,即某人最多可以获取 90 天前的数据。

  • 它是故障安全的,如果因故障而丢失数据可以恢复。

临时表

  • 顾名思义,临时表存在的时间较短。

  • 这些表在会话期间持续存在。

  • 如果用户想要一个临时表用于后续查询和分析,那么一旦会话完成,它就会自动删除临时表。

  • 主要用于ETL/ELT等临时数据

  • 临时表中可以进行时间旅行,但仅限 0 到 1 天。

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

临时表

  • 这些表将一直存在,直到用户删除或删除它们为止。

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

  • 它用于需要“数据持久性”但不需要较长时间“数据保留”的情况。例如,网站的来宾访问者的详细信息、访问网站并在网站上注册的用户的详细信息,因此在注册后,可能不需要将详细信息存储在两个不同的表中。

  • 在瞬态表中可以进行时间旅行,但仅限 0 到 1 天。

  • 它也不是安全的。

外部表

  • 这些表将一直存在,直至被删除。

  • 这里使用了“removed”这个词,因为外部表就像Snowflake之外,不能被删除或删除。应该将其删除。

  • 它可以被可视化为外部数据湖上的Snowflake,即数据湖的主要来源指向Snowflake以根据用户的需要利用数据。

  • 无法直接访问数据。可以通过外部阶段在 Snowflake 中访问它。

  • 外部表仅供阅读。

  • 对于外部表来说,时间旅行是不可能的。

  • 它在 Snowflake 环境中不是自动防故障的。

查看类型

Snowflake 中有三种主要的分类视图 -

标准视图

  • 它是默认视图类型。

  • 选择表的查询来查看数据。

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

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

安全视图

  • 安全视图意味着它只能由授权用户访问。

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

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

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

物化视图

  • 物化视图更像是一张表。

  • 这些视图使用过滤条件存储来自主源的结果。例如,一家公司拥有自公司成立以来所有在职、非在职或已故员工的记录。现在,如果用户只需要在职员工的详细信息,则可以查询主表并将其存储为物化视图以进行进一步分析。

  • 物化视图是自动刷新的,即每当主表获得额外/新的员工记录时,它也会刷新物化视图。

  • Snowflake 还支持安全的物化视图。

  • 物化视图是自动维护的,它会消耗大量的计算资源。

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

  • 每个物化视图的计算费用是根据数据更改量计算的。

Snowflake - 登录

登录 Snowflake 非常容易,因为它是一个基于云的平台。登录 Snowflake 帐户需要执行以下步骤 -

  • 转到您注册时从 Snowflake 收到的电子邮件,并复制唯一的 URL(对于每个用户都是唯一的)。

  • 转至浏览器并导航至 URL。它将导航到登录页面。

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

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

Snowflake登录屏幕
  • 成功登录后,用户将导航至 Snowflake 数据平台。用户可以在右上角看到他们的名字,如下图所示。除了姓名之外,他们还可以看到分配给他们的角色。

  • 左上角有一些图标,如数据库、共享、数据市场、仓库、工作表历史记录。用户可以单击此处查看这些项目的详细信息。

  • 在左侧面板中,Snowflake 提供了一些可供实践的数据库和模式,例如“DEMO_DB、SNOWFLAKE_SAMPLE_DATA、UTILDB”。

  • 与数据库详细信息相邻的空白屏幕称为工作表,用户可以在其中编写查询并使用“运行”按钮执行它们。

  • 底部有一个结果面板。查询的结果将显示在此处。

以下屏幕截图显示了登录后屏幕的不同部分 -

Snowflake屏幕的不同部分

Snowflake - 仓库

因为仓库对于计算很重要。我们来讨论一下如何创建仓库、修改仓库以及查看仓库的详细信息。

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

使用 Snowflake 的 UI 处理仓库

让我们从创建一个仓库开始 -

创建仓库

使用唯一的 URL 登录 Snowflake。单击顶部功能区中的仓库,如以下屏幕截图所示 -

点击仓库

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

创建仓库

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

  • 名称- test_WH
  • 尺寸- 小
  • 自动暂停设置为5 分钟

然后单击完成按钮。

完成仓库创建

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

仓库已创建

编辑/修改/更改仓库

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

单击顶部功能区中的“仓库”按钮。它显示仓库页面详细信息。从仓库列表中选择需要变更的仓库。单击配置,如下面的屏幕截图所示 -

单击“配置”

弹出“配置仓库”对话框。用户可以修改除Name之外的所有详细信息。将自动暂停时间5分钟更新为10分钟。单击“完成”按钮,如以下屏幕截图所示。

配置仓库

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

查看仓库

单击顶部功能区中的“仓库”按钮。它显示仓库的视图面板,其中包含所有已创建的仓库。

  • 使用“创建”按钮创建新仓库。

  • 使用“配置”按钮更改/修改现有仓库。

  • 如果所选仓库处于暂停模式,请使用“恢复”按钮激活该仓库。

以下屏幕截图演示了如何恢复处于暂停模式的仓库 -

简历仓库

单击“恢复”按钮后,会弹出一个对话框。单击“完成”按钮,如以下屏幕截图所示 -

单击“完成”

现在用户可以看到仓库启动,如下图所示 -

仓库已启动

同样,用户可以使用“暂停”按钮立即暂停仓库。如果您的任何仓库处于“已启动”模式,则此按钮将启用。选择要暂停的仓库,然后单击“暂停”按钮。弹出一个对话框,单击“是”暂停,否则单击“否”。

以下屏幕截图显示了暂停功能 -

暂停功能

用户也可以通过选择仓库并单击“删除”按钮来删除仓库,如下图所示 -

删除仓库

会弹出一个对话框进行确认。单击“是”进行删除,否则单击“否”。

使用 Snowflake 的 SQL 接口处理仓库

现在让我们看看如何使用 Snowflake 的 SQL 接口来处理仓库。

创建仓库

登录 Snowflake 并导航至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 = ' '

单击“运行”以执行查询。当仓库“TEST_WH”已成功创建时,结果将显示在“结果”面板中。

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

点击运行执行

编辑/修改/更改仓库

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

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 = ' '

用户可以转到“视图”面板并验证更新的详细信息,如下所示 -

查看面板

查看仓库

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

SHOW WAREHOUSES

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

ALTER WAREHOUSE TEST_WH SUSPEND

恢复仓库,请使用以下 SQL -

ALTER WAREHOUSE "TEST_WH" RESUME If SUSPENDED

删除仓库,请使用以下 SQL -

DROP WAREHOUSE "TEST_WH"

Snowflake - 数据库

数据库是表和列所在的模式的逻辑分组。在本章中,我们将讨论如何创建数据库,并查看详细信息。

Snowflake为用户提供了两种创建数据库的方法,第一种方法是使用用户界面,第二种方法是应用SQL查询。

使用 Snowflake 的 UI 处理数据库

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

创建数据库

使用唯一的 URL 登录 Snowflake 帐户。单击顶部功能区中的数据库,如以下屏幕截图所示 -

单击数据库

它将导航到下一个屏幕。单击数据库列表上方的“创建”按钮,如下所示。

单击创建按钮

它将带您进入“创建数据库”对话框。输入数据库名称注释,然后单击完成按钮。

单击创建数据库

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

数据库列表

查看仓库

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

使用“创建”按钮创建新仓库。用户也可以通过选择数据库并单击“克隆”来克隆数据库,如以下屏幕截图所示 -

克隆

它会弹出一个克隆数据库对话框,输入一些信息,如名称、来源、注释。输入这些详细信息后,单击“完成”按钮,如以下屏幕截图所示 -

克隆数据库

用户可以看到另一个数据库已创建,并且它将在视图面板中可见。用户还可以通过选择数据库并单击“删除”按钮来删除数据库,如下图所示 -

删除数据库

会弹出一个对话框进行确认。单击“是”进行删除,否则单击“否”

删除数据库弹出窗口

使用 Snowflake 的 SQL 接口处理数据库

在这里,我们将学习如何使用Snowflake的SQL接口创建和查看数据库。

创建数据库

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

编写以下查询来创建数据库“TEST_DB_2”

CREATE DATABASE "TEST_DB_2" 

现在单击“运行”按钮来执行查询。当 TEST_DB_2 数据库成功创建时,结果将显示在“结果”面板中。以下屏幕截图显示了使用 SQL 处理的输出 -

创建数据库TEST_DB_2

查看数据库

查看所有列出的仓库,用户可以使用以下 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 - 架构

模式是数据库对象(如表、视图等)的分组。每个模式都属于一个数据库。“Database.Schema”是 Snowflake 中的命名空间。在执行任何操作时,名称空间需要直接在查询中提供或在 Snowflake 的 UI 中设置。

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

使用 Snowflake 的 UI 处理架构

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

创建架构

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

创建架构

单击数据库名称后,它将导航到数据库属性页面,您可以在其中看到在数据库内创建的表/视图/模式等。现在单击“模式”图标,默认情况下,选择“表”,如以下屏幕截图所示 -

单击架构选项

它显示已为所选数据库创建的模式列表。现在单击模式列表上方的“创建”图标来创建新模式,如以下屏幕截图所示 -

创建新架构

单击“创建”图标后,您将能够看到“创建架构”对话框。输入模式名称并单击“完成”按钮,如以下屏幕截图所示 -

创建架构对话框

将创建一个新模式并与其他模式列表一起使用。

编辑/修改/更改架构

Snowflake 提供了修改或改变模式名称的工具。让我们看看如何修改架构名称。

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

改变架构

它会弹出“更改架构”对话框。用户可以修改名称。单击“完成”按钮,如下所示。

更改架构弹出窗口

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

查看架构

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

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

单击模式列表上方的模式。它将显示所有可用的模式。数据库创建后,默认会生成两个模式- Information SchemaPublic。信息模式包含数据库的所有元数据。

  • 使用“创建”按钮在同一数据库下创建新架构。用户可以创建N个模式。

  • 使用“克隆”按钮创建现有架构的另一个副本。要执行此操作,请选择一个架构并单击“克隆”图标。

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

查看架构

弹出“克隆架构”对话框,输入新架构的名称,然后单击“完成”按钮。

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

克隆模式

在“视图”面板中,您可以看到克隆的架构。用户也可以通过选择模式并单击“删除”图标来删除模式,如以下屏幕截图所示 -

删除架构

会弹出一个对话框进行确认。单击“是”进行删除,否则单击“否”。

使用 Snowflake 的 SQL 接口处理模式

让我们看看如何使用 SQL 接口功能创建架构。

创建架构

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

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

CREATE SCHEMA "TEST_DB"."TEST_SCHEMA"

单击“运行”按钮来执行查询。结果将在结果面板中显示为“Schema TEST_SCHEMA”已成功创建。

编辑/修改/更改架构

更改/修改模式名称,请使用以下查询并运行它 -

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

用户可以转到查看面板并验证更新的名称。

查看架构

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

SHOW SCHEMAS

克隆模式,请使用以下 SQL -

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

删除模式,请使用以下 SQL -

DROP SCHEMA "TEST_DB"."TEST2"

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

Snowflake - 表格和列

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

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

使用 Snowflake 的 UI 处理表和列

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

创建表和列

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

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

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

创建表

单击“创建”按钮添加表。将会弹出创建表对话框。输入以下字段 -

  • 表名称- test_table

  • 模式名称- 从可用列表中选择 - PUBLIC

  • - 单击添加按钮,然后输入名称、类型、非空或任何默认值。

  • 要添加多列,请持续单击“添加”按钮,然后输入详细信息。现在,单击“完成”按钮。

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

添加表和列

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

查看表和列

在本节中,我们将讨论如何查看表和列的详细信息,如何创建相似表,如何克隆它以及如何删除表。

单击顶部功能区中的数据库。它将显示数据库的视图面板,其中列出了所有数据库。单击其中存在表的数据库的名称。例如,TEST_DB,如下图所示 -

查看表格

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

单击“创建Like”按钮,将弹出“创建Like 表”对话框。输入新表的名称,然后单击“完成”按钮。

以下屏幕截图解释了此功能 -

创建表类似

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

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

  • 屏幕上将弹出“克隆表”对话框。输入新表的名称并单击“完成”按钮。

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

克隆表

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

CloneCreate Like的区别在于“列数据”。Clone 从现有表中获取实际数据,而 Create Like 仅复制表的元数据。它不会复制表中存在的现有数据。

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

掉落表

使用 Snowflake 的 SQL 接口处理表和列

一旦用户开始处理表和列,相应的数据库和模式就成为重要因素。如果未提供数据库和架构的详细信息,查询将无法成功执行。

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

SELECT * FROM DATABSE_NAME.SCHEMA_NAME.TABLE_NAME.

在用户界面中,需要执行以下步骤 -

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

  • 角色
  • 仓库
  • 数据库
  • 模式

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

Snowflake SQL 接口

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

在 SQL 中设置数据库、仓库和架构

使用以下查询为会话设置仓库-

USE WAREHOUSE <WAREHOUSE_NAME>

使用以下查询为会话设置数据库-

USE DATABASE <DATABASE_NAME>

使用以下查询为会话设置模式-

USE SCHEMA <SCHEMA_NAME>

创建表和列

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

使用以下查询在数据库 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))

单击“运行”按钮来执行查询。当 TEST_TABLE 成功创建时,结果将显示在“结果”面板中。

查看表和列

要查看所有列出的表,可以使用以下 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 - 从文件加载数据

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

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

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

使用 Snowflake 的 UI 将数据加载到表和列中

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

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

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

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

以下示例数据是在“data.csv”中创建的 -

ID 姓名 地址
1 A B C D
2 ab A B C D
3 A B C D
4 ab A B C D
5 A B C D
6 ab A B C D
7 A B C D
8 ab A B C D
9 A B C D

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

以下屏幕截图显示了加载数据功能 -

加载数据功能

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

加载数据弹出窗口

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

选择文件

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

文件格式

弹出“创建文件格式”对话框。输入以下详细信息 -

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

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

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

  • 列分隔符- 如果 CSV 文件被分隔,请提供文件分隔符。

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

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

其他的事情可以保持原样。输入详细信息后单击“完成”按钮。

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

文件格式详细信息

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

单击加载

加载结果后,您将得到摘要,如下所示。单击“确定”按钮。

单击“确定”

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

运行查询

使用 SQL 将数据加载到表和列中

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

使用 SnowSQL(Snowflake 提供的插件)将文件上传到 Snowflake 的 stage 中。要执行此操作,请转到帮助并单击“下载”,如下所示 -

转到帮助并单击下载

单击 CLI 客户端 (snowsql),然后单击Snowflake 存储库,如以下屏幕截图所示 -

单击 CLI 客户端

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

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

Snowflake存储库

现在,安装下载的插件。安装后,在系统中打开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 - 有用查询示例

在本章中,我们将在 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;”即可查看的一些详细信息

先生编号 按键及说明
1

ABORT_DETACHED_QUERY

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

2

自动提交

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

3

自动提交_API_SUPPORTED

是否为此客户端启用自动提交功能。此参数仅供 Snowflake 使用。

4

BINARY_INPUT_FORMAT

二进制输入格式

5

BINARY_OUTPUT_FORMAT

二进制的显示格式

6

CLIENT_ENABLE_CONSERVATIVE_MEMORY_USAGE

为 JDBC 启用保守的内存使用

7

CLIENT_ENABLE_DEFAULT_OVERWRITE_IN_PUT

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

8

CLIENT_ENABLE_LOG_INFO_STATMENT_PARAMETERS

为准备好的语句绑定参数启用信息级日志记录

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=auto

13

CLIENT_RESULT_CHUNK_SIZE

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

14

CLIENT_RESULT_COLUMN_CASE_INSENSITIVE

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

15

CLIENT_SESSION_CLONE

如果为 true,客户端会从帐户和用户之前使用的令牌克隆一个新会话。

16

CLIENT_SESSION_KEEP_ALIVE

如果为 true,客户端会话不会自动过期

17 号

CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY

CLIENT_SESSION_KEEP_ALIVE 的心跳频率(以秒为单位)。

18

CLIENT_TIMESTAMP_TYPE_MAPPING

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

19

C_API_QUERY_RESULT_FORMAT

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

20

DATE_INPUT_FORMAT

日期的输入格式

21

日期输出格式

日期的显示格式

22

ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION

启用 Snowflake 中使用的物理类型优化以影响 Parquet 输出

23

ERROR_ON_NONDETERMINISTIC_MERGE

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

24

ERROR_ON_NONDETERMINISTIC_UPDATE

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

25

GEOGRAPHY_OUTPUT_FORMAT

GEOGRAPHY 显示格式: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

当scale为0时,JDBC中是否将Decimal视为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

语言

UI、GS、查询协调和 XP 将使用的选定语言。输入语言应采用 BCP-47 格式。又名。破折号格式。有关详细信息,请参阅 LocaleUtil.java。

35

锁定超时

尝试锁定资源时等待的秒数