使用Stitch和图表摄取和可视化API数据

汤姆·奥朗德

技术针脚阿特拉斯图表
脸谱网股份LinkedIn股票雷迪特股份推特分享

介绍

我们生活在一个充满了API的世界里——在这个世界上,任何关于你的设备的数据,您的社区甚至您自己都只是一个HTTP调用。但是,虽然从API返回的数据非常有用,它通常只是一个时间点的快照,这使得我们不可能对正在发生的事情有一个完整的了解。为了获得你需要的洞察力,一个有用的模式是将API中的数据摄取到数据库中,然后分析和可视化数据,以了解数据随时间的变化。由于大多数API数据都用JSON表示,bet wayMongoDB是此数据的理想数据库。本文描述了如何使用MongoDB Stitch完成这个故事,并使用MongoDB图表进行可视化。bet way

模式

我们要使用的模式非常简单,可以用许多不同的技术来实现:

  • 调度程序定期启动流程(根据问题空间的保证)。比如每小时
  • 一个摄取功能查询API,检索(或转换)数据并将其保存在数据库中
  • 这个数据库存储从API检索到的最新和历史数据
  • 这个可视化工具查询数据库(利用适当的过滤器),并显示数据图表及其随时间变化的方式。

使用MongoDB堆栈实现bet way

因为这是MongoDB的博客,bet way听到我们在MongoDB中存储数据,您不会感到惊讶。bet way由于现代API的数据通常用JSON表示,您可以直接存储它,而无需转换数据或丢失在原始结构中定义的丰富性。但解决方案的其他组件呢?

摄取功能很少运行,所以它非常适合无服务器计算平台。您肯定可以使用类似于aws lambda或azure函数的平台来完成此任务,但是由于目标是写MongoDB,bet way最快的方法是使用MongoDB缝合。bet way这给了你简单的,基于规则的MongoDB集合访问,无需担心bet way连接URI,驱动程序或包管理。

Stitch当前没有内置计划程序。然而,Stitch允许您将函数作为HTTP Webhook公开,允许您选择的调度程序轻松调用它。

最后,查询,过滤和可视化我们将使用MongoDB图表测试版的数据。bet way这个工具可以让您快速轻松地创建MongoDB中存储的数据图表,bet way不需要扁平化模式或转换数据。

教程:天气数据

作为一个简单的例子,让我们构建一个从天气API中摄取和可视化数据的解决方案-我们将使用开放式天气图这对于基本场景是免费的(尽管您仍然需要注册一个帐户来获取应用程序ID来调用API)。我们的目标是建立自己的个人天气仪表盘,这样地:

设置缝合应用程序

第一,确保你有一个bet way官网 (自由层工作得很好)并针对该集群创建一个缝合应用程序。

下一步,我们将添加一个包含调用API所需的一些元数据的缝合值。这是一个JSON文档,它指定了我们要从哪个城市读取天气数据(我使用的是“Sydney,au)和调用API时要使用的OpenWeathermap应用程序ID(在您注册帐户后可从其网站获得)。

因为我们正在处理一个HTTP API,我们需要创建一个负责发出请求的Stitch HTTP服务。bet way我们将调用我们的服务“httpbet way”,并创建一个规则,允许它对任何URL执行GET请求。

最后,我们将向服务添加一个传入的webhook,bet way这是一个可以从缝合外部调用的函数。我们将称我们的webhook为“摄取天气数据”,配置为以系统用户身份运行,使其可以通过HTTP POST调用,并使用提供的机密作为查询字符串参数。别忘了把你的秘密设为一个好的随机值。

一旦你配置好你的webhook,您需要提供每次调用Webhook时运行的代码。此函数使用缝合值中的参数调用OpenWeatherMap API。一旦收到结果,它增加了一个新的观察日期文档的字段(从dt字段,但使用适当的日期数据类型)然后将更新的文档存储到天气.观察在我们的MongoDB Atlas集群中收集bet way。

exports=函数(有效负载)const httpservice=contextbet way.services.get('http');var weatherapiinfo=context.values.get('weatherapiinfo');让url=`http://api.openweathermap.org/data/2.5/weather?Q=$weatherapiinfo.city&units=metric&appid=$weatherapiinfo.appid `;console.log(“提取”+url);返回httpservibet wayce.get(url:url).then(response=>let json=json.parse(response.body.text());json.observationdate=新日期(json.dt*1000);var collection=context.sebet wayrvices.bet wayget('mongodb-atlas').db('weather').collection('observations');集合.insertone(json);console.log('插入的文档!')(二)});

为了安排我们的进食功能,我们可以使用任何我们想要的调度程序,包括来自云提供商(如AWS或Azure)或VM中的cron作业。一个简单的自由选择是使用IFTTT它允许您创建带有触发器和操作的“小程序”。对于这个例子,我使用了日期/时间类别中的“每小时”触发器和“webhook”操作。无论你决定使用什么调度程序,选择一个HTTP文章并从Stitch Webhook设置页面复制URL,确定要追加“?秘密= “到URL的结尾。

构建仪表板

虽然你可能很想开始使用仪表盘,记住,读数每小时只能通过一次,因此,您可能需要等待几天,直到您有足够的数据可视化。当你在等的时候,您可以下载和配置bet wayMongoDB图表(试用版),并通过以下方式了解该工具:教程.

一旦你收集了大量的数据,是时候构建仪表板了!在本文前面的屏幕截图,您可以看到,我创建了许多不同的图表,显示不同的数据视图。在本文中,我们将介绍如何在这之后创建顶部图表,这取决于你复制其他图表或想出你自己的想法。

为了在图表中可视化数据,您首先需要创建一个数据源,只需导航到“数据源”选项卡并点击“新建数据源”按钮。在这个对话的第一步,您需要连接到Atlas集群的URI(包括用户名和密码)。您可以通过单击Atlas Web控制台中的“连接”按钮来实现这一点。当你在这里的时候,确保您已经配置了IP白名单(在Atlas安全选项卡上)以允许从Charts服务器访问集群。

回到图表中,一旦成功连接到集群,就可以为数据源选择“weather.observations”集合。最后,您可以决定是否要与其他图表用户共享数据源,将创建您的数据源。

现在我们有了一个数据源,现在是创建仪表板的时候了。转到“仪表板”选项卡,单击New Dashboard(新建仪表板)并输入适当的名称和说明(“Weather”(天气)很好!).现在你将看到一张空白的画布,准备添加第一个图表。

单击“添加图表”将进入图表生成器。这就是所有魔法发生的地方。构建图表涉及以下步骤:尽管有时您可能会以不同的顺序进行操作或迭代,直到您对结果满意为止:

  1. 选择数据源
  2. 选择图表类型
  3. 将字段从字段面板拖到编码通道上
  4. 应用过滤器,如果需要的话
  5. 为图表命名
  6. 将图表保存到仪表板

选择数据源总是第一步。一旦你这样做了,图表将对数据源进行采样,并在窗口左侧的字段面板中显示结果字段。注意,字段面板还显示了每个字段的类型,并标识文档结构中的嵌套文档和数组。

下一步,我们将选择图表类型。为了显示温度随时间变化的曲线图,我们将选择行类别,然后选择连续折线图。连续图表显示集合中每个单独文档的数据点,与离散图表相反,当它们共享相同的类别值时,将多个点聚合在一起。

完成这些步骤后,您的图表将如下所示:

现在是时候对一些字段进行编码了。拖动观察日期X轴通道上的场,然后展开主要的用于显示其子级的嵌套文档。我们将拖曳临时雇员Y轴上的场,你应该看到一个有用的图表的开始!

要向图表中添加更多信息,让我们添加额外的系列来显示整个城市观测到的最低和最高温度。图表允许您以两种方式创建多系列图表:您可以从不同的字段创建每个系列,可以使用“系列”字段将值从单个字段拆分为多个系列。对于此集合中的数据形状,我们将选择第一个选项。我们将通过拖动坦普敏最高温度Y轴通道中作为附加字段的字段:

这看起来不错!但请注意,图表当前显示了集合中的所有数据。虽然目前系统中只有几天的数据,每过一个小时,我们就会得到另一个数据点,逐渐导致图表更混乱,性能更慢。为了解决这个问题,我们可以创建一个过滤器,将数据限制在一个滑动时间窗口中,比如前5天。在图表中使用MQL查询文档.要指定相对日期查询,您需要做一些运算,根据与当前日期相关的毫秒数创建一个新的日期对象,由日期()表示。要指定最近5天,使用以下筛选器:

观察日期:$GTE:日期(日期()-5*24*60*60*1000)

使用过滤器后,你可以给你的图表一个标题,我们就完成了!

保存图表后,你可以在仪表板上调整它的大小,然后开始创建额外的图表,让你更深入地了解你所在城市的天气。

另一个例子:家用电池数据

我为本文中的主要示例选择了天气场景,因为它很容易工作,而且我们都可以与之相关。然而,实际上,你可能从天气网站上得到很多这样的信息。在这个特定的例子中,真正的价值并不多,而是在模式及其使用MongoDB平台的实现中。bet way

不管你的兴趣是什么,有可能有一些API返回对您有价值的数据,您可以使用天气示例中的相同方法来摄取和可视化这些数据。下面的屏幕截图显示了我为显示我的家庭电池存储系统的状态和历史而创建的。你可以看到上周的存储量,当前存储级别,并了解使用情况随季节的变化。

有希望地,这将为您提供一些关于您想要创建的仪表盘的想法。享受探索和可视化数据的乐趣!