【问题标题】:Is there a way to connect to databricks using ADO.Net?有没有办法使用 ADO.Net 连接到数据块?
【发布时间】:2021-03-27 18:06:29
【问题描述】:
我想构建一个 API 来查询数据块的表并将结果输出为 JSON。实现此目的的一种方法是调用 databricks Jobs REST API 来执行作业并读取作业输出,但具有数据大小限制(最大为 5MB,我的 API 结果集可能超过 20MB)。相反,我可以使用 Microsoft.Net 集群提供的 JDBC/ODBC 端点连接到数据块,还是有任何其他方式可以直接连接?我的 API 层最好需要在 Microsoft.Net 中构建。不过,我愿意尝试 Python。
【问题讨论】:
标签:
python
.net
.net-core
databricks
azure-databricks
【解决方案1】:
我发现了几种连接到 databricks 集群的方法
- 使用 ODBC 连接与 Simba 驱动程序 (https://pages.databricks.com/ODBC-Driver-Download.html) 进行连接。另外,@EdHarper 在上面的评论中分享了
- 使用 cdata nuget 包 - https://www.cdata.com/drivers/spark/ado/ 但是,这涉及到许可费用
- 使用提供的 JDBC 连接字符串,可能需要 Java 代码
我继续使用选项 #1,下面是示例 c# 代码。
// Build connection string
OdbcConnectionStringBuilder odbcConnectionStringBuilder = new OdbcConnectionStringBuilder
{
Driver = "Simba Spark ODBC Driver"
};
odbcConnectionStringBuilder.Add("Host", "adb-xxxxxxxxxxxxx.7.xxxxxxxbricks.net");
odbcConnectionStringBuilder.Add("Port", "443");
odbcConnectionStringBuilder.Add("SSL", "1");
odbcConnectionStringBuilder.Add("ThriftTransport", "2");
odbcConnectionStringBuilder.Add("AuthMech", "3");
odbcConnectionStringBuilder.Add("UID", "token");
odbcConnectionStringBuilder.Add("PWD", "<Access token generated in databricks>");
odbcConnectionStringBuilder.Add("HTTPPath", "sql/protocolv1/o/xxxxxxxxxxxxxxx/yyyy8-dfcccf-tyyujjk8");
using (OdbcConnection connection = new OdbcConnection(odbcConnectionStringBuilder.ConnectionString))
{
string sqlQuery = "select * from yourdb.TableName";
OdbcCommand command = new OdbcCommand(sqlQuery, connection);
connection.Open();
OdbcDataReader reader = command.ExecuteReader();
for (int i = 0; i < reader.FieldCount; i++)
{
Console.Write(reader.GetName(i) + "\t");
}
Console.Write("\n");
reader.Close();
command.Dispose();
}
此外,如果您愿意,可以使用 DSN 进行连接,更多详情请点击此处 - https://www.simba.com/products/Spark/doc/v1/ODBC_InstallGuide/win/content/odbc/hi/windows/dsn.htm