我的需求如下: - 需要从第三方API获取数据到SQL azure。
由于最后两个原因,我选择了每天触发的功能应用程序,而不是可以查询Web API的数据工厂。
有一个更好的方法吗?此外,我正在考虑将所有JSON推送到Blob存储区,然后将数据从JSON解析为SQL Azure。有什么建议?
规模要考虑的一件事是并行化查询和处理。如果没有订购要求,或者处理所有记录的时间超过10分钟功能超时。或者,如果您想在飞行中对数据进行一些调整/转换,或者您对不同类型的数据有不同的目的地。或者,如果您希望避免失败 - 例如,您的功能在处理过程中失败,并且您不想重新查询API。或者您以不同的方式获取数据,并希望在流程中的特定步骤开始处理(而不是从入口点运行)。各种各样的原因。
我会在这里说,最好的并行度与复杂度在很大程度上取决于您的舒适程度和要求。以下示例在某种程度上是将流程分解为离散步骤并为每个步骤使用函数的“极端”示例;在某些情况下,拆分特定步骤并将它们组合成一个步骤可能没有意义。 Durable Functions也有助于使这更容易编排。
您可以从中获得一些并行化,以及使用正确格式化的消息从过程中的任何步骤开始的能力。如果您的处理器遇到不良数据,毒性队列/死信队列等内容将有助于处理异常情况,因此您可以手动修复错误数据,而不是整个过程死亡。
也许你可以通过SQL Server Agent创建一个时间任务。
SQL server Agent
- new job
- Steps
- new step
:
在命令中,例如,输入你的Import JSON documents from Azure Blob Storage sql statemanets。
Schedules
- new schedule
:设定执行时间。
但我认为Azure功能对您来说更好.Azure Functions是一种在云中轻松运行小段代码或“功能”的解决方案。您可以只编写手头问题所需的代码,而无需担心整个应用程序或运行它的基础结构。函数可以使开发更高效,您可以使用您选择的开发语言,例如C#,F#,Node.js,Java或PHP。
它更直观,更有效。
希望这可以帮助。
如果您可以在api中设置默认的前N个值,那么您可以在azure数据工厂中使用web activity来调用您的rest api来获取响应数据。然后将响应数据配置为复制活动(@activity('ActivityName').output
)和sql数据库的输入作为输出。请看这个帖子:Use output from Web Activity call as variable。
Web活动支持访问令牌的authentication属性。
此外,我正在考虑将所有JSON推送到Blob存储区,然后将数据从JSON解析为SQL Azure。有什么建议?
好吧,如果您可以将数据转储到blob存储中,那么azure stream analytics是您的最佳选择。
您可以运行每日作业以使用asa sql选择或解析json数据,然后将数据转储到sql数据库中。请参阅此official sample.
调用所有页面需要多长时间?如果它是under ten minutes,那么我的建议是构建一个查询API的Azure函数,并将json数据直接插入到SQL数据库中。
Azure功能非常cost effective。第一百万次执行是免费的。如果它需要超过十年,那么看看耐用功能。为了处理分页,我们有很多例子。您的确切解决方案取决于您呼叫的API和您使用的语言。这是C# using HttpClient的一个例子。这是Python using Requests的一个。对于两者,模式是相似的。从API获取页面总数,将变量设置为该值,然后遍历页面;在每次迭代中获取并保存数据。如果API不提供最大页数,则循环直到出现错误。 Protip:确保为这些循环指定上限。此外,如果您的API很复杂或有间歇性故障,请考虑使用优雅的重试模式,例如exponential backoff。
您提到将数据作为json文件存储到存储容器中。你确定需要吗?如果是这样,那么你可以create an external table link between the storage container and the database。这样做的好处是不会让数据占用数据库中的任何空间。但是,如果json适合数据库,我强烈建议将json直接放入SQL数据库,并利用indexed calculated columns极快地查询json。
使用此配对应该提供每便士价值令人难以置信的性能!让我们知道您最终使用的是什么。
岗位
由于分页可能还没有,ADF会令人怀疑。
如果有分页,你可以尝试这样:
1.copy活动:对azure blob的http源(这将是代价高昂的部分,取决于你运行的次数)。或者对于分页,如果要在本地处理文件并将其发送到azure blob存储,则可以在VM上为此编写c#代码。
有第三方组件不是免费的,但分页选项很容易实现。您只需输入源API,标题和分页设置。 (这里我假设你在VM上有ssis许可证)