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

如何通过SQL从Databricks将数据导出至Azure Blob外部存储?

将Databricks表数据导出到Azure Blob外部存储的SQL方案

一、先创建Azure Blob外部Stage(若未创建)

如果还没有对应外部存储的Stage,先通过SQL创建,这里以SAS令牌认证为例:

CREATE STAGE IF NOT EXISTS azure_blob_stage
URL = 'abfss://<容器名称>@<存储账户名称>.dfs.core.windows.net/<存储路径>'
CREDENTIALS = (
  SAS_TOKEN = '<你的SAS令牌>'
);

若使用Azure AD认证,可将CREDENTIALS替换为AZURE_AD = true(需确保执行账号有Blob存储的写入权限)

二、两种导出数据的SQL方法

方法1:直接覆盖/追加写入Stage

适合全量导出,支持覆盖或追加现有数据:

  • 全量覆盖:
INSERT OVERWRITE STAGE azure_blob_stage
SELECT * FROM <你的源表名>;
  • 增量追加:
INSERT INTO STAGE azure_blob_stage
SELECT * FROM <你的源表名> WHERE <增量过滤条件>;

可指定导出文件格式,比如CSV:INSERT OVERWRITE STAGE azure_blob_stage FILEFORMAT = CSV SELECT * FROM <源表名>

方法2:用COPY INTO实现增量导出(推荐用于增量场景)

如果需要只导出新增数据,避免重复写入,可使用COPY INTO:

COPY INTO 'abfss://<容器名称>@<存储账户名称>.dfs.core.windows.net/<存储路径>'
FROM (
  SELECT * FROM <你的源表名> 
  WHERE <增量过滤条件> -- 比如 created_at > '2024-01-01'
)
FILEFORMAT = PARQUET
CREDENTIALS = (SAS_TOKEN = '<你的SAS令牌>')
COPY_OPTIONS ('mergeSchema' = 'true');

三、控制导出文件的数量与大小

如果需要调整导出文件的数量(避免生成过多小文件或单个大文件),可在查询中使用REPARTITION或COALESCE:

-- 分成10个文件
INSERT OVERWRITE STAGE azure_blob_stage
SELECT * FROM <你的源表名>
REPARTITION(10);

-- 合并为1个文件
INSERT OVERWRITE STAGE azure_blob_stage
SELECT * FROM <你的源表名>
COALESCE(1);

四、从外部服务执行SQL的方式

无需创建Databricks笔记本,可通过以下方式从外部服务执行上述SQL:

  • JDBC/ODBC驱动:使用Databricks SQL Warehouse的JDBC/ODBC连接串,在Python、Java应用或ETL工具(如Airflow、Talend)中建立连接,直接执行SQL语句。
  • Databricks REST API:调用Databricks的SQL执行API,提交SQL查询任务,获取执行结果。

内容的提问来源于stack exchange,提问作者dileep manuballa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:12:43