Snova云数仓COS使用经验

背景

Snova云数仓支持直接分析或者导入腾讯对象存储COS里的数据,本文列举了在使用COS场景下的一些技巧和注意事项。

方法

1. 前缀匹配陷阱

如果我们有2张表需要从COS导入,分别叫t_user和t_user_all,那我们在COS上的目录名称很可能是{bucket_name}/t_user和{bucket_name}/t_user_all。这种情况我们创建COS外表的时候会有一个陷阱,就是前缀匹配。

如果我们的COS外表结构如下:

 CREATE READABLE EXTERNAL TABLE t_user (
 a varchar(30) , 
 b int , 
 c varchar(30))
 LOCATION('cos://{bucket_name}/t_user secretKey=xx secretId=yy')
 FORMAT 'CSV';

那么在通过INSERT语句导入COS数据的时候,Snova会采用前缀匹配原则,将t_user和t_user_all的数据都导入到t_user表中(也就是以t_user开头的),这里的关键就是LOCATION里地址是否以/结尾,如上语法

LOCATION('cos://{bucket_name}/t_user secretKey=xx secretId=yy') t_user后没有反斜杠,采用前缀匹配

如果不想使用前缀匹配,也很简单,就是加上反斜杠即可

LOCATION('cos://{bucket_name}/t_user/ secretKey=xx secretId=yy') t_user后有反斜杠,只读取t_user下的数据

2. 外表加载错误格式处理

通常Snova on COS的场景下,COS上的数据都是业务系统上报的数据,这些数据的格式必须与Snova中表的Schema一致。但实际操作中,可能会出现上报数据格式错误的情况,比如一个整形的字段,含有非法字符等情况。

对于这种情况,用户可能会要求系统能有一定的容错程度,而不是整个数据都无法导入,Snova提供了这样的能力,例子如下:

 CREATE READABLE EXTERNAL TABLE test_cos(
 a varchar(30) , 
 b int , 
 c varchar(30))
 LOCATION('cos://cos-url/dir/ secretKey=xx secretId=yy')
 FORMAT 'TEXT' ( DELIMITER ',')
 LOG ERRORS
 SEGMENT REJECT LIMIT 10;

说明:

  • 这里的SEGMENT REJECT LIMIT 10,代表的含义是每个计算节点最多能容忍10条数据出错,如果有超过10条数据,则整个导入任务就会失败。
  • 可以使用SELECT gp_read_error_log('table_name');查看错误记录。
  • 具体语法格式可参见Handling Load Errors

3. 压缩文件支持

使用压缩文件,可以减少COS上的存储量,并且在Snova on COS的场景下,压缩文件也能减少网络传递带来的耗时。

目前Snova支持gz格式,在建表的时候不需要特别的语法,Snova根据文件后缀可以识别压缩文件。

4. windows行分隔符问题

文件的行分隔符如果是windows上的0D0A,就是\r\n,在创建cos外表的时候格式如下:

CREATE READABLE EXTERNAL TABLE test_windows (
a varchar(32), 
b varchar(32))
LOCATION('cos://cos_url/dir/ secretKey=xx secretId=yy')
FORMAT 'csv' (NEWLINE 'CRLF');

说明:

  • 就是在行尾要加(NEWLINE 'CRLF');
  • 这里只能读取含windows换行符的数据,不能写入

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿说1024

Markdown 语法

1604
来自专栏闻道于事

IDEA快捷键

Editing方面: Ctrl+Space: Basic code completion(the name of any class,method or var...

3054
来自专栏腾讯AlloyTeam的专栏

构建流式应用:RxJS 详解

本文结合作者自己对 RxJS 理解,通过 RxJS 的实现原理、基础实现及实例来一步步分析,提供 RxJS 较为全面的指引,感受下使用 RxJS 编码是怎样的体...

2.9K2
来自专栏C语言及其他语言

【程序源码】猜拳游戏

关注我们 今天来给大家来一段游戏源码(猜拳游戏) ? 程序截图如上。话不多说,上源码!! #include <stdio.h> #include <stdlib...

3336
来自专栏Alice

ios 继承UITableViewController,更改tableview样式

// 继承UITableViewController,更改tableview样式 - (instancetype)initWithStyle:(UITableV...

3556
来自专栏JackieZheng

可视化工具solo show-----Prefuse自带例子GraphView讲解

  2014.10.15日以来的一个月,挤破了头、跑断了腿、伤透了心、吃够了全国最大餐饮连锁店——沙县小吃。其中酸甜苦辣,绝不是三言两语能够说得清道的明的。校招...

5046
来自专栏Google Dart

Flutter 构建完整应用手册-动画 顶

作为UI开发人员,我们经常需要在屏幕上显示和隐藏元素。 但是,在屏幕上或屏幕外快速弹出元素会让最终用户感到不安。 相反,我们可以使用不透明动画淡入淡出元素,以创...

1192
来自专栏静晴轩

Vue 各类数据绑定

『天下武功,唯快不破』√,这一直是对武学造诣方面的追捧,虽然对于这个丝毫不会;更是对待现实工作不懈渴求,乃至苛求。因为这已不是遁隐修行,而是职场卖命,唯有先快速...

3947
来自专栏racaljk

2017第八届蓝桥杯决赛(C++ B组)2.磁砖样式

小明家的一面装饰墙原来是 310 的小方格。 现在手头有一批刚好能盖住2个小方格的长方形瓷砖。 瓷砖只有两种颜色:黄色和橙色。 小明想知道,对于这么简陋的...

3254
来自专栏转载gongluck的CSDN博客

FFmpeg菜鸡互啄#第4篇#音频解码

解码过程 音频解码跟上一篇的视频解码过程是一样的:打开输入文件,查找音频流,打开解码器,循环读帧解码帧,关闭解码器,关闭输入文件。 Code #define _...

3566

扫码关注云+社区

领取腾讯云代金券