Databricks 第三篇:通過JDBC連線資料庫
阿新 • • 發佈:2021-01-08
Databricks Runtime 包含Azure SQL 資料庫的 JDBC 驅動程式,本文介紹如何使用資料幀 API 連線到使用 JDBC 的 SQL 資料庫,通過 JDBC 介面進行的讀取操作和更新操作。
在Databricks的Notebook中,spark是Databricks內建的一個SparkSession,可以通過該SparkSession來建立DataFrame、引用DataFrameReader和DataFrameWriter等。
一,建立JDBC URL
本文適用Python語言和JDBC驅動程式來連線Azure SQL Database,
jdbcHostname = "Azure SQL Database" jdbcDatabase = "db_name" jdbcPort = 1433 jdbcUsername="user_name" jdbcPassword="user_password" jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2}".format(jdbcHostname, jdbcPort, jdbcDatabase) connectionProperties = { "user" : jdbcUsername, "password" : jdbcPassword, "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver" }
二,把查詢向下推送到資料庫引擎
可把整個查詢或表向下推送到資料庫,且只返回結果。table
引數標識要讀取的 JDBC 表。
spark.read.jdbc(url, table, column=None, lowerBound=None, upperBound=None, numPartitions=None, predicates=None, properties=None)
引數註釋:
- url:JDBC URL
- table:表名或查詢
- column、numPartitions、lowerBound和upperBound:用於指定分割槽的列名,分割槽的數量,分割槽的列的最小值和最大值
- predicates:謂詞,用於對資料進行過濾,類似於Where子句
- properties:JDBC資料庫連線引數的字典
1,向下推送表
如果把table設定為表名,那麼表示查詢整個表。
pushdown_query = "table_name" df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=connectionProperties) display(df)
對查詢的結果進行投影和過濾:
spark.read.jdbc(jdbcUrl, table=pushdown_query, connectionProperties).select("carat", "cut", "price").where("cut = 'Good'")
2,向下推送查詢
如果向下推送查詢,那麼需要採用下方的格式:(query) data_alias
pushdown_query = "(select * from employees where emp_no < 10008) emp_alias" df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=connectionProperties) display(df)
三,向下推送更新
通過JDBC,把DataFrame的內容儲存到外部資料表中:
spark.write.jdbc(url, table, mode=None, properties=None)
引數註釋:
- url:JDBC Url
- table:外部資料庫的表名
- mode:資料更新的模式,append、overwrite、ignore、error(預設,如果資料存在,丟擲異常)
- properties:JDBC資料庫連線引數的字典
參考文件: