我目前正在进行一个项目,我们将数据存储在Azure Datalake上。Datalake与Azure Databricks挂钩。
该要求要求 Azure 数据砖连接到 C# 应用程序,以便能够运行查询并从 C# 应用程序获取全部结果。我们目前解决这个问题的方式是,我们已经在Databricks上创建了一个工作区,其中包含许多需要执行的查询。我们创建了一个链接到上述工作区的作业。从 C# 应用程序中,我们将调用本文档中列出的许多 API 来调用作业的实例并等待其执行。但是,我无法从文档中列出的任何API中提取结果。
我的问题是,我们是采取了正确的方法,还是有我们没有看到的东西?如果这是要走的路,那么你从 C# 应用程序在 Azure 数据砖上成功运行的作业中提取结果的经验是什么。
您的用例是使用数据库作为计算引擎(类似于MySQL)并将输出输入C#应用程序。所以最好的方法是在数据库中创建表并通过ODBC连接运行这些查询。https://learn.microsoft.com/en-us/azure/databricks/integrations/bi/jdbc-odbc-bi这样您可以更好地控制sql查询输出。
Microsoft 有一个不错的体系结构参考解决方案,也可能帮助你获得更多见解。
我不确定使用REST API是从Azure DataBricks获得工作输出的最佳方式。
首先,REST API 对每个数据砖实例都有速率限制。每秒30个请求并不是那么糟糕,但它在很大程度上取决于您的应用程序的规模和databrick实例的其他用途(如果这足够的话)。它应该足以创建作业,但如果要轮询作业状态以完成,这可能还不够。
通过 REST API 进行数据传输的容量也有限。例如:根据文档,输出 API 将仅返回运行输出的前 5MB。如果需要更大的结果,则必须先将其存储在其他位置,然后才能从 C# 应用程序获取它。
替代检索方法
简而言之:通过blobstorage和eventgrid充分利用Azure PaaS。
这绝不是一个详尽的解决方案,我相信有人能想出更好的解决方案。然而,在类似的用例中,这对我来说是有效的。
您可以做的是将作业运行的结果写入连接到数据库的某种形式的云存储,然后稍后从该存储位置获取结果。本教程中有一个步骤展示了使用SQL数据仓库存储作业结果的基本概念,但您可以使用您喜欢的任何存储,例如Blob存储
假设您将结果存储在blob存储中。每次将新作业输出写入blob时,您都可以引发一个事件。您可以通过Azure Eventgrid订阅这些事件,并在您的应用程序中使用它们。有一个. net SDK可以让您执行此操作。该事件将包含一个blob uri,您可以使用它将数据导入您的应用程序。
从文档中,blob 创建的事件将如下所示:
[{
"topic": "/subscriptions/{subscription-id}/resourceGroups/Storage/providers/Microsoft.Storage/storageAccounts/my-storage-account",
"subject": "/blobServices/default/containers/test-container/blobs/new-file.txt",
"eventType": "Microsoft.Storage.BlobCreated",
"eventTime": "2017-06-26T18:41:00.9584103Z",
"id": "831e1650-001e-001b-66ab-eeb76e069631",
"data": {
"api": "PutBlockList",
"clientRequestId": "6d79dbfb-0e37-4fc4-981f-442c9ca65760",
"requestId": "831e1650-001e-001b-66ab-eeb76e000000",
"eTag": "\"0x8D4BCC2E4835CD0\"",
"contentType": "text/plain",
"contentLength": 524288,
"blobType": "BlockBlob",
"url": "https://my-storage-account.blob.core.windows.net/testcontainer/new-file.txt",
"sequencer": "00000000000004420000000000028963",
"storageDiagnostics": {
"batchId": "b68529f3-68cd-4744-baa4-3c0498ec19f0"
}
},
"dataVersion": "",
"metadataVersion": "1"
}]
使用作业ID和运行ID等所需信息命名Blob非常重要。您还可以创建自定义事件,这将增加解决方案的复杂性,但允许您向事件添加更多详细信息。
在应用中创建 Blob 事件数据后,可以使用存储 SDK 获取 Blob 数据以在应用程序中使用。根据应用程序逻辑,你还必须管理作业 ID 并在应用程序中运行 Id,否则将面临存储中的作业输出不再附加到应用中的进程的风险。
问题内容: 我有一个Angular应用程序,我想在ReactJS中编写应用程序的某些部分。 如何将ReactJS应用程序注入现有的Angular应用程序中?我还需要组件的双向通信。 问题答案: 您可能需要其他选项,所以我在第2段中编写了它: 无需通信的Angular-ReactJS 具有双向通信的Angular-ReactJS 下面的所有代码都是最少的,无法在提出的步骤中显示问题。在GitHub上
首先我是android应用程序开发环境的新手,我正在尝试使用jtds-1.3.1通过简单的android应用程序连接到MSSQLServer2008。jar驱动程序。我在网上搜索了很多例子,但没能连接到数据库 我得到的异常是网络错误IOException:连接超时 我不知道我的代码有什么问题,我使用的是Eclipse juno IDE<这是我的代码
教程中一个引人注目的问题是azure cosmos db的连接字符串已经包含“?ssl=true&replicaset=globalDB”,我不明白为什么教程在连接到数据库时还要追加它。我已经从保存在。env文件中的连接字符串中删除了该部分,但也没有发生任何事情。我还对连接字符串中的特殊字符进行了编码,比如(==,@,?或/)。 在我看来,我不能正确地形成连接字符串,但我不知道如何解决这个问题。当
我试图将我的spring应用程序连接到debezium/kafka:0.10,但没有成功。最初应用程序使用Wurstmeister/kafka图像,但现在我引入了debezium的一个新功能,并且希望两者只使用一个kafka图像。我不能把应用程序连接到debezium kafka或debezium连接到wurstmeister kafka。有人知道这两个图像是否都可以使用一个图像?欢迎任何想法:)
问题内容: 我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。 我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗? 如果您需要更