簡體   English   中英

如何從 Python Azure Synapse 筆記本連接到 Oracle DB?

[英]How to connect to an Oracle DB from a Python Azure Synapse notebook?

我正在嘗試從 Azure Synapse 筆記本中查詢 Oracle 數據庫,最好使用 Pyodbc,但 pyspark 解決方案也是可以接受的。 我相信這里的復雜性來自火花池的低可配置性——我相信代碼通常是正確的。

host = 'my_endpoint.com:[port here as plain numbers, e.g. 1111]/orcl'
database = 'my_db_name'
username = 'my_username'
password = 'my_password'

conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=' + host + ';'
'DATABASE=' + database + ';'
'UID=' + username + ';'
'PWD=' + password + ';')

我嘗試過的方法:

Pyodbc - 我可以使用可用的默認驅動程序({ODBC Driver 17 for SQL Server})並且我得到登錄超時。 我已經嘗試了服務器的普通 URL 和 IP,並且使用了端口、無端口、逗號端口、冒號端口的所有組合,並且沒有附加服務名稱“orcl”。 代碼示例在上面,但我認為問題出在驅動程序上。

Pyspark.read - 沒有指定 JDBC 驅動程序,我收到“沒有合適的驅動程序”錯誤。 我能夠將 OJDBC.jar 添加到工作區或我的文件目錄,但我無法弄清楚如何告訴 spark 應該使用它。

cx_oracle - 我的工作區不允許這樣做。

如果解決方案需要設置環境變量或使用 spark-submit,請提供一個鏈接,說明如何在 Synapse 中最好地做到這一點。 我會對 JDBC 或 ODBC 解決方案感到滿意。

通過將此處的.jar (ojdbc8-19.15.0.0.1.jar) 添加到 Synapse 工作區包,然后將 package 添加到 ZE9713AE04A02A810D6F33DD9,我能夠執行以下代碼包

host = 'my_host_url'
port = 1521
service_name = 'my_service_name'

jdbcUrl = f'jdbc:oracle:thin:@{host}:{port}:{service_name}'
sql = 'SELECT * FROM my_table'
user = 'my_username'
password = 'my_password'
jdbcDriver = 'oracle.jdbc.driver.OracleDriver'

jdbcDF = spark.read.format('jdbc') \
    .option('url', jdbcUrl) \
    .option('query', sql) \
    .option('user', user) \
    .option('password', password) \
    .option('driver', jdbcDriver) \
    .load()

display(jdbcDF)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM