3.5.21-85fccf8同查询在数据没有任何变动的情况下多次执行,出现了**结果行数不一致

【详述】问题详细描述

通过 Hive Catalog 读取 Parquet 格式外表时,在并发或连续多次执行完全相同的 SQL 查询语句时,查询结果存在严重的不一致性(数据乱码及结果集行数随机改变)

  1. 结果集行数不一致:多次执行相同的 SELECT 查询,有时返回 Empty set (0.00 sec),有时返回 22 行,有时返回 9 行,有时返回 11 行。
  2. 读取到的列值错乱/乱码:同一条主键 uuid 对应的数据在不同次查询中,解析出来的 bu_amountDECIMAL 类型)数值差异巨大且极其异常(出现非常大的数值或符号反转),疑似发生内存解包错位或数据指针越界读取。

在关闭 Parquet 向量化读取开关(执行 SET enable_parquet_vectorized_reader = false;)后,查询结果恢复正常且固定。

测试 SQL 命令:

SELECT t1.uuid, t1.bu_amount 
FROM hive.dma.dma_sd_sxbg_sales_rev t1 
WHERE t1.posted_date <= '2025-12-20' 
  AND ABS(COALESCE(t1.bu_amount, 0)) >= 1e10;


【背景】做过哪些操作?

  • 3.3.17 升级到3.5.21
  • 通过 Hive Catalog 直接查询底层基于 HDFS 的 Parquet 外表。
  • 连续执行同一个 SQL 查询语句。

【业务影响】

  • 外表数据读取结果不稳定,严重影响基于 Hive External Catalog 的报表计算与 ETL 任务的数据准确性。

【是否存算分离】

[否]


【StarRocks版本】

3.5.21-85fccf8

【集群规模】

[例如:3 FE + 5 BE]


【机器信息】

[例如:48C / 64G / 万兆网卡]


【联系方式】

4群KKK

【附件】

1. Hive 外表 DDL

