Databricks SQL 似乎不支持 SQL 服务器

Databricks SQL doesn't seem to support SQL Server

我在 Databricks 上的 python 笔记本中使用 JDBC 创建了一些配置单元表。这是关于数据科学与工程 UI。我能够查询 Databricks Notebook 中的表,并使用魔术命令 %

直接 SQL 用户

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

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

您可以使用外部 table 将 Hive table 从云存储导入 Databricks 并使用 Databricks SQL.

查询它

第 1 步:显示 CREATE TABLE 语句

在 Hive 命令行上发出 SHOW CREATE TABLE <tablename> 命令以查看创建 table.

的语句

参考下面的例子:

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 TABLE 命令,复制该语句并将 CREATE TABLE 替换为 CREATE EXTERNAL TABLE.

  • EXTERNAL 确保 Spark SQL 不会在您删除 table.

    时删除您的数据
  • 您可以省略 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

是的,Databricks SQL 目前仅支持 file-based 格式,这是一个已知的限制。我记得它与安全模型有关,再加上 DBSQL 在幕后使用 Photon,而 JDBC 集成可能性能不佳。您可以联系您的解决方案架构师或客户成功工程师,以了解将来是否会支持它。

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