【详述】问题详细描述
通过 Hive Catalog 读取 Parquet 格式外表时,在并发或连续多次执行完全相同的 SQL 查询语句时,查询结果存在严重的不一致性(数据乱码及结果集行数随机改变):
-
结果集行数不一致:多次执行相同的
SELECT查询,有时返回Empty set (0.00 sec),有时返回 22 行,有时返回 9 行,有时返回 11 行。 -
读取到的列值错乱/乱码:同一条主键
uuid对应的数据在不同次查询中,解析出来的bu_amount(DECIMAL类型)数值差异巨大且极其异常(出现非常大的数值或符号反转),疑似发生内存解包错位或数据指针越界读取。
在关闭 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"
);
