谷歌

使用BigQuery和Snowflake进行克隆

百叶窗403856026 (3)

今天我写了我的第一篇博客,希望将来能发布更多的博客。我称自己为数据爱好者,喜欢分析和理解数据,以便编写解决方案,因为最终,数据对于任何应用程序都是至关重要的。废话不多说,让我们进入今天的主题——克隆两个数据仓库系统:

  1. 雪花
  2. BigQuery

我看过很多电影,我记得在《漫威英雄》中洛基同时以多种方式克隆自己!这样的克隆在现实世界中可能是不可能的,但在技术世界中是可能的。例如,将代码克隆到本地机器(git克隆是一个主要的例子)。

那么数据库(DB)呢?为什么不克隆它们呢?我们曾经这样做过,但那实际上是消耗空间的DB的副本。您可能想知道为什么我们需要在不消耗空间的情况下克隆一个DB ?答案有很多。在我们进一步深入研究之前,让我们暂停一下为什么我们要克隆(又名复制)。克隆的主要原因是为了解决生产中的问题;当我们移动应用程序时,我们说哦,“我希望我的开发/测试环境中有这样的数据,这样我就可以覆盖这个场景了,”或者“我们的开发/测试环境中没有这么多数据,我无法发现这些问题!”

克隆也有帮助,举几个例子:

  1. 通过使用类似于数据副本的产品来增强应用程序和底层数据结构
  2. 性能调优,这是最关键的,因为开发/测试环境缺乏数据集。

我们曾经克隆(也就是复制生产数据到我们的开发和测试环境并执行我们的测试)单片数据库,如Oracle、DB2和SQL Server on-Prem。我们过去称之为克隆,但如果你仔细观察,我们实际上并不是克隆它们,而是复制它们。复制有很多缺点,包括:

  1. 数据复制
  2. 手工工作(或执行活动的一些额外工具)
  3. 需要复制的天数(如果容量很大)
  4. 数据与生产不同步
  5. 额外的存储

我个人处理超大数据库的拷贝,这需要2到4天的时间,不包括后期拷贝设置(分析等)的时间。

我曾经希望我们有一个简单的命令来使用,可以在不占用空间的情况下克隆DB,并在不依赖dba的情况下在几个命令中完成我的工作。当我开始做雪花Pro Core认证,学习和玩雪花的时候,这一点被证明是正确的。

雪花

让我回过头来谈谈雪花。雪花是一种多云数据湖/仓库工具,完全建立在云上,用于云,其架构定义在共享磁盘和无共享数据库架构上。它有3个架构层:

  1. 云服务:服务的协调器和集合。
  2. 查询处理:系统的大脑,查询执行使用“虚拟仓库”。
  3. 数据库存储:以柱状模式物理存储数据。

雪花

来源:雪花文档

该工具利用云提供商(AWS/谷歌/Azure)的优势,通过使用:

  1. 计算引擎(广泛用于查询处理层,他们称之为虚拟仓库)
  2. 云存储(谷歌为GCS, AWS为S3, Azure为Blob Storage)
  3. VPC(不同版本的网络和其他安全层)

Snowflake有一个很棒的实用程序叫做克隆(他们称之为零拷贝克隆),它可以在一个简单的命令中无缝克隆一个数据库/表(例如创建或替换克隆销售数据库clone_sales_db;).这个命令将克隆整个数据库(有一定的限制;r请参阅雪花文档了解限制).它的美妙之处在于我们大学时代的学习叫做指针/参考!当你给一个命令克隆一个数据库,它简单地做以下事情:

  1. 创建新的数据库(云服务中的对象名称)
  2. 数据库下面的所有对象(注意有一些限制,其中某些对象不会被克隆)都被创建(同样是服务层中的对象名称)

人们会期望数据被复制并保存为“副本“但事实并非如此;Snowflake的聪明之处在于它从克隆对象创建了一个指向源数据库/表的指针/引用,这不仅在复制数据(逻辑上)方面具有巨大的优势,而且节省了存储成本。当用户从克隆对象中查询表时,Cloud服务将简单地从实际源中获取数据,使数据尽可能保持最新。此外,这不会消耗创建克隆的时间——它所花费的时间与创建表的时间一样多。

请看这个例子:

  • 假设我创建了一个表,名为"交易,加载了大约200K条记录,这个表的总大小是8.6 MB:

