背景
在数据仓库的建设中,通常我们使用Hive处理原始数据(PB级别),进行耗时较长的ETL工作,再将结果数据(TB级别)交由准实时的计算引擎(如Snova)对接BI工具,保证报表的准实时展现。
本文介绍了如何将EMR上Hive的数据通过COS导入到Snova云数仓的过程。
步骤
开启EMR读写对象存储能力
首先需要保证EMR具备读写COS的能力,这里在创建EMR的过程中,可以进行勾选
创建Hive 本地表并写入数据
语法如下
代码语言:txt
复制
create table hive_local_table(c1 int, c2 string, c3 int, c4 string);
insert into hive_local_table values(1001, 'c2', 99, 'c4'),(1002, 'c2', 100, 'c4'),(1003, 'c2', 101, 'c4'),(1004, 'c2', 100, 'c4'),(1005, 'c2', 101, 'c4')
创建Hive COS外表
语法如下:
代码语言:txt
复制
create table hive_cos_table(c1 int, c2 string, c3 int, c4 string)
row format delimited fields terminated by ','
LINES TERMINATED BY '\n'
stored as textfile location 'cosn://{bucket_name}/{dir_name}';
详细信息可以参考EMR文档 基于对象存储COS的数据创库
将本地数据导入COS
语法如下:
代码语言:txt
复制
insert into hive_cos_table select * from hive_local_table;
成功写入后,可以在对应的COS目录下看到文件
在Snova侧创建COS外表
语法如下:
代码语言:txt
复制
CREATE READABLE EXTERNAL TABLE snova_cos_table (c1 int, c2 varchar(32), c3 int, c4 varchar(32))
LOCATION('cos:// {BUCKET}-{APPID}.cos.{REGION}.myqcloud.com/{PREFIX} secretKey=**** secretId=***')
FORMAT 'csv';
详细内容可以参见 使用外表
在Snova侧创建本地表并导入数据
语法如下:
代码语言:txt
复制
create table snova_local_table(c1 int, c2 text, c3 int, c4 text);
insert into snova_local_table select * from snova_cos_table;
注意
Snova不支持ORC,Parquet等格式,只支持CSV格式
Snova侧导入COS数据的效率与文件的个数有一定关系,建议个数为Snova计算节点个数的N倍