在 azure databricks 中查询 sql 服务器 table

Query sql server table in azure databricks

我正在使用下面的代码在我的 azure sql 服务器数据库中查询 sql 服务器 table hr.employee使用天蓝色数据块。我是 spark sql 的新手,并尝试一次一步地了解细微差别。

Azure Databricks:

%scala
val jdbcHostname = dbutils.widgets.get("hostName")
val jdbcPort = 1433
val jdbcDatabase = dbutils.widgets.get("database")
val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase}"

import java.util.Properties
val connectionProperties = new Properties()
 
connectionProperties.put("user", s"${jdbcUsername}")
connectionProperties.put("password", s"${jdbcPassword}")

%scala
val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionProperties.setProperty("Driver", driverClass)

%scala
val employee = spark.read.jdbc(jdbcUrl, "hr.Employee", connectionProperties)

%scala
spark.sql("select * from employee") 

%sql
select * from employee

employee.select("col1","col2").show()

我收到以下错误。不知道我做错了什么。也尝试了几个变体,但到目前为止运气不好。

错误:

';' expected but integer literal found.

command-922779590419509:26: error: not found: value %
%sql

command-922779590419509:27: error: not found: value select
select * from employee

command-922779590419509:27: error: not found: value from
select * from employee

command-922779590419509:16: error: not found: value %
%scala

您可以查看以下步骤来查询 SQL 服务器使用其 JDBC 驱动程序:

注意:对于整个教程,我使用“Scala”源代码。

步骤 1:检查 JDBC 驱动程序是否可用

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")

步骤 2: 创建 JDBC URL

val jdbcHostname = "<hostname>"
val jdbcPort = 1433
val jdbcDatabase = "<database>"

// Create the JDBC URL without passing in the user and password parameters.
val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase}"

// Create a Properties() object to hold the parameters.
import java.util.Properties
val connectionProperties = new Properties()

connectionProperties.put("user", s"${jdbcUsername}")
connectionProperties.put("password", s"${jdbcPassword}")

步骤 3:检查与 SQL服务器数据库的连接

val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionProperties.setProperty("Driver", driverClass)

Step4:从JDBC

读取数据
val employees_table = spark.read.jdbc(jdbcUrl, "employees", connectionProperties)

Step5: 从数据库中读取模式 table

employees_table.printSchema

Step6: 你可以运行查询这个JDBC table:

display(employees_table.select("age", "salary").groupBy("age").avg("salary"))

截图给大家参考:

=======> 更新答案 <===============

要使用SQL查询:

第 1 步: 从 Python 或 Scala 中的 DataFrame 创建全局 table:

dataFrame.write.saveAsTable("<table-name>")

** 第 2 步:** 现在 运行 SQL 查询

spark.sql("select * from employees_table")

%sql 

select * from employees_table