Я подключаюсь к локальной базе данных SQL Server, используя приведенный ниже код, и он работает как положено. Я обернул запрос, который хочу использовать, в представление и вызвал представление для чтения данных в фрейм данных. Как явно указать запрос выбора в параметрах spark.read
вместо использования полной таблицы или заключения моего выбора в представление? например option("sqlcommand", "select col1, col2 from table1;")
df = (spark.read
.format("jdbc")
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
.option("url", "jdbc:sqlserver://our connection string")
.option("dbtable", "dbo.databrickstest")
.option("user",user)
.option("password", pwd)
.option("encrypt", "true")
.option("trustServerCertificate", "true")
.load()
)
Вам следует использовать опцию query
вместо опции dbtable
. Используйте .option("query", "SELECT col1, col2 FROM table1")
, чтобы указать свой SQL-запрос. Вот пример кода для вашей справки:
jdbcHostname = "<serverName>"
jdbcPort = 1433
jdbcDatabase = "<dbName>"
jdbcUsername = "<userName>"
jdbcPassword = "<password>"
jdbcDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbcUrl = f"jdbc:sqlserver://{jdbcHostname}:{jdbcPort};databaseName = {jdbcDatabase}"
df = spark.read.format("jdbc").option("driver", jdbcDriver).option("url", jdbcUrl).option("query", "select EmployeeID, FirstName from Employees").option("user", jdbcUsername).option("password", jdbcPassword).load()
df.show()
Он успешно выполнит запрос и выдаст следующий результат:
Вы читаете всю таблицу, когда используете:
.option("dbtable", "dbo.databrickstest")
Чтобы этого избежать, вам необходимо заменить эту строку на:
.option("query", query_you_want)
Полный пример:
query = ("""
SELECT
columns
FROM table
WHERE condition
""")
df = spark.read \
.format("jdbc") \
.option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
.option("url", "jdbc:sqlserver://our connection string") \
.option("query", query) \
.option("user",user) \
.option("password", pwd) \
.option("encrypt", "true")
.option("trustServerCertificate", "true") \
.load()
ссылка из документа: https://spark.apache.org/docs/3.5.1/sql-data-sources-jdbc.html#data-source-option
Спасибо, что поделились своими сомнениями. Если вам понадобится дополнительная помощь, дайте мне знать!
Пробовали ли вы читать документацию Spark JDBC для других баз данных? Есть вариант
query
.