CREATE TABLE `dma_sd_sxbg_sales_rev` (
  `uuid` varchar(1073741824) DEFAULT NULL,
  `posted_date_id` varchar(1073741824) DEFAULT NULL,
  `posted_date` varchar(1073741824) DEFAULT NULL,
  `prod_perf_bg` varchar(1073741824) DEFAULT NULL,
  `prod_perf_bu_id` varchar(1073741824) DEFAULT NULL,
  `prod_perf_bu_name` varchar(1073741824) DEFAULT NULL,
  `prod_perf_bu_name_abbr` varchar(1073741824) DEFAULT NULL,
  `prod_perf_bu_name_tag` varchar(1073741824) DEFAULT NULL,
  `if_smb` varchar(1073741824) DEFAULT NULL,
  `dept_oid` varchar(1073741824) DEFAULT NULL,
  `dept_name01` varchar(1073741824) DEFAULT NULL,
  `dept_name02` varchar(1073741824) DEFAULT NULL,
  `dept_name03` varchar(1073741824) DEFAULT NULL,
  `dept_name04` varchar(1073741824) DEFAULT NULL,
  `dept_name05` varchar(1073741824) DEFAULT NULL,
  `dept_full_name` varchar(1073741824) DEFAULT NULL,
  `org_dept_full_name` varchar(1073741824) DEFAULT NULL,
  `sales_name` varchar(1073741824) DEFAULT NULL,
  `sales_other_name` varchar(1073741824) DEFAULT NULL,
  `sales_account` varchar(1073741824) DEFAULT NULL,
  `sales_status` varchar(1073741824) DEFAULT NULL,
  `sales_position` varchar(1073741824) DEFAULT NULL,
  `sales_position_his` varchar(1073741824) DEFAULT NULL,
  `sales_bg` varchar(1073741824) DEFAULT NULL,
  `perf_sales_name` varchar(1073741824) DEFAULT NULL,
  `perf_sales_account` varchar(1073741824) DEFAULT NULL,
  `perf_sales_position` varchar(1073741824) DEFAULT NULL,
  `perf_sales_position_his` varchar(1073741824) DEFAULT NULL,
  `perf_sales_status` varchar(1073741824) DEFAULT NULL,
  `perf_sales_bg` varchar(1073741824) DEFAULT NULL,
  `perf_sales_tag` varchar(1073741824) DEFAULT NULL,
  `out_sales_name` varchar(1073741824) DEFAULT NULL,
  `out_sales_other_name` varchar(1073741824) DEFAULT NULL,
  `out_sales` varchar(1073741824) DEFAULT NULL,
  `out_sales_status` varchar(1073741824) DEFAULT NULL,
  `out_sales_position` varchar(1073741824) DEFAULT NULL,
  `out_sales_position_his` varchar(1073741824) DEFAULT NULL,
  `out_sales_bg` varchar(1073741824) DEFAULT NULL,
  `ship_cus_name` varchar(1073741824) DEFAULT NULL,
  `ship_cus_code` varchar(1073741824) DEFAULT NULL,
  `if_ship_cus_dealer` varchar(1073741824) DEFAULT NULL,
  `if_edu_pop` varchar(1073741824) DEFAULT NULL,
  `product_model` varchar(1073741824) DEFAULT NULL,
  `machine_sale_model` varchar(1073741824) DEFAULT NULL,
  `main_sale_model` varchar(1073741824) DEFAULT NULL,
  `bus_prod_cate1` varchar(1073741824) DEFAULT NULL,
  `bus_prod_cate2` varchar(1073741824) DEFAULT NULL,
  `bus_prod_cate3` varchar(1073741824) DEFAULT NULL,
  `bus_prod_cate4` varchar(1073741824) DEFAULT NULL,
  `solution` varchar(1073741824) DEFAULT NULL,
  `generation` varchar(1073741824) DEFAULT NULL,
  `localization` varchar(1073741824) DEFAULT NULL,
  `ys_brand` varchar(1073741824) DEFAULT NULL,
  `prod_biz_tag` varchar(1073741824) DEFAULT NULL,
  `screen_size` varchar(1073741824) DEFAULT NULL,
  `manage_prod_line` varchar(1073741824) DEFAULT NULL,
  `manage_category` varchar(1073741824) DEFAULT NULL,
  `fir_class_category` varchar(1073741824) DEFAULT NULL,
  `sec_class_category` varchar(1073741824) DEFAULT NULL,
  `thi_class_category` varchar(1073741824) DEFAULT NULL,
  `fir_class_prod_solution` varchar(1073741824) DEFAULT NULL,
  `sec_class_prod_solution` varchar(1073741824) DEFAULT NULL,
  `manage_prod_line_xf` varchar(1073741824) DEFAULT NULL,
  `manage_prod_line_abbr` varchar(1073741824) DEFAULT NULL,
  `prod_line_class` varchar(1073741824) DEFAULT NULL,
  `final_cus_name` varchar(1073741824) DEFAULT NULL,
  `final_cus_code` varchar(1073741824) DEFAULT NULL,
  `bill_cus_name` varchar(1073741824) DEFAULT NULL,
  `bill_cus_code` varchar(1073741824) DEFAULT NULL,
  `industry_name` varchar(1073741824) DEFAULT NULL,
  `perf_industry_name` varchar(1073741824) DEFAULT NULL,
  `teach_level_name` varchar(1073741824) DEFAULT NULL,
  `currency` varchar(1073741824) DEFAULT NULL,
  `transaction_type` varchar(1073741824) DEFAULT NULL,
  `write_off_flag` varchar(1073741824) DEFAULT NULL,
  `org_id` varchar(1073741824) DEFAULT NULL,
  `ou_name` varchar(1073741824) DEFAULT NULL,
  `shipping_num` varchar(1073741824) DEFAULT NULL,
  `line_no` varchar(1073741824) DEFAULT NULL,
  `source_order_number` varchar(1073741824) DEFAULT NULL,
  `item_code` varchar(1073741824) DEFAULT NULL,
  `contract_num` varchar(1073741824) DEFAULT NULL,
  `transaction_desc` varchar(1073741824) DEFAULT NULL,
  `so_source_name` varchar(1073741824) DEFAULT NULL,
  `province_name` varchar(1073741824) DEFAULT NULL,
  `city_name` varchar(1073741824) DEFAULT NULL,
  `district_name` varchar(1073741824) DEFAULT NULL,
  `detail_addr` varchar(1073741824) DEFAULT NULL,
  `prod_dept_bu` varchar(1073741824) DEFAULT NULL,
  `prod_apply_dept` varchar(1073741824) DEFAULT NULL,
  `business_type` varchar(1073741824) DEFAULT NULL,
  `lot_number` varchar(1073741824) DEFAULT NULL,
  `pf_channel` varchar(1073741824) DEFAULT NULL,
  `adj_type` varchar(1073741824) DEFAULT NULL,
  `adj_remarks` varchar(1073741824) DEFAULT NULL,
  `trade` varchar(1073741824) DEFAULT NULL,
  `trade_path` varchar(1073741824) DEFAULT NULL,
  `source_order_number_id` varchar(1073741824) DEFAULT NULL,
  `header_id` varchar(1073741824) DEFAULT NULL,
  `dlvy_header_id` varchar(1073741824) DEFAULT NULL,
  `dlvy_num` varchar(1073741824) DEFAULT NULL,
  `post_header_id` varchar(1073741824) DEFAULT NULL,
  `post_code` varchar(1073741824) DEFAULT NULL,
  `import_customs_num` varchar(1073741824) DEFAULT NULL,
  `business_tag` varchar(1073741824) DEFAULT NULL,
  `target_name` varchar(1073741824) DEFAULT NULL,
  `bu_amount` decimal(30, 8) DEFAULT NULL,
  `rev_qty` decimal(30, 8) DEFAULT NULL,
  `bu_cost` decimal(30, 8) DEFAULT NULL,
  `gross_profit` decimal(30, 8) DEFAULT NULL,
  `bg_amount` decimal(30, 8) DEFAULT NULL,
  `bg_cost` decimal(30, 8) DEFAULT NULL,
  `so_qty` decimal(30, 8) DEFAULT NULL,
  `so_untax_total_amount` decimal(30, 8) DEFAULT NULL,
  `val` decimal(30, 8) DEFAULT NULL,
  `undo_amount_no_tax` decimal(30, 8) DEFAULT NULL,
  `undo_qty` decimal(30, 8) DEFAULT NULL,
  `unstock_out_amount` decimal(30, 8) DEFAULT NULL,
  `sys_calc_class` varchar(1073741824) DEFAULT NULL,
  `dw_data_source` varchar(1073741824) DEFAULT NULL,
  `data_type` varchar(1073741824) DEFAULT NULL,
  `org_posted_date` varchar(1073741824) DEFAULT NULL,
  `transfer_date` varchar(1073741824) DEFAULT NULL,
  `w_insert_dt` varchar(1073741824) DEFAULT NULL,
  `tx_date` varchar(1073741824) DEFAULT NULL
)
PROPERTIES (
  "hive.table.serde.lib" = "org.apache.hadoop.hive.ql.io.parquet.SerDeParquetHiveSerDe",
  "totalSize" = "2959353723",
  "numRows" = "12295045",
  "numFiles" = "42",
  "hive.table.input.format" = "org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat",
  "location" = "hdfs://dmpnameservice/user/hive/warehouse/dma.db/dma_sd_sxbg_sales_rev"
);

