本文介绍如何将数据通过阿里云MaxCompute外表方式导入至云数据库ClickHouse。
注意事项
云数据库ClickHouse社区兼容版集群的内核版本为20.3及以上。
MaxCompute服务为付费服务。计费详情,请参见MaxCompute计费方式。
为了确保云数据库ClickHouse与MaxCompute服务之间网络通畅,您需要采用阿里云VPC网络访问方式,且MaxCompute必须与您的云数据库ClickHouse集群在同一地域。
前提条件
已开通MaxCompute服务。如何开通,请参见开通MaxCompute。
已创建MaxCompute项目,且与云数据库ClickHouse集群在同一地域。如何创建,请参见创建MaxCompute项目。
如果RAM用户使用MaxCompute,需要阿里云主账号为RAM用户授权。如何授权,请参见准备RAM用户。
操作步骤
创建MaxCompute外表。
在左侧导航栏,单击数据开发。
在数据开发页面,鼠标悬停至图标,单击 。
在新建表对话框中,输入表名,本文以maxcompute表名为例。
单击新建。
在基本属性区域,配置各项参数。
单击工具栏中的DDL。
在DDL对话框中,输入如下建表语句,单击生成表结构。
CREATE TABLE IF NOT EXISTS maxcompute ( v1 INT, v2 INT ) PARTITIONED BY ( v3 STRING );
分别单击提交到开发环境和提交到生产环境。
写入MaxCompute外表数据。
在数据开发页面,单击左侧导航栏的临时查询。
鼠标悬停至图标,单击 。
在新建节点对话框中,选择路径并输入名称。
单击确认。
在节点的编辑页面,输入如下语句,为MaxCompute外表写入数据。
insert into maxcompute PARTITION (v3='2021') values (1,2),(2,3);
单击工具栏中的图标。
在参数窗口,选择公共调度资源组,单击确定。
在MaxCompute计算成本估计窗口,确认预估费用,单击运行。
创建云数据库ClickHouse表。
在集群列表页面,单击目标集群ID。
单击右上方导航栏的登录数据库。
输入建表语句并单击执行(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-endpoint
为odps-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****');
查询云数据库ClickHouse表。
在集群列表页面,单击目标集群ID。
单击右上方导航栏的登录数据库。
输入查询语句并单击执行(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,否则建表会报错。 |