| 175 | } |
| 176 | |
| 177 | Status CatalogOpExecutor::ExecComputeStats(const TCatalogServiceRequestHeader& header, |
| 178 | const TCatalogOpRequest& compute_stats_request, |
| 179 | const TTableSchema& tbl_stats_schema, const TRowSet& tbl_stats_data, |
| 180 | const TTableSchema& col_stats_schema, const TRowSet& col_stats_data, |
| 181 | const std::optional<long>& snapshot_id) { |
| 182 | // Create a new DDL request to alter the table's statistics. |
| 183 | TCatalogOpRequest catalog_op_req; |
| 184 | catalog_op_req.__isset.ddl_params = true; |
| 185 | catalog_op_req.__set_op_type(TCatalogOpType::DDL); |
| 186 | catalog_op_req.__set_sync_ddl(compute_stats_request.sync_ddl); |
| 187 | TDdlExecRequest& update_stats_req = catalog_op_req.ddl_params; |
| 188 | update_stats_req.__set_ddl_type(TDdlType::ALTER_TABLE); |
| 189 | update_stats_req.query_options.__set_sync_ddl(compute_stats_request.sync_ddl); |
| 190 | update_stats_req.query_options.__set_debug_action( |
| 191 | compute_stats_request.ddl_params.query_options.debug_action); |
| 192 | update_stats_req.__set_header(header); |
| 193 | |
| 194 | const TComputeStatsParams& compute_stats_params = |
| 195 | compute_stats_request.ddl_params.compute_stats_params; |
| 196 | TAlterTableUpdateStatsParams& update_stats_params = |
| 197 | update_stats_req.alter_table_params.update_stats_params; |
| 198 | update_stats_req.__isset.alter_table_params = true; |
| 199 | update_stats_req.alter_table_params.__set_alter_type(TAlterTableType::UPDATE_STATS); |
| 200 | update_stats_req.alter_table_params.__set_table_name(compute_stats_params.table_name); |
| 201 | update_stats_req.alter_table_params.__isset.update_stats_params = true; |
| 202 | update_stats_params.__set_table_name(compute_stats_params.table_name); |
| 203 | update_stats_params.__set_expect_all_partitions( |
| 204 | compute_stats_params.expect_all_partitions); |
| 205 | update_stats_params.__set_is_incremental(compute_stats_params.is_incremental); |
| 206 | if (snapshot_id.has_value()) update_stats_params.__set_snapshot_id(snapshot_id.value()); |
| 207 | |
| 208 | // Fill the alteration request based on the child-query results. |
| 209 | SetTableStats(tbl_stats_schema, tbl_stats_data, |
| 210 | compute_stats_params.existing_part_stats, &update_stats_params); |
| 211 | if (compute_stats_params.__isset.total_file_bytes) { |
| 212 | update_stats_params.table_stats.__set_total_file_bytes( |
| 213 | compute_stats_params.total_file_bytes); |
| 214 | } |
| 215 | // col_stats_schema and col_stats_data will be empty if there was no column stats query. |
| 216 | if (!col_stats_schema.columns.empty()) { |
| 217 | if (compute_stats_params.is_incremental) { |
| 218 | RuntimeProfile::Counter* incremental_finalize_timer = |
| 219 | ADD_TIMER(profile_, "FinalizeIncrementalStatsTimer"); |
| 220 | SCOPED_TIMER(incremental_finalize_timer); |
| 221 | FinalizePartitionedColumnStats(col_stats_schema, |
| 222 | compute_stats_params.existing_part_stats, |
| 223 | compute_stats_params.expected_partitions, |
| 224 | col_stats_data, compute_stats_params.num_partition_cols, &update_stats_params); |
| 225 | } else { |
| 226 | SetColumnStats(col_stats_schema, col_stats_data, &update_stats_params); |
| 227 | } |
| 228 | } |
| 229 | |
| 230 | // Execute the 'alter table update stats' request. |
| 231 | RETURN_IF_ERROR(Exec(catalog_op_req)); |
| 232 | return Status::OK(); |
| 233 | } |
| 234 |
no test coverage detected