BigQuery SQL。有缺失日期的数据集上运行总数的演变

289 阅读4分钟

用BigQuery SQL处理缺失值、窗口函数和嵌套查询

照片:Todd DiemeronUnsplash

我们的数据和分析团队最近收到的一个要求是以问题的形式出现的。"每家商店年初至今的上市文章数量是多少,这个数字是如何演变的?"

找到年初至今的文章总数并不是一项复杂的分析任务。然而,当我们想展示这个数字如何随时间增长时,问题就开始了。

其原因是源数据集中的缺失值。换句话说,我们没有数据集中 每个日期的记录 ,而数据集中有每个特定商店的新上市文章的条目

这就是挑战开始的地方。

首先,我们需要弄清楚如何填充每个商店的缺失日期。在这一步之后,需要对每个日期和商店组合的缺失值进行向前填补。最后,作为最后一步,必须计算出运行的总数

在花了一些时间研究和挖掘BigQuery SQL教程后,我们能够找到一个简单的解决方案。

现在,我们将与你分享我们的实施方法。

如果你使用BigQuery,该解决方案有几个步骤,或者说--最好是--几个嵌套的查询了。)

问题解释:从源头到目标

让我们以可视化的形式展示这个问题**,即源数据的外观和预期的结果是什么**。

对于图形化呈现,我们使用Looker在时间序列图上显示源记录的样本和目标结果。

源数据集中的记录和预期结果的时间序列展示 [图片来自作者]

从上面图片的第一部分**(源数据集**)可以看出,在选定的日期范围内,我们有缺失的日期和每个店铺级别的相应数值。

因此,我们将解决方案分为三个步骤,以实现目标结果,并计算措施new_article_count对日期article_online_since_date和每个分区商店的运行总数。

自下而上的实施方法

首先,通过以下查询,我们能够创建假的输入数据集。

medium.com/media/56574…

查询的结果是。

有了ListedArticlePerShop这个输入表,我们就可以开始研究自下而上的解决方案,计算每个店铺在一段时间内的运行总量。

第1步:填补每个分区(商店)缺失的日期范围

BigQuery SQL提供了一个整洁的数组函数GENERATE_DATE_ARAY,你可以指定以下输入[1]。

  • start_date - 必须是一个日期
  • end_date - 必须是一个日期
  • INT64_expr - 一个确定用于生成日期的增量的参数;这个参数的默认值是一天
  • date_part - 必须是DAY, WEEK, MONTH, QUARTER或YEAR。

通过GENERATE_ARRAY函数,我们能够创建一个具有每个车间完整日期范围的表格。

medium.com/media/39a91…

查询的结果如下。

在成功完成步骤#1后,我们现在可以将新创建的查询加入到输入表ListedArticlesPerShop。

步骤#2:将有完整日期范围的表加入到输入表中 的日期范围。

这一步很简单,因为任务是。

  • 使用LEFT JOIN类型连接这两个表,并且
  • 从每个表中选择相应的属性;从table_a中选择ascending_date和shop,从table**_b**中选择new_article_count(现在别名为number_of_listed_articles)。

medium.com/media/56b87…

在成功完成这部分任务后,我们现在可以计算运行总数了。

第3步:计算一段时间内和每个分区(商店)的运行总量

我们使用顶部查询中的窗口函数来计算运行总数。

SUM (number_of_listed_articles) OVER (partition BY shop) ORDER BY (ascending_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

现在,让我们把这一切包起来,呈现出顶级查询

medium.com/media/053c7…

而最终的查询结果如下。

通过这最后一步,我们成功地完成了我们的任务。)

总结

在这篇文章中,我们展示了如何填补缺失的数值,并计算出特定指标在不同时期和每个特定分区的演变模式,只使用BigQuery SQL

我们还介绍了如何结合不同的BigQuery函数窗口数组函数,以解决复杂的分析任务,并提供所需的数据洞察力。

最后,我们希望你会喜欢我们的教程,并在你的使用案例中找到它的用途。)

参考文献。

[1] BigQuery SQL 文档,访问。2022年6月3日,cloud.google.com/bigquery/do…


BigQuery SQL。有缺失日期的数据集上运行总数的演变最初发表在Medium上的Towards Data Science,在那里人们通过强调和回应这个故事来继续对话。