您可以通过 jdbc 从 spark 数据库中获取模式吗?

Can you fetch schemas from spark databases via jdbc?

我正在尝试从数据块中的实例 A 连接到另一个数据块实例 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)') 

但是系统总是return报错:

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 的“正常” SELECT 语句针对实例 B 表,它 return 记录没有错误。

我在文档中读到 jdbc 驱动程序总是试图围绕 sql 语句,如

select * from (query)

这似乎是正在发生的行为,因此这就是我得到错误的原因。

我可以停止 jdbc 驱动程序的默认行为来包装 jdbc 查询,以便我可以 运行 实例 B 中的直接代码吗?

如果有这样的选项,我可以切换到 scala。

我遇到了同样的问题,show 关键字无法识别,所以使用其他方法来获得相同的关键字。我正在使用数据块提供的 databricks-sql-connector 来查询另一个实例。我提供一个详细的 link 供参考 - https://docs.databricks.com/dev-tools/python-sql-connector.html

  1. 您需要在实例上安装连接器
  2. 生成access_token访问集群
  3. 您可以在集群 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)