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

如何在Azure Databricks中创建读取Azure Data Lake Store的EXTERNAL TABLE?

当然没问题!我经常帮用户实现这类需求——在Azure Databricks中创建外部表来读取Azure Data Lake Store(ADLS)里的CSV文件完全可行,下面我会把具体步骤和细节给你讲清楚:

前提:配置ADLS访问权限

首先得确保你的Databricks集群能访问目标ADLS文件夹,常用的两种配置方式:

  • Service Principal(SP)认证:给SP分配Storage Blob Data Contributor权限到ADLS的目标容器/文件夹,然后在Databricks集群或笔记本中配置SP的密钥(通过Azure Key Vault或者直接在代码中指定)。
  • Azure AD Pass-through:如果你的Databricks集群启用了Azure AD身份传递,直接用你的AD账号权限访问即可,前提是你有ADLS文件夹的读取权限。
方法一:用Spark SQL创建外部表

这是最直接的方式,适合SQL优先的场景:

CREATE EXTERNAL TABLE IF NOT EXISTS my_csv_external_table (
  user_id INT,
  user_name STRING,
  register_date DATE,
  total_amount DOUBLE
)
USING csv
OPTIONS (
  header = "true",  -- 如果CSV文件有表头就设为true
  delimiter = ",",
  quote = "\"",
  nullValue = ""
)
LOCATION "abfss://your-container@your-datalake-account.dfs.core.windows.net/path/to/target-csv-folder/";

关键细节说明:

  • 手动指定表的Schema比用inferSchema=true更高效,尤其是处理大文件时,避免Spark全量扫描推断类型。
  • LOCATION里的路径要使用ADLS Gen2的abfss://协议;如果是ADLS Gen1,用adl://协议。
  • 外部表的元数据存在Databricks的Hive Metastore中,但源文件始终保存在ADLS里,删除表只会删除元数据,不会影响源文件。
方法二:用PySpark代码创建外部表

如果习惯用Python代码操作,可以通过DataFrame API来创建:

from pyspark.sql.types import StructType, StructField, IntegerType, StringType, DateType, DoubleType

# 先定义CSV文件的结构
csv_schema = StructType([
    StructField("user_id", IntegerType(), nullable=True),
    StructField("user_name", StringType(), nullable=True),
    StructField("register_date", DateType(), nullable=True),
    StructField("total_amount", DoubleType(), nullable=True)
])

# 读取CSV并创建外部表
spark.read \
    .schema(csv_schema) \
    .option("header", "true") \
    .option("delimiter", ",") \
    .csv("abfss://your-container@your-datalake-account.dfs.core.windows.net/path/to/target-csv-folder/") \
    .write \
    .mode("ignore")  # 表已存在时跳过创建
    .option("path", "abfss://your-container@your-datalake-account.dfs.core.windows.net/path/to/target-csv-folder/") \
    .saveAsTable("my_csv_external_table")

小提醒:

  • saveAsTable方法只要指定了path参数,创建的就是外部表;如果不指定,会创建内部表(数据存在Databricks的存储中)。
额外注意事项
  • 如果ADLS文件夹里有分区格式的CSV(比如按日期分区的date=2024-01-01子文件夹),可以在创建表时添加分区字段,或者用partitionBy参数自动识别分区。
  • 确保Databricks集群的网络能访问ADLS:如果ADLS设置了防火墙,需要把Databricks集群的IP加入允许列表,或者通过VNet peering打通网络。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:57