本文介绍如何通过外表将Tablestore数据导入至云原生数据仓库AnalyticDB MySQL版湖仓版(3.0)

前提条件

  • 已创建Tablestore实例。具体操作,请参见使用流程
  • 已创建AnalyticDB MySQL湖仓版(3.0)集群。具体操作,请参见创建湖仓版(3.0)集群
    说明 如果在创建Tablestore实例时绑定了VPC,请确保AnalyticDB MySQL与Tablestore有相同的VPC。

背景信息

Tablestore是阿里云自研的NoSQL多模型数据库,支持多元索引查询。您可以在AnalyticDB MySQL中调用TableStore API进行数据查询,例如点查询、范围查询等。同时,支持智能选择主表、二级索引表和多元索引表,大大提升查询性能,降低用户成本。关于多元索引的详细信息,请参见多元索引

TableStore实例是您使用和管理表格存储服务的实体,每个实例相当于一个数据库。Tablestore的实例对应AnalyticDB MySQL的Schema或Database。Tablestore实例如果没有绑定VPC网络,那么AnalyticDB MySQL可以直接访问。如果Tablestore实例绑定了VPC网络,那么请确保AnalyticDB MySQL和Tablestore实例配置的VPC相同。

示例数据说明

本文示例中,在Tablestore中创建person表,并向表中插入4条记录。如果您已经有数据源,请跳过该步骤。
id(主键)nameage
1james10
2bond20
3jack30
4lucy40

操作步骤

  1. 进入SQL开发编辑器。
    1. 登录云原生数据仓库AnalyticDB MySQL控制台
    2. 在页面左上角,选择集群所在地域。
    3. 在左侧导航栏,单击集群列表
    4. 湖仓版(3.0)页签下,单击目标集群ID
    5. 在左侧导航栏,单击作业开发 > SQL开发
  2. 创建外部数据库。
    以创建adb_external_db数据库为例,建库示例语句如下:
    create external database adb_external_db;
  3. 创建外表。
    说明 AnalyticDB MySQL外表和TableStore中表的字段名称、字段数量、字段顺序一致,字段类型兼容。数据类型映射关系,请参见数据类型映射关系
    adb_external_db数据库中,创建person表,建表示例语句如下:
    CREATE EXTERNAL TABLE IF NOT EXISTS adb_external_db.person (
        id int,
        name string,
        age int
    ) ENGINE = 'OTS'  
    TABLE_PROPERTIES = '{
    "mapped_name":"person",
    "location":"https://w0****la.cn-hangzhou.vpc.tablestore.aliyuncs.com"
    }'
    参数说明
    ENGINE='OTS’外表的存储引擎。读写Tablestore数据时,取值为OTS。
    mapped_nameTablestore实例中的表名称。查看Tablestore实例的表名称,登录表格存储控制台,在实例管理页面查看。
    locationTablestore实例的VPC访问地址。查看Tablestore实例的VPC访问地址,登录表格存储控制台,在实例管理页面查看。
  4. 外表创建成功后,AnalyticDB MySQL自动将Tablestore的表数据映射到AnalyticDB MySQL表。您可以在AnalyticDB MySQL中通过SELECT查询Tablestore中person表的数据。
    select * from adb_external_db.person;
    返回结果如下:
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lucy  |   40 |
    +------+-------+------+
    4 rows in set (0.35 sec)
  5. 如果需要导入Tablestore数据到AnalyticDB MySQL,可查看接下来的步骤。
    1. AnalyticDB MySQL中创建数据库,示例如下:
      CREATE DATABASE adb_demo; 
    2. AnalyticDB MySQL中创建表用于存储从Tablestore中导入的数据,示例如下:
      说明 新表和步骤3中创建的外表的字段顺序和字段数量需要一致,字段类型兼容。
      CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(
          id int,
          name string,
          age int
      )
      DISTRIBUTE BY HASH(id);                   
    3. 向表中写入数据,示例如下:
      • 方式一:执行INSERT INTO导入数据,当主键重复时会自动忽略当前写入数据,不做更新,作用等同于INSERT IGNORE INTO,详情请参见INSERT INTO。示例如下:
        INSERT INTO adb_demo.adb_import_test
        SELECT * FROM adb_external_db.person;
        通过SELECT查询写入表中的数据,示例如下:
        select * from adb_demo.adb_import_test;
        返回结果如下:
        +------+-------+------+
        | id   | name  | age  |
        +------+-------+------+
        |    1 | james |   10 |
        |    2 | bond  |   20 |
        |    3 | jack  |   30 |
        |    4 | lucy  |   40 |
        +------+-------+------+
      • 方式二:执行INSERT OVERWRITE INTO导入数据,会覆盖表中原有的数据。示例如下:
        INSERT OVERWRITE INTO adb_demo.adb_import_test
        SELECT * FROM adb_external_db.person;
      • 方式三:异步执行INSERT OVERWRITE INTO导入数据。通常使用SUBMIT JOB提交异步任务,由后台调度,可以在写入任务前增加Hint(/* direct_batch_load=true*/)加速写入任务。详情请参见异步写入。示例如下:
        SUBMIT job 
        INSERT OVERWRITE INTO adb_demo.adb_import_test
        SELECT * FROM adb_external_db.person;
        返回结果如下:
        +---------------------------------------+
        | job_id                                |
        +---------------------------------------+
        | 2020112122202917203100908203303****** |

        关于异步提交任务详情,请参见异步提交导入导出任务

数据类型映射关系

Tablestore支持的数据类型与AnalyticDB MySQL数据类型的映射关系如下:
Tablestore支持的数据类型映射到AnalyticDB MySQL的数据类型
INTEGER(8字节)BIGINT(8字节)
STRINGVARCHAR
BINARYBINARY
DOUBLEDOUBLE
BOOLEANBOOLEAN