Snowflake 快速入门——快速上手 Snowflake

355 阅读18分钟

恭喜你决定开始使用 Snowflake! 本章将带你掌握这个强大的云数据平台的基础要点。内容涵盖:规划你的 Snowflake 环境、创建 Snowflake 账户、浏览其基于 Web 的用户界面。你将学习如何在 Snowflake 中创建数据库与虚拟仓库(virtual warehouse)。本章还会介绍数据加载技巧,包括使用 VARIANT 数据类型与基础 SQL 查询。读完本章,你就可以启程你的云分析之旅,并为后续章节中更高级的 Snowflake 能力做好准备。

引言(Introduction)

在当今数据驱动的世界里,组织需要稳健且可扩展的方案来高效管理与分析数据。Snowflake 作为领先的云数据平台,采用存储与计算分离的独特架构,使企业能够无缝扩展数据仓库需求。本章将提供一份全面指南,帮助你上手 Snowflake,主要包括以下主题:

  • 创建 Snowflake 账户:带你完成免费试用账户的开通流程,并指导你选择合适的 Snowflake 版本云服务商区域(region)
  • 浏览 Snowflake 用户界面:熟悉直观的 Web 界面。我们将讲解其关键组件,包括用于运行查询的 Worksheets(工作表) 、用于存放数据的 Databases(数据库) ,以及提供算力的 Warehouses(虚拟仓库)
  • 创建数据库与仓库:学习如何创建第一个用于存储数据的数据库,以及用于处理查询的虚拟仓库,并提供清晰的 SQL 示例,助你快速起步。
  • 向 Snowflake 加载数据:了解如何从多种来源把数据加载进 Snowflake。内容包括支持的文件格式、作为临时存储区的 Stage 用法,以及关键的 PUTCOPY INTO 命令;此外,还将学习如何利用通用的 VARIANT 数据类型来处理 JSON 等半结构化数据。

现在开始吧!(Let’s get started!)

创建 Snowflake 账户(Creating a Snowflake Account)

在创建账户前,规划你的 Snowflake 环境至关重要。本节将引导你完成设置账户的关键考量与步骤。作为前置,我们先了解以下内容:

  • Snowflake 版本(Editions)
  • 云服务商与区域(Cloud providers & regions)
  • Snowflake 计费模型(Pricing model)
  • Snowflake 工具类型(Types of tools)

Snowflake 版本(Snowflake Editions)

Snowflake 提供多个版本,以满足不同需求与预算。表 2-1 为各版本的简要概览;请以官网的最新信息为准。

表 2-1 Snowflake 版本

版本关键特性与适用场景
Standard适合中小型企业,数据需求适中
Enterprise面向更高性能需求的大型组织
Business Critical面向敏感数据,提供更强的安全与合规特性
Virtual Private Snowflake (VPS)提供专属的 Snowflake 环境,最大化隔离与控制

云服务商与区域(Cloud Providers and Regions)

Snowflake 可运行在主流云上:AWSMicrosoft AzureGoogle Cloud Platform (GCP) 。每个云厂商在全球设有多个数据中心位置,称为区域(region)跨区域传输数据可能产生成本,因此在选区时需结合你的需求评估费用差异。

为满足全球访问速度与数据复制需求,你可能需要多个区域。例如,用户分布在世界各地时,把数据复制或分区到更靠近用户的位置可能更合理。若需要使用多个区域,则必须为每个区域分别创建一个 Snowflake 账户。

一个 Snowflake 账户不支持多个区域;你需要为每个区域单独创建账户
区域只决定数据存放与计算资源的地理位置与供给地,并不限制数据的使用地——你可以在全球任意地点使用这些数据。
此外,每个 Snowflake 账户所选的云平台与其他账户彼此独立。你可以组合不同的云厂商与区域,但需注意这会影响数据导入/导出时的传输成本。不同云或区域也可能存在可用性限制。请参考官方最新信息:docs.snowflake.com/en/user-gui…

Snowflake 计费模型(Snowflake Pricing Model)

