本节主要介绍如何在云数据库ClickHouse(内核版本为19.15.2.2)中使用阿里云MaxCompute外表方式导入数据。

数据导入

  1. 登录ClickHouse目标数据库,创建外部表。
    语法如下:
    CREATE TABLE <table_name> [on cluster default]
    (
    'col_name' col_type,[col_name col_type]
    )
    ENGINE = MaxCompute('<tunnel-endpoint>', '<project-name>', '<table-name>', '<partition-spec>', '<access-key-id>', '<access-key-secret>');
    参数名 描述
    table_name 自定义外部表名。
    'col_name' col_type 列名,列类型。

    建表时,ClickHouse的列类型,应该与MaxCompute列类型具有对应关系,请参见类型映射

    ENGINE = MaxCompute 表示该表是外部表,使用的存储引擎是MaxCompute。
    tunnel-endpoint MaxCompute的EndPoint(域名节点)。
    说明 为了确保ClickHouse后端节点与您的MaxCompute服务之间网络通畅, tunnel-endpoint 必须是VPC网络类型的endpoint,且MaxCompute必须与您的ClickHouse实例在同一地域,比如都在上海Region。查看MaxCompute tunnel endpoint地址请参见Endpoint
    project-name MaxCompute中数据源所在的项目名。
    说明 必须完全与MaxCompute中的名称保持一致。
    table-name MaxCompute中数据源所在的表名。
    说明 必须完全与MaxCompute中的名称保持一致。
    partition-spec 希望访问的MaxCompute分区。

    需要指定特定分区,在多个分区表达式之间不能有空格,且不要包含单引号,比如正确的示例为: sale_date=2020-09-01,region=beijing

    access-key-id 您在访问MaxCompute上的数据源时所持有的AccessKey ID。
    说明 必须对MaxCompute中目标数据相应的项目、表有读取权限。
    access-key-secret 您在访问MaxCompute上的数据源时所持有的AccessKey Secret。
    示例
    CREATE TABLE default.odps_src_tbl on cluster default
    (
        `shop_name` String,
        `customer_id` String,
        `total_price` Float64
    )
    ENGINE = MaxCompute('http://dt.cn-shanghai.maxcompute.aliyun-inc.com', 'test_project', 'test_tbl', 'sale_date=2020-09-01,region=beijing', '<your-access-key-id>', '<your-access-key-secret>');
  2. 创建目标表。
    CREATE TABLE default.odps_dst_tbl_local on cluster default
    (
        `shop_name` String,
        `customer_id` String,
        `total_price` Float64
    )
    ENGINE= MergeTree()
    ORDER BY customer_id;
    
    CREATE TABLE default.odps_dst_tbl_dist on cluster default
    as default.odps_dst_tbl_local
    ENGINE= Distributed(default, default, odps_dst_tbl_local, rand());
  3. 将外部表中数据导入目标表。
    insert into odps_dst_tbl_dist select * from odps_src_tbl;

类型映射

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 UInt16
datetime UInt32
UUID 暂不支持
INTERVAL 暂不支持
Decimal 暂不支持
Timestamp 暂不支持
复合数据类型 暂不支持