本文介绍如何将数据通过阿里云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. 项目管理页签,单击相应项目后的数据开发
    3. 数据开发页面,鼠标悬停至新建图标,单击MaxCompute >
    4. 新建表对话框中,输入表名,本文以maxcompute表名为例。
    5. 单击新建
    6. 基本属性区域,配置各项参数。
      基本属性

      参数含义如下。

      名称 描述
      中文名 MaxCompute表的中文名称。
      一级主题 新建表所处的一级目标文件夹名称。
      说明 一级、二级主题仅仅是DataWorks上文件夹的摆放形式,目的是为了您能更好地管理您的表。
      二级主题 新建表所处的二级目标文件夹名称。
      新建主题 单击新建主题,进入主题管理页面,您可以在该页面创建一级主题、二级主题。

      新建主题后,单击刷新图标,即可同步新建的主题。

      描述 对新建表进行简单描述。
    7. 单击工具栏中的DDL模式
    8. DDL模式对话框中,输入如下建表语句,单击生成表结构
      CREATE TABLE IF NOT EXISTS maxcompute
      (    
      v1  INT,    
      v2  INT                
      )
      PARTITIONED BY
      (
          v3 STRING                   
      );
    9. 确认操作对话框中,单击确认
    10. 单击工具栏的提交到生产环境
    11. 在弹出的提交生产确认对话框中,勾选我已悉知风险,确认提交
    12. 单击确认
  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>);
      说明 如果您使用的表引擎为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。
      建表语句如下。
      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,否则建表会报错。