Запрос sql серверная таблица в azure блоках данных - PullRequest
1 голос
/ 05 августа 2020

Я использую приведенный ниже код для запроса sql серверной таблицы hr.employee в моей azure sql базе данных сервера, используя azure блоки данных. Я новичок в 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

1 Ответ

1 голос
/ 05 августа 2020

Вы можете проверить следующие шаги для запросов SQL Сервер, используя его драйвер JDB C:

Примечание: Для всего руководства я используя исходный код «Scala».

Шаг 1: Убедитесь, что драйвер JDB C доступен

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

Шаг 2: Создайте JDB C 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: Проверьте подключение к базе данных SQLServer

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

Step4: Чтение данных из JDB C

val employees_table = spark.read.jdbc(jdbcUrl, "employees", connectionProperties)

Step5: Считывает схему из таблицы базы данных

employees_table.printSchema

Step6: Вы можете запускать запросы к этой таблице JDB C:

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

Вот скриншот для справки:

enter image description here

enter image description here

enter image description here

=======> Updated Answer <===============</p>

To use SQL Query:

Step1: To create a global table from a DataFrame in Python or Scala:

dataFrame.write.saveAsTable("")

enter image description here

** Step2:** Now run the SQL query

spark.sql("select * from employees_table")

%sql 

select * from employees_table

введите описание изображения здесь

...