使用数据访问服务 (DAS) 访问 ADLS 和 ABS 兼容存储器

外部应用程序和查询引擎可通过 DAS 代理访问由 watsonx.data 管理的 Azure Data Lake Storage (ADLS) 和 Azure Blob Storage (ABS) 兼容存储。

2.1.2 中完全删除了数据访问服务 (DAS) 代理功能,watsonx.data 中也不再提供该功能。 不能使用数据访问服务 (DAS) 代理功能访问对象存储( S3、ADLS 和 ABS)。

对 ADLS 和 ABS 的 DAS 代理支持只能通过 AccountKey 来传递 watsonx.data 证书。 不支持使用 SASToken 传递 watsonx.data 证书。

访问 ADLS 和 ABS 兼容存储:

  1. 从 watsonx.data 信息窗口获取 DAS 端点。 单击主页上的 i 图标,打开信息窗口。

  2. 在 Java 代码中,用 DAS 端点替换 ADLS 或 ABS 端点。 将访问名称替换为编码值,如下所示:

    base64{<crn>|Basic base64{ibmlhapikey_<user_id>:<IAM_APIKEY>}}
    

    要获取 Base64 编码字符串,请使用以下命令之一:

    printf "username:<apikey>" | base64
    
    echo -n "username:<apikey>" | base64
    
  3. 将 Java 代码中的容器名称替换如下:

    cas/v1/proxy/<storage name in watsonx.data>
    

Java 代码示例

      //For IBM Cloud <ADLS or ABS account name>|base64{<crn>|Basic base64{ibmlhapikey_<user_id>:<IAM_APIKEY>}}
      //For AWS <ADLS or ABS account name>|base64{<crn>|Basic base64{ibmlhapikey_ServiceId-<service_id>:<APIKEY>}}
      String accountName = "<ADLS or ABS account name>|base64{<instanceid>|ZenApikey base64{username:<apikey>}}";
      String accountKey = "any string";
      String endPoint = "<DAS endpoint>";
      String containerName ="cas/v1/proxy/<storagename in watsonx.data>";
      String endpoint = String.format(endPoint,accountName);

      BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
                .endpoint(endpoint)
                .credential(new StorageSharedKeyCredential(accountName, accountKey))
                .buildClient();

      BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);