我正在嘗試從 databricks 中的實體 A 連接到另一個 databricks 實體 B 以讀取其表和模式(資料庫)
如何使用 jdbc 從實體 B 中獲取模式?
這是我嘗試過的:
sparkUrl = f"jdbc:{UrlPrefix}://{Host}:{Port}/default;transportMode=http;ssl=1;httpPath={Db};AuthMech=3;UID={Uid};PWD={Pwd};UseNativeQuery=1"
spark.read.jdbc( url=sparkUrl, table=f'(SHOW SCHEMAS)')
但是系統總是回傳錯誤:
java.sql.SQLException: [Simba][SparkJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: org.apache.hive.service.cli.HiveSQLException: Error running query: org.apache.spark.sql.AnalysisException: Table or view not found: SHOW; line 1 pos 15
如果我從實體 A 對實體 B 表運行“正常”SELECT 陳述句,它將回傳沒有錯誤的記錄。
我在檔案中讀到 jdbc 驅動程式總是試圖圍繞 sql 陳述句,如
select * from (query)
似乎這是正在發生的行為,因此這就是我得到錯誤的方式。
我可以停止 jdbc 驅動程式的默認行為來包裝 jdbc 查詢,以便我可以在實體 B 中運行直接代碼嗎?
如果有這樣的選項,我可以切換到 scala。
uj5u.com熱心網友回復:
我遇到了同樣的問題,show關鍵字無法識別,因此使用替代方法來獲得相同的關鍵字。我正在使用databricks-sql-connectordatabricks 提供的查詢另一個實體。我提供了一個詳細的參考鏈接 - https://docs.databricks.com/dev-tools/python-sql-connector.html
- 您需要在實體上安裝連接器
- 生成 access_token 訪問集群
- 您可以在集群 jdbc/odbc 選項卡上獲取所有主機名和路徑詳細資訊。
from databricks import sql
with sql.connect(server_hostname="databricks.com",
http_path="sql/protocolv1/o/0/2",
access_token="asdjaskdjaskXXXX") as connection:
with connection.cursor() as cursor:
cursor.execute("SHOW SCHEMAS ")
result = cursor.fetchall()
for row in result:
print(row)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448577.html
下一篇:提取字串向量的唯一元素
