从MaxCompute外表导入(20.3及以上)

本文介绍如何将数据通过阿里云MaxCompute外表方式导入至云数据库ClickHouse

注意事项

  • 云数据库ClickHouse社区兼容版集群的内核版本为20.3及以上。

  • MaxCompute服务为付费服务。计费详情,请参见MaxCompute计费方式

  • 为了确保云数据库ClickHouse与MaxCompute服务之间网络通畅,您需要采用阿里云VPC网络访问方式,且MaxCompute必须与您的云数据库ClickHouse集群在同一地域。

前提条件

  • 已开通MaxCompute服务。如何开通,请参见开通MaxCompute

  • 已创建MaxCompute项目,且与云数据库ClickHouse集群在同一地域。如何创建,请参见创建MaxCompute项目

  • 如果RAM用户使用MaxCompute,需要阿里云主账号为RAM用户授权。如何授权,请参见准备RAM用户

操作步骤

  1. 创建MaxCompute外表。

    1. 登录MaxCompute控制台

    2. 在左侧导航栏,单击DataWorks > 数据开发

    3. 数据开发页面,鼠标悬停至新建图标,单击新建表 > MaxCompute >

    4. 新建表对话框中,输入表名,本文以maxcompute表名为例。

    5. 单击新建

    6. 基本属性区域,配置各项参数。

      基本属性

      参数含义如下。

      配置项

      说明

      中文名

      定义表的中文名称。

      主题

      DataWorks的主题相当于文件夹。定义表所属的一级文件夹与二级文件夹。您可基于业务用途对表进行归类,将同类表挂载至相同文件夹中。

      说明

      一级主题、二级主题仅为DataWorks上表管理文件夹的呈现形式,旨在方便您更好地管理表。 后续在表管理页面可通过主题快速查找当前表,如果没有可用的主题,可参考定义表主题新建。

    7. 单击工具栏中的DDL

    8. DDL对话框中,输入如下建表语句,单击生成表结构

      CREATE TABLE IF NOT EXISTS maxcompute
      (    
      v1  INT,    
      v2  INT                
      )
      PARTITIONED BY
      (
          v3 STRING                   
      );
    9. 分别单击提交到开发环境提交到生产环境

  2. 写入MaxCompute外表数据。

    1. 数据开发页面,单击左侧导航栏的临时查询

    2. 鼠标悬停至新建图标,单击新建 > ODPS SQL

    3. 新建节点对话框中,选择路径并输入名称

    4. 单击确认

    5. 在节点的编辑页面,输入如下语句,为MaxCompute外表写入数据。

      insert into maxcompute PARTITION (v3='2021') values (1,2),(2,3);
    6. 单击工具栏中的执行图标。

    7. 参数窗口,选择公共调度资源组,单击确定

    8. MaxCompute计算成本估计窗口,确认预估费用,单击运行

  3. 创建云数据库ClickHouse表。

    1. 登录云数据库ClickHouse控制台

    2. 集群列表页面,单击目标集群ID。

    3. 单击右上方导航栏的登录数据库

    4. 输入建表语句并单击执行(F8)

      建表语法如下。

      CREATE TABLE <table_name> [on cluster default]
      (
      'col_name1' col_type1,
      'col_name2' col_type2,
      ...
      )
      ENGINE = MaxCompute('<tunnel-endpoint>', '<project-name>', '<table-name>', '<partition-spec>', '<access-key-id>', '<access-key-secret>',<read-thread-num>, '<quota>');
      说明

      如果您使用的表引擎为MaxComputeRaw,请更改建表语法中的tunnel-endpointodps-endpoint,即VPC网络Endpoint。如何查看VPC网络Endpoint,请参见Endpoint

      参数说明如下。

      参数名

      描述

      table_name

      表名。

      col_name1,col_name2

      列名。

      col_type1,col_type2

      列类型。

      说明

      云数据库ClickHouse表的结构类型需与MaxCompute对应。具体映射关系,请参见数据类型映射

      tunnel-endpoint

      Tunnel服务的连接地址Tunnel Endpoint。

      为了确保云数据库ClickHouse与MaxCompute服务之间网络通畅,您需要采用阿里云VPC网络访问方式,且MaxCompute必须与您的云数据库ClickHouse集群在同一地域。

      说明

      如何查看VPC网络的tunnel-endpoint,请参见Endpoint

      project-name

      MaxCompute项目名称。

      table-name

      MaxCompute外表名。

      partition-spec

      MaxCompute分区。

      access-key-id

      访问MaxCompute项目的AccessKey ID。

      access-key-secret

      访问MaxCompute项目的AccessKey Secret。

      read-thread-num(可选)

      读取MaxCompute表时单个分片的并发数,默认值是1。

      quota(可选)

      MaxCompute计算资源的单元,默认共享Quota。

      建表语句如下。

      CREATE TABLE default.maxcomputetest ON CLUSTER default (
      v1 Int32, 
      v2 Int32
      ) ENGINE = MaxCompute('http://dt.cn-hangzhou.maxcompute.aliyun-inc.com', 'ckfwt', 'maxcompute', 'v3=2021', 'LTAI5tDVcUKu2CbcBwhr****', 'WAcroHBcL7IVOK8FIHzNJy91Lc****');
  4. 查询云数据库ClickHouse表。

    1. 登录云数据库ClickHouse控制台

    2. 集群列表页面,单击目标集群ID。

    3. 单击右上方导航栏的登录数据库

    4. 输入查询语句并单击执行(F8)

      SELECT * FROM maxcomputetest;

      查询结果如下。查询

数据类型映射

MaxCompute类型

ClickHouse类型

Boolean

UInt8

Tinyint

UInt8, Int8

Smalllint

UInt16, Int16

Int

UInt32, Int32

Bigint

UInt64, Int64

Float

Float32

Double

Float64

Char

String

Varchar

String

Binary

String

String

String

Date

Date

Datetime

Datetime

UUID

暂不支持

INTERVAL

暂不支持

Decimal

String

Timestamp

暂不支持

Map

Nested(Nullable(keyType), Nullable(valueType))。目前只支持一层非嵌套的Map结构。

例如MaxCompute中map<string, string>对应云数据库ClickHouse中的类型是:Nested(k Nullable(String), v Nullable(String))

说明

Nested内部的类型必须是Nullable,否则建表会报错。

Array

Array(Nullable(Type))。目前只支持一层非嵌套的Array结构。

例如MaxCompute中array<int>对应云数据库ClickHouse中的类型是:Array(Nullable(Int32))

说明

Array内部的类型必须是Nullable,否则建表会报错。

Struct

Tuple(Nullable(Type))。目前只支持一层非嵌套的Struct结构。

例如MaxCompute中struct<x:int, y:string>对应云数据库ClickHouse中的类型是:Tuple(Nulable(Int32), Nullable(String))

说明

Tuple内部的类型必须是Nullable,否则建表会报错。