当连接到雪花连接器时,运行 在笔记本中生成报告的最佳方式是什么?

What is the best way to run a report in notebooks when connected to snowflake connector?

我的最后几个问题是关于如何连接到雪花以及如何使用 ipython 笔记本中的 python 连接器添加和读取数据。但是,我在下一步最佳步骤中遇到麻烦,该步骤是使用我寻求可视化的数据创建报告。

我想上传所有数据,存储它,然后分析它,有点像自制的仪表板。

所以到目前为止我所做的是一个小版本:

  1. 暂存本地文件中的数据,我将运行 添加新数据 每次打开笔记本
  2. 然后我将使用 python 连接器从存储中调用任何数据
  3. 在本地笔记本中使用 numpy 对象创建可视化。

我的数据一开始会非常小,但随着时间的推移,我想我将不得不将计算转移到云端,以最大限度地减少本地用于小型仪表板的内存。

我的问题是,我的数据是从 api 调用的,结果是 json 个文件,新数据不超过每天 75 MB 8 列,对数据进行两次聚合调用,在 sql 调用中完成。如果我每月 运行 这些可视化,是在 Snowflake 中还是在本地聚合信息更好?

将原始数据放入Snowflake。使用任务和过程来聚合它并存储结果。或者更好的是,除非您需要数据,否则不要进行任何聚合 - 让 Snowflake 根据原始数据实时进行聚合。

我想您可能会问是应该 ETL 数据还是 ELT 数据:

  • ETL:提取、转换、加载(按此顺序)- 从您的 API 中提取数据。在您的计算机上本地转换它。将其加载到雪花中。
  • ELT:提取、加载、转换(按此顺序)- 从您的 API 中提取数据。将其加载到 Snowflake 中。放入雪花后对其进行变形。

ETL和ELT都有效。许多公司交替使用这两种方法和雪花。但是 Snowflake 的构建是为了让它成为您的数据湖 - 这个想法是,"Just throw all your data up here and then use our awesome compute and storage resources to transform them quickly and easily."

在 "Snowflake ELT" 或 "ELT vs ETL" 上进行 Google 搜索以获取更多信息。

以下是我脑海中的一些注意事项:

您正在使用的工具: SSIS 等一些工具在构建时考虑了 ETL - 在将数据存储到仓库之前对数据进行转换。这并不是说您不能进行 ELT,但它并不是在考虑 ELT 的情况下构建的。更现代的工具——如 Fivetran 甚至 Snowpipe 假定您要将所有数据聚合到 Snowflake 中,然后在数据到达那里后对其进行转换。我真的很喜欢 ELT 范例 - 即只需将您的数据放入云端 - 一旦它在那里就可以快速转换它。

您的数据的大小和增长: 如果您的数据在增长,那么在本地资源上管理它会变得越来越难。当您的数据以千兆字节或数百万行计时,这可能无关紧要。但是,当您处理数十亿行或数 TB 的数据时,云的可扩展性将无法匹敌。如果您觉得这可能会发生并且您认为将其放入云中并不是过早的优化,我会将您的原始数据加载到 Snowflake 中并在它到达那里后对其进行转换。

计算和存储容量:也许您手头有海量的存储和计算能力。也许您有一个本地集群,您可以随时从中配置资源。大多数人没有那个。

短期计算和存储成本:也许您今天可以使用一些适度的资源,并且您宁愿不向 Snowflake 付费,而您的适度资源可以完成这项工作。话虽如此,听起来转换这些数据的计算量将非常小,而且您每天或每月只需执行一次。如果是这样的话,计算成本将非常低。

数据安全或隐私:也许您需要在将数据移动到 public 云之前对其进行匿名处理。如果这对您很重要,您应该查看 Snowflake 的安全功能,但如果您所在的组织很难获得安全审查,并且您需要推进某些事情,在等待安全审查的同时将其转换为本地部署是一个不错的选择。

数据结构:您的数据中有重复项吗?您是否需要访问 Snowflake 中的其他数据才能加入以执行转换?当您开始将越来越多的数据放入 Snowflake 时,在 Snowflake 之后对其进行转换是有意义的 - 这是您所有数据所在的位置,您会发现在所有其他数据所在的云中更容易加入、查询和转换。

我的问题是,我的数据是从 api 调用的,结果是 json 文件,新数据每天不超过 75 MB 8 列,有两个聚合对数据的调用,在 sql 调用中完成。如果我每月 运行 这些可视化,是在 Snowflake 中还是在本地聚合信息更好?

我会在 python 或 Snowflake 中展平您的数据——具体取决于您使用哪个更舒服或数据的复杂程度。你可以直接做所有事情 json,尽管我自己很少会这样设计(这将是最慢的查询。)

就聚合数据而言,我总是在 Snowflake 上这样做。如果您想以各种方式对数据进行切片和切块,您可能会考虑设计一个数据集市数据模型,并让您的仪表板通过查询简单地动态聚合数据。 Snowflake 应该很不错,但为了提高速度,然后将其聚合长达数月也是一个好主意。

您可能可以使您的流程从本地 python 脚本驱动到像无服务器 lambda 和事件驱动 wwith 调度程序一样成熟。