本文介绍如何在DLA中实现跨云账号快速分析OSS数据,即通过阿里云账号A查询分析阿里云账号B中的OSS数据。

前提条件

  • 通过阿里云B账号开通OSS服务,并上传测试数据,详情请参见开通OSS服务

    本示例在OSS Bucket的customer目录中上传测试数据customer.tbl

  • 通过阿里云账号A完成开通DLA服务等准备工作。

步骤一:新建RAM角色

  1. 使用阿里云账号B登录RAM控制台
  2. 在左侧导航栏,单击身份管理 > 角色
  3. 单击创建角色
  4. 可信实体类型选择阿里云服务,单击下一步
  5. 填写角色名称备注,受信服务选择物联网新建RAM角色
  6. 单击完成

步骤二:修改RAM角色的信任策略

  1. 使用阿里云账号B登录RAM控制台
  2. 在左侧导航栏,单击身份管理 > 角色
  3. 找到创建的RAM角色名称,单击角色名。
  4. 单击信任策略管理页签,然后单击修改信任策略,将"iot.aliyuncs.com"替换为<阿里云账号A的账号ID>@openanalytics.aliyuncs.com,例如111111111@openanalytics.aliyuncs.com,其中111111111为阿里云账号A的账号ID。修改信任策略
  5. 单击确定,手动复制角色基本信息中的ARN信息,后续DLA中创建Schema时需使用ARN信息。ARN信息

步骤三:为RAM角色添加OSS权限

  1. 使用阿里云账号B登录RAM控制台
  2. 在左侧导航栏,单击身份管理 > 角色
  3. 找到创建的RAM角色名称,单击角色名。
  4. 单击添加权限,如果您只需在DLA中只读访问OSS数据,则添加AliyunOSSReadOnlyAccess策略即可;如果您需要在DLA中执行INSERT OVERWRITE等数据更新操作,则添加AliyunOSSFullAccess策略。
  5. 单击确定

经过上述操作,阿里云账号A已经具备在DLA中创建OSS(阿里云账号B所有)Schema和表的权限。

步骤四:创建OSS Schema

  1. 使用阿里云账号A登录DLA控制台
  2. 单击左侧导航栏的Serverless Presto > SQL访问点
  3. 单击登录到DMS,输入DLA数据库账号和密码登录DMS,通过以下SQL创建OSS Schema。
    ​CREATE SCHEMA test_schema1 with DBPROPERTIES(
    catalog='oss',
    location = 'oss://your-oss-bucket-name/',
    cross_account_accessing_arn= 'acs:ram::14069264740****:role/for-dla-cross-account'  
    );​
    说明 您也可以通过MySQL命令行工具、客户端或者程序代码连接DLA,然后创建Schema。
  4. 在test_schema1中创建CUSTOMER表对应的外表。
    ​ CREATE EXTERNAL TABLE customer (
         `c_custkey` int,
         `c_name` string,
         `c_address` string,
         `c_nationkey` int,
         `c_phone` string,
         `c_acctbal` double,
         `c_mktsegment` string,
         `c_comment` string
     )
     ROW FORMAT DELIMITED
         FIELDS TERMINATED BY '|'
     STORED AS `TEXTFILE`
     LOCATION 'oss://your-oss-bucket-name/customer'​
    外表创建成功后,您可以在SQL执行中使用下面的示例语句查询表数据,实现跨云账号访问OSS数据。
    SELECT * FROM test_schema1.customer;
    SQL执行