【问题标题】:Databricks SQL doesn't seem to support SQL ServerDatabricks SQL 似乎不支持 SQL Server
【发布时间】:2022-08-14 03:00:02
【问题描述】:

我在 Databricks 上的 python 笔记本中使用 JDBC 创建了一些配置单元表。这是在数据科学和工程 UI 上。我可以使用魔术命令 % 查询 Databricks Notebook 和用户直接 SQL 中的表

切换到 Databricks SQL UI 时,我仍然能够在 Hive 元存储资源管理器中看到表。但是我无法读取数据。一条非常明确的消息说只支持 csv、parquet 等。

尽管如此,我发现这令人惊讶,因为我可以在 DS 和 Engineering UI 上使用数据,为什么在 Databricks SQL 上不是这样?有什么办法可以克服吗?

    标签: sql-server databricks azure-databricks databricks-sql


    【解决方案1】:

    是的,Databricks SQL 现在只支持基于文件的格式,这是一个已知的限制。我记得它与安全模型有关,再加上 DBSQL 在后台使用 Photon 的事实,而 JDBC 集成的性能可能不那么好。您可以联系您的解决方案架构师或客户成功工程师,以获取有关将来是否会支持的信息。

    当前的解决方法只是让一个作业定期通过 JDBC 从数据库中读取所有数据并转储到 Delta 表中 - 与 JDBC 相比,它的性能可能更高,唯一的问题是数据的新鲜度。

    【讨论】:

      【解决方案2】:

      您可以使用外部表将 Hive 表从云存储导入 Databricks,并使用 Databricks SQL 对其进行查询。

      步骤1:显示 CREATE TABLE 语句

      在 Hive 命令行上发出 SHOW CREATE TABLE <tablename> 命令以查看创建表的语句。

      参考下面的例子:

      hive> SHOW CREATE TABLE wikicc;
      OK
      CREATE  TABLE `wikicc`(
        `country` string,
        `count` int)
      ROW FORMAT SERDE
        'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
      STORED AS INPUTFORMAT
        'org.apache.hadoop.mapred.TextInputFormat'
      OUTPUTFORMAT
        'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
      LOCATION
        '/user/hive/warehouse/wikicc'
      TBLPROPERTIES (
        'totalSize'='2335',
        'numRows'='240',
        'rawDataSize'='2095',
        'COLUMN_STATS_ACCURATE'='true',
        'numFiles'='1',
        'transient_lastDdlTime'='1418173653')
      

      第2步:发出 CREATE EXTERNAL TABLE 语句

      如果返回的语句使用创建表命令,复制语句并替换使用 CREATE EXTERNAL TABLE 创建表.

      • EXTERNAL 确保 Spark SQL 在您删除表时不会删除您的数据。

      • 您可以省略 TBLPROPERTIES 字段。

      DROP TABLE wikicc

      CREATE EXTERNAL TABLE `wikicc`(
        `country` string,
        `count` int)
      ROW FORMAT SERDE
        'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
      STORED AS INPUTFORMAT
        'org.apache.hadoop.mapred.TextInputFormat'
      OUTPUTFORMAT
        'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
      LOCATION
        '/user/hive/warehouse/wikicc'
      

      第 3 步:对数据发出 SQL 命令

      SELECT * FROM wikicc

      来源:https://docs.databricks.com/data/data-sources/hive-tables.html

      【讨论】:

      • 问题是关于通过 JDBC 访问外部数据库中的数据...
      • 试图提供一种替代解决方案,因为我认为 OP 的要求是不可能的。
      • 谢谢。我有 2 个后续问题。如何访问 Hive 命令行,我找不到任何路径?其次,我看到您提到的文档提到从云存储创建表,它适用于 MS SQL 表吗?只要我无法访问 Hive CLI,我就无法检查自己
      • AFAIK 数据块中没有可用的 Hive 命令行。该文档不适用于 SQL 表,因此您需要先在存储帐户中创建外部表,然后使用 databricks SQL 访问它。
      • 这是限制,因此您可以选择这个给定的解决方法。
      猜你喜欢
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2010-12-08
      • 2013-04-20
      相关资源
      最近更新 更多