CTAS创建表条数不对问题

  其他常见问题
内容纲要

概要描述


默认情况下,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)

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。