通过临时凭据使用 COPY INTO 加载数据
如果 Azure Databricks 群集或 SQL 仓库无权读取源文件,则可以使用临时 credentials 访问外部云对象存储中的数据,并将文件加载到 Delta Lake table。
根据组织管理云安全性的方式,可能会需要云管理员或高级用户为你提供 credentials。 有关详细信息,请参阅生成临时凭据以用于引入。
指定临时 credentials 或加密选项以访问数据
注意
凭据和加密选项适用于 Databricks Runtime 10.4 LTS 和更高版本。
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 加载加密数据。 若要加载加密数据,请提供加密类型和数据解密密钥。
使用临时凭据加载数据
以下示例使用临时 credentials 从 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.windows.net/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
使用credentials作为源和目标来加载JSON数据
以下示例将 Azure 上的文件 JSON 数据加载到名为 my_json_data
的外部 Delta table。
必须先创建此 table,然后才能执行 COPY INTO
。
该命令使用一个现有凭据写入外部 Delta 表,并使用另一个凭据从 ABFSS 位置进行读取。
COPY INTO my_json_data WITH (CREDENTIAL target_credential)
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path' WITH (CREDENTIAL source_credential)
FILEFORMAT = JSON
FILES = ('f.json')