Snowflake 采用按使用量计费Credit 模式,即只为实际使用的资源付费。Credit 与三大核心组件相关:存储计算数据传输

  • 存储(Storage) :Snowflake 的存储计费考虑压缩,即只按压缩后的数据体量计费;与按未压缩体量计费的方案相比,通常更省。

  • 计算(Compute) :计算成本由你用于执行查询/加载数据的虚拟仓库大小决定。虚拟仓库本质是可弹性伸缩的计算资源集群。仓库越大,算力越强,但Credit 消耗也越快。Snowflake 提供 8 种仓库规格,各自有不同的 Credit 消耗速率。

    • 例如:选择 Large 规格,其费率为 8 credits/小时。若某任务运行 30 分钟(0.5 小时) ,则计费为 4 credits(8 × 0.5)
  • 数据传输(Data transfer) :从 Amazon S3Azure外部 Stage 把数据加载进 Snowflake 不收取 Snowflake 侧费用,但若数据与 Snowflake 账户不在同一区域或网络,可能产生云存储提供商的出口(egress)费用。将数据导出到外部存储也会计费,包含导出查询的计算成本以及跨区域/云的出口费(如适用)。

创建账户(Creating an Account)

Snowflake 提供 30 天免费试用,并附带一定额度的 Credits 供你探索功能。开始使用:访问 www.snowflake.com**,点击 Start for Free。按提示填写姓名、公司名、邮箱、电话,以及期望的 Snowflake 版本云服务商区域**。提交后,你会收到一封激活邮件。务必在 72 小时内完成激活,否则需要重新创建试用账户。

在开通过程中,你将收到一封“账户已配置完成”的邮件,其中包含 Snowflake Web 界面链接账户激活链接。点击 Activate 后,浏览器会提示你创建用户名与密码。设置完成后,将看到 “Welcome to Snowflake” 的 Web 界面——恭喜,你已正式登录 Snowflake!

完成账户激活后,你即可访问 Snowflake Web 界面;下一节我们将继续探索其主要功能与操作。

使用 Snowsight 导航 Snowflake(Navigating Snowflake with Snowsight)

现在你已创建好 Snowflake 账户,可以通过其用户界面(UI)来设置环境。你的账户可能能访问两种 UI:Classic ConsoleSnowsight。两者功能等同。Snowflake 正在分阶段将所有账户升级到 Snowsight,最终仅保留 Snowsight 访问;因此本节重点介绍 Snowsight。

Snowsight 就像一个用于管理数据仓库环境的可视化控制面板。它由四个关键区域组成:导航菜单搜索快捷操作、以及最近查看(见图 2-1)。

  • Navigation(导航) :在 Snowsight 中访问与管理各组件的中枢。你可以用它来创建与管理数据产品notebooks(笔记本)worksheets(工作表) 、**databases(数据库)**以及其他相关工件。
  • Search bar(搜索栏) :帮助你在 Snowflake 环境中快速定位特定内容。可搜索导航菜单项与数据库对象,如函数等。
  • Quick actions(快捷操作) :提供与你当前角色相匹配的常用操作快捷入口。例如:在工作表中查询数据、将文件上传到表、以及用于 Python 代码的工作表等。
  • Recently viewed(最近查看) :记录你的最近活动,便于导航与回溯。你也可以在此创建不同类型的内容。

image.png

在 Snowflake 中创建数据库与仓库(Creating a Database and Warehouse in Snowflake)

数据库与仓库是 Snowflake 架构中的基础组件,分别在数据存储数据处理中扮演关键角色。理解这两个概念有助于更高效地使用平台。数据库(database)是用来以结构化方式存放相关数据集的逻辑容器;这种逻辑隔离有助于组织数据并实施访问控制——例如,不同部门或不同应用可以使用各自的数据库。仓库(warehouse)提供对数据库中数据进行查询与处理所需的计算资源。仓库与数据库彼此独立,因此可按需灵活扩缩。下面先从创建仓库开始。

创建仓库(Creating a Warehouse)

我们来看两种创建仓库的方式:通过 Snowflake Web 界面,以及使用 SQL 命令

CREATE WAREHOUSE:Web 界面

  1. 登录你的 Snowflake Web 界面。
  2. 点击 Admin → Warehouses
  3. 点击右上角 + Warehouse
  4. 为仓库填写名称描述(见图 2-2)。
    a. 选择 TypeSize。本次演示保持默认值。
    b. 根据需要调整 Advanced Options。本次演示保持默认值。

