Azure Blob 存储对象存储
Azure 有数个用于访问数据的界面。Vertica 在 Azure 存储中读取并始终写入块 Blob。Vertica 可以读取使用 ADLS Gen2 创建的外部数据,而 Vertica 导出的数据可以使用 ADLS Gen2 读取。
URI 格式
以下几项之一:
-
azb://account/container/path
-
azb://[account@]host[:port]/container/path
在第一个版本中,类似“azb://myaccount/mycontainer/path”的 URI 将“//”后面的第一个令牌视为帐户名。在第二个版本中,您可以指定帐户,并且必须显式指定主机。
以下规则适用于第二种形式:
- 如果未指定 account,则使用主机的第一个标签。例如,如果 URI 是“azb://myaccount.blob.core.windows.net/mycontainer/my/object”,则“myaccount”用于 account。
- 如果未指定 account 且 host 有一个标签并且没有端口,则端点是
host.blob.core.windows.net
。否则,端点是 URI 中指定的主机和端口。
协议(HTTP 或 HTTPS)在 AzureStorageEndpointConfig 配置参数中指定。
身份验证
如果您使用的是 Azure 托管身份,则无需在 Vertica 中进一步配置。如果 Azure 存储使用多个托管身份,则必须标记要使用的身份。Vertica 查找键为 VerticaManagedIdentityClientId 的 Azure 标记,其值必须是要使用的托管身份的 client_id 属性。如果更新 Azure 标记,请调用 AZURE_TOKEN_CACHE_CLEAR。
如果不使用托管身份,请使用 AzureStorageCredentials 配置参数向 Azure 提供凭据。如果加载数据,您可以在会话级别设置参数。如果在 Azure 上使用 Eon 模式公共存储,则必须在数据库级别设置此配置参数。
在 Azure 中,您还必须为 Vertica 中使用的身份授予对容器的访问权限。
配置参数
以下数据库配置参数适用于 Azure blob 文件系统。您可以使用适当的 ALTER 语句设置不同级别的参数,例如 ALTER SESSION...SET PARAMETER。 查询 CONFIGURATION_PARAMETERS 系统表以确定哪些级别(节点、会话、用户、数据库)对给定参数有效。
- AzureStorageCredentials
- JSON 对象的集合,其中每个对象指定一个端点的连接凭据。此参数优先于 Azure 托管标识。
该集合必须至少包含一个对象,并且可能会包含多个对象。每个对象必须至少指定
accountName
或blobEndpoint
之一,并且至少指定accountKey
或sharedAccessSignature
之一。accountName
:如果未指定,则使用blobEndpoint
标签。blobEndpoint
:带有可选端口的主机名 (host:port
)。如果未指定,则使用account.blob.core.windows.net
。accountKey
:帐户或端点的访问密钥。sharedAccessSignature
:用于更精细访问控制的访问令牌(如果 Azure 端点正在使用)。
- AzureStorageEndpointConfig
- JSON 对象的集合,其中每个对象指定一个端点的配置元素。每个对象必须至少指定
accountName
或blobEndpoint
之一。accountName
:如果未指定,则使用blobEndpoint
标签。blobEndpoint
:带有可选端口的主机名 (host:port
)。如果未指定,则使用account.blob.core.windows.net
。protocol
:HTTPS(默认)或 HTTP。isMultiAccountEndpoint
:如果端点支持多个帐户,则为 true,否则为 false(默认为 false)。要使用多帐户访问权限,则必须在 URI 中包含帐户名称。如果 URI 路径包含帐户,则系统将假定此值为 true,但显式设置为 false 则除外。
示例
以下示例将这些值用于配置参数。AzureStorageCredentials 包含敏感信息,且此示例中在会话级别设置。
=> ALTER SESSION SET AzureStorageCredentials =
'[{"accountName": "myaccount", "accountKey": "REAL_KEY"},
{"accountName": "myaccount", "blobEndpoint": "localhost:8080", "accountKey": "TEST_KEY"}]';
=> ALTER DATABASE default SET AzureStorageEndpointConfig =
'[{"accountName": "myaccount", "blobEndpoint": "localhost:8080", "protocol": "http"}]';
以下示例使用 Azure 中的数据创建一个外部表。URI 指定帐户名称“myaccount”。
=> CREATE EXTERNAL TABLE users (id INT, name VARCHAR(20))
AS COPY FROM 'azb://myaccount/mycontainer/my/object/*';
Vertica 使用 AzureStorageEndpointConfig 和帐户名称为文件生成以下位置:
https://myaccount.blob.core.windows.net/mycontainer/my/object/*
使用 REAL_KEY 凭据访问数据。
如果 COPY 语句中的 URI 改为 azb://myaccount.blob.core.windows.net/mycontainer/my/object
,则结果位置为 https://myaccount.blob.core.windows.net/mycontainer/my/object
,同样使用 REAL_KEY 凭据。
但是,如果 COPY 语句中的 URI 是 azb://myaccount@localhost:8080/mycontainer/my/object
,则主机和端口指定不同的端点:http://localhost:8080/myaccount/mycontainer/my/object
。此端点配置为使用不同的凭据 TEST_KEY。