使用 COPY INTO 和临时凭据加载数据

如果你的 Azure Databricks 群集或 SQL 仓库无权读取源文件,则可以使用临时凭据访问外部云对象存储中的数据,并将文件加载到 Delta Lake 表中。

根据组织管理云安全性的方式,可能需要要求云管理员或 Power 用户提供凭据。 有关详细信息,请参阅生成临时凭据以进行引入

指定临时凭据或加密选项以访问数据

注意

凭据和加密选项适用于 Databricks Runtime 10.2 和更高版本。

COPY INTO 支持:

  • Azure SAS 令牌,用于从 ADLS Gen2 和 Azure Blob 存储读取数据。 Azure Blob 存储临时令牌位于容器级别,而 ADLS Gen2 令牌除了容器级别之外还可以位于目录级别。 Databricks 建议尽可能使用目录级 SAS 令牌。 SAS 令牌必须具有“读取”、“列表”和“权限”权限。
  • AWS STS 令牌,用于从 AWS S3 读取数据。 你的令牌应具有“s3:GetObject*”、“s3:ListBucket”和“s3:GetBucketLocation”权限。

警告

为了避免滥用或泄露临时凭据,Databricks 建议设置足够长的时间范围来完成任务。

COPY INTO 支持从 AWS S3 加载加密数据。 若要加载加密数据,请提供加密类型和数据解密密钥。

使用临时凭据加载数据

以下示例从 S3 和 ADLS Gen2 加载数据,并使用临时凭据提供对源数据的访问权限。

COPY INTO my_json_data
FROM 's3://my-bucket/jsonData' WITH (
  CREDENTIAL (AWS_ACCESS_KEY = '...', AWS_SECRET_KEY = '...', AWS_SESSION_TOKEN = '...')
)
FILEFORMAT = JSON

COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.chinacloudapi.cn/jsonData' WITH (
  CREDENTIAL (AZURE_SAS_TOKEN = '...')
)
FILEFORMAT = JSON

加载加密数据

使用客户提供的加密密钥,以下示例从 S3 加载数据。

COPY INTO my_json_data
FROM 's3://my-bucket/jsonData' WITH (
  ENCRYPTION (TYPE = 'AWS_SSE_C', MASTER_KEY = '...')
)
FILEFORMAT = JSON

使用源和目标凭据加载 JSON 数据

以下示例将来自 Azure 上的文件中的 JSON 数据加载到名为 my_json_data 的外部 Delta 表中。 必须在执行 COPY INTO 之前创建此表。 该命令使用一个现有凭据写入外部 Delta 表,并使用另一个凭据从 ABFSS 位置进行读取。

COPY INTO my_json_data WITH (CREDENTIAL target_credential)
  FROM 'abfss://container@storageAccount.dfs.core.chinacloudapi.cn/base/path' WITH (CREDENTIAL source_credential)
  FILEFORMAT = JSON
  FILES = ('f.json')