This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0-beta in repository https://gitbox.apache.org/repos/asf/doris.git
commit 166fc4f134ced589c58a0582eb8ed0e9991d834b Author: lihangyu <15605149...@163.com> AuthorDate: Thu Jun 8 10:55:22 2023 +0800 [Bug](row-store) Fix row store with materialize index (#20356) If a query hits a materialized view that has row storage enabled, but the row storage column is not present in the materialized view, it will result in a query crash. Therefore, it is necessary to include the row storage column when creating the materialized view, and serialize the row storage column during the execution of SchemaChange. --- be/src/olap/compaction.cpp | 1 + be/src/olap/delta_writer.cpp | 2 +- be/src/olap/olap_define.h | 7 ++ be/src/olap/rowset/beta_rowset_writer.cpp | 4 +- be/src/olap/rowset/rowset_writer_context.h | 5 +- be/src/olap/rowset/segment_v2/segment_writer.cpp | 13 ++- be/src/olap/rowset/segment_v2/segment_writer.h | 4 +- be/src/olap/schema_change.cpp | 2 + be/src/olap/txn_manager.cpp | 2 +- .../doris/alter/MaterializedViewHandler.java | 5 + .../main/java/org/apache/doris/catalog/Column.java | 3 +- .../java/org/apache/doris/catalog/OlapTable.java | 9 ++ .../org/apache/doris/task/AlterReplicaTask.java | 1 - regression-test/data/point_query_p0/load.out | 25 +++++ regression-test/suites/point_query_p0/load.groovy | 101 +++++++++++++++++++++ 15 files changed, 168 insertions(+), 16 deletions(-) diff --git a/be/src/olap/compaction.cpp b/be/src/olap/compaction.cpp index 0b1a702654..8b1e0e98b1 100644 --- a/be/src/olap/compaction.cpp +++ b/be/src/olap/compaction.cpp @@ -457,6 +457,7 @@ Status Compaction::construct_output_rowset_writer(RowsetWriterContext& ctx, bool ctx.segments_overlap = NONOVERLAPPING; ctx.tablet_schema = _cur_tablet_schema; ctx.newest_write_timestamp = _newest_write_timestamp; + ctx.write_type = DataWriteType::TYPE_COMPACTION; if (config::inverted_index_compaction_enable && ((_tablet->keys_type() == KeysType::UNIQUE_KEYS || _tablet->keys_type() == KeysType::DUP_KEYS))) { diff --git a/be/src/olap/delta_writer.cpp b/be/src/olap/delta_writer.cpp index d60c88b807..4122e957e0 100644 --- a/be/src/olap/delta_writer.cpp +++ b/be/src/olap/delta_writer.cpp @@ -200,7 +200,7 @@ Status DeltaWriter::init() { context.newest_write_timestamp = UnixSeconds(); context.tablet_id = _tablet->table_id(); context.tablet = _tablet; - context.is_direct_write = true; + context.write_type = DataWriteType::TYPE_DIRECT; context.mow_context = std::make_shared<MowContext>(_cur_max_version, _rowset_ids, _delete_bitmap); RETURN_IF_ERROR(_tablet->create_rowset_writer(context, &_rowset_writer)); diff --git a/be/src/olap/olap_define.h b/be/src/olap/olap_define.h index 42f8dfe83b..ff896e0ff8 100644 --- a/be/src/olap/olap_define.h +++ b/be/src/olap/olap_define.h @@ -131,6 +131,13 @@ enum ColumnFamilyIndex { META_COLUMN_FAMILY_INDEX, }; +enum class DataWriteType { + TYPE_DEFAULT = 0, + TYPE_DIRECT, + TYPE_SCHEMA_CHANGE, + TYPE_COMPACTION, +}; + static const char* const HINIS_KEY_SEPARATOR = ";"; static const char* const HINIS_KEY_PAIR_SEPARATOR = "|"; static const char* const HINIS_KEY_GROUP_SEPARATOR = "&"; diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index c729a65077..4e462f1e4b 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -721,9 +721,9 @@ Status BetaRowsetWriter::_do_create_segment_writer( segment_v2::SegmentWriterOptions writer_options; writer_options.enable_unique_key_merge_on_write = _context.enable_unique_key_merge_on_write; writer_options.rowset_ctx = &_context; - writer_options.is_direct_write = _context.is_direct_write; + writer_options.write_type = _context.write_type; if (is_segcompaction) { - writer_options.is_direct_write = false; + writer_options.write_type = DataWriteType::TYPE_COMPACTION; } if (is_segcompaction) { diff --git a/be/src/olap/rowset/rowset_writer_context.h b/be/src/olap/rowset/rowset_writer_context.h index e526f80158..904966d8e3 100644 --- a/be/src/olap/rowset/rowset_writer_context.h +++ b/be/src/olap/rowset/rowset_writer_context.h @@ -20,6 +20,7 @@ #include <gen_cpp/olap_file.pb.h> #include "io/fs/file_system.h" +#include "olap/olap_define.h" #include "olap/tablet.h" #include "olap/tablet_schema.h" @@ -82,9 +83,7 @@ struct RowsetWriterContext { int64_t newest_write_timestamp; bool enable_unique_key_merge_on_write = false; std::set<int32_t> skip_inverted_index; - // If it is directly write from load procedure, else - // it could be compaction or schema change etc.. - bool is_direct_write = false; + DataWriteType write_type = DataWriteType::TYPE_DEFAULT; std::shared_ptr<Tablet> tablet = nullptr; // for tracing local schema change record std::shared_ptr<vectorized::schema_util::LocalSchemaChangeRecorder> schema_change_recorder = diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp b/be/src/olap/rowset/segment_v2/segment_writer.cpp index 594e951d33..3eaaf325c4 100644 --- a/be/src/olap/rowset/segment_v2/segment_writer.cpp +++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp @@ -167,7 +167,8 @@ Status SegmentWriter::init(const std::vector<uint32_t>& col_ids, bool has_key, _opts.rowset_ctx->skip_inverted_index.count(column.unique_id()) > 0; } // skip write inverted index on load if skip_write_index_on_load is true - if (_opts.is_direct_write && _tablet_schema->skip_write_index_on_load()) { + if (_opts.write_type == DataWriteType::TYPE_DIRECT && + _tablet_schema->skip_write_index_on_load()) { skip_inverted_index = true; } // indexes for this column @@ -279,7 +280,7 @@ void SegmentWriter::_maybe_invalid_row_cache(const std::string& key) { // If we update/insert cache, if load failed rowset will not be visible but cached data // will be visible, and lead to inconsistency. if (!config::disable_storage_row_cache && _tablet_schema->store_row_column() && - _opts.is_direct_write) { + _opts.write_type == DataWriteType::TYPE_DIRECT) { // invalidate cache RowCache::instance()->erase({_opts.rowset_ctx->tablet_id, key}); } @@ -502,14 +503,18 @@ Status SegmentWriter::fill_missing_columns(vectorized::MutableColumns& mutable_f Status SegmentWriter::append_block(const vectorized::Block* block, size_t row_pos, size_t num_rows) { - if (_tablet_schema->is_partial_update() && _opts.is_direct_write) { + if (_tablet_schema->is_partial_update() && _opts.write_type == DataWriteType::TYPE_DIRECT) { RETURN_IF_ERROR(append_block_with_partial_content(block, row_pos, num_rows)); return Status::OK(); } CHECK(block->columns() >= _column_writers.size()) << ", block->columns()=" << block->columns() << ", _column_writers.size()=" << _column_writers.size(); - if (_tablet_schema->store_row_column() && _opts.is_direct_write) { + // Row column should be filled here when it's a directly write from memtable + // or it's schema change write(since column data type maybe changed, so we should reubild) + if (_tablet_schema->store_row_column() && + (_opts.write_type == DataWriteType::TYPE_DIRECT || + _opts.write_type == DataWriteType::TYPE_SCHEMA_CHANGE)) { _serialize_block_to_row_column(*const_cast<vectorized::Block*>(block)); } diff --git a/be/src/olap/rowset/segment_v2/segment_writer.h b/be/src/olap/rowset/segment_v2/segment_writer.h index 09a3576cf5..837827b70a 100644 --- a/be/src/olap/rowset/segment_v2/segment_writer.h +++ b/be/src/olap/rowset/segment_v2/segment_writer.h @@ -72,12 +72,10 @@ extern const uint32_t k_segment_magic_length; struct SegmentWriterOptions { uint32_t num_rows_per_block = 1024; bool enable_unique_key_merge_on_write = false; - bool is_direct_write = false; CompressionTypePB compression_type = UNKNOWN_COMPRESSION; RowsetWriterContext* rowset_ctx = nullptr; - // If it is directly write from load procedure, else - // it could be compaction or schema change etc.. + DataWriteType write_type = DataWriteType::TYPE_DEFAULT; }; using TabletSharedPtr = std::shared_ptr<Tablet>; diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp index 48fbe5bca1..75ce050f10 100644 --- a/be/src/olap/schema_change.cpp +++ b/be/src/olap/schema_change.cpp @@ -597,6 +597,7 @@ Status VSchemaChangeWithSorting::_internal_sorting( context.segments_overlap = segments_overlap; context.tablet_schema = new_tablet->tablet_schema(); context.newest_write_timestamp = newest_write_timestamp; + context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE; RETURN_IF_ERROR(new_tablet->create_rowset_writer(context, &rowset_writer)); Defer defer {[&]() { @@ -1103,6 +1104,7 @@ Status SchemaChangeHandler::_convert_historical_rowsets(const SchemaChangeParams context.tablet_schema = new_tablet->tablet_schema(); context.newest_write_timestamp = rs_reader->newest_write_timestamp(); context.fs = rs_reader->rowset()->rowset_meta()->fs(); + context.write_type = DataWriteType::TYPE_SCHEMA_CHANGE; Status status = new_tablet->create_rowset_writer(context, &rowset_writer); if (!status.ok()) { res = Status::Error<ROWSET_BUILDER_INIT>(); diff --git a/be/src/olap/txn_manager.cpp b/be/src/olap/txn_manager.cpp index 37fc94bd23..4119dced46 100644 --- a/be/src/olap/txn_manager.cpp +++ b/be/src/olap/txn_manager.cpp @@ -443,7 +443,7 @@ Status TxnManager::_create_transient_rowset_writer(std::shared_ptr<Tablet> table context.newest_write_timestamp = UnixSeconds(); context.tablet_id = tablet->table_id(); context.tablet = tablet; - context.is_direct_write = true; + context.write_type = DataWriteType::TYPE_DIRECT; RETURN_IF_ERROR(tablet->create_transient_rowset_writer(context, rowset_ptr->rowset_id(), rowset_writer)); (*rowset_writer)->set_segment_start_id(rowset_ptr->num_segments()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java index d9c2e5469e..e54c18a357 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java @@ -572,6 +572,11 @@ public class MaterializedViewHandler extends AlterHandler { newColumn.setAggregationType(AggregateType.REPLACE, true); newMVColumns.add(newColumn); } + if (olapTable.storeRowColumn()) { + Column newColumn = new Column(olapTable.getRowStoreCol()); + newColumn.setAggregationType(AggregateType.NONE, true); + newMVColumns.add(newColumn); + } // if the column is complex type, we forbid to create materialized view for (Column column : newMVColumns) { if (column.getDataType().isComplexType() || column.getDataType().isJsonbType()) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java index 936db90a35..ff54f27026 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java @@ -356,7 +356,8 @@ public class Column implements Writable, GsonPostProcessable { public boolean isRowStoreColumn() { return !visible && (aggregationType == AggregateType.REPLACE - || aggregationType == AggregateType.NONE) && nameEquals(ROW_STORE_COL, true); + || aggregationType == AggregateType.NONE || aggregationType == null) + && nameEquals(ROW_STORE_COL, true); } public boolean isVersionColumn() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java index 50e36866ba..91910331e8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java @@ -1019,6 +1019,15 @@ public class OlapTable extends Table { return null; } + public Column getRowStoreCol() { + for (Column column : getBaseSchema(true)) { + if (column.isRowStoreColumn()) { + return column; + } + } + return null; + } + public Boolean hasSequenceCol() { return getSequenceCol() != null; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java b/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java index 9bdf4986fc..178550dd22 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/task/AlterReplicaTask.java @@ -42,7 +42,6 @@ import java.util.Map; * The new replica can be a rollup replica, or a shadow replica of schema change. */ public class AlterReplicaTask extends AgentTask { - private long baseTabletId; private long newReplicaId; private int baseSchemaHash; diff --git a/regression-test/data/point_query_p0/load.out b/regression-test/data/point_query_p0/load.out new file mode 100644 index 0000000000..ef2d9c2702 --- /dev/null +++ b/regression-test/data/point_query_p0/load.out @@ -0,0 +1,25 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +-2147475406 true 45 23794 -11023 915989078 2115356192 15927.068 1.392557423391501E9 45951348783208518.810 8340516346665031.310 2022-01-26 2022-04-13T11:13:48 2022-01-31 2022-02-16T06:07:21 130.50.6.0 denisematth...@yozio.mil Londonderry Alley 61 +-2147424303 false -28 -5177 -1409 149417728 553396597 -10123.558 -1.268722910924068E9 67354830622005524.848 52407243294991364.348 2022-06-29 2022-05-06T09:30:02 2023-01-09 2022-03-12T14:26 109.50.92.119 craighug...@talane.biz Heath Drive 38 +-2147413967 true -75 30533 -5435 -727385447 32929830 9577.564 1.334766997510087E9 39973144022098028.800 5886463393340733.108 2022-06-23 2022-05-10T19:13:50 2022-01-17 2022-11-26T22:49:36 157.38.90.25 joshuale...@jayo.mil Loeprich Crossing 43 +-2147380173 true -79 -5785 9752 1851350218 1121852298 25652.402 -1.618061059513558E9 95821873014545736.897 38923569966532828.626 2022-10-30 2022-05-02T17:06:33 2022-08-11 2022-02-08T10:19:47 217.198.98.239 joseb...@voonder.info Lawn Lane 78 +-2147374459 false -118 -30267 -14606 262497842 -1811881704 8211.805 2.37851933046663E8 37354136531251060.755 63024710145324035.720 2022-10-11 2022-01-17T10:20:18 2022-04-12 2022-10-24T18:14:38 16.243.195.81 brendab...@talane.net Annamark Pass 72 +-2147369329 false -121 -22859 4733 -378861997 385323541 -22969.846 1.483825622420542E9 50940877800950041.950 87108729227937387.294 2022-06-05 2022-08-18T05:39:56 2022-08-21 2022-12-12T08:43:59 16.27.107.167 phyllissm...@zoombox.org Village Green Terrace 55 +-2147367329 true 84 21471 -29331 1823545950 1200800855 -13832.219 8.01505090724918E8 45495296019797580.477 45196001436348967.557 2022-02-17 2022-05-23T01:44:31 2022-08-01 2022-08-16T10:32:36 84.110.209.128 vl...@dablist.edu Packers Street 34 +-2147339287 true 62 28989 -32018 650184880 -365849435 -21644.414 -7.8648426469503E7 92593387160450273.870 39588697152489527.185 2022-07-23 2023-01-03T11:54:35 2022-08-02 2022-05-19T18:35:36 30.194.6.115 ven...@thoughtstorm.mil Basil Street 79 +-2147336695 false 42 -7202 27919 1898713395 1177326785 -302.0104 -1.268944460183375E9 61604656210729534.717 6683002058708470.832 2022-08-20 2022-08-14T01:41:12 2022-11-02 2022-05-15T04:22:07 36.86.77.214 delectus_maiores_fu...@rhyzio.org Briar Crest Crossing 37 +-2147330925 false -122 -21211 -2331 1906695924 -1342280417 5545.3013 -1.286038914681617E9 31911132334645267.930 84364209624711210.131 2022-02-16 2022-03-11T12:05:33 2022-11-24 2022-12-17T19:56:16 6.87.14.74 rcampb...@riffpath.com Forest Run Terrace 13 + +-- !sql -- +-2145739104 true 10 -22603 6132 -984517723 138439036 8683.904 1.681202635040786E9 49683339998558535.395 38251259739648714.297 2022-04-26 2022-09-12T00:32:18 2022-11-20 2023-01-09T16:19:06 180.215.212.86 kathyrobe...@talane.info Darwin Center 26 +-2140012242 false 10 30893 -16192 -175522451 -1382546546 21324.643 2.017216342012696E9 41477187479096470.647 25445001389089818.791 2022-11-06 2022-09-02T12:04:05 2022-05-29 2022-02-04T22:21:46 24.25.69.81 nam_qu...@photospace.mil Jay Way 9 +-2130269306 false 10 30342 -18732 1461226453 -1257020753 -10751.815 3.44246067782915E8 2456538047280540.838 37394928326629689.946 2022-11-28 2022-05-04T20:40:19 2022-08-25 2022-03-18T10:17:35 179.198.200.96 eful...@skynoodle.com Tennyson Street 83 +-2122709724 true 10 -8985 -30620 -1375603501 631094037 14711.055 -1.210030062083139E9 96220820029888063.156 42161382030214480.728 2022-05-28 2023-01-03T20:44:27 2022-06-11 2022-07-26T22:49:22 13.249.135.222 udi...@shufflebeat.name Riverside Parkway 72 +-2117749737 false 10 26335 30644 1841596444 283308539 18848.148 3.5339747538014E8 11924963560520504.166 28287350935413049.601 2022-08-01 2022-04-21T02:28:54 2022-02-27 2022-09-02T17:11:17 183.108.102.1 phan...@cogibox.com Maple Wood Street 40 +-2113239713 false 10 27624 31311 711781944 -1838033894 -12299.482 -1.88263132184351E9 9480201396831049.605 52114965946122870.302 2022-06-11 2022-08-31T08:54:30 2022-03-26 2023-01-08T23:28:27 200.161.156.176 e...@buzzster.net Westport Drive 82 +-2107773486 false 10 27096 10368 1579374450 1370327646 -15339.031 2.110010890135424E9 54514853031265543.378 38546969634312019.180 2022-12-31 2022-10-07T10:18:27 2022-10-01 2022-07-09T11:41:11 121.120.227.53 juliad...@plambee.com Sugar Crossing 43 +-2107242025 true 10 25215 26566 1292568651 -2126795906 11912.074 -2.140044503516609E9 98695561934257164.368 18845397264645075.775 2022-05-21 2022-09-24T23:00:21 2022-02-12 2022-11-24T19:17:03 141.226.90.50 annagonza...@eimbee.mil Cody Street 78 +-2106969609 true 10 29572 16738 1736115820 -957295886 -13319.206 -1.333603562816737E9 91224478600376111.942 69457425159617037.453 2022-09-06 2022-05-08T19:52:36 2022-04-05 2022-08-17T19:23:31 222.79.139.99 walter...@voomm.net Oxford Alley 77 +-2102307005 true 10 -23674 24613 -1810828490 -47095409 -14686.167 2.072108685694799E9 39847820962230526.125 584354832299375.156 2022-03-27 2022-02-11T13:46:06 2022-12-25 2022-11-28T09:37:49 213.146.33.250 juliasimm...@zazio.info Eagle Crest Terrace 84 + diff --git a/regression-test/suites/point_query_p0/load.groovy b/regression-test/suites/point_query_p0/load.groovy new file mode 100644 index 0000000000..7ac12d0c35 --- /dev/null +++ b/regression-test/suites/point_query_p0/load.groovy @@ -0,0 +1,101 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite("test_point_query_load", "p0") { + + def dataFile = """${getS3Url()}/regression/datatypes/test_scalar_types_10w.csv""" + + // define dup key table1 + def testTable = "tbl_scalar_types_dup" + sql "DROP TABLE IF EXISTS ${testTable} FORCE" + sql """ + CREATE TABLE IF NOT EXISTS ${testTable} ( + `k1` bigint(11) NULL, + `c_bool` boolean NULL, + `c_tinyint` tinyint(4) NULL, + `c_smallint` smallint(6) NULL, + `c_int` int(11) NULL, + `c_bigint` bigint(20) NULL, + `c_largeint` largeint(40) NULL, + `c_float` float NULL, + `c_double` double NULL, + `c_decimal` decimal(20, 3) NULL, + `c_decimalv3` decimalv3(20, 3) NULL, + `c_date` date NULL, + `c_datetime` datetime NULL, + `c_datev2` datev2 NULL, + `c_datetimev2` datetimev2(0) NULL, + `c_char` char(15) NULL, + `c_varchar` varchar(100) NULL, + `c_string` text NULL + ) ENGINE=OLAP + DUPLICATE KEY(`k1`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`k1`) BUCKETS 10 + PROPERTIES("replication_num" = "1", "store_row_column" = "true"); + """ + + // load data + streamLoad { + table testTable + file dataFile + time 60000 + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals(100000, json.NumberTotalRows) + assertEquals(100000, json.NumberLoadedRows) + } + } + createMV ("""CREATE MATERIALIZED VIEW mv_${testTable} AS SELECT c_tinyint, c_bool, k1, c_smallint, c_int, c_bigint, c_largeint, c_float, c_double, c_decimal, c_decimalv3, c_date, c_datetime, c_datev2, c_datetimev2, c_char, c_varchar, c_string FROM ${testTable} ORDER BY c_tinyint, c_bool, k1""") + + sql "set topn_opt_limit_threshold = 100" + explain { + sql("SELECT * from ${testTable} where c_tinyint = 10 order by 1, 2, 3 limit 10") + contains "(mv_${testTable})" + contains "OPT TWO PHASE" + } + qt_sql "SELECT * from ${testTable} order by 1, 2, 3 limit 10" + qt_sql "SELECT * from ${testTable} where c_tinyint = 10 order by 1, 2, 3 limit 10 " + + sql """ + ALTER table ${testTable} MODIFY COLUMN c_int BIGINT; + """ + def getJobState = { tableName -> + def jobStateResult = sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ + return jobStateResult[0][9] + } + int max_try_time = 100 + while (max_try_time--){ + String result = getJobState(testTable) + if (result == "FINISHED") { + break + } else { + sleep(2000) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + sql "INSERT INTO ${testTable} SELECT * from ${testTable}" +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org