Databricks 查询 ODBC 错误,未找到表或视图:.delta.s3

问题描述 投票:0回答:1

我正在尝试通过 ODBC 连接到 Databricks 集群,以从本地 python 脚本运行一些 SQL 查询。

我遵循 将 Python 和 pyodbc 连接到 Databricks 指南,我能够从示例 (

samples
) 中给出的
SELECT * FROM samples.nyctaxi.trips LIMIT 10
表中获取数据。

即使我将查询更改为 s3 存储桶中的一个读数,我也会收到此错误:

    cursor.execute("SELECT * FROM delta.`s3:/my-bucket/some/path/to/dataset/` limit 10")
pyodbc.ProgrammingError: ('42S02', '[42S02] [Simba][SQLEngine] (31740) Table or view not found: .delta.s3://my-bucket/some/path/to/dataset/ (31740) (SQLExecDirectW)')

从同一集群上的 Databricks Notebook 执行时,相同的查询可以工作。

我需要设置一些特殊属性吗? ODBC 驱动程序是否遇到反引号 (`) 问题?

我正在运行 Databricks 指南中的完全相同的 saem 代码:

import pyodbc
import os

conn = pyodbc.connect(
  "Driver=/Library/simba/spark/lib/libsparkodbc_sb64-universal.dylib;" +
  f"Host={os.getenv('DATABRICKS_HOST')};" +
  "Port=443;" +
  f"HTTPPath={os.getenv('DATABRICKS_HTTP_PATH')};" +
  "SSL=1;" +
  "ThriftTransport=2;" +
  "AuthMech=3;" +
  "UID=token;" +
  f"PWD={os.getenv('DATABRICKS_TOKEN')}",
  autocommit = True
)

# Run a SQL query by using the preceding connection.
cursor = conn.cursor()
cursor.execute("SELECT * FROM samples.nyctaxi.trips")

# Print the rows retrieved from the query.
for row in cursor.fetchall():
  print(row)
apache-spark-sql databricks pyodbc
1个回答
0
投票

Databricks ODBC 文档页面提及:

ODBC 驱动程序接受 ANSI SQL-92 方言的 SQL 查询,并将查询转换为 Databricks SQL 方言。但是,如果您的应用程序直接生成 Databricks SQL,或者您的应用程序使用特定于 Databricks 的任何非 ANSI SQL-92 标准 SQL 语法,Databricks 建议您将 UseNativeQuery=1 设置为连接配置。通过该设置,驱动程序将 SQL 查询逐字传递到 Databricks。

select from delta.path
这样明显特定的结构可以使用这种机制重写(损坏)。我不确定这是一个驱动程序错误还是只是一些 ODBC 细节。无论如何,按照此处的建议,将
UseNativeQuery=1
添加到连接字符串将防止此问题。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.