本文档介绍不同账号之间如何实现表格存储和 MaxCompute 之间的无缝连接。如需了解同账号下的表格存储与 Maxcompute 对接操作,请参考同账号下使用 MaxCompute 访问表格存储

准备工作

跨云账号需要两个主账号,账号 A 将访问权限授予账号 B,则运行 MaxCompute 时,账号 B 可以访问账号 A 下的表数据。基本信息如下:
说明 以下信息仅为示例,在操作时请替换为实际使用的信息。
项目 表格存储 MaxCompute
主账号名 账号 A 账号 B
UserId 12345 56789

使用 MaxCompute 跨云账号访问表格存储前,您需要完成以下准备工作:

  1. 账号 B 开通MaxCompute 服务,并创建MaxCompute 项目
  2. 账号 A 和 B 分别 创建 AccessKey
  3. 使用账号 A 登录 RAM 控制台,并在角色管理页面,创建用户角色。

    在本示例中,假设创建的角色名称为 AliyunODPSRoleForOtherUser。

  4. 进入该角色,在角色详情页面单击编辑基本信息,设置策略内容。 策略内容设置如下:
    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "1xxxx@odps.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }
    
    说明 请将上述策略内容中的 1xxxx 替换成您的 UID 即可。
  5. 角色创建后,您可以在角色详情页面查看该角色的 roleArn:


  6. 返回 RAM 控制台首页,进入策略管理页面,新建授权策略。

    在本示例中,假设授权策略名称为AliyunODPSRolePolicyForOtherUser。

    策略内容如下:

    	{
     "Version": "1",
     "Statement": [
    		{
    		  "Action": [
    			"ots:ListTable",
    			"ots:DescribeTable",
    			"ots:GetRow",
    			"ots:PutRow",
    			"ots:UpdateRow",
    			"ots:DeleteRow",
    			"ots:GetRange",
    			"ots:BatchGetRow",
    			"ots:BatchWriteRow",
    			"ots:ComputeSplitPointsBySize"
    		  ],
    		  "Resource": "*",
    		  "Effect": "Allow"
    		}
     ]
    	}
    
    
    说明 您也可以自定义其他权限,如 CreateTable 等。
  7. 角色管理页面,将 AliyunODPSRolePolicyForOtherUser 权限授权给 AliyunODPSRoleForOtherUser 角色。

  8. 在表格存储控制台创建实例创建数据表

    在本示例中,创建的表格存储实例和数据表信息如下:

    • 实例名称:cap1
    • 数据表名称:vehicle_track
    • 主键信息:vid (integer),gt (integer)
    • 访问域名:https://cap1.cn-hangzhou.ots-internal.aliyuncs.com
      说明 使用 MaxCompute 访问表格存储时,建议使用表格存储的私网地址。
    • 设置实例网络类型为允许任意网络访问

使用 MaxCompute 访问表格存储

跨账号访问的操作与同账号下的访问一样,只是在创建外部表时使用 roleArn。

账号 B 通过 MaxCompute 创建外部表,指定准备工作中创建出来的 roleArn 来访问表格存储。

具体操作步骤请参考同账号授权访问。其中,在步骤 2 创建外部表时,使用如下代码:

CREATE EXTERNAL TABLE ads_log_ots_pt_external
(
vid bigint,
gt bigint,
longitude double,
latitude double,
distance double ,
speed double,
oil_consumption double
)
STORED BY 'com.aliyun.odps.TableStoreStorageHandler'
WITH SERDEPROPERTIES (
'tablestore.columns.mapping'=':vid, :gt, longitude, latitude, distance, speed, oil_consumption',
'tablestore.table.name'='vehicle_track',
'odps.properties.rolearn'='acs:ram::12345:role/aliyunodpsroleforotheruser'
)
LOCATION 'tablestore://cap1.cn-hangzhou.ots-internal.aliyuncs.com'
USING 'odps-udf-example.jar'