准备从今天开始写技术博客~
在平时的工作中有碰到做SOA开发的同事要求给到的结果表格式为textfile。前些时间公司里是不允许正式表设为textfile格式的。原因主要是因为textfile不对文件做任何处理,占机器存储空间,建议的是orc格式,因为orc格式对文件做了压缩,存储更加节省空间。今天特地问了一下SOA的同事WHY。
总结一下,主要原因是:
- 如果用orc格式的表存储,开发做测试的时候不方便测orc,而测试和生产又要保持一致,所以只能生产迁就测试,全部换成textfile。
测试环境为什么不能测orc?两个原因:
- 一般公司的测试环境比生产环境“恶劣”(机器不好,没有专人运营,甚至可能软件都很久没有升级过,有种测试拖累了生产的感觉)。所以测试环境里没有类似生产上完备的hsfs平台,无法模拟生产通过hdfs读取orc的过程
- 直接读取orc会有乱码的风险,因为orc是压缩格式。(textfile就不会有这个风险)
为什么一定要存成textfile?实在不行开发可以先select
出来,然后离线把数据导到测试中呀。原因在于:
- select出来的数据分割符和原本orc表里的分隔符显示会有差异,还需要人工重新编码,多了一道人工操作,多了一道风险
所以最好的是,交付表的格式设为textfile。其实感觉下来,应该是要定期对测试环境做维护的,否则生产做的再好,测试很low,被测试短板限制了。
另附,orc表和textfile表的建表样例:
orc格式
USE Tmp_UbtDb;
CREATE TABLE normaltabledemo(
field1 STRING COMMENT 'field1 comment',
field2 STRING COMMENT 'field2 comment')
COMMENT 'table comment'
PARTITIONED BY(dt STRING COMMENT 'date')
STORED AS ORC;
textfile格式
USE Tmp_UbtDb;
CREATE TABLE normaltabledemo(
field1 STRING COMMENT 'field1 comment',
field2 STRING COMMENT 'field2 comment')
COMMENT 'table comment'
PARTITIONED BY(dt STRING COMMENT 'date')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE ;
网友评论