内容纲要
概要描述
默认情况下,ctas如果不加stored as ..., 创建的是textfile表类型,极易遇到因数据中存在换行符,导致创建出来的表条数对不上的问题,本文给出解释说明及解决方案。
详细介绍
首先,我们创建一张表,数据里面存在chr(10),也就是换行符
DROP TABLE IF EXISTS test_orginal;
CREATE TABLE test_orginal(id INT ,name STRING,age int) STORED AS ORC;
INSERT INTO test_orginal SELECT 1,'张'||chr(10)||'三',18 FROM system.dual;
INSERT INTO test_orginal SELECT 2,'李四',22 FROM system.dual;
SELECT * FROM test_orginal;
通过CTAS,创建一张textfile表类型,查询数据,行数不对
DROP TABLE IF EXISTS test_tx;
CREATE TABLE test_tx AS SELECT * FROM test_orginal;
SELECT * FROM test_tx;
解决方案
调整sql语句,加上STORED AS ORC,换成orc表类型即可。
orc是列式存储,不存在因为字段中有换行符,导致数据错乱
CREATE TABLE test_orc STORED AS ORC AS SELECT * FROM test_orginal;
SELECT * FROM test_orc;
Argodb5.2版本开始,支持设置 SET hive.default.fileformat.argo=TRUE; 默认false,打开开关,不指定建表类型时,默认建holo表。 (WARP-82675)