内容纲要
概要描述
默认情况下,orc事务表的bucket在automerge参数开启时,会做合并。
而分桶表本来就能够根据分桶来确定task,如果进行automerge,可能导致大文件合并的情况。本文结合sql demo介绍并结合参数避免该问题。
详细说明
1.创建样例表
创建一张orc事务表,7个分桶
DROP TABLE IF EXISTS EMP_TORC;
CREATE TABLE EMP_TORC(
EMPNO int,
ENAME string,
JOB string,
MGR INT,
HIREDATE DATE,
SAL INT,
COMM INT,
DEPTNO INT
)CLUSTERED BY (empno) INTO 7 BUCKETS
STORED AS ORC_TRANSACTION;
INSERT INTO EMP_TORC VALUES (1,'SMITH','CLERK',7902,tdh_todate('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP_TORC VALUES (2,'ALLEN','SALESMAN',7698,tdh_todate('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP_TORC VALUES (3,'WARD','SALESMAN',7698,tdh_todate('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP_TORC VALUES (4,'JONES','MANAGER',7839,tdh_todate('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP_TORC VALUES (5,'MARTIN','SALESMAN',7698,tdh_todate('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP_TORC VALUES (6,'BLAKE','MANAGER',7839,tdh_todate('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP_TORC VALUES (7,'CLARK','MANAGER',7839,tdh_todate('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
此时,我们使用小文件合并参数,对这张表做查询
SET ngmr.partition.automerge=true;
SET ngmr.partition.mergesize.mb = 100;
SELECT * FROM emp_torc;
从DBAService页面可以看到,读表阶段启动了3个task,做了合并。

这里介绍下 ngmr.automerge.ignore.bucket 这个参数,控制在automerge的时候,是否忽略掉 对分桶表做automerge,默认值false,也就是bucket表默认是automerge的。
该参数由WARP-78710引入,在Patch-inceptor-transwarp622-x86_arm64-20230404-12及之后都支持。
开启该参数,表示不会对bucket表做automerge :
SET ngmr.automerge.ignore.bucket=true;
SELECT * FROM emp_torc;
