catalog读取外部表效率远远低于resource外部表

【详述】问题详细描述
【背景】做过哪些操作?
【业务影响】
【是否存算分离】
【StarRocks版本】3.2.4
【集群规模】 3fe +3be(fe与be混部)
【机器信息】 48C/250G/万兆
【联系方式】
注:外部表指向的是greenplum数据库
仅仅是统计了一下数量,总数据量才50w

通过resouce创建的外部表查询只需要0.3s ,sql如下:
select count(*) from ods.dot_logistics_return_apply_ex;

通过catalog去查询同样的外部表却需要5s,差距非常大, sql如下:
select count(*) from catalog11.stg.stg_ydky_dot_logistics_return_apply;

如果将外部表插入sr的表里,差距更大。
catalog提供了方便,但是在效率上为何差距如此之大?

jdbc外部表ddl如下:

CREATE EXTERNAL TABLE dot_logistics_return_apply_ex (
modify_date datetime NULL COMMENT “”,
logistics_id bigint(20) NULL COMMENT “”,
apply_site_code int(11) NULL COMMENT “”,
apply_user_code varchar(400) NULL COMMENT “”,
apply_type smallint(6) NULL COMMENT “”,
apply_reason int(11) NULL COMMENT “”,
apply_status smallint(6) NULL COMMENT “”,
volume decimal(10, 4) NULL COMMENT “”,
gross_weight decimal(10, 2) NULL COMMENT “”,
settlement_total_number decimal(10, 2) NULL COMMENT “”,
item_total_number int(11) NULL COMMENT “”,
acceptance_site_code int(11) NULL COMMENT “”,
remarks varchar(400) NULL COMMENT “”,
new_logistics_id varchar(400) NULL COMMENT “”,
operate_site_code int(11) NULL COMMENT “”,
operate_time datetime NULL COMMENT “”,
operate_user_code varchar(400) NULL COMMENT “”,
create_time datetime NULL COMMENT “”
) ENGINE=JDBC
PROPERTIES (
“resource” = “resource11”,
“table” = “stg.stg_ydky_dot_logistics_return_apply”
);

profile差异如下:

profile文件:
catalog11.stg.stg_ydky_dot_logistics_return_apply.txt (20.0 KB) dot_logistics_return_apply_ex.txt (20.0 KB)

差距这么大?是不是有bug?

感觉catalog的方式需要从众多ddl中筛选出某个表,而resource方式直接指向那个表。个人感觉,不知道SR是如何实现的,两种方式都是jdbc,按道理效率应该一样才对。

这个问题到现在依然存在,有没有官方的人解释一下为啥啊,导致我现在一直不敢用catalog。咋比resource慢那么多呢?

select count(1) from dms.dms_org_ful_ex; --resource方式 164ms
select count(1) from catalog11.dms.dms_org_ful; --catalog方式 4351ms
数据量21w

其他类型的库有这种问题吗,比如mysql

–mysql 的catalog
select count(1) from dms.gs_1433; --39ms resource方式
select count(1) from catalog1433.ky_ydserver.gs; --361ms catalogs方式
这个数据量少,只有5w,也是有差距,差距10倍。
我在怀疑是不是取决于目标库元数据过于庞大导致的,我们的greenplum数仓已经运行很多年了,表也是非常非常多。catalog每次访问的时候是不是都要去重新加载一下目标库的元数据,然后再筛选出目标表。

刚刚又测了一下,mysql库的catalog和resource效率差不多。

[Bug] 由于同步且不必要的重复元数据获取 SQL 发送到 MySQL ·期刊 #40293 ·StarRocks/星岩 (github.com),目前jdbc没有缓存,应该是元数据问题

OK,那先等这个bug修复再看看。

感觉短时间不会修复,因为一直再加数据源种类,但是jdbc的元数据缓存和数据缓存都没有