本文介绍如何通过AnalyticDB for MySQL映射表和INSERT OVERWRITE INTO或者INSERT INTO将OSS中的数据导入AnalyticDB for MySQL。

前提条件

  • 通过以下步骤在对象存储(Object Storage Service,简称OSS)中创建存储AnalyticDB for MySQL数据的目录。
    1. 开通OSS服务
      说明 OSS与AnalyticDB for MySQL所属Region相同。
    2. 创建存储空间
    3. 新建目录
    4. 上传测试数据文件

      本示例将oss_import_test_data.txt文件上传至OSS中的bucket-name.oss-cn-hangzhou.aliyuncs.com/adb/目录,数据行分隔符为换行符,列分隔符为;,文件示例数据如下所示。

      0001;hello_world_1
      0002;hello_world_2
      0003;hello_world_3
      0004;hello_world_4
      0005;hello_world_5
      0006;hello_world_6
      ...                           
      测试数据
  • 根据AnalyticDB for MySQL快速入门,完成创建实例、设置白名单、创建账号和数据库等准备工作。

操作步骤

  1. 连接目标集群,进入目标数据库。

    本示例将oss_import_test_data.txt中的数据导入AnalyticDB for MySQL的adb_demo库中。

  2. 通过CREATE TABLE,在adb_demo数据库中创建外部映射表oss_import_test_external_table
    CREATE TABLE IF NOT EXISTS oss_import_test_external_table
    (
    uid string,
    other string
    )
    ENGINE='OSS'
    TABLE_PROPERTIES='{
    "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
    "url":"oss://bucket-name/adb/oss_import_test_data.txt",
    "accessid":"LTAIF****5FsE",
    "accesskey":"Ccw****iWjv",
    "delimiter":";",
    "skip_header_line_count":1
    }'                   
    参数 说明
    ENGINE=’OSS’ 表示该表是外部表,使用的存储引擎是OSS。
    TABLE_PROPERTIES 用于告知AnalyticDB for MySQL如何访问OSS中的数据。
    endpoint OSS的EndPoint(域名节点)
    说明 目前仅支持AnalyticDB for MySQL通过OSS中ECS的VPC网络(内网)访问OSS。

    登录OSS控制台,单击目标Bucket,在Bucket概览页面查看endpoint

    url OSS中oss_import_test_external_table文件的绝对地址。
    accessid 您在访问oss_import_test_external_table文件时所持有的AccessKey ID。

    如何获取您的accessid和accesskey,请参见获取账号的AK信息

    accesskey 您在访问oss_import_test_external_table文件时所持有的Access Key Secret。
    delimiter 定义OSS中数据文件的列分隔符。
    ossnull 标识NULL值,包含以下四种取值。
    • 1,默认值为1:EMPTY_SEPARATORS

      a,"",,c --> "a","",NULL,"c"

    • 2:EMPTY_QUOTES

      a,"",,c --> "a",NULL,"","c"

    • 3:BOTH

      a,"",,c --> "a",NULL,NULL,"c"

    • 4:NEITHER

      a,"",,c --> "a","","","c"

    skip_header_line_count OSS文件第一行为表头,导入数据时自动跳过第一行。
  3. 通过CREATE TABLE,在adb_demo数据库中创建目标表adb_oss_import_test存储从OSS中导入的数据。
    CREATE TABLE IF NOT EXISTS adb_oss_import_test
    (
    uid string,
    other string
    )
    DISTRIBUTED BY HASH(uid)                  
  4. 执行INSERT语句将OSS数据导入AnalyticDB for MySQL。
    • 执行INSERT INTO导入数据。
      insert into adb_oss_import_test
      select * from oss_import_test_external_table                   
    • 执行INSERT OVERWRITE INTO导入数据。
      insert overwrite into adb_oss_import_test
      select * from oss_import_test_external_table                           
    • 异步执行INSERT OVERWRITE INTO导入数据。
      submit job insert overwrite into adb_oss_import_test
      select * from oss_import_test_external_table ;
      +---------------------------------------+
      | job_id                                |
      +---------------------------------------+
      | 2020112122202917203100908203303000715 |

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