图 2-2 通过 Web 界面创建新仓库

image.png

CREATE WAREHOUSE:SQL 命令

以下示例通过 Snowflake UI 中的 Worksheet 执行;你也可以使用已连接到 Snowflake 的 SQL 客户端。

  1. 点击 Worksheets

  2. 在右上角点击 +(Create SQL Worksheet)

  3. 执行下列 CREATE WAREHOUSE 命令:

    CREATE WAREHOUSE JUMPSTART_SNOWFLAKE_SQL
    WITH WAREHOUSE_TYPE = 'STANDARD'
    WAREHOUSE_SIZE = 'XSMALL'
    AUTO_SUSPEND = 600
    AUTO_RESUME = TRUE;
    
  4. 图 2-3 显示名为 JUMPSTART_SNOWFLAKE_SQL 的仓库已成功创建。

图 2-3 在 Worksheet 中执行 CREATE WAREHOUSE 语句以创建仓库 image.png

注意(Caution)
务必确保在仓库上启用 auto suspendauto resume。默认情况下,虚拟仓库在开通时会为你设置好这些选项。auto suspend 会在仓库空闲达到设定时长后自动停止;auto resume 会在有查询提交时自动启动已挂起的虚拟仓库。这一点很重要:运行中的仓库仅在计算资源被使用时才会消耗 Snowflake credits。在不使用时关闭仓库有助于节能并控制成本。

创建数据库(Create a Database)

现在你已经创建了仓库,接下来创建一个数据库!与仓库类似,你可以通过 Web 界面SQL 命令创建数据库。创建时可以指定若干关键参数:

  • Database name:在 Snowflake 账户内唯一标识该数据库。
  • Database owner:对该数据库拥有全部权限。
  • 其他相关属性:如安全、复制等参数,视具体需求而定。
CREATE DATABASE:Web 界面
  1. 点击 Data → Databases
  2. 点击右上角 + Database
  3. 为数据库填写 NameComment(描述) (见图 2-4)。

图 2-4 通过 Web 界面创建新数据库

image.png

  1. 点击 Create
  2. 数据库创建后,可点击省略号(…)以编辑权限新增 schema克隆(clone)删除(drop)转移所有权(transfer ownership) (见图 2-5)。

图 2-5 通过省略号为所选数据库执行各类操作

image.png

CREATE DATABASE:SQL 命令

若要用 SQL 创建同名数据库,请在已连接到 Snowflake 的 SQL 客户端中执行下列语句;你也可以在 SnowsightWorksheet 中执行:

create DATABASE IDENTIFIER('"EXAMPLE_DATABASE"') 
  COMMENT = 'Jumpstart Snowflake - creating a new database example'

将数据加载到 Snowflake(Loading Data into Snowflake)

现在你已经在 Snowflake 中设置好了数据库与仓库,下一步就是加载数据。Snowflake 针对这一过程做了优化,支持多种加载方式、来源与格式。在数据量较小或进行初始测试时,你可以直接从本地文件将数据加载到 Snowflake。随着数据需求增长,借助 Snowflake 与 Amazon S3、Azure Blob Storage、Google Cloud Storage 等云存储服务的集成会更具优势。直接从这些平台加载既适合大数据集,也能帮助你构建稳健高效的数据管道,简化摄取流程,并将你的数据工作流与既有云存储解决方案无缝整合

将数据加载到 Snowflake 有两种方式:使用 COPY 语句进行批量加载,以及使用 Snowpipe 进行持续加载。本章聚焦批量加载,涵盖以下主题:

  • 批量加载概览:什么是批量加载、文件加载位置、支持的文件格式与编码、压缩处理、加密选项。
  • 批量加载建议:文件准备(含文件大小与拆分)、CSV 与半结构化格式、分区/暂存(staging)、加载与查询。

:使用 Snowpipe 的持续加载在第 3 章介绍。

批量数据加载概览(Overview of Bulk Data Loading)

使用 COPY 进行批量加载的实践早于 Snowflake 的出现,许多数据库管理系统都支持 COPY 语句,因此 Snowflake 同样提供此能力。为更好地理解批量加载,我们先回答几个关键问题:

  • 什么是批量数据加载?
  • 可以从哪些位置进行批量加载?
  • 有哪些压缩与加密选项?
  • 支持哪些文件格式?