StarRocks > EXPLAIN select t1.uuid,t1.bu_amount FROM hive.dma.dma_sd_sxbg_sales_rev t1 where t1.posted_date <= ‘2025-12-20’ and ABS(COALESCE(t1.bu_amount,0)) >= 1e10;
±---------------------------------------------------------------------------------------------------------------+
| Explain String |
±---------------------------------------------------------------------------------------------------------------+
| PLAN FRAGMENT 0 |
| OUTPUT EXPRS:1: uuid | 107: bu_amount |
| PARTITION: UNPARTITIONED |
| |
| RESULT SINK |
| |
| 2:EXCHANGE |
| |
| PLAN FRAGMENT 1 |
| OUTPUT EXPRS: |
| PARTITION: RANDOM |
| |
| STREAM DATA SINK |
| EXCHANGE ID: 02 |
| UNPARTITIONED |
| |
| 1:Project |
| | <slot 1> : 1: uuid |
| | <slot 107> : 107: bu_amount |
| | |
| 0:HdfsScanNode |
| TABLE: dma_sd_sxbg_sales_rev |
| NON-PARTITION PREDICATES: 3: posted_date <= ‘2025-12-20’, abs(coalesce(107: bu_amount, 0)) >= 10000000000 |
| MIN/MAX PREDICATES: 3: posted_date <= ‘2025-12-20’ |
| partitions=1/1 |
| cardinality=3073742 |
| avgRowSize=57.86689 |
±---------------------------------------------------------------------------------------------------------------+
27 rows in set (0.03 sec)