DLA支持通过CU版访问用户自建的OceanBase,通过标准SQL语句查询OceanBase中的数据或者直接向OceanBase写入数据。本文介绍如何通过DLA读写OceanBase上的数据。

前提条件

  • 目前仅支持通过CU版访问OceanBase,请确保您已开通CU版,开通方式,请参见DLA Presto CU版本快速入门
  • 虚拟集群绑定的数据源网络必须和OceanBase集群在同一个VPC下面。

准备工作

在通过DLA读写OceanBase数据前,您需要在OceanBase中创建测试表。

以下为创建OceanBase表的示例:
create table person (
  id bigint, 
  name varchar(64),
  age int);

操作步骤

  1. 连接DLA
  2. 创建库
    CREATE DATABASE `oceanbase_test`
    WITH DBPROPERTIES (
      catalog = 'oceanbase', 
      location = 'jdbc:oceanbase://oceanbaseIp:oceanbasePort/testDatabaseName',
      user = 'userName',
      password = 'password', 
      vpc_id = 'vpcId',
      instance_id = 'instanceId' );
    参数说明如下:
    • CATALOG:取值为oceanbase,表示创建的是Oceanbase Schema。
    • LOCATION:填写oceanBase的地址,以及对应oceanBase中的database名。
    • USER:OceanBase数据库的用户名。
    • PASSWORD:OceanBase数据库的密码。
    • VPC_ID:OceanBase所在的网络vpcId。
    • INSTANCE_ID:部署OceanBase的instanceId。
  3. 创建表
    CREATE EXTERNAL TABLE oceanbase_test.person (
      id int,
      name varchar,
      age int);
    注意 表名、字段的顺序和类型要和OceanBase中对应的表保持一致。
  4. 访问数据由于只有CU的计算资源和OceanBase网络可以联通,因此所有访问OceanBase表的SQL语句都需要指定hint: /*+cluster=your-vc-name*/ ,这样SQL就会在CU中执行。
    例如:
    mysql> /*+ cluster=vc-test */ insert into oceanbase_test.person values (1, 'james', 10);
    +------+
    | rows |
    +------+
    |    1 |
    +------+
    1 row in set (0.46 sec)
    mysql> /*+ cluster=vc-test */ select id, name, age from oceanbase_test.person;
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    +------+-------+------+
    1 row in set (0.43 sec)

    更多SQL信息,请参见常用SQL