要把数据放入数据库表,必须插入(insert) 。逐行插入可能耗时很长;批量复制(bulk copy)可以一次性将大量数据以批次插入表中。Snowflake 的批量加载允许从云存储中的文件(如 AWS S3)批量导入。

如果你的数据文件当前不在云存储中,可以先把本地文件复制到云端的暂存区域(stage) ,再加载到 Snowflake。这就是 Snowflake 的内部暂存区:文件从本地传输到 Snowflake 指定的内部云存储位置,然后通过 COPY 命令加载至表。

无论你的 Snowflake 账户运行在哪家云平台,Snowflake 均支持从以下暂存位置加载:

  • Snowflake 指定的内部存储暂存位置
  • AWS S3:可直接从任意用户自有的 S3 bucket 加载
  • GCP Cloud Storage:可直接从任意用户自有的 GCS 容器加载
  • Azure Blob Storage:可直接从任意用户自有的 Azure 容器加载

:当跨不同平台进行暂存与加载时,可能产生数据传输计费

压缩处理(Compression Handling)

当在 Snowflake 的 stage 中暂存未压缩文件时,系统会自动使用 gzip 进行压缩,除非你显式禁用。Snowflake 能自动识别 gzip、bzip2、deflate、raw_deflate。对 brotlizstandard(zstd) 目前不支持自动识别;如果使用这两种压缩,请在暂存或加载时显式指定压缩方式。

加密选项(Encryption Options)

当在 内部 Snowflake 位置暂存未加密文件时,系统会自动使用 128 位密钥加密。你也可以启用 256 位密钥(更强加密),但需额外配置。若文件已加密且位于外部云存储,可照常加载;但必须向 Snowflake 提供用于加密这些文件的密钥

支持的文件格式与编码(Supported File Formats and Encoding)

Snowflake 支持多数常见的数据加载文件格式,包括:

  • 定界文本文件(支持任意有效定界符;默认逗号)
  • JSON、XML
  • Avro(自动识别与处理使用 Snappy 压缩的暂存 Avro 文件)
  • ORC(自动识别与处理使用 Snappy/zlib 压缩的暂存 ORC 文件)
  • Parquet(自动识别与处理使用 Snappy 压缩的暂存 Parquet 文件)

定界文本文件,默认字符集UTF-8;若需其他字符集,必须显式指定编码。对 JSON、Avro 等其他受支持格式,唯一支持的字符集是 UTF-8

批量数据加载建议(Bulk Data Loading Recommendations)

加载大数据集会影响查询性能。Snowflake 建议将加载查询分别投入不同的仓库,以优化各自性能。本节介绍文件准备的推荐做法。

文件准备与大小(File Preparation and Sizing)

可并行处理的文件数由仓库中服务器的数量与能力决定。遵循以下文件尺寸指南,可使数据加载占用最少资源(适用于批量加载与 Snowpipe 持续加载):

  • 并行执行的加载操作数不超过待加载的数据文件数。

  • 为优化并行度,建议生成**约 100MB–250MB(压缩后)**的数据文件。

  • 合并过小文件,以减少单文件处理开销。

  • 拆分超大文件为更多小文件,以把负载分散到活跃仓库中的多台服务器;并行处理的文件数由仓库服务器的数量与能力决定。

  • 建议按拆分大文件,避免记录跨越数据块。

  • 加载超大 Parquet 文件(如 >3GB)可能超时;请拆分为 ≤1GB 的文件。

  • 若源数据库无法按小块导出,可用第三方工具拆分大 CSV

    • Windows 无内置分割工具,但有大量第三方工具/脚本可用;
    • Linux 可使用 split 将 CSV 拆分为多个小文件。

:拆分大文件可使加载线性扩展。仅仅增大仓库规格(XL、2XL 等)会消耗更多 credits,未必带来性能提升。

CSV 文件准备(CSV File Preparation)

