You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Snowflake表设置为Databricks Hive元存储的外部表

结论

该操作完全可行,你可以在Databricks的Hive元存储/Unity Catalog中创建指向Snowflake表的外部表,无需将Snowflake数据导入Databricks存储层,创建后即可直接用Spark SQL和Delta表做关联查询、合并等操作,和你之前创建ADLS Gen2上的Delta外部表逻辑一致。

操作步骤

方式1:SQL语句直接创建(和Delta外部表语法对齐)

直接使用CREATE TABLE语句,将USING后的数据源类型改为snowflake,填入对应的Snowflake连接参数即可:

CREATE TABLE IF NOT EXISTS <Databricks侧库名>.<自定义表名>
USING snowflake
OPTIONS (
  sfURL '<Snowflake账户标识>.snowflakecomputing.com',
  sfUser '<Snowflake用户名>',
  sfPassword '<Snowflake密码>',
  sfRole '<Snowflake角色>',
  sfWarehouse '<Snowflake计算仓库名>',
  sfDatabase '<Snowflake侧库名>',
  sfSchema '<Snowflake侧Schema名>',
  dbtable '<Snowflake侧表名>'
);

注意:不要硬编码密码等敏感信息,推荐使用Databricks Secrets存储敏感配置,密码字段替换为 sfPassword secret("<密钥作用域名称>", "<Snowflake密码对应的密钥名>") 即可。

方式2:通过Spark API创建

如果你习惯用Python代码实现,也可以先读取Snowflake表生成DataFrame,再注册为持久化的元数据表:

sfOptions = {
  "sfURL" : "<Snowflake账户标识>.snowflakecomputing.com",
  "sfUser" : "<Snowflake用户名>",
  "sfPassword" : "<Snowflake密码>",
  "sfDatabase" : "<Snowflake侧库名>",
  "sfRole": "<Snowflake角色>",
  "sfWarehouse" : "<Snowflake计算仓库名>",
  "dbtable": "<Snowflake侧Schema名>.<Snowflake侧表名>"
} 

# 读取Snowflake表后直接注册为元数据表,数据不会落地到Databricks存储
spark.read.format("net.snowflake.spark.snowflake")\
      .option("column_mapping","name")\
      .options(**sfOptions) \
      .load() \
      .write.mode("ignore") \ # 表不存在时才创建,避免覆盖
      .saveAsTable("<Databricks侧库名>.<自定义表名>")

使用示例

创建完成后,你可以直接像查询普通Delta表一样使用该外部表,和Delta表合并的参考示例如下:

-- 示例:Snowflake外部表与Delta表关联查询
SELECT a.*, b.delta_table_column
FROM <Databricks侧库名>.<Snowflake外部表名> a
INNER JOIN <Delta表名> b 
ON a.common_id = b.common_id

补充说明:该外部表本质是指向Snowflake的映射,查询时会自动将计算逻辑下推到Snowflake执行,不会占用Databricks侧的存储资源,查询性能和直接调用Spark连接器读取Snowflake表一致。

内容的提问来源于stack exchange,提问作者Cristian Ispan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:54:00