事务1

  • 观察这个表的元数据:

1元数据

    • ID:该表的唯一ID
    • CLONE_GROUP_ID:克隆对象的ID(所以它和ID一样)
  • 现在,我要创建一个事务的克隆,命名为"Transactions_Clone”。现在,表格将显示相同数量的记录:

交易克隆

  • 我们可能想知道它是否“复制”了整个“Transactions”表并复制了它,但它没有。那么我们怎么知道它没有复制呢?见下表的元数据:

事务克隆元数据

  • 请注意以下几点
    • ID:新表有自己的唯一ID
    • CLONE_GROUP_ID:它指向“事务”表的ID。多聪明啊!
  • 严格来说,当我查询的时候TRANSACTIONS_CLONE它简单地指的是“数据位置”交易
  • 当我们向master添加数据时,您将不会看到TRANSACTIONS_CLONE!(这是意料之中的)
  • 现在,让我们说,我从TRANSACTIONS_CLONE(其中的60个)中删除数据,我将看不到这60个,但其他数据仍将从其原始源中引用”交易

事务克隆删除

  • 活动字节数仍然是0

事务克隆元数据

  • 现在我加载了大约100K条记录到这里,看看记录的数量!,它从最近添加的位置获取新数据,其余来自源。

事务克隆插入

如果任何用户对表或对象进行了更改,雪花所做的就是从新的指针/引用中获得额外的数据(或删除的数据)。这涉及到仅添加数据的存储成本。当你删除数据时,原始数据是不变的,但它的云服务层保留了被删除和添加的必要信息,使其成为“真正的”零副本。

同样,如果你做了任何结构上的改变,雪花会在它的云服务层处理这些改变,并相应地带来必要的数据。

这提供了一个真正的克隆功能,而不消耗任何空间,您可以在几分钟(如果不是几秒钟)内复制表。同时也提高了开发和测试的速度和效率。

BigQuery

BigQuery是最流行的数据库之一,或者我们应该称之为云数据仓库(Cloud Data Warehouse),它为存储数据提供了丰富的特性,并为数据提供了极高的性能和可伸缩性。这是一个完全托管的数据库,因此您不需要担心存储或使用哪个计算引擎。与Snowflake不同的是,您必须使用Virtual Warehouse(又名计算引擎)来运行查询,如果查询运行得不好,那么您可以使用Higher配置的仓库来让查询运行得更好。

在BigQuery中,您不需要担心这些问题,只需专注于编写查询并执行它。您只需要为检索到的数据付费。

BigQuery类似于Snowflake,但是直到现在,它还没有克隆数据库的能力。在谷歌Next ' 21期间,宣布很快你就可以:

  1. 快照
  2. 克隆DB

Bigquery

来源:谷歌Next ' 21 Session

正如上面的幻灯片所示,快照是不可变的,但它是一个有用的功能,你可以用它回到过去而不产生任何费用。这有助于节省成本,因为复制表会导致存储成本。

克隆技术已经被引入(虽然目前还无法实现),但其概念以类似雪花的方式运行(我们仍然需要等待官方宣布,直到那时我们可能需要假设),其中您只会对新的或修改的数据产生费用,而不会对其他数据产生费用。当您的表运行到TB或PB时,这节省了巨大的成本。

这是每个开发人员/测试人员都期待在BigQuery上看到的一个功能,一旦克隆就绪,它将极大地促进团队分析生产问题,而无需去Prod。具体来说,你可以简单地克隆并在开发区域运行你的查询,而不需要任何停机时间。时间是最重要的,每个人都想更快、更聪明地完成工作,并希望最大限度地减少人工工作量。

一旦正式发布,这些功能还会有更多内容。我们将看到它在克隆雪花和亚马逊RDS极光的竞争中表现如何。

在以后的博客中,我将深入研究该工具的技术特性,并探索更多的解决方案。到此为止!

留下回复

你的电邮地址将不会公布。

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据

Krishna Vaddadi高级技术架构师

Krishna Vaddadi是一名高级技术架构师。在数据库、平台和云方面有经验并积极主动的架构师;Krishna擅长大数据和云平台。他是一名数据爱好者,在AML领域有丰富的SME经验。

更多来自作者

订阅每周博客文摘:

报名
关注我们
推特 Linkedin 脸谱网 Youtube Instagram