准备定界文本(CSV)文件时请注意:

  • 默认字符集为 UTF-8;也支持其他编码,可使用文件格式选项 ENCODING 指定。

  • Snowflake 支持 ASCII 字符(含高位字符)作为定界符。常见字段定界符有:竖线 |、逗号 ,、插入符号 ^、波浪线 ~

  • 字段可可选使用双引号包围;在被引号包围的字段内,所有特殊字符会自动转义,但双引号本身需用两个双引号紧挨着来转义:""

    • 未被引号包围的字段,默认转义字符反斜杠 ``。
  • 可使用常见转义序列:\t(制表符)、\n(换行)、\r(回车)、\(反斜杠)。

  • 含有回车符的字段应加引号(单引号或双引号)。

  • 各行列数应一致

半结构化数据准备与 VARIANT 值(Semi-Structured Data File Preparation and VARIANT values)

半结构化数据不符合传统结构化数据的标准,但包含标签或标记以标识数据中的独立实体。其与结构化数据的两个关键差异:

  • 嵌套数据结构
  • 缺少固定模式(schema)

结构化数据要求在加载/查询前预定义固定 schema;半结构化数据则无需预先定义,可持续演进(随时新增属性)。同一类实体内部也可能具有不同属性集合,属性顺序不重要。与平铺表格的结构化数据不同,半结构化数据可包含 n 层嵌套层级。

半结构化数据的加载步骤与结构化数据相同:Snowflake 将半结构化数据加载到表中的单个 VARIANT。在数据转换时,也可使用 COPY INTO <table> 从暂存文件中抽取选定字段,映射到表的独立列

当把半结构化数据插入 VARIANT 列时,Snowflake 实际会提取键位置与数值等信息,保存为一个半结构化文档;其元数据由引擎索引,以支持快速 SQL 检索

VARIANT 中的 “null”不同于 SQL 的 NULL不会被加载到表中。为避免丢失,可在加载前将包含 "null" 的元素抽取到关系型列;或者,若 "null" 仅表示缺失值且无其他含义,建议在加载半结构化文件时将文件格式选项 STRIP_NULL_VALUES=TRUE

文件暂存(File Staging)

Snowflake 的内部外部 stage 都可包含路径(在 AWS 中称为 prefix)。对常规数据集,建议按逻辑路径进行分区,例如包含地理位置数据写入日期等信息。

通过路径组织数据文件,可用单条命令完成复制;也可并发执行多条 COPY,每条匹配一部分文件,从而利用并行

例如,若你的公司在全球开展业务,可在路径中加入洲/国家/城市等标识以及写入日期:

NA/Mexico/Quintana_Roo/Cancun/2024/01/01/01/

在规划定期加载(如 ETL)时,应在内部 stage(Snowflake)或外部位置(S3、Azure 容器)按逻辑、细粒度路径进行分区。可在分区结构中包含应用/位置写入日期等信息。这样,你可以通过单条命令按小时/天/月/年将任意分区子集复制到 Snowflake。

S3 分区路径示例:

s3://bucket_name/brand/2024/07/01/11/
s3://bucket_name/region/country/2024/07/01/14/

加载(Loading)

COPY 命令支持多种从 stage 加载文件的方式:

  • 内部位置路径外部位置前缀
  • 列出特定文件进行加载(每条 COPY 最多 1000 个文件)
  • 通过**模式匹配(pattern)**选择特定文件

这些方式都能让你用单条命令复制部分暂存数据到 Snowflake 的表中,并发执行多条 COPY 匹配不同子集,以发挥并行能力。请特别注意:被复制的文件必须与目标表具有相同的数据结构(列数、数据类型等)。

提示:从 stage 显式列出具体文件进行加载通常最快

练习(Exercises)

Snowflake 提供从本地文件系统S3 进行批量加载的教程,详见:

小结(Summary)

本章带你完成了 Snowflake(这一强大的云数据平台)的入门要点:了解各版本并创建免费试用账户;熟悉可选的云服务商与区域及其选型考量;掌握 Snowflake 的按量计费模型(基于存储、计算与数据传输)以便更好地管控成本

你还学习了如何创建数据库虚拟仓库,为数据仓库活动打下基础,并初步了解了在 Snowflake 中的数据加载技术——这是任何数据仓库方案的关键环节。凭借本章获得的知识与技能,你已准备好在后续章节中探索 Snowflake 的更高级能力