diff --git a/.asf.yaml b/.asf.yaml index cbce60f0a5e43d..4e11b21408891b 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -19,24 +19,30 @@ github: description: Apache Doris is an easy-to-use, high performance and unified analytics database. homepage: https://doris.apache.org labels: - - data-warehousing - - mpp - - olap - - dbms - - database - - sql - big-data - real-time - - analytics - - distributed-database - - iceberg - - hudi + - realtime-analytics + - query-engine + - olap + - ad-hoc + - mpp - datalake + - lakehouse + - etl + - elt + - sql + - snowflake + - redshift + - bigquery - hive + - iceberg + - hudi + - delta-lake + - spark - hadoop - - tpch - - ssb + - dbt - vectorized + - database enabled_merge_buttons: squash: true diff --git a/.clang-format-ignore b/.clang-format-ignore index 9275d0e000617d..b92688b8247e2f 100644 --- a/.clang-format-ignore +++ b/.clang-format-ignore @@ -7,3 +7,7 @@ be/src/util/sse2neon.h be/src/util/mustache/mustache.h be/src/util/mustache/mustache.cc be/src/util/utf8_check.cpp +be/src/util/cityhash102/city.h +be/src/util/cityhash102/city.cc +be/src/util/cityhash102/citycrc.h +be/src/util/cityhash102/config.h diff --git a/.licenserc.yaml b/.licenserc.yaml index d458e45269f31e..8e02ad6e8853ae 100644 --- a/.licenserc.yaml +++ b/.licenserc.yaml @@ -52,6 +52,7 @@ header: - "be/src/util/jsonb_document.h" - "be/src/util/jsonb_error.h" - "be/src/util/jsonb_parser.h" + - "be/src/util/jsonb_parser_simd.h" - "be/src/util/jsonb_stream.h" - "be/src/util/jsonb_updater.h" - "be/src/util/jsonb_utils.h" @@ -63,6 +64,7 @@ header: - "be/src/util/sse2neo.h" - "be/src/util/sse2neon.h" - "be/src/util/utf8_check.cpp" + - "be/src/util/cityhash102" - "build-support/run_clang_format.py" - "regression-test/data" - "docs/.vuepress/public/css/animate.min.css" diff --git a/README.md b/README.md index 88c5114b1f8902..57b1b165809601 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,7 @@ under the License. # Apache Doris [![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html) [![GitHub release](https://img.shields.io/github/release/apache/doris.svg)](https://github.com/apache/doris/releases) -[![Jenkins Vec](https://img.shields.io/jenkins/tests?compact_message&jobUrl=https://ci-builds.apache.org/job/Doris/job/doris_daily_disable_vectorized&label=OriginEngine)](https://ci-builds.apache.org/job/Doris/job/doris_daily_disable_vectorized) -[![Jenkins Ori](https://img.shields.io/jenkins/tests?compact_message&jobUrl=https://ci-builds.apache.org/job/Doris/job/doris_daily_enable_vectorized&label=VectorizedEngine)](https://ci-builds.apache.org/job/Doris/job/doris_daily_enable_vectorized) +[![Jenkins Vec](https://img.shields.io/jenkins/tests?compact_message&jobUrl=https://ci-builds.apache.org/job/Doris/job/doris_daily_enable_vectorized&label=VectorizedEngine)](https://ci-builds.apache.org/job/Doris/job/doris_daily_enable_vectorized) [![Total Lines](https://tokei.rs/b1/github/apache/doris?category=lines)](https://github.com/apache/doris) [![Join the Doris Community at Slack](https://img.shields.io/badge/chat-slack-brightgreen)](https://join.slack.com/t/apachedoriscommunity/shared_invite/zt-1h153f1ar-sTJB_QahY1SHvZdtPFoIOQ) [![Join the chat at https://gitter.im/apache-doris/Lobby](https://badges.gitter.im/apache-doris/Lobby.svg)](https://gitter.im/apache-doris/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -39,6 +38,7 @@ All this makes Apache Doris an ideal tool for scenarios including report analysi 🎉 Version 1.2.0 released now! It is fully evolved release and all users are encouraged to upgrade to this release. Check out the 🔗[Release Notes](https://doris.apache.org/docs/releasenotes/release-1.2.0) here. +🎉 Version 1.1.5 released now. It is a LTS(Long-term Suopport) release based on version 1.1. Check out the 🔗[Release Notes](https://doris.apache.org/docs/dev/releasenotes/release-1.1.5) here. 👀 Have a look at the 🔗[Official Website](https://doris.apache.org/) for a comprehensive list of Apache Doris's core features, blogs and user cases. @@ -138,7 +138,7 @@ In terms of optimizers, Doris uses a combination of CBO and RBO. RBO supports co **Apache Doris has graduated from Apache incubator successfully and become a Top-Level Project in June 2022**. -Currently, the Apache Doris community has gathered more than 350 contributors from nearly 100 companies in different industries, and the number of active contributors is close to 100 per month. +Currently, the Apache Doris community has gathered more than 400 contributors from nearly 200 companies in different industries, and the number of active contributors is close to 100 per month. [![Monthly Active Contributors](https://contributor-overtime-api.apiseven.com/contributors-svg?chart=contributorMonthlyActivity&repo=apache/doris)](https://www.apiseven.com/en/contributor-graph?chart=contributorMonthlyActivity&repo=apache/doris) @@ -149,7 +149,7 @@ We deeply appreciate 🔗[community contributors](https://github.com/apache/dori ## 👨‍👩‍👧‍👦 Users -Apache Doris now has a wide user base in China and around the world, and as of today, **Apache Doris is used in production environments in over 1000 companies worldwide.** More than 80% of the top 50 Internet companies in China in terms of market capitalization or valuation have been using Apache Doris for a long time, including Baidu, Meituan, Xiaomi, Jingdong, Bytedance, Tencent, NetEase, Kwai, Weibo, and Ke Holdings. It is also widely used in some traditional industries such as finance, energy, manufacturing, and telecommunications. +Apache Doris now has a wide user base in China and around the world, and as of today, **Apache Doris is used in production environments in thousands of companies worldwide.** More than 80% of the top 50 Internet companies in China in terms of market capitalization or valuation have been using Apache Doris for a long time, including Baidu, Meituan, Xiaomi, Jingdong, Bytedance, Tencent, NetEase, Kwai, Sina, 360, Mihoyo, and Ke Holdings. It is also widely used in some traditional industries such as finance, energy, manufacturing, and telecommunications. The users of Apache Doris: 🔗[https://doris.apache.org/users](https://doris.apache.org/users) diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt index c85f87e8a420af..dfa097223e8082 100644 --- a/be/CMakeLists.txt +++ b/be/CMakeLists.txt @@ -510,6 +510,8 @@ if ("${CMAKE_BUILD_TARGET_ARCH}" STREQUAL "x86" OR "${CMAKE_BUILD_TARGET_ARCH}" if (USE_AVX2) set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -mavx2") endif() + # set -mlzcnt for leading zero count used by simdjson + set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -msse4.2") endif() set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -Wno-attributes -DS2_USE_GFLAGS -DS2_USE_GLOG") diff --git a/be/src/common/config.h b/be/src/common/config.h index debcdb67d698ca..056ea2ab7514db 100644 --- a/be/src/common/config.h +++ b/be/src/common/config.h @@ -448,6 +448,8 @@ CONF_Bool(enable_quadratic_probing, "false"); // for pprof CONF_String(pprof_profile_dir, "${DORIS_HOME}/log"); +// for jeprofile in jemalloc +CONF_mString(jeprofile_dir, "${DORIS_HOME}/log"); // to forward compatibility, will be removed later CONF_mBool(enable_token_check, "true"); @@ -826,6 +828,7 @@ CONF_Int32(s3_transfer_executor_pool_size, "2"); CONF_Bool(enable_time_lut, "true"); CONF_Bool(enable_simdjson_reader, "false"); +CONF_mBool(enable_query_like_bloom_filter, "true"); // number of s3 scanner thread pool size CONF_Int32(doris_remote_scanner_thread_pool_thread_num, "16"); // number of s3 scanner thread pool queue size @@ -867,6 +870,10 @@ CONF_Bool(enable_fuzzy_mode, "false"); CONF_Int32(pipeline_executor_size, "0"); +// Temp config. True to use optimization for bitmap_index apply predicate except leaf node of the and node. +// Will remove after fully test. +CONF_Bool(enable_index_apply_preds_except_leafnode_of_andnode, "false"); + #ifdef BE_TEST // test s3 CONF_String(test_s3_resource, "resource"); diff --git a/be/src/exec/olap_common.h b/be/src/exec/olap_common.h index 605ab9dda09198..8f19502761a506 100644 --- a/be/src/exec/olap_common.h +++ b/be/src/exec/olap_common.h @@ -96,6 +96,10 @@ class ColumnValueRange { Status add_range(SQLFilterOp op, CppType value); + Status add_compound_value(SQLFilterOp op, CppType value); + + bool is_in_compound_value_range() const; + bool is_fixed_value_range() const; bool is_scope_value_range() const; @@ -239,6 +243,31 @@ class ColumnValueRange { } } + void to_condition_in_compound(std::vector& filters) { + for (const auto& value : _compound_values) { + TCondition condition; + condition.__set_column_name(_column_name); + if (value.first == FILTER_LARGER) { + condition.__set_condition_op(">>"); + } else if (value.first == FILTER_LARGER_OR_EQUAL) { + condition.__set_condition_op(">="); + } else if (value.first == FILTER_LESS) { + condition.__set_condition_op("<<"); + } else if (value.first == FILTER_LESS_OR_EQUAL) { + condition.__set_condition_op("<="); + } else if (value.first == FILTER_IN) { + condition.__set_condition_op("*="); + } else if (value.first == FILTER_NOT_IN) { + condition.__set_condition_op("!*="); + } + condition.condition_values.push_back( + cast_to_string(value.second, _scale)); + if (condition.condition_values.size() != 0) { + filters.push_back(condition); + } + } + } + void set_whole_value_range() { _fixed_values.clear(); _low_value = TYPE_MIN; @@ -286,6 +315,11 @@ class ColumnValueRange { range.add_range(op, *value); } + static void add_compound_value_range(ColumnValueRange& range, SQLFilterOp op, + CppType* value) { + range.add_compound_value(op, *value); + } + static ColumnValueRange create_empty_column_value_range() { return ColumnValueRange::create_empty_column_value_range(""); } @@ -335,6 +369,9 @@ class ColumnValueRange { primitive_type == PrimitiveType::TYPE_BOOLEAN || primitive_type == PrimitiveType::TYPE_DATETIME || primitive_type == PrimitiveType::TYPE_DATETIMEV2; + + // range value except leaf node of and node in compound expr tree + std::set> _compound_values; }; class OlapScanKeys { @@ -476,6 +513,18 @@ Status ColumnValueRange::add_fixed_value(const CppType& value) { return Status::OK(); } +template +Status ColumnValueRange::add_compound_value(SQLFilterOp op, CppType value) { + std::pair val_with_op(op, value); + _compound_values.insert(val_with_op); + _contain_null = false; + + _high_value = TYPE_MIN; + _low_value = TYPE_MAX; + + return Status::OK(); +} + template void ColumnValueRange::remove_fixed_value(const CppType& value) { _fixed_values.erase(value); @@ -486,6 +535,11 @@ bool ColumnValueRange::is_fixed_value_range() const { return _fixed_values.size() != 0; } +template +bool ColumnValueRange::is_in_compound_value_range() const { + return _compound_values.size() != 0; +} + template bool ColumnValueRange::is_scope_value_range() const { return _high_value > _low_value; @@ -497,7 +551,7 @@ bool ColumnValueRange::is_empty_value_range() const { return true; } - return !is_fixed_value_range() && !is_scope_value_range() && !contain_null(); + return (!is_fixed_value_range() && !is_scope_value_range() && !contain_null()); } template diff --git a/be/src/exec/table_connector.cpp b/be/src/exec/table_connector.cpp index e342f9abd675d7..b27d949aeacaab 100644 --- a/be/src/exec/table_connector.cpp +++ b/be/src/exec/table_connector.cpp @@ -17,12 +17,18 @@ #include "exec/table_connector.h" +#include + #include #include "exprs/expr.h" +#include "runtime/define_primitive_type.h" #include "runtime/primitive_type.h" #include "util/mysql_global.h" +#include "vec/columns/column_array.h" #include "vec/core/block.h" +#include "vec/data_types/data_type.h" +#include "vec/data_types/data_type_array.h" #include "vec/exprs/vexpr.h" #include "vec/exprs/vexpr_context.h" @@ -48,26 +54,13 @@ std::u16string TableConnector::utf8_to_u16string(const char* first, const char* Status TableConnector::append(const std::string& table_name, vectorized::Block* block, const std::vector& output_vexpr_ctxs, uint32_t start_send_row, uint32_t* num_rows_sent, - bool need_extra_convert) { + TOdbcTableType::type table_type) { _insert_stmt_buffer.clear(); std::u16string insert_stmt; { SCOPED_TIMER(_convert_tuple_timer); fmt::format_to(_insert_stmt_buffer, "INSERT INTO {} VALUES (", table_name); - auto extra_convert_func = [&](const std::string_view& str, const bool& is_date) -> void { - if (!need_extra_convert) { - fmt::format_to(_insert_stmt_buffer, "'{}'", str); - } else { - if (is_date) { - fmt::format_to(_insert_stmt_buffer, "to_date('{}','yyyy-mm-dd')", str); - } else { - fmt::format_to(_insert_stmt_buffer, "to_date('{}','yyyy-mm-dd hh24:mi:ss')", - str); - } - } - }; - int num_rows = block->rows(); int num_columns = block->columns(); for (int i = start_send_row; i < num_rows; ++i) { @@ -80,117 +73,8 @@ Status TableConnector::append(const std::string& table_name, vectorized::Block* } auto& column_ptr = block->get_by_position(j).column; auto& type_ptr = block->get_by_position(j).type; - vectorized::ColumnPtr column; - if (type_ptr->is_nullable()) { - column = assert_cast(*column_ptr) - .get_nested_column_ptr(); - if (column_ptr->is_null_at(i)) { - fmt::format_to(_insert_stmt_buffer, "{}", "NULL"); - continue; - } - } else { - column = column_ptr; - } - auto [item, size] = column->get_data_at(i); - switch (output_vexpr_ctxs[j]->root()->type().type) { - case TYPE_BOOLEAN: - case TYPE_TINYINT: - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - case TYPE_SMALLINT: - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - case TYPE_INT: - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - case TYPE_BIGINT: - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - case TYPE_FLOAT: - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - case TYPE_DOUBLE: - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - case TYPE_DATE: { - vectorized::VecDateTimeValue value = - binary_cast( - *(int64_t*)item); - - char buf[64]; - char* pos = value.to_string(buf); - std::string_view str(buf, pos - buf - 1); - extra_convert_func(str, true); - break; - } - case TYPE_DATETIME: { - vectorized::VecDateTimeValue value = - binary_cast( - *(int64_t*)item); - - char buf[64]; - char* pos = value.to_string(buf); - std::string_view str(buf, pos - buf - 1); - extra_convert_func(str, false); - break; - } - case TYPE_DATEV2: { - vectorized::DateV2Value value = binary_cast< - uint32_t, doris::vectorized::DateV2Value>( - *(int32_t*)item); - - char buf[64]; - char* pos = value.to_string(buf); - std::string str(buf, pos - buf - 1); - extra_convert_func(str, true); - break; - } - case TYPE_DATETIMEV2: { - vectorized::DateV2Value value = binary_cast< - uint64_t, - doris::vectorized::DateV2Value>( - *(int64_t*)item); - - char buf[64]; - char* pos = value.to_string(buf, output_vexpr_ctxs[i]->root()->type().scale); - std::string str(buf, pos - buf - 1); - extra_convert_func(str, false); - break; - } - case TYPE_VARCHAR: - case TYPE_CHAR: - case TYPE_STRING: { - fmt::format_to(_insert_stmt_buffer, "'{}'", fmt::basic_string_view(item, size)); - break; - } - case TYPE_DECIMALV2: { - DecimalV2Value value = *(DecimalV2Value*)(item); - fmt::format_to(_insert_stmt_buffer, "{}", value.to_string()); - break; - } - case TYPE_DECIMAL32: - case TYPE_DECIMAL64: - case TYPE_DECIMAL128I: { - auto val = type_ptr->to_string(*column, i); - fmt::format_to(_insert_stmt_buffer, "{}", val); - break; - } - case TYPE_LARGEINT: { - fmt::format_to(_insert_stmt_buffer, "{}", - *reinterpret_cast(item)); - break; - } - default: { - return Status::InternalError("can't convert this type to mysql type. type = {}", - output_vexpr_ctxs[j]->root()->type().type); - } - } + RETURN_IF_ERROR(convert_column_data( + column_ptr, type_ptr, output_vexpr_ctxs[j]->root()->type(), i, table_type)); } if (i < num_rows - 1 && _insert_stmt_buffer.size() < INSERT_BUFFER_SIZE) { @@ -210,4 +94,161 @@ Status TableConnector::append(const std::string& table_name, vectorized::Block* return Status::OK(); } +Status TableConnector::convert_column_data(const vectorized::ColumnPtr& column_ptr, + const vectorized::DataTypePtr& type_ptr, + const TypeDescriptor& type, int row, + TOdbcTableType::type table_type) { + auto extra_convert_func = [&](const std::string_view& str, const bool& is_date) -> void { + if (table_type != TOdbcTableType::ORACLE) { + fmt::format_to(_insert_stmt_buffer, "\"{}\"", str); + } else { + //if is ORACLE and date type, insert into need convert + if (is_date) { + fmt::format_to(_insert_stmt_buffer, "to_date('{}','yyyy-mm-dd')", str); + } else { + fmt::format_to(_insert_stmt_buffer, "to_date('{}','yyyy-mm-dd hh24:mi:ss')", str); + } + } + }; + const vectorized::IColumn* column = column_ptr; + if (type_ptr->is_nullable()) { + auto nullable_column = assert_cast(column_ptr.get()); + if (nullable_column->is_null_at(row)) { + fmt::format_to(_insert_stmt_buffer, "{}", "NULL"); + return Status::OK(); + } + column = nullable_column->get_nested_column_ptr().get(); + } else { + column = column_ptr; + } + auto [item, size] = column->get_data_at(row); + switch (type.type) { + case TYPE_BOOLEAN: + case TYPE_TINYINT: + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + case TYPE_SMALLINT: + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + case TYPE_INT: + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + case TYPE_BIGINT: + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + case TYPE_FLOAT: + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + case TYPE_DOUBLE: + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + case TYPE_DATE: { + vectorized::VecDateTimeValue value = + binary_cast(*(int64_t*)item); + + char buf[64]; + char* pos = value.to_string(buf); + std::string_view str(buf, pos - buf - 1); + extra_convert_func(str, true); + break; + } + case TYPE_DATETIME: { + vectorized::VecDateTimeValue value = + binary_cast(*(int64_t*)item); + + char buf[64]; + char* pos = value.to_string(buf); + std::string_view str(buf, pos - buf - 1); + extra_convert_func(str, false); + break; + } + case TYPE_DATEV2: { + vectorized::DateV2Value value = + binary_cast>( + *(int32_t*)item); + + char buf[64]; + char* pos = value.to_string(buf); + std::string str(buf, pos - buf - 1); + extra_convert_func(str, true); + break; + } + case TYPE_DATETIMEV2: { + vectorized::DateV2Value value = + binary_cast>( + *(int64_t*)item); + + char buf[64]; + char* pos = value.to_string(buf, type.scale); + std::string str(buf, pos - buf - 1); + extra_convert_func(str, false); + break; + } + case TYPE_VARCHAR: + case TYPE_CHAR: + case TYPE_STRING: { + // here need check the ' is used, now for pg array string must be " + fmt::format_to(_insert_stmt_buffer, "\"{}\"", fmt::basic_string_view(item, size)); + break; + } + case TYPE_ARRAY: { + auto& arr_nested = reinterpret_cast(column)->get_data_ptr(); + auto& arr_offset = reinterpret_cast(column)->get_offsets(); + auto array_type = remove_nullable(type_ptr); + auto nested_type = + reinterpret_cast(*array_type).get_nested_type(); + + //for doris、CK insert into ---> [] + //for PG insert into ---> '{}' + if (table_type == TOdbcTableType::POSTGRESQL) { + fmt::format_to(_insert_stmt_buffer, "{}", "'{"); + } else if (table_type == TOdbcTableType::CLICKHOUSE || + table_type == TOdbcTableType::MYSQL) { + fmt::format_to(_insert_stmt_buffer, "{}", "["); + } + bool first_value = true; + for (auto idx = arr_offset[row - 1]; idx < arr_offset[row]; ++idx) { + if (first_value == false) { + fmt::format_to(_insert_stmt_buffer, "{}", ", "); + } + if (arr_nested->is_null_at(idx)) { + fmt::format_to(_insert_stmt_buffer, "{}", "NULL"); + } else { + RETURN_IF_ERROR(convert_column_data(arr_nested, nested_type, type.children[0], idx, + table_type)); + } + first_value = false; + } + if (table_type == TOdbcTableType::POSTGRESQL) { + fmt::format_to(_insert_stmt_buffer, "{}", "}'"); + } else if (table_type == TOdbcTableType::CLICKHOUSE || + table_type == TOdbcTableType::MYSQL) { + fmt::format_to(_insert_stmt_buffer, "{}", "]"); + } + break; + } + case TYPE_DECIMALV2: { + DecimalV2Value value = *(DecimalV2Value*)(item); + fmt::format_to(_insert_stmt_buffer, "{}", value.to_string()); + break; + } + case TYPE_DECIMAL32: + case TYPE_DECIMAL64: + case TYPE_DECIMAL128I: { + auto val = type_ptr->to_string(*column, row); + fmt::format_to(_insert_stmt_buffer, "{}", val); + break; + } + case TYPE_LARGEINT: { + fmt::format_to(_insert_stmt_buffer, "{}", *reinterpret_cast(item)); + break; + } + default: { + return Status::InternalError("can't convert this type to mysql type. type = {}", + type.debug_string()); + } + } + return Status::OK(); +} } // namespace doris diff --git a/be/src/exec/table_connector.h b/be/src/exec/table_connector.h index a6077b3227c741..9f5330a4865e3b 100644 --- a/be/src/exec/table_connector.h +++ b/be/src/exec/table_connector.h @@ -18,6 +18,7 @@ #pragma once #include +#include #include #include @@ -54,12 +55,16 @@ class TableConnector { Status append(const std::string& table_name, vectorized::Block* block, const std::vector& _output_vexpr_ctxs, uint32_t start_send_row, uint32_t* num_rows_sent, - bool need_extra_convert = false); + TOdbcTableType::type table_type = TOdbcTableType::MYSQL); void init_profile(RuntimeProfile*); std::u16string utf8_to_u16string(const char* first, const char* last); + Status convert_column_data(const vectorized::ColumnPtr& column_ptr, + const vectorized::DataTypePtr& type_ptr, const TypeDescriptor& type, + int row, TOdbcTableType::type table_type); + virtual Status close() { return Status::OK(); } protected: diff --git a/be/src/http/CMakeLists.txt b/be/src/http/CMakeLists.txt index a23d67939128da..a2e1c3eb46cbaa 100644 --- a/be/src/http/CMakeLists.txt +++ b/be/src/http/CMakeLists.txt @@ -35,6 +35,7 @@ add_library(Webserver STATIC http_client.cpp action/download_action.cpp action/monitor_action.cpp + action/pad_rowset_action.cpp action/health_action.cpp action/tablet_migration_action.cpp action/tablets_info_action.cpp @@ -54,4 +55,5 @@ add_library(Webserver STATIC action/reset_rpc_channel_action.cpp action/check_tablet_segment_action.cpp action/version_action.cpp + action/jeprofile_actions.cpp ) diff --git a/be/src/http/action/jeprofile_actions.cpp b/be/src/http/action/jeprofile_actions.cpp new file mode 100644 index 00000000000000..27c3d0796227d0 --- /dev/null +++ b/be/src/http/action/jeprofile_actions.cpp @@ -0,0 +1,81 @@ +// 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. + +#include "http/action/jeprofile_actions.h" + +#include + +#include +#include +#include +#include + +#include "common/config.h" +#include "common/object_pool.h" +#include "http/ev_http_server.h" +#include "http/http_channel.h" +#include "http/http_handler.h" +#include "http/http_headers.h" +#include "http/http_request.h" +#include "util/file_utils.h" + +namespace doris { + +static std::mutex kJeprofileActionMutex; +class JeHeapAction : public HttpHandler { +public: + JeHeapAction() = default; + virtual ~JeHeapAction() = default; + + virtual void handle(HttpRequest* req) override; +}; + +void JeHeapAction::handle(HttpRequest* req) { + std::lock_guard lock(kJeprofileActionMutex); +#ifndef USE_JEMALLOC + std::string str = "jemalloc heap dump is not available without setting USE_JEMALLOC"; + HttpChannel::send_reply(req, str); +#else + std::stringstream tmp_jeprof_file_name; + std::time_t now = std::time(nullptr); + // Build a temporary file name that is hopefully unique. + tmp_jeprof_file_name << config::jeprofile_dir << "/jeheap_dump." << now << "." << getpid() + << "." << rand() << ".heap"; + const std::string& tmp_file_name_str = tmp_jeprof_file_name.str(); + const char* file_name_ptr = tmp_file_name_str.c_str(); + int result = je_mallctl("prof.dump", nullptr, nullptr, &file_name_ptr, sizeof(const char*)); + std::stringstream response; + if (result == 0) { + response << "Jemalloc heap dump success, dump file path: " << tmp_jeprof_file_name.str() + << "\n"; + } else { + response << "Jemalloc heap dump failed, je_mallctl return: " << result << "\n"; + } + HttpChannel::send_reply(req, response.str()); +#endif +} + +Status JeprofileActions::setup(doris::ExecEnv* exec_env, doris::EvHttpServer* http_server, + doris::ObjectPool& pool) { + if (!config::jeprofile_dir.empty()) { + FileUtils::create_dir(config::jeprofile_dir); + } + http_server->register_handler(HttpMethod::GET, "/jeheap/dump", pool.add(new JeHeapAction())); + return Status::OK(); +} + +} // namespace doris diff --git a/be/src/http/action/jeprofile_actions.h b/be/src/http/action/jeprofile_actions.h new file mode 100644 index 00000000000000..2ebeb3c9ffdc92 --- /dev/null +++ b/be/src/http/action/jeprofile_actions.h @@ -0,0 +1,31 @@ +// 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. + +#ifndef DORIS_JEPROFILE_ACTIONS_H +#define DORIS_JEPROFILE_ACTIONS_H +#include "common/status.h" +namespace doris { +class EvHttpServer; +class ExecEnv; +class ObjectPool; +class JeprofileActions { +public: + static Status setup(ExecEnv* exec_env, EvHttpServer* http_server, ObjectPool& pool); +}; + +} // namespace doris +#endif //DORIS_JEPROFILE_ACTIONS_H diff --git a/be/src/http/action/pad_rowset_action.cpp b/be/src/http/action/pad_rowset_action.cpp new file mode 100644 index 00000000000000..df2721f50b3a59 --- /dev/null +++ b/be/src/http/action/pad_rowset_action.cpp @@ -0,0 +1,105 @@ +// 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. + +#include "http/action/pad_rowset_action.h" + +#include +#include + +#include "http/http_channel.h" +#include "olap/olap_common.h" +#include "olap/rowset/beta_rowset_writer.h" +#include "olap/rowset/rowset.h" +#include "olap/storage_engine.h" + +namespace doris { + +const std::string TABLET_ID = "tablet_id"; +const std::string START_VERSION = "start_version"; +const std::string END_VERSION = "end_version"; + +Status check_one_param(const std::string& param_val, const std::string& param_name) { + if (param_val.empty()) { + return Status::InternalError("paramater {} not specified in url", param_name); + } + return Status::OK(); +} + +void PadRowsetAction::handle(HttpRequest* req) { + LOG(INFO) << "accept one request " << req->debug_string(); + Status status = _handle(req); + std::string result = status.to_json(); + LOG(INFO) << "handle request result:" << result; + if (status.ok()) { + HttpChannel::send_reply(req, HttpStatus::OK, result); + } else { + HttpChannel::send_reply(req, HttpStatus::INTERNAL_SERVER_ERROR, result); + } +} + +Status PadRowsetAction::check_param(HttpRequest* req) { + RETURN_IF_ERROR(check_one_param(req->param(TABLET_ID), TABLET_ID)); + RETURN_IF_ERROR(check_one_param(req->param(START_VERSION), START_VERSION)); + RETURN_IF_ERROR(check_one_param(req->param(END_VERSION), END_VERSION)); + return Status::OK(); +} + +Status PadRowsetAction::_handle(HttpRequest* req) { + RETURN_IF_ERROR(check_param(req)); + + const std::string& tablet_id_str = req->param(TABLET_ID); + const std::string& start_version_str = req->param(START_VERSION); + const std::string& end_version_str = req->param(END_VERSION); + + // valid str format + int64_t tablet_id = std::atol(tablet_id_str.c_str()); + int32_t start_version = std::atoi(start_version_str.c_str()); + int32_t end_version = std::atoi(end_version_str.c_str()); + if (start_version < 0 || end_version < 0 || end_version < start_version) { + return Status::InternalError("Invalid input version"); + } + + auto tablet = StorageEngine::instance()->tablet_manager()->get_tablet(tablet_id); + if (nullptr == tablet) { + return Status::InternalError("Unknown tablet id {}", tablet_id); + } + return _pad_rowset(tablet, Version(start_version, end_version)); +} + +Status PadRowsetAction::_pad_rowset(TabletSharedPtr tablet, const Version& version) { + if (tablet->check_version_exist(version)) { + return Status::InternalError("Input version {} exists", version.to_string()); + } + + std::unique_ptr writer; + RETURN_IF_ERROR(tablet->create_rowset_writer(version, VISIBLE, NONOVERLAPPING, + tablet->tablet_schema(), -1, -1, &writer)); + auto rowset = writer->build(); + rowset->make_visible(version); + + std::vector to_add {rowset}; + std::vector to_delete; + { + std::unique_lock wlock(tablet->get_header_lock()); + tablet->modify_rowsets(to_add, to_delete); + tablet->save_meta(); + } + + return Status::OK(); +} + +} // namespace doris diff --git a/be/src/http/action/pad_rowset_action.h b/be/src/http/action/pad_rowset_action.h new file mode 100644 index 00000000000000..f6036dc9fae726 --- /dev/null +++ b/be/src/http/action/pad_rowset_action.h @@ -0,0 +1,44 @@ +// 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. + +#pragma once + +#include "common/status.h" +#include "http/http_handler.h" +#include "http/http_request.h" +#include "olap/tablet.h" + +namespace doris { + +class PadRowsetAction : public HttpHandler { +public: + PadRowsetAction() = default; + + ~PadRowsetAction() override = default; + + void handle(HttpRequest* req) override; + +private: + Status _handle(HttpRequest* req); + Status check_param(HttpRequest* req); + +#ifdef BE_TEST +public: +#endif + Status _pad_rowset(TabletSharedPtr tablet, const Version& version); +}; +} // end namespace doris \ No newline at end of file diff --git a/be/src/io/CMakeLists.txt b/be/src/io/CMakeLists.txt index a8ea5ff23204fe..900026002f3bae 100644 --- a/be/src/io/CMakeLists.txt +++ b/be/src/io/CMakeLists.txt @@ -33,6 +33,7 @@ set(IO_FILES local_file_writer.cpp s3_reader.cpp s3_writer.cpp + fs/file_reader_options.cpp fs/file_system_map.cpp fs/local_file_reader.cpp fs/local_file_system.cpp @@ -44,6 +45,7 @@ set(IO_FILES fs/hdfs_file_reader.cpp fs/broker_file_system.cpp fs/broker_file_reader.cpp + fs/remote_file_system.cpp fs/stream_load_pipe.cpp cache/dummy_file_cache.cpp cache/file_cache.cpp diff --git a/be/src/io/cache/file_cache_manager.cpp b/be/src/io/cache/file_cache_manager.cpp index a49dfcd2402842..59a12b0ea0e1b1 100644 --- a/be/src/io/cache/file_cache_manager.cpp +++ b/be/src/io/cache/file_cache_manager.cpp @@ -216,12 +216,13 @@ void FileCacheManager::gc_file_caches() { FileCachePtr FileCacheManager::new_file_cache(const std::string& cache_dir, int64_t alive_time_sec, io::FileReaderSPtr remote_file_reader, - const std::string& file_cache_type) { - if (file_cache_type == "whole_file_cache") { + io::FileCacheType cache_type) { + switch (cache_type) { + case io::FileCacheType::SUB_FILE_CACHE: return std::make_unique(cache_dir, alive_time_sec, remote_file_reader); - } else if (file_cache_type == "sub_file_cache") { + case io::FileCacheType::WHOLE_FILE_CACHE: return std::make_unique(cache_dir, alive_time_sec, remote_file_reader); - } else { + default: return nullptr; } } diff --git a/be/src/io/cache/file_cache_manager.h b/be/src/io/cache/file_cache_manager.h index 9332b324fc9b75..b8200d964ea549 100644 --- a/be/src/io/cache/file_cache_manager.h +++ b/be/src/io/cache/file_cache_manager.h @@ -24,6 +24,7 @@ #include "common/config.h" #include "common/status.h" #include "io/cache/file_cache.h" +#include "io/fs/file_reader_options.h" namespace doris { namespace io { @@ -59,7 +60,7 @@ class FileCacheManager { FileCachePtr new_file_cache(const std::string& cache_dir, int64_t alive_time_sec, io::FileReaderSPtr remote_file_reader, - const std::string& file_cache_type); + io::FileCacheType cache_type); bool exist(const std::string& cache_path); diff --git a/be/src/io/file_factory.cpp b/be/src/io/file_factory.cpp index 2c8b56ea504cc7..d44a2add8e48bc 100644 --- a/be/src/io/file_factory.cpp +++ b/be/src/io/file_factory.cpp @@ -170,7 +170,7 @@ Status FileFactory::create_file_reader(RuntimeProfile* /*profile*/, } case TFileType::FILE_BROKER: { RETURN_IF_ERROR(create_broker_reader(system_properties.broker_addresses[0], - system_properties.properties, file_description.path, + system_properties.properties, file_description, &file_system_ptr, file_reader)); break; } @@ -232,12 +232,12 @@ Status FileFactory::create_s3_reader(const std::map& p Status FileFactory::create_broker_reader(const TNetworkAddress& broker_addr, const std::map& prop, - const std::string& path, + const FileDescription& file_description, io::FileSystem** broker_file_system, io::FileReaderSPtr* reader) { - *broker_file_system = new io::BrokerFileSystem(broker_addr, prop); + *broker_file_system = new io::BrokerFileSystem(broker_addr, prop, file_description.file_size); RETURN_IF_ERROR((dynamic_cast(*broker_file_system))->connect()); - RETURN_IF_ERROR((*broker_file_system)->open_file(path, reader)); + RETURN_IF_ERROR((*broker_file_system)->open_file(file_description.path, reader)); return Status::OK(); } } // namespace doris diff --git a/be/src/io/file_factory.h b/be/src/io/file_factory.h index 69d115881674ff..d59aca61bf1e6d 100644 --- a/be/src/io/file_factory.h +++ b/be/src/io/file_factory.h @@ -95,7 +95,8 @@ class FileFactory { static Status create_broker_reader(const TNetworkAddress& broker_addr, const std::map& prop, - const std::string& path, io::FileSystem** hdfs_file_system, + const FileDescription& file_description, + io::FileSystem** hdfs_file_system, io::FileReaderSPtr* reader); static TFileType::type convert_storage_type(TStorageBackendType::type type) { diff --git a/be/src/io/fs/broker_file_system.cpp b/be/src/io/fs/broker_file_system.cpp index c65a0319e1f189..af6cdcefdcfc90 100644 --- a/be/src/io/fs/broker_file_system.cpp +++ b/be/src/io/fs/broker_file_system.cpp @@ -57,10 +57,12 @@ inline const std::string& client_id(const TNetworkAddress& addr) { #endif BrokerFileSystem::BrokerFileSystem(const TNetworkAddress& broker_addr, - const std::map& broker_prop) + const std::map& broker_prop, + size_t file_size) : RemoteFileSystem("", "", FileSystemType::BROKER), _broker_addr(broker_addr), - _broker_prop(broker_prop) {} + _broker_prop(broker_prop), + _file_size(file_size) {} Status BrokerFileSystem::connect() { Status status = Status::OK(); @@ -110,13 +112,12 @@ Status BrokerFileSystem::open_file(const Path& path, FileReaderSPtr* reader) { // TODO(cmy): The file size is no longer got from openReader() method. // But leave the code here for compatibility. // This will be removed later. - size_t file_size = 0; TBrokerFD fd; if (response->__isset.size) { - file_size = response->size; + _file_size = response->size; } fd = response->fd; - *reader = std::make_shared(_broker_addr, path, file_size, fd, this); + *reader = std::make_shared(_broker_addr, path, _file_size, fd, this); return Status::OK(); } @@ -196,43 +197,7 @@ Status BrokerFileSystem::exists(const Path& path, bool* res) const { } Status BrokerFileSystem::file_size(const Path& path, size_t* file_size) const { - CHECK_BROKER_CLIENT(_client); - TBrokerOpenReaderRequest request; - request.__set_version(TBrokerVersion::VERSION_ONE); - request.__set_path(path); - request.__set_startOffset(0); - request.__set_clientId(client_id(_broker_addr)); - request.__set_properties(_broker_prop); - - TBrokerOpenReaderResponse* response = new TBrokerOpenReaderResponse(); - Defer del_reponse {[&] { delete response; }}; - try { - Status status; - try { - (*_client)->openReader(*response, request); - } catch (apache::thrift::transport::TTransportException& e) { - std::this_thread::sleep_for(std::chrono::seconds(1)); - RETURN_IF_ERROR((*_client).reopen()); - (*_client)->openReader(*response, request); - } - } catch (apache::thrift::TException& e) { - std::stringstream ss; - ss << "Open broker reader failed, broker: " << _broker_addr << " failed: " << e.what(); - return Status::RpcError(ss.str()); - } - - if (response->opStatus.statusCode != TBrokerOperationStatusCode::OK) { - std::stringstream ss; - ss << "Open broker reader failed, broker: " << _broker_addr - << " failed: " << response->opStatus.message; - return Status::RpcError(ss.str()); - } - // TODO(cmy): The file size is no longer got from openReader() method. - // But leave the code here for compatibility. - // This will be removed later. - if (response->__isset.size) { - *file_size = response->size; - } + *file_size = _file_size; return Status::OK(); } diff --git a/be/src/io/fs/broker_file_system.h b/be/src/io/fs/broker_file_system.h index 5b6cce33ba85db..fc478cddb59937 100644 --- a/be/src/io/fs/broker_file_system.h +++ b/be/src/io/fs/broker_file_system.h @@ -25,7 +25,8 @@ namespace io { class BrokerFileSystem final : public RemoteFileSystem { public: BrokerFileSystem(const TNetworkAddress& broker_addr, - const std::map& broker_prop); + const std::map& broker_prop, size_t file_size); + ~BrokerFileSystem() override = default; Status create_file(const Path& /*path*/, FileWriterPtr* /*writer*/) override { @@ -67,6 +68,7 @@ class BrokerFileSystem final : public RemoteFileSystem { private: const TNetworkAddress& _broker_addr; const std::map& _broker_prop; + size_t _file_size; std::shared_ptr _client; }; diff --git a/be/src/io/fs/file_reader_options.cpp b/be/src/io/fs/file_reader_options.cpp new file mode 100644 index 00000000000000..00534d8c4edf27 --- /dev/null +++ b/be/src/io/fs/file_reader_options.cpp @@ -0,0 +1,36 @@ +// 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. + +#include "io/fs/file_reader_options.h" + +namespace doris { +namespace io { + +FileCacheType cache_type_from_string(const std::string& type) { + if (type == "sub_file_cache") { + return FileCacheType::SUB_FILE_CACHE; + } else if (type == "whole_file_cache") { + return FileCacheType::WHOLE_FILE_CACHE; + } else if (type == "file_block_cache") { + return FileCacheType::FILE_BLOCK_CACHE; + } else { + return FileCacheType::NO_CACHE; + } +} + +} // namespace io +} // namespace doris diff --git a/be/src/io/fs/file_reader_options.h b/be/src/io/fs/file_reader_options.h new file mode 100644 index 00000000000000..c4c00617046657 --- /dev/null +++ b/be/src/io/fs/file_reader_options.h @@ -0,0 +1,72 @@ +// 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. + +#pragma once + +#include + +#include "common/status.h" + +namespace doris { +namespace io { + +enum class FileCacheType : uint8_t { + NO_CACHE, + SUB_FILE_CACHE, + WHOLE_FILE_CACHE, + FILE_BLOCK_CACHE, +}; + +FileCacheType cache_type_from_string(const std::string& type); + +// CachePathPolicy it to define which cache path should be used +// for the local cache of the given file(path). +// The dervied class should implement get_cache_path() method +class CachePathPolicy { +public: + // path: the path of file which will be cached + // return value: the cache path of the given file. + virtual std::string get_cache_path(const std::string& path) const { return ""; } +}; + +class NoCachePathPolicy : public CachePathPolicy { +public: + NoCachePathPolicy() = default; + std::string get_cache_path(const std::string& path) const override { return path; } +}; + +class SegmentCachePathPolicy : public CachePathPolicy { +public: + SegmentCachePathPolicy() = default; + std::string get_cache_path(const std::string& path) const override { + // the segment file path is {rowset_dir}/{schema_hash}/{rowset_id}_{seg_num}.dat + // cache path is: {rowset_dir}/{schema_hash}/{rowset_id}_{seg_num}/ + return path.substr(0, path.size() - 4) + "/"; + } +}; + +class FileReaderOptions { +public: + FileReaderOptions(FileCacheType cache_type_, const CachePathPolicy& path_policy_) + : cache_type(cache_type_), path_policy(path_policy_) {} + + FileCacheType cache_type; + CachePathPolicy path_policy; +}; + +} // namespace io +} // namespace doris diff --git a/be/src/io/fs/file_system.h b/be/src/io/fs/file_system.h index 2dde2a64e70b20..735e2579307441 100644 --- a/be/src/io/fs/file_system.h +++ b/be/src/io/fs/file_system.h @@ -22,6 +22,7 @@ #include "common/status.h" #include "gutil/macros.h" #include "io/fs/file_reader.h" +#include "io/fs/file_reader_options.h" #include "io/fs/file_writer.h" #include "io/fs/path.h" @@ -52,6 +53,9 @@ class FileSystem { virtual Status create_file(const Path& path, FileWriterPtr* writer) = 0; + virtual Status open_file(const Path& path, const FileReaderOptions& reader_options, + FileReaderSPtr* reader) = 0; + virtual Status open_file(const Path& path, FileReaderSPtr* reader) = 0; virtual Status delete_file(const Path& path) = 0; diff --git a/be/src/io/fs/local_file_system.h b/be/src/io/fs/local_file_system.h index 1477d0aa992590..92c6944ab88ca6 100644 --- a/be/src/io/fs/local_file_system.h +++ b/be/src/io/fs/local_file_system.h @@ -30,6 +30,11 @@ class LocalFileSystem final : public FileSystem { Status create_file(const Path& path, FileWriterPtr* writer) override; + Status open_file(const Path& path, const FileReaderOptions& reader_options, + FileReaderSPtr* reader) override { + return open_file(path, reader); + } + Status open_file(const Path& path, FileReaderSPtr* reader) override; Status delete_file(const Path& path) override; diff --git a/be/src/io/fs/remote_file_system.cpp b/be/src/io/fs/remote_file_system.cpp new file mode 100644 index 00000000000000..871c3257824893 --- /dev/null +++ b/be/src/io/fs/remote_file_system.cpp @@ -0,0 +1,59 @@ +// 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. + +#include "io/fs/remote_file_system.h" + +#include "gutil/strings/stringpiece.h" +#include "io/cache/file_cache_manager.h" +#include "io/fs/file_reader_options.h" + +namespace doris { +namespace io { + +Status RemoteFileSystem::open_file(const Path& path, const FileReaderOptions& reader_options, + FileReaderSPtr* reader) { + FileReaderSPtr raw_reader; + RETURN_IF_ERROR(open_file(path, &raw_reader)); + switch (reader_options.cache_type) { + case io::FileCacheType::NO_CACHE: { + *reader = raw_reader; + break; + } + case io::FileCacheType::SUB_FILE_CACHE: + case io::FileCacheType::WHOLE_FILE_CACHE: { + StringPiece str(path.native()); + std::string cache_path = reader_options.path_policy.get_cache_path(str.as_string()); + io::FileCachePtr cache_reader = FileCacheManager::instance()->new_file_cache( + cache_path, config::file_cache_alive_time_sec, raw_reader, + reader_options.cache_type); + FileCacheManager::instance()->add_file_cache(cache_path, cache_reader); + *reader = cache_reader; + break; + } + case io::FileCacheType::FILE_BLOCK_CACHE: { + return Status::NotSupported("add file block cache reader"); + } + default: { + // TODO: add file block cache reader + return Status::InternalError("Unknown cache type: {}", reader_options.cache_type); + } + } + return Status::OK(); +} + +} // namespace io +} // namespace doris diff --git a/be/src/io/fs/remote_file_system.h b/be/src/io/fs/remote_file_system.h index 390da5ca0ef5cf..2218ce40c39675 100644 --- a/be/src/io/fs/remote_file_system.h +++ b/be/src/io/fs/remote_file_system.h @@ -35,6 +35,13 @@ class RemoteFileSystem : public FileSystem { const std::vector& dest_paths) = 0; virtual Status connect() = 0; + + Status open_file(const Path& path, const FileReaderOptions& reader_options, + FileReaderSPtr* reader) override; + + Status open_file(const Path& path, FileReaderSPtr* reader) override { + return Status::NotSupported("implemented in derived classes"); + } }; } // namespace io diff --git a/be/src/olap/CMakeLists.txt b/be/src/olap/CMakeLists.txt index fd1387aca14596..7f542e9718dfc4 100644 --- a/be/src/olap/CMakeLists.txt +++ b/be/src/olap/CMakeLists.txt @@ -40,6 +40,7 @@ add_library(Olap STATIC file_helper.cpp hll.cpp inverted_index_parser.cpp + itoken_extractor.cpp like_column_predicate.cpp key_coder.cpp lru_cache.cpp @@ -93,6 +94,7 @@ add_library(Olap STATIC rowset/segment_v2/empty_segment_iterator.cpp rowset/segment_v2/segment_writer.cpp rowset/segment_v2/block_split_bloom_filter.cpp + rowset/segment_v2/ngram_bloom_filter.cpp rowset/segment_v2/bloom_filter_index_reader.cpp rowset/segment_v2/bloom_filter_index_writer.cpp rowset/segment_v2/bloom_filter.cpp diff --git a/be/src/olap/column_predicate.h b/be/src/olap/column_predicate.h index 1d3a561109ef89..293ac742e025f5 100644 --- a/be/src/olap/column_predicate.h +++ b/be/src/olap/column_predicate.h @@ -31,6 +31,10 @@ namespace doris { class Schema; +struct PredicateParams { + std::string value; +}; + enum class PredicateType { UNKNOWN = 0, EQ = 1, @@ -113,7 +117,9 @@ struct PredicateTypeTraits { class ColumnPredicate { public: explicit ColumnPredicate(uint32_t column_id, bool opposite = false) - : _column_id(column_id), _opposite(opposite) {} + : _column_id(column_id), _opposite(opposite) { + _predicate_params = std::make_shared(); + } virtual ~ColumnPredicate() = default; @@ -156,6 +162,15 @@ class ColumnPredicate { bool* flags) const { DCHECK(false) << "should not reach here"; } + + virtual std::string get_search_str() const { + DCHECK(false) << "should not reach here"; + return ""; + } + + virtual void set_page_ng_bf(std::unique_ptr) { + DCHECK(false) << "should not reach here"; + } uint32_t column_id() const { return _column_id; } virtual std::string debug_string() const { @@ -163,12 +178,43 @@ class ColumnPredicate { ", opposite=" + (_opposite ? "true" : "false"); } + std::shared_ptr predicate_params() { return _predicate_params; } + const std::string pred_type_string(PredicateType type) { + switch (type) { + case PredicateType::EQ: + return "eq"; + case PredicateType::NE: + return "ne"; + case PredicateType::LT: + return "lt"; + case PredicateType::LE: + return "le"; + case PredicateType::GT: + return "gt"; + case PredicateType::GE: + return "ge"; + case PredicateType::IN_LIST: + return "in_list"; + case PredicateType::NOT_IN_LIST: + return "not_in_list"; + case PredicateType::IS_NULL: + return "is_null"; + case PredicateType::IS_NOT_NULL: + return "is_not_null"; + case PredicateType::BF: + return "bf"; + default: + return "unknown"; + } + } + protected: virtual std::string _debug_string() const = 0; uint32_t _column_id; // TODO: the value is only in delete condition, better be template value bool _opposite; + std::shared_ptr _predicate_params; }; } //namespace doris diff --git a/be/src/olap/iterators.h b/be/src/olap/iterators.h index 241942f7122ae2..105d8a29163fe5 100644 --- a/be/src/olap/iterators.h +++ b/be/src/olap/iterators.h @@ -25,6 +25,7 @@ #include "olap/olap_common.h" #include "olap/tablet_schema.h" #include "vec/core/block.h" +#include "vec/exprs/vexpr.h" namespace doris { @@ -81,6 +82,7 @@ class StorageReadOptions { // reader's column predicate, nullptr if not existed // used to fiter rows in row block std::vector column_predicates; + std::vector column_predicates_except_leafnode_of_andnode; std::unordered_map> col_id_to_predicates; std::unordered_map> col_id_to_del_predicates; TPushAggOp::type push_down_agg_type_opt = TPushAggOp::NONE; @@ -96,8 +98,8 @@ class StorageReadOptions { bool read_orderby_key_reverse = false; // columns for orderby keys std::vector* read_orderby_key_columns = nullptr; - IOContext io_ctx; + vectorized::VExpr* remaining_vconjunct_root = nullptr; }; class RowwiseIterator { diff --git a/be/src/olap/itoken_extractor.cpp b/be/src/olap/itoken_extractor.cpp new file mode 100644 index 00000000000000..90ad29d291d703 --- /dev/null +++ b/be/src/olap/itoken_extractor.cpp @@ -0,0 +1,77 @@ +// 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. + +#include "itoken_extractor.h" + +#include "util/simd/vstring_function.h" + +namespace doris { + +bool NgramTokenExtractor::next_in_string(const char* data, size_t length, size_t* __restrict pos, + size_t* __restrict token_start, + size_t* __restrict token_length) const { + *token_start = *pos; + *token_length = 0; + size_t code_points = 0; + for (; code_points < n && *token_start + *token_length < length; ++code_points) { + size_t sz = get_utf8_byte_length(static_cast(data[*token_start + *token_length])); + *token_length += sz; + } + *pos += get_utf8_byte_length(static_cast(data[*pos])); + return code_points == n; +} + +bool NgramTokenExtractor::next_in_string_like(const char* data, size_t length, size_t* pos, + std::string& token) const { + token.clear(); + + size_t code_points = 0; + bool escaped = false; + for (size_t i = *pos; i < length;) { + if (escaped && (data[i] == '%' || data[i] == '_' || data[i] == '\\')) { + token += data[i]; + ++code_points; + escaped = false; + ++i; + } else if (!escaped && (data[i] == '%' || data[i] == '_')) { + /// This token is too small, go to the next. + token.clear(); + code_points = 0; + escaped = false; + *pos = ++i; + } else if (!escaped && data[i] == '\\') { + escaped = true; + ++i; + } else { + const size_t sz = get_utf8_byte_length(static_cast(data[i])); + for (size_t j = 0; j < sz; ++j) { + token += data[i + j]; + } + i += sz; + ++code_points; + escaped = false; + } + + if (code_points == n) { + *pos += get_utf8_byte_length(static_cast(data[*pos])); + return true; + } + } + + return false; +} +} // namespace doris diff --git a/be/src/olap/itoken_extractor.h b/be/src/olap/itoken_extractor.h new file mode 100644 index 00000000000000..d7004d9c8d07f6 --- /dev/null +++ b/be/src/olap/itoken_extractor.h @@ -0,0 +1,98 @@ +// 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. + +#ifndef DORIS_ITOKEN_EXTRACTOR_H +#define DORIS_ITOKEN_EXTRACTOR_H + +#include + +#include + +#include "olap/rowset/segment_v2/bloom_filter.h" + +namespace doris { + +/// Interface for string parsers. +struct ITokenExtractor { + virtual ~ITokenExtractor() = default; + + /// Fast inplace implementation for regular use. + /// Gets string (data ptr and len) and start position for extracting next token (state of extractor). + /// Returns false if parsing is finished, otherwise returns true. + virtual bool next_in_string(const char* data, size_t length, size_t* __restrict pos, + size_t* __restrict token_start, + size_t* __restrict token_length) const = 0; + + /// Special implementation for creating bloom filter for LIKE function. + /// It skips unescaped `%` and `_` and supports escaping symbols, but it is less lightweight. + virtual bool next_in_string_like(const char* data, size_t length, size_t* pos, + std::string& out) const = 0; + + virtual void string_to_bloom_filter(const char* data, size_t length, + segment_v2::BloomFilter& bloom_filter) const = 0; + + virtual bool string_like_to_bloom_filter(const char* data, size_t length, + segment_v2::BloomFilter& bloom_filter) const = 0; +}; + +template +class ITokenExtractorHelper : public ITokenExtractor { +public: + void string_to_bloom_filter(const char* data, size_t length, + segment_v2::BloomFilter& bloom_filter) const override { + size_t cur = 0; + size_t token_start = 0; + size_t token_len = 0; + + while (cur < length && static_cast(this)->next_in_string( + data, length, &cur, &token_start, &token_len)) + bloom_filter.add_bytes(data + token_start, token_len); + } + + bool string_like_to_bloom_filter(const char* data, size_t length, + segment_v2::BloomFilter& bloom_filter) const override { + size_t cur = 0; + bool added = false; + std::string token; + while (cur < length && + static_cast(this)->next_in_string_like(data, length, &cur, token)) { + bloom_filter.add_bytes(token.data(), token.size()); + added = true; + } + + return added; + } +}; + +/// Parser extracting all ngrams from string. +struct NgramTokenExtractor final : public ITokenExtractorHelper { +public: + explicit NgramTokenExtractor(size_t n_) : n(n_) {} + + bool next_in_string(const char* data, size_t length, size_t* __restrict pos, + size_t* __restrict token_start, + size_t* __restrict token_length) const override; + + bool next_in_string_like(const char* data, size_t length, size_t* pos, + std::string& token) const override; + +private: + size_t n; +}; +} // namespace doris + +#endif //DORIS_ITOKEN_EXTRACTOR_H diff --git a/be/src/olap/like_column_predicate.h b/be/src/olap/like_column_predicate.h index e376fe4dfd61c2..2be798010368a8 100644 --- a/be/src/olap/like_column_predicate.h +++ b/be/src/olap/like_column_predicate.h @@ -47,6 +47,22 @@ class LikeColumnPredicate : public ColumnPredicate { void evaluate_and_vec(const vectorized::IColumn& column, uint16_t size, bool* flags) const override; + std::string get_search_str() const override { + return std::string(reinterpret_cast(pattern.ptr), pattern.len); + } + bool is_opposite() const { return _opposite; } + + void set_page_ng_bf(std::unique_ptr src) override { + _page_ng_bf = std::move(src); + } + bool evaluate_and(const BloomFilter* bf) const override { + if (_page_ng_bf) { + return bf->contains(*_page_ng_bf); + } + return true; + } + bool can_do_bloom_filter() const override { return true; } + private: template void _evaluate_vec(const vectorized::IColumn& column, uint16_t size, bool* flags) const { @@ -130,9 +146,11 @@ class LikeColumnPredicate : public ColumnPredicate { StateType* _state; - // A separate scratch region is required for every concurrent caller of the Hyperscan API. - // So here _like_state is separate for each instance of LikeColumnPredicate. + // A separate scratch region is required for every concurrent caller of the + // Hyperscan API. So here _like_state is separate for each instance of + // LikeColumnPredicate. vectorized::LikeSearchState _like_state; + std::unique_ptr _page_ng_bf; // for ngram-bf index }; -} //namespace doris +} // namespace doris diff --git a/be/src/olap/reader.cpp b/be/src/olap/reader.cpp index 7a0df6c66f30ee..7d823ee04c0245 100644 --- a/be/src/olap/reader.cpp +++ b/be/src/olap/reader.cpp @@ -22,6 +22,11 @@ #include "common/status.h" #include "exprs/create_predicate_function.h" #include "exprs/hybrid_set.h" +#include "gen_cpp/segment_v2.pb.h" +#include "olap/bloom_filter_predicate.h" +#include "olap/comparison_predicate.h" +#include "olap/in_list_predicate.h" +#include "olap/itoken_extractor.h" #include "olap/like_column_predicate.h" #include "olap/olap_common.h" #include "olap/predicate_creator.h" @@ -85,6 +90,9 @@ TabletReader::~TabletReader() { for (auto pred : _value_col_predicates) { delete pred; } + for (auto pred : _col_preds_except_leafnode_of_andnode) { + delete pred; + } } Status TabletReader::init(const ReaderParams& read_params) { @@ -200,6 +208,7 @@ Status TabletReader::_capture_rs_readers(const ReaderParams& read_params, _reader_context.read_orderby_key_columns = _orderby_key_columns.size() > 0 ? &_orderby_key_columns : nullptr; _reader_context.predicates = &_col_predicates; + _reader_context.predicates_except_leafnode_of_andnode = &_col_preds_except_leafnode_of_andnode; _reader_context.value_predicates = &_value_col_predicates; _reader_context.lower_bound_keys = &_keys_param.start_keys; _reader_context.is_lower_keys_included = &_is_lower_keys_included; @@ -216,6 +225,7 @@ Status TabletReader::_capture_rs_readers(const ReaderParams& read_params, _reader_context.enable_unique_key_merge_on_write = tablet()->enable_unique_key_merge_on_write(); _reader_context.record_rowids = read_params.record_rowids; _reader_context.is_key_column_group = read_params.is_key_column_group; + _reader_context.remaining_vconjunct_root = read_params.remaining_vconjunct_root; *valid_rs_readers = *rs_readers; @@ -234,6 +244,7 @@ Status TabletReader::_init_params(const ReaderParams& read_params) { _reader_context.runtime_state = read_params.runtime_state; _init_conditions_param(read_params); + _init_conditions_param_except_leafnode_of_andnode(read_params); Status res = _init_delete_condition(read_params); if (!res.ok()) { @@ -463,8 +474,52 @@ void TabletReader::_init_conditions_param(const ReaderParams& read_params) { } // Function filter push down to storage engine + auto is_like_predicate = [](ColumnPredicate* _pred) { + if (dynamic_cast*>(_pred) || + dynamic_cast*>(_pred)) { + return true; + } + + return false; + }; + for (const auto& filter : read_params.function_filters) { _col_predicates.emplace_back(_parse_to_predicate(filter)); + auto* pred = _col_predicates.back(); + const auto& col = _tablet->tablet_schema()->column(pred->column_id()); + auto is_like = is_like_predicate(pred); + auto* tablet_index = _tablet->tablet_schema()->get_ngram_bf_index(col.unique_id()); + + if (is_like && tablet_index && config::enable_query_like_bloom_filter) { + std::unique_ptr ng_bf; + std::string pattern = pred->get_search_str(); + auto gram_bf_size = tablet_index->get_gram_bf_size(); + auto gram_size = tablet_index->get_gram_size(); + + segment_v2::BloomFilter::create(segment_v2::NGRAM_BLOOM_FILTER, &ng_bf, gram_bf_size); + NgramTokenExtractor _token_extractor(gram_size); + + if (_token_extractor.string_like_to_bloom_filter(pattern.data(), pattern.length(), + *ng_bf)) { + pred->set_page_ng_bf(std::move(ng_bf)); + } + } + } +} + +void TabletReader::_init_conditions_param_except_leafnode_of_andnode( + const ReaderParams& read_params) { + for (const auto& condition : read_params.conditions_except_leafnode_of_andnode) { + TCondition tmp_cond = condition; + auto condition_col_uid = _tablet_schema->column(tmp_cond.column_name).unique_id(); + tmp_cond.__set_column_unique_id(condition_col_uid); + ColumnPredicate* predicate = + parse_to_predicate(_tablet_schema, tmp_cond, _predicate_mem_pool.get()); + if (predicate != nullptr) { + auto predicate_params = predicate->predicate_params(); + predicate_params->value = condition.condition_values[0]; + _col_preds_except_leafnode_of_andnode.push_back(predicate); + } } } diff --git a/be/src/olap/reader.h b/be/src/olap/reader.h index 3c4ba1a0d611a6..ccc32024d7bf8b 100644 --- a/be/src/olap/reader.h +++ b/be/src/olap/reader.h @@ -39,6 +39,7 @@ class RuntimeState; namespace vectorized { class VCollectIterator; class Block; +class VExpr; } // namespace vectorized class TabletReader { @@ -75,6 +76,7 @@ class TabletReader { std::vector>> bloom_filters; std::vector>> bitmap_filters; std::vector>> in_filters; + std::vector conditions_except_leafnode_of_andnode; std::vector function_filters; std::vector delete_predicates; @@ -90,6 +92,7 @@ class TabletReader { std::vector* origin_return_columns = nullptr; std::unordered_set* tablet_columns_convert_to_null_set = nullptr; TPushAggOp::type push_down_agg_type_opt = TPushAggOp::NONE; + vectorized::VExpr* remaining_vconjunct_root = nullptr; // used for compaction to record row ids bool record_rowids = false; @@ -164,6 +167,8 @@ class TabletReader { void _init_conditions_param(const ReaderParams& read_params); + void _init_conditions_param_except_leafnode_of_andnode(const ReaderParams& read_params); + ColumnPredicate* _parse_to_predicate( const std::pair>& bloom_filter); @@ -198,6 +203,7 @@ class TabletReader { std::vector _is_lower_keys_included; std::vector _is_upper_keys_included; std::vector _col_predicates; + std::vector _col_preds_except_leafnode_of_andnode; std::vector _value_col_predicates; DeleteHandler _delete_handler; diff --git a/be/src/olap/rowset/beta_rowset.cpp b/be/src/olap/rowset/beta_rowset.cpp index a6a0d298703652..c9e304d383aca1 100644 --- a/be/src/olap/rowset/beta_rowset.cpp +++ b/be/src/olap/rowset/beta_rowset.cpp @@ -47,12 +47,6 @@ std::string BetaRowset::segment_file_path(int segment_id) { return segment_file_path(_rowset_dir, rowset_id(), segment_id); } -std::string BetaRowset::segment_cache_path(const std::string& rowset_dir, const RowsetId& rowset_id, - int segment_id) { - // {root_path}/data/{shard_id}/{tablet_id}/{schema_hash}/{rowset_id}_{seg_num} - return fmt::format("{}/{}_{}", rowset_dir, rowset_id.to_string(), segment_id); -} - std::string BetaRowset::segment_cache_path(int segment_id) { // {root_path}/data/{shard_id}/{tablet_id}/{schema_hash}/{rowset_id}_{seg_num} return fmt::format("{}/{}_{}", _tablet_path, rowset_id().to_string(), segment_id); @@ -139,10 +133,8 @@ Status BetaRowset::load_segments(std::vector* segm } for (int seg_id = 0; seg_id < num_segments(); ++seg_id) { auto seg_path = segment_file_path(seg_id); - auto cache_path = segment_cache_path(seg_id); std::shared_ptr segment; - auto s = segment_v2::Segment::open(fs, seg_path, cache_path, seg_id, rowset_id(), _schema, - &segment); + auto s = segment_v2::Segment::open(fs, seg_path, seg_id, rowset_id(), _schema, &segment); if (!s.ok()) { LOG(WARNING) << "failed to open segment. " << seg_path << " under rowset " << unique_id() << " : " << s.to_string(); @@ -163,10 +155,8 @@ Status BetaRowset::load_segments(int64_t seg_id_begin, int64_t seg_id_end, return Status::Error(); } auto seg_path = segment_file_path(seg_id); - auto cache_path = segment_cache_path(seg_id); std::shared_ptr segment; - auto s = segment_v2::Segment::open(fs, seg_path, cache_path, seg_id, rowset_id(), _schema, - &segment); + auto s = segment_v2::Segment::open(fs, seg_path, seg_id, rowset_id(), _schema, &segment); if (!s.ok()) { LOG(WARNING) << "failed to open segment. " << seg_path << " under rowset " << unique_id() << " : " << s.to_string(); @@ -335,10 +325,8 @@ bool BetaRowset::check_current_rowset_segment() { } for (int seg_id = 0; seg_id < num_segments(); ++seg_id) { auto seg_path = segment_file_path(seg_id); - auto cache_path = segment_cache_path(seg_id); std::shared_ptr segment; - auto s = segment_v2::Segment::open(fs, seg_path, cache_path, seg_id, rowset_id(), _schema, - &segment); + auto s = segment_v2::Segment::open(fs, seg_path, seg_id, rowset_id(), _schema, &segment); if (!s.ok()) { LOG(WARNING) << "segment can not be opened. file=" << seg_path; return false; diff --git a/be/src/olap/rowset/beta_rowset.h b/be/src/olap/rowset/beta_rowset.h index a1167d2c2c8e58..5ac860eaa14bb3 100644 --- a/be/src/olap/rowset/beta_rowset.h +++ b/be/src/olap/rowset/beta_rowset.h @@ -46,9 +46,6 @@ class BetaRowset : public Rowset { std::string segment_cache_path(int segment_id); - static std::string segment_cache_path(const std::string& rowset_dir, const RowsetId& rowset_id, - int segment_id); - static bool is_segment_cache_dir(const std::string& cache_dir); static std::string segment_file_path(const std::string& rowset_dir, const RowsetId& rowset_id, diff --git a/be/src/olap/rowset/beta_rowset_reader.cpp b/be/src/olap/rowset/beta_rowset_reader.cpp index fd24ac130b2cc3..9daab16ec73a77 100644 --- a/be/src/olap/rowset/beta_rowset_reader.cpp +++ b/be/src/olap/rowset/beta_rowset_reader.cpp @@ -57,6 +57,7 @@ Status BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context // convert RowsetReaderContext to StorageReadOptions _read_options.stats = _stats; _read_options.push_down_agg_type_opt = _context->push_down_agg_type_opt; + _read_options.remaining_vconjunct_root = _context->remaining_vconjunct_root; if (read_context->lower_bound_keys != nullptr) { for (int i = 0; i < read_context->lower_bound_keys->size(); ++i) { _read_options.key_ranges.emplace_back(&read_context->lower_bound_keys->at(i), @@ -72,40 +73,23 @@ Status BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context read_context->delete_handler->get_delete_conditions_after_version( _rowset->end_version(), _read_options.delete_condition_predicates.get(), &_read_options.col_id_to_del_predicates); - // if del cond is not empty, schema may be different in multiple rowset - _can_reuse_schema = _read_options.col_id_to_del_predicates.empty(); } - // In vertical compaction, every column group need new schema - if (read_context->is_vertical_compaction) { - _can_reuse_schema = false; + + std::vector read_columns; + std::set read_columns_set; + std::set delete_columns_set; + for (int i = 0; i < _context->return_columns->size(); ++i) { + read_columns.push_back(_context->return_columns->at(i)); + read_columns_set.insert(_context->return_columns->at(i)); } - if (!_can_reuse_schema || _context->reuse_input_schema == nullptr) { - std::vector read_columns; - std::set read_columns_set; - std::set delete_columns_set; - for (int i = 0; i < _context->return_columns->size(); ++i) { - read_columns.push_back(_context->return_columns->at(i)); - read_columns_set.insert(_context->return_columns->at(i)); - } - _read_options.delete_condition_predicates->get_all_column_ids(delete_columns_set); - for (auto cid : delete_columns_set) { - if (read_columns_set.find(cid) == read_columns_set.end()) { - read_columns.push_back(cid); - } - } - VLOG_NOTICE << "read columns size: " << read_columns.size(); - _input_schema = std::make_shared(_context->tablet_schema->columns(), read_columns); - if (_can_reuse_schema) { - _context->reuse_input_schema = _input_schema; + _read_options.delete_condition_predicates->get_all_column_ids(delete_columns_set); + for (auto cid : delete_columns_set) { + if (read_columns_set.find(cid) == read_columns_set.end()) { + read_columns.push_back(cid); } } - - // if can reuse schema, context must have reuse_input_schema - // if can't reuse schema, context mustn't have reuse_input_schema - DCHECK(_can_reuse_schema ^ (_context->reuse_input_schema == nullptr)); - if (_context->reuse_input_schema != nullptr && _input_schema == nullptr) { - _input_schema = _context->reuse_input_schema; - } + VLOG_NOTICE << "read columns size: " << read_columns.size(); + _input_schema = std::make_shared(_context->tablet_schema->columns(), read_columns); if (read_context->predicates != nullptr) { _read_options.column_predicates.insert(_read_options.column_predicates.end(), @@ -121,6 +105,14 @@ Status BetaRowsetReader::get_segment_iterators(RowsetReaderContext* read_context single_column_block_predicate); } } + + if (read_context->predicates_except_leafnode_of_andnode != nullptr) { + _read_options.column_predicates_except_leafnode_of_andnode.insert( + _read_options.column_predicates_except_leafnode_of_andnode.end(), + read_context->predicates_except_leafnode_of_andnode->begin(), + read_context->predicates_except_leafnode_of_andnode->end()); + } + // Take a delete-bitmap for each segment, the bitmap contains all deletes // until the max read version, which is read_context->version.second if (read_context->delete_bitmap != nullptr) { diff --git a/be/src/olap/rowset/beta_rowset_reader.h b/be/src/olap/rowset/beta_rowset_reader.h index 676d66943be9c5..8bd88b7a9212d4 100644 --- a/be/src/olap/rowset/beta_rowset_reader.h +++ b/be/src/olap/rowset/beta_rowset_reader.h @@ -89,7 +89,6 @@ class BetaRowsetReader : public RowsetReader { SegmentCacheHandle _segment_cache_handle; StorageReadOptions _read_options; - bool _can_reuse_schema = true; }; } // namespace doris diff --git a/be/src/olap/rowset/beta_rowset_writer.cpp b/be/src/olap/rowset/beta_rowset_writer.cpp index e6ee1833b452c9..4544dc7bb83978 100644 --- a/be/src/olap/rowset/beta_rowset_writer.cpp +++ b/be/src/olap/rowset/beta_rowset_writer.cpp @@ -391,10 +391,8 @@ Status BetaRowsetWriter::_load_noncompacted_segments( for (int seg_id = _segcompacted_point; seg_id < num; ++seg_id) { auto seg_path = BetaRowset::segment_file_path(_context.rowset_dir, _context.rowset_id, seg_id); - auto cache_path = - BetaRowset::segment_cache_path(_context.rowset_dir, _context.rowset_id, seg_id); std::shared_ptr segment; - auto s = segment_v2::Segment::open(fs, seg_path, cache_path, seg_id, rowset_id(), + auto s = segment_v2::Segment::open(fs, seg_path, seg_id, rowset_id(), _context.tablet_schema, &segment); if (!s.ok()) { LOG(WARNING) << "failed to open segment. " << seg_path << ":" << s.to_string(); diff --git a/be/src/olap/rowset/rowset_reader_context.h b/be/src/olap/rowset/rowset_reader_context.h index 29972c6c758343..354a5d9dfce2ff 100644 --- a/be/src/olap/rowset/rowset_reader_context.h +++ b/be/src/olap/rowset/rowset_reader_context.h @@ -21,6 +21,7 @@ #include "olap/column_predicate.h" #include "olap/olap_common.h" #include "runtime/runtime_state.h" +#include "vec/exprs/vexpr.h" namespace doris { @@ -45,6 +46,7 @@ struct RowsetReaderContext { // column name -> column predicate // adding column_name for predicate to make use of column selectivity const std::vector* predicates = nullptr; + const std::vector* predicates_except_leafnode_of_andnode = nullptr; // value column predicate in UNIQUE table const std::vector* value_predicates = nullptr; const std::vector* lower_bound_keys = nullptr; @@ -54,6 +56,7 @@ struct RowsetReaderContext { const DeleteHandler* delete_handler = nullptr; OlapReaderStatistics* stats = nullptr; RuntimeState* runtime_state = nullptr; + vectorized::VExpr* remaining_vconjunct_root = nullptr; bool use_page_cache = false; int sequence_id_idx = -1; int batch_size = 1024; @@ -67,7 +70,6 @@ struct RowsetReaderContext { bool record_rowids = false; bool is_vertical_compaction = false; bool is_key_column_group = false; - std::shared_ptr reuse_input_schema; }; } // namespace doris diff --git a/be/src/olap/rowset/segment_v2/block_split_bloom_filter.h b/be/src/olap/rowset/segment_v2/block_split_bloom_filter.h index 9d082f7167526b..93591adc1d0fd8 100644 --- a/be/src/olap/rowset/segment_v2/block_split_bloom_filter.h +++ b/be/src/olap/rowset/segment_v2/block_split_bloom_filter.h @@ -32,6 +32,7 @@ class BlockSplitBloomFilter : public BloomFilter { void add_hash(uint64_t hash) override; bool test_hash(uint64_t hash) const override; + bool contains(const BloomFilter&) const override { return true; } private: // Bytes in a tiny Bloom filter block. diff --git a/be/src/olap/rowset/segment_v2/bloom_filter.cpp b/be/src/olap/rowset/segment_v2/bloom_filter.cpp index cbb5181ac58ab8..667cc9b595a830 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter.cpp +++ b/be/src/olap/rowset/segment_v2/bloom_filter.cpp @@ -21,14 +21,18 @@ #include "gen_cpp/segment_v2.pb.h" #include "gutil/strings/substitute.h" #include "olap/rowset/segment_v2/block_split_bloom_filter.h" +#include "olap/rowset/segment_v2/ngram_bloom_filter.h" #include "olap/utils.h" namespace doris { namespace segment_v2 { -Status BloomFilter::create(BloomFilterAlgorithmPB algorithm, std::unique_ptr* bf) { +Status BloomFilter::create(BloomFilterAlgorithmPB algorithm, std::unique_ptr* bf, + size_t bf_size) { if (algorithm == BLOCK_BLOOM_FILTER) { bf->reset(new BlockSplitBloomFilter()); + } else if (algorithm == NGRAM_BLOOM_FILTER) { + bf->reset(new NGramBloomFilter(bf_size)); } else { return Status::InternalError("invalid bloom filter algorithm:{}", algorithm); } diff --git a/be/src/olap/rowset/segment_v2/bloom_filter.h b/be/src/olap/rowset/segment_v2/bloom_filter.h index 8796f4c6de2c94..139ff3aea24ab9 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter.h +++ b/be/src/olap/rowset/segment_v2/bloom_filter.h @@ -51,17 +51,26 @@ class BloomFilter { static const uint32_t MAXIMUM_BYTES = 128 * 1024 * 1024; // Factory function for BloomFilter - static Status create(BloomFilterAlgorithmPB algorithm, std::unique_ptr* bf); + static Status create(BloomFilterAlgorithmPB algorithm, std::unique_ptr* bf, + size_t bf_size = 0); BloomFilter() : _data(nullptr), _num_bytes(0), _size(0), _has_null(nullptr) {} - virtual ~BloomFilter() { delete[] _data; } + virtual ~BloomFilter() { + if (_data) { + delete[] _data; + } + } + + virtual bool is_ngram_bf() const { return false; } // for write Status init(uint64_t n, double fpp, HashStrategyPB strategy) { return this->init(optimal_bit_num(n, fpp) / 8, strategy); } + Status init(uint64_t filter_size) { return init(filter_size, HASH_MURMUR3_X64_64); } + Status init(uint64_t filter_size, HashStrategyPB strategy) { if (strategy == HASH_MURMUR3_X64_64) { _hash_func = murmur_hash3_x64_64; @@ -81,7 +90,7 @@ class BloomFilter { // for read // use deep copy to acquire the data - Status init(const char* buf, uint32_t size, HashStrategyPB strategy) { + virtual Status init(const char* buf, uint32_t size, HashStrategyPB strategy) { DCHECK(size > 1); if (strategy == HASH_MURMUR3_X64_64) { _hash_func = murmur_hash3_x64_64; @@ -108,7 +117,7 @@ class BloomFilter { return hash_code; } - void add_bytes(const char* buf, uint32_t size) { + virtual void add_bytes(const char* buf, uint32_t size) { if (buf == nullptr) { *_has_null = true; return; @@ -125,15 +134,19 @@ class BloomFilter { return test_hash(code); } - char* data() const { return _data; } + /// Checks if this contains everything from another bloom filter. + /// Bloom filters must have equal size and seed. + virtual bool contains(const BloomFilter& bf_) const = 0; + + virtual char* data() const { return _data; } uint32_t num_bytes() const { return _num_bytes; } - uint32_t size() const { return _size; } + virtual uint32_t size() const { return _size; } void set_has_null(bool has_null) { *_has_null = has_null; } - bool has_null() const { return *_has_null; } + virtual bool has_null() const { return *_has_null; } virtual void add_hash(uint64_t hash) = 0; virtual bool test_hash(uint64_t hash) const = 0; diff --git a/be/src/olap/rowset/segment_v2/bloom_filter_index_reader.cpp b/be/src/olap/rowset/segment_v2/bloom_filter_index_reader.cpp index f3779d032c1168..1f6a7337761b80 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter_index_reader.cpp +++ b/be/src/olap/rowset/segment_v2/bloom_filter_index_reader.cpp @@ -50,8 +50,8 @@ Status BloomFilterIndexIterator::read_bloom_filter(rowid_t ordinal, RETURN_IF_ERROR(_bloom_filter_iter.next_batch(&num_read, &column_block_view)); DCHECK(num_to_read == num_read); // construct bloom filter - BloomFilter::create(_reader->_bloom_filter_index_meta->algorithm(), bf); const Slice* value_ptr = reinterpret_cast(block.data()); + BloomFilter::create(_reader->_bloom_filter_index_meta->algorithm(), bf, value_ptr->size); RETURN_IF_ERROR((*bf)->init(value_ptr->data, value_ptr->size, _reader->_bloom_filter_index_meta->hash_strategy())); _pool->clear(); diff --git a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp index 5542a6068d58ee..567cf8d7953659 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp +++ b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.cpp @@ -170,6 +170,63 @@ class BloomFilterIndexWriterImpl : public BloomFilterIndexWriter { } // namespace +NGramBloomFilterIndexWriterImpl::NGramBloomFilterIndexWriterImpl( + const BloomFilterOptions& bf_options, uint8_t gram_size, uint16_t bf_size) + : _bf_options(bf_options), + _gram_size(gram_size), + _bf_size(bf_size), + _bf_buffer_size(0), + _token_extractor(gram_size) { + BloomFilter::create(NGRAM_BLOOM_FILTER, &_bf, bf_size); +} + +void NGramBloomFilterIndexWriterImpl::add_values(const void* values, size_t count) { + const Slice* src = reinterpret_cast(values); + for (int i = 0; i < count; ++i, ++src) { + if (src->size < _gram_size) { + continue; + } + _token_extractor.string_to_bloom_filter(src->data, src->size, *_bf); + } +} + +Status NGramBloomFilterIndexWriterImpl::flush() { + _bf_buffer_size += _bf->size(); + _bfs.emplace_back(std::move(_bf)); + // init new one + RETURN_IF_ERROR(BloomFilter::create(NGRAM_BLOOM_FILTER, &_bf, _bf_size)); + return Status::OK(); +} + +Status NGramBloomFilterIndexWriterImpl::finish(io::FileWriter* file_writer, + ColumnIndexMetaPB* index_meta) { + index_meta->set_type(BLOOM_FILTER_INDEX); + BloomFilterIndexPB* meta = index_meta->mutable_bloom_filter_index(); + meta->set_hash_strategy(CITY_HASH_64); + meta->set_algorithm(NGRAM_BLOOM_FILTER); + + // write bloom filters + const TypeInfo* bf_typeinfo = get_scalar_type_info(OLAP_FIELD_TYPE_VARCHAR); + IndexedColumnWriterOptions options; + options.write_ordinal_index = true; + options.write_value_index = false; + options.encoding = PLAIN_ENCODING; + IndexedColumnWriter bf_writer(options, bf_typeinfo, file_writer); + RETURN_IF_ERROR(bf_writer.init()); + for (auto& bf : _bfs) { + Slice data(bf->data(), bf->size()); + bf_writer.add(&data); + } + RETURN_IF_ERROR(bf_writer.finish(meta->mutable_bloom_filter())); + return Status::OK(); +} + +uint64_t NGramBloomFilterIndexWriterImpl::size() { + uint64_t total_size = _bf_buffer_size; + total_size += _pool.total_allocated_bytes(); + return total_size; +} + // TODO currently we don't support bloom filter index for tinyint/hll/float/double Status BloomFilterIndexWriter::create(const BloomFilterOptions& bf_options, const TypeInfo* type_info, @@ -203,5 +260,23 @@ Status BloomFilterIndexWriter::create(const BloomFilterOptions& bf_options, return Status::OK(); } +Status NGramBloomFilterIndexWriterImpl::create(const BloomFilterOptions& bf_options, + const TypeInfo* typeinfo, uint8_t gram_size, + uint16_t gram_bf_size, + std::unique_ptr* res) { + FieldType type = typeinfo->type(); + switch (type) { + case OLAP_FIELD_TYPE_CHAR: + case OLAP_FIELD_TYPE_VARCHAR: + case OLAP_FIELD_TYPE_STRING: + res->reset(new NGramBloomFilterIndexWriterImpl(bf_options, gram_size, gram_bf_size)); + break; + default: + return Status::NotSupported("unsupported type for ngram bloom filter index:{}", + std::to_string(type)); + } + return Status::OK(); +} + } // namespace segment_v2 } // namespace doris diff --git a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.h b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.h index 8b9a945e1aa15a..9cc02f4f67a803 100644 --- a/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.h +++ b/be/src/olap/rowset/segment_v2/bloom_filter_index_writer.h @@ -23,6 +23,8 @@ #include "common/status.h" #include "gen_cpp/segment_v2.pb.h" #include "gutil/macros.h" +#include "olap/itoken_extractor.h" +#include "runtime/mem_pool.h" namespace doris { @@ -38,7 +40,7 @@ struct BloomFilterOptions; class BloomFilterIndexWriter { public: - static Status create(const BloomFilterOptions& bf_options, const TypeInfo* type_info, + static Status create(const BloomFilterOptions& bf_options, const TypeInfo* typeinfo, std::unique_ptr* res); BloomFilterIndexWriter() = default; @@ -58,5 +60,30 @@ class BloomFilterIndexWriter { DISALLOW_COPY_AND_ASSIGN(BloomFilterIndexWriter); }; +class NGramBloomFilterIndexWriterImpl : public BloomFilterIndexWriter { +public: + static Status create(const BloomFilterOptions& bf_options, const TypeInfo* typeinfo, + uint8_t gram_size, uint16_t gram_bf_size, + std::unique_ptr* res); + + NGramBloomFilterIndexWriterImpl(const BloomFilterOptions& bf_options, uint8_t gram_size, + uint16_t bf_size); + void add_values(const void* values, size_t count) override; + void add_nulls(uint32_t) override {} + Status flush() override; + Status finish(io::FileWriter* file_writer, ColumnIndexMetaPB* index_meta) override; + uint64_t size() override; + +private: + BloomFilterOptions _bf_options; + uint8_t _gram_size; + uint16_t _bf_size; + MemPool _pool; + uint64_t _bf_buffer_size; + NgramTokenExtractor _token_extractor; + std::unique_ptr _bf; + std::vector> _bfs; +}; + } // namespace segment_v2 } // namespace doris diff --git a/be/src/olap/rowset/segment_v2/column_writer.cpp b/be/src/olap/rowset/segment_v2/column_writer.cpp index 146a29443c990c..df820b141ef387 100644 --- a/be/src/olap/rowset/segment_v2/column_writer.cpp +++ b/be/src/olap/rowset/segment_v2/column_writer.cpp @@ -299,6 +299,7 @@ Status ScalarColumnWriter::init() { RETURN_IF_ERROR( BitmapIndexWriter::create(get_field()->type_info(), &_bitmap_index_builder)); } + if (_opts.inverted_index) { RETURN_IF_ERROR(InvertedIndexColumnWriter::create( get_field(), &_inverted_index_builder, _opts.meta->unique_id(), @@ -307,8 +308,14 @@ Status ScalarColumnWriter::init() { _file_writer->fs())); } if (_opts.need_bloom_filter) { - RETURN_IF_ERROR(BloomFilterIndexWriter::create( - BloomFilterOptions(), get_field()->type_info(), &_bloom_filter_index_builder)); + if (_opts.is_ngram_bf_index) { + RETURN_IF_ERROR(NGramBloomFilterIndexWriterImpl::create( + BloomFilterOptions(), get_field()->type_info(), _opts.gram_size, + _opts.gram_bf_size, &_bloom_filter_index_builder)); + } else { + RETURN_IF_ERROR(BloomFilterIndexWriter::create( + BloomFilterOptions(), get_field()->type_info(), &_bloom_filter_index_builder)); + } } return Status::OK(); } diff --git a/be/src/olap/rowset/segment_v2/column_writer.h b/be/src/olap/rowset/segment_v2/column_writer.h index 748b8d725e2ac3..5ea7ae654c8a21 100644 --- a/be/src/olap/rowset/segment_v2/column_writer.h +++ b/be/src/olap/rowset/segment_v2/column_writer.h @@ -51,6 +51,9 @@ struct ColumnWriterOptions { bool need_zone_map = false; bool need_bitmap_index = false; bool need_bloom_filter = false; + bool is_ngram_bf_index = false; + uint8_t gram_size; + uint16_t gram_bf_size; std::vector indexes; const TabletIndex* inverted_index = nullptr; std::string to_string() const { diff --git a/be/src/olap/rowset/segment_v2/ngram_bloom_filter.cpp b/be/src/olap/rowset/segment_v2/ngram_bloom_filter.cpp new file mode 100644 index 00000000000000..a761c5a6e4b789 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/ngram_bloom_filter.cpp @@ -0,0 +1,74 @@ +// 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. + +#include "olap/rowset/segment_v2/ngram_bloom_filter.h" + +#include "util/cityhash102/city.h" +#include "util/debug_util.h" + +namespace doris { +namespace segment_v2 { + +static constexpr uint64_t SEED_GEN = 217728422; + +NGramBloomFilter::NGramBloomFilter(size_t size) + : _size(size), + words((size + sizeof(UnderType) - 1) / sizeof(UnderType)), + filter(words, 0) {} + +// for read +Status NGramBloomFilter::init(const char* buf, uint32_t size, HashStrategyPB strategy) { + if (size == 0) { + return Status::InvalidArgument(strings::Substitute("invalid size:$0", size)); + } + DCHECK(_size == size); + + if (strategy != CITY_HASH_64) { + return Status::InvalidArgument(strings::Substitute("invalid strategy:$0", strategy)); + } + words = (_size + sizeof(UnderType) - 1) / sizeof(UnderType); + filter.reserve(words); + const UnderType* from = reinterpret_cast(buf); + for (size_t i = 0; i < words; ++i) { + filter[i] = from[i]; + } + + return Status::OK(); +} + +void NGramBloomFilter::add_bytes(const char* data, uint32_t len) { + size_t hash1 = CityHash_v1_0_2::CityHash64WithSeed(data, len, 0); + size_t hash2 = CityHash_v1_0_2::CityHash64WithSeed(data, len, SEED_GEN); + + for (size_t i = 0; i < HASH_FUNCTIONS; ++i) { + size_t pos = (hash1 + i * hash2 + i * i) % (8 * _size); + filter[pos / (8 * sizeof(UnderType))] |= (1ULL << (pos % (8 * sizeof(UnderType)))); + } +} + +bool NGramBloomFilter::contains(const BloomFilter& bf_) const { + const NGramBloomFilter& bf = static_cast(bf_); + for (size_t i = 0; i < words; ++i) { + if ((filter[i] & bf.filter[i]) != bf.filter[i]) { + return false; + } + } + return true; +} + +} // namespace segment_v2 +} // namespace doris diff --git a/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h b/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h new file mode 100644 index 00000000000000..c7684a796f1d63 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/ngram_bloom_filter.h @@ -0,0 +1,50 @@ +// 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. + +#pragma once + +#include "olap/rowset/segment_v2/bloom_filter.h" + +namespace doris { +namespace segment_v2 { + +class NGramBloomFilter : public BloomFilter { +public: + // Fixed hash function number + static const size_t HASH_FUNCTIONS = 2; + using UnderType = uint64_t; + NGramBloomFilter(size_t size); + void add_bytes(const char* data, uint32_t len) override; + bool contains(const BloomFilter& bf_) const override; + Status init(const char* buf, uint32_t size, HashStrategyPB strategy) override; + char* data() const override { + return reinterpret_cast(const_cast(filter.data())); + } + uint32_t size() const override { return _size; } + void add_hash(uint64_t) override {} + bool test_hash(uint64_t hash) const override { return true; } + bool has_null() const override { return true; } + bool is_ngram_bf() const override { return true; } + +private: + size_t _size; + size_t words; + std::vector filter; +}; + +} // namespace segment_v2 +} // namespace doris diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index 6651e1879962cd..cc489ef85c3d66 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -25,6 +25,7 @@ #include "common/config.h" #include "common/logging.h" // LOG #include "io/cache/file_cache_manager.h" +#include "io/fs/file_reader_options.h" #include "io/fs/file_system.h" #include "olap/iterators.h" #include "olap/rowset/segment_v2/empty_segment_iterator.h" @@ -42,30 +43,26 @@ namespace segment_v2 { using io::FileCacheManager; -Status Segment::open(io::FileSystemSPtr fs, const std::string& path, const std::string& cache_path, - uint32_t segment_id, RowsetId rowset_id, TabletSchemaSPtr tablet_schema, +Status Segment::open(io::FileSystemSPtr fs, const std::string& path, uint32_t segment_id, + RowsetId rowset_id, TabletSchemaSPtr tablet_schema, std::shared_ptr* output) { - std::shared_ptr segment(new Segment(segment_id, rowset_id, tablet_schema)); + io::FileReaderOptions reader_options(io::cache_type_from_string(config::file_cache_type), + io::SegmentCachePathPolicy()); io::FileReaderSPtr file_reader; #ifndef BE_TEST - RETURN_IF_ERROR(fs->open_file(path, &file_reader)); + RETURN_IF_ERROR(fs->open_file(path, reader_options, &file_reader)); #else // be ut use local file reader instead of remote file reader while use remote cache if (!config::file_cache_type.empty()) { - RETURN_IF_ERROR(io::global_local_filesystem()->open_file(path, &file_reader)); + RETURN_IF_ERROR( + io::global_local_filesystem()->open_file(path, reader_options, &file_reader)); } else { - RETURN_IF_ERROR(fs->open_file(path, &file_reader)); + RETURN_IF_ERROR(fs->open_file(path, reader_options, &file_reader)); } #endif - if (fs->type() != io::FileSystemType::LOCAL && !config::file_cache_type.empty()) { - io::FileCachePtr cache_reader = FileCacheManager::instance()->new_file_cache( - cache_path, config::file_cache_alive_time_sec, file_reader, - config::file_cache_type); - segment->_file_reader = cache_reader; - FileCacheManager::instance()->add_file_cache(cache_path, cache_reader); - } else { - segment->_file_reader = std::move(file_reader); - } + + std::shared_ptr segment(new Segment(segment_id, rowset_id, tablet_schema)); + segment->_file_reader = std::move(file_reader); RETURN_IF_ERROR(segment->_open()); *output = std::move(segment); return Status::OK(); diff --git a/be/src/olap/rowset/segment_v2/segment.h b/be/src/olap/rowset/segment_v2/segment.h index b5e54dfa4fa14a..f2fa40bb438ae5 100644 --- a/be/src/olap/rowset/segment_v2/segment.h +++ b/be/src/olap/rowset/segment_v2/segment.h @@ -61,9 +61,9 @@ using SegmentSharedPtr = std::shared_ptr; // change finished, client should disable all cached Segment for old TabletSchema. class Segment : public std::enable_shared_from_this { public: - static Status open(io::FileSystemSPtr fs, const std::string& path, - const std::string& cache_path, uint32_t segment_id, RowsetId rowset_id, - TabletSchemaSPtr tablet_schema, std::shared_ptr* output); + static Status open(io::FileSystemSPtr fs, const std::string& path, uint32_t segment_id, + RowsetId rowset_id, TabletSchemaSPtr tablet_schema, + std::shared_ptr* output); ~Segment(); diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 22e8edecdb495d..e3f1b132587b51 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -32,6 +32,8 @@ #include "util/doris_metrics.h" #include "util/key_util.h" #include "util/simd/bits.h" +#include "vec/data_types/data_type_number.h" +#include "vec/exprs/vliteral.h" namespace doris { using namespace ErrorCode; @@ -168,10 +170,16 @@ Status SegmentIterator::init(const StorageReadOptions& opts) { } // Read options will not change, so that just resize here _block_rowids.resize(_opts.block_row_max); + if (!opts.column_predicates_except_leafnode_of_andnode.empty()) { + _col_preds_except_leafnode_of_andnode = opts.column_predicates_except_leafnode_of_andnode; + } + _remaining_vconjunct_root = opts.remaining_vconjunct_root; + + _column_predicate_info.reset(new ColumnPredicateInfo()); return Status::OK(); } -Status SegmentIterator::_init(bool is_vec) { +Status SegmentIterator::_init() { SCOPED_RAW_TIMER(&_opts.stats->block_init_ns); DorisMetrics::instance()->segment_read_total->increment(1); // get file handle from file descriptor of segment @@ -185,12 +193,8 @@ Status SegmentIterator::_init(bool is_vec) { RETURN_IF_ERROR(_get_row_ranges_by_keys()); } RETURN_IF_ERROR(_get_row_ranges_by_column_conditions()); - if (is_vec) { - _vec_init_lazy_materialization(); - _vec_init_char_column_id(); - } else { - _init_lazy_materialization(); - } + _vec_init_lazy_materialization(); + _vec_init_char_column_id(); // Remove rows that have been marked deleted if (_opts.delete_bitmap.count(segment_id()) > 0 && _opts.delete_bitmap[segment_id()] != nullptr) { @@ -287,6 +291,17 @@ Status SegmentIterator::_get_row_ranges_by_column_conditions() { if (_row_bitmap.isEmpty()) { return Status::OK(); } + + if (config::enable_index_apply_preds_except_leafnode_of_andnode) { + RETURN_IF_ERROR(_apply_index_except_leafnode_of_andnode()); + if (_can_filter_by_preds_except_leafnode_of_andnode()) { + auto res = _execute_predicates_except_leafnode_of_andnode(_remaining_vconjunct_root); + if (res.ok() && _pred_except_leafnode_of_andnode_evaluate_result.size() == 1) { + _row_bitmap &= _pred_except_leafnode_of_andnode_evaluate_result[0]; + } + } + } + RETURN_IF_ERROR(_apply_bitmap_index()); if (!_row_bitmap.isEmpty() && @@ -321,6 +336,7 @@ Status SegmentIterator::_get_row_ranges_from_conditions(RowRanges* condition_row _opts.col_id_to_predicates[cid].get(), &column_bf_row_ranges)); RowRanges::ranges_intersection(bf_row_ranges, column_bf_row_ranges, &bf_row_ranges); } + size_t pre_size = condition_row_ranges->count(); RowRanges::ranges_intersection(*condition_row_ranges, bf_row_ranges, condition_row_ranges); _opts.stats->rows_bf_filtered += (pre_size - condition_row_ranges->count()); @@ -354,6 +370,7 @@ Status SegmentIterator::_get_row_ranges_from_conditions(RowRanges* condition_row Status SegmentIterator::_apply_bitmap_index() { SCOPED_RAW_TIMER(&_opts.stats->bitmap_index_filter_timer); size_t input_rows = _row_bitmap.cardinality(); + std::vector remaining_predicates; for (auto pred : _col_predicates) { @@ -375,6 +392,163 @@ Status SegmentIterator::_apply_bitmap_index() { return Status::OK(); } +bool SegmentIterator::_is_literal_node(const TExprNodeType::type& node_type) { + switch (node_type) { + case TExprNodeType::BOOL_LITERAL: + case TExprNodeType::INT_LITERAL: + case TExprNodeType::LARGE_INT_LITERAL: + case TExprNodeType::FLOAT_LITERAL: + case TExprNodeType::DECIMAL_LITERAL: + case TExprNodeType::STRING_LITERAL: + case TExprNodeType::DATE_LITERAL: + return true; + default: + return false; + } +} + +Status SegmentIterator::_execute_predicates_except_leafnode_of_andnode(vectorized::VExpr* expr) { + if (expr == nullptr) { + return Status::OK(); + } + + auto children = expr->children(); + for (int i = 0; i < children.size(); ++i) { + RETURN_IF_ERROR(_execute_predicates_except_leafnode_of_andnode(children[i])); + } + + auto node_type = expr->node_type(); + if (node_type == TExprNodeType::SLOT_REF) { + _column_predicate_info->column_name = expr->expr_name(); + } else if (_is_literal_node(node_type)) { + auto v_literal_expr = dynamic_cast(expr); + _column_predicate_info->query_value = v_literal_expr->value(); + } else if (node_type == TExprNodeType::BINARY_PRED) { + _column_predicate_info->query_op = expr->fn().name.function_name; + // get child condition result in compound condtions + auto pred_result_sign = _gen_predicate_sign(_column_predicate_info.get()); + _column_predicate_info.reset(new ColumnPredicateInfo()); + if (_rowid_result_for_index.count(pred_result_sign) > 0 && + _rowid_result_for_index[pred_result_sign].first) { + auto apply_reuslt = _rowid_result_for_index[pred_result_sign].second; + _pred_except_leafnode_of_andnode_evaluate_result.push_back(apply_reuslt); + } + } else if (node_type == TExprNodeType::COMPOUND_PRED) { + auto function_name = expr->fn().name.function_name; + // execute logic function + RETURN_IF_ERROR(_execute_compound_fn(function_name)); + } + + return Status::OK(); +} + +Status SegmentIterator::_execute_compound_fn(const std::string& function_name) { + auto size = _pred_except_leafnode_of_andnode_evaluate_result.size(); + if (function_name == "and") { + if (size < 2) { + return Status::InternalError("execute and logic compute error."); + } + _pred_except_leafnode_of_andnode_evaluate_result.at(size - 2) &= + _pred_except_leafnode_of_andnode_evaluate_result.at(size - 1); + _pred_except_leafnode_of_andnode_evaluate_result.pop_back(); + } else if (function_name == "or") { + if (size < 2) { + return Status::InternalError("execute or logic compute error."); + } + _pred_except_leafnode_of_andnode_evaluate_result.at(size - 2) |= + _pred_except_leafnode_of_andnode_evaluate_result.at(size - 1); + _pred_except_leafnode_of_andnode_evaluate_result.pop_back(); + } else if (function_name == "not") { + if (size < 1) { + return Status::InternalError("execute not logic compute error."); + } + roaring::Roaring tmp = _row_bitmap; + tmp -= _pred_except_leafnode_of_andnode_evaluate_result.at(size - 1); + _pred_except_leafnode_of_andnode_evaluate_result.at(size - 1) = tmp; + } + return Status::OK(); +} + +bool SegmentIterator::_can_filter_by_preds_except_leafnode_of_andnode() { + for (auto pred : _col_preds_except_leafnode_of_andnode) { + if (!_check_apply_by_bitmap_index(pred)) { + return false; + } + } + return true; +} + +bool SegmentIterator::_check_apply_by_bitmap_index(ColumnPredicate* pred) { + int32_t unique_id = _schema.unique_id(pred->column_id()); + if (_bitmap_index_iterators.count(unique_id) < 1 || + _bitmap_index_iterators[unique_id] == nullptr) { + // no bitmap index for this column + return false; + } + return true; +} + +Status SegmentIterator::_apply_bitmap_index_except_leafnode_of_andnode( + ColumnPredicate* pred, roaring::Roaring* output_result) { + int32_t unique_id = _schema.unique_id(pred->column_id()); + RETURN_IF_ERROR(pred->evaluate(_bitmap_index_iterators[unique_id], _segment->num_rows(), + output_result)); + return Status::OK(); +} + +Status SegmentIterator::_apply_index_except_leafnode_of_andnode() { + for (auto pred : _col_preds_except_leafnode_of_andnode) { + auto pred_type = pred->type(); + bool is_support = pred_type == PredicateType::EQ || pred_type == PredicateType::NE || + pred_type == PredicateType::LT || pred_type == PredicateType::LE || + pred_type == PredicateType::GT || pred_type == PredicateType::GE; + if (!is_support) { + continue; + } + + bool can_apply_by_bitmap_index = _check_apply_by_bitmap_index(pred); + roaring::Roaring bitmap = _row_bitmap; + Status res = Status::OK(); + if (can_apply_by_bitmap_index) { + res = _apply_bitmap_index_except_leafnode_of_andnode(pred, &bitmap); + } else { + continue; + } + + if (!res.ok()) { + LOG(WARNING) << "failed to evaluate index" + << ", column predicate type: " << pred->pred_type_string(pred->type()) + << ", error msg: " << res.code_as_string(); + return res; + } + + std::string pred_result_sign = _gen_predicate_sign(pred); + _rowid_result_for_index.emplace( + std::make_pair(pred_result_sign, std::make_pair(true, bitmap))); + } + + return Status::OK(); +} + +std::string SegmentIterator::_gen_predicate_sign(ColumnPredicate* predicate) { + std::string pred_result_sign; + + auto column_desc = _schema.column(predicate->column_id()); + auto pred_type = predicate->type(); + auto predicate_params = predicate->predicate_params(); + pred_result_sign = column_desc->name() + "_" + predicate->pred_type_string(pred_type) + "_" + + predicate_params->value; + + return pred_result_sign; +} + +std::string SegmentIterator::_gen_predicate_sign(ColumnPredicateInfo* predicate_info) { + std::string pred_result_sign; + pred_result_sign = predicate_info->column_name + "_" + predicate_info->query_op + "_" + + predicate_info->query_value; + return pred_result_sign; +} + Status SegmentIterator::_init_return_column_iterators() { if (_cur_rowid >= num_rows()) { return Status::OK(); @@ -579,34 +753,6 @@ Status SegmentIterator::_seek_and_peek(rowid_t rowid) { return Status::OK(); } -void SegmentIterator::_init_lazy_materialization() { - if (!_col_predicates.empty()) { - std::set predicate_columns; - for (auto predicate : _col_predicates) { - predicate_columns.insert(predicate->column_id()); - } - _opts.delete_condition_predicates->get_all_column_ids(predicate_columns); - - // ARRAY column do not support lazy materialization read - for (auto cid : _schema.column_ids()) { - if (_schema.column(cid)->type() == OLAP_FIELD_TYPE_ARRAY) { - predicate_columns.insert(cid); - } - } - - // when all return columns have predicates, disable lazy materialization to avoid its overhead - if (_schema.column_ids().size() > predicate_columns.size()) { - _lazy_materialization_read = true; - _predicate_columns.assign(predicate_columns.cbegin(), predicate_columns.cend()); - for (auto cid : _schema.column_ids()) { - if (predicate_columns.find(cid) == predicate_columns.end()) { - _non_predicate_columns.push_back(cid); - } - } - } - } -} - Status SegmentIterator::_seek_columns(const std::vector& column_ids, rowid_t pos) { for (auto cid : column_ids) { RETURN_IF_ERROR(_column_iterators[_schema.unique_id(cid)]->seek_to_ordinal(pos)); @@ -893,6 +1039,10 @@ Status SegmentIterator::_read_columns_by_index(uint32_t nrows_read_limit, uint32 } else { nrows_read += rows_to_read; } + + auto next_range = RowRanges::create_single(range_from, range_to); + auto next_bm_in_row_bitmap = RowRanges::ranges_to_roaring(next_range); + _split_row_ranges.emplace_back(next_bm_in_row_bitmap); // if _opts.read_orderby_key_reverse is true, only read one range for fast reverse purpose } while (nrows_read < nrows_read_limit && !_opts.read_orderby_key_reverse); return Status::OK(); @@ -1000,7 +1150,7 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { SCOPED_RAW_TIMER(&_opts.stats->block_load_ns); if (UNLIKELY(!_inited)) { - RETURN_IF_ERROR(_init(true)); + RETURN_IF_ERROR(_init()); _inited = true; if (_lazy_materialization_read || _opts.record_rowids) { _block_rowids.resize(_opts.block_row_max); @@ -1038,6 +1188,7 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { // read 100 rows to estimate average row size nrows_read_limit = 100; } + _split_row_ranges.clear(); _read_columns_by_index(nrows_read_limit, _current_batch_rows_read, _lazy_materialization_read || _opts.record_rowids); @@ -1058,6 +1209,7 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { if (!_is_need_vec_eval && !_is_need_short_eval) { _output_non_pred_columns(block); + _output_index_result_column(nullptr, 0, block); } else { _convert_dict_code_for_predicate_if_necessary(); uint16_t selected_size = _current_batch_rows_read; @@ -1114,6 +1266,7 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { RETURN_IF_ERROR(_output_column_by_sel_idx(block, _first_read_column_ids, sel_rowid_idx, selected_size)); } + _output_index_result_column(sel_rowid_idx, selected_size, block); } // shrink char_type suffix zero data @@ -1138,6 +1291,53 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { return Status::OK(); } +void SegmentIterator::_output_index_result_column(uint16_t* sel_rowid_idx, uint16_t select_size, + vectorized::Block* block) { + if (block->rows() == 0) { + return; + } + + for (auto iter : _rowid_result_for_index) { + block->insert({vectorized::ColumnUInt8::create(), + std::make_shared(), iter.first}); + if (!iter.second.first) { + // predicate not in compound query + continue; + } + _build_index_result_column(sel_rowid_idx, select_size, block, iter.first, + iter.second.second); + } +} + +void SegmentIterator::_build_index_result_column(uint16_t* sel_rowid_idx, uint16_t select_size, + vectorized::Block* block, + const std::string& pred_result_sign, + const roaring::Roaring& index_result) { + auto index_result_column = vectorized::ColumnUInt8::create(); + vectorized::ColumnUInt8::Container& vec_match_pred = index_result_column->get_data(); + vec_match_pred.resize(block->rows()); + size_t idx_in_block = 0; + size_t idx_in_row_range = 0; + size_t idx_in_selected = 0; + for (auto origin_row_range : _split_row_ranges) { + for (auto rowid : origin_row_range) { + if (sel_rowid_idx == nullptr || (idx_in_selected < select_size && + idx_in_row_range == sel_rowid_idx[idx_in_selected])) { + if (index_result.contains(rowid)) { + vec_match_pred[idx_in_block++] = true; + } else { + vec_match_pred[idx_in_block++] = false; + } + idx_in_selected++; + } + idx_in_row_range++; + } + } + assert(block->rows() == vec_match_pred.size()); + auto index_result_position = block->get_position_by_name(pred_result_sign); + block->replace_by_position(index_result_position, std::move(index_result_column)); +} + void SegmentIterator::_convert_dict_code_for_predicate_if_necessary() { for (auto predicate : _short_cir_eval_predicate) { _convert_dict_code_for_predicate_if_necessary_impl(predicate); diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.h b/be/src/olap/rowset/segment_v2/segment_iterator.h index 9bd5a8c315c2a2..d1ac74cffabe90 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.h +++ b/be/src/olap/rowset/segment_v2/segment_iterator.h @@ -30,6 +30,7 @@ #include "olap/rowset/segment_v2/segment.h" #include "olap/schema.h" #include "util/file_cache.h" +#include "vec/exprs/vexpr.h" namespace doris { @@ -47,6 +48,13 @@ class BitmapIndexIterator; class BitmapIndexReader; class ColumnIterator; +struct ColumnPredicateInfo { + ColumnPredicateInfo() = default; + std::string column_name; + std::string query_value; + std::string query_op; +}; + class SegmentIterator : public RowwiseIterator { public: SegmentIterator(std::shared_ptr segment, const Schema& _schema); @@ -93,7 +101,7 @@ class SegmentIterator : public RowwiseIterator { return true; } - Status _init(bool is_vec = false); + Status _init(); Status _init_return_column_iterators(); Status _init_bitmap_index_iterators(); @@ -115,6 +123,15 @@ class SegmentIterator : public RowwiseIterator { Status _get_row_ranges_from_conditions(RowRanges* condition_row_ranges); Status _apply_bitmap_index(); + Status _apply_index_except_leafnode_of_andnode(); + Status _apply_bitmap_index_except_leafnode_of_andnode(ColumnPredicate* pred, + roaring::Roaring* output_result); + + bool _can_filter_by_preds_except_leafnode_of_andnode(); + Status _execute_predicates_except_leafnode_of_andnode(vectorized::VExpr* expr); + Status _execute_compound_fn(const std::string& function_name); + bool _is_literal_node(const TExprNodeType::type& node_type); + void _init_lazy_materialization(); void _vec_init_lazy_materialization(); // TODO: Fix Me @@ -166,6 +183,18 @@ class SegmentIterator : public RowwiseIterator { void _update_max_row(const vectorized::Block* block); + bool _check_apply_by_bitmap_index(ColumnPredicate* pred); + + std::string _gen_predicate_sign(ColumnPredicate* predicate); + std::string _gen_predicate_sign(ColumnPredicateInfo* predicate_info); + + void _build_index_result_column(uint16_t* sel_rowid_idx, uint16_t select_size, + vectorized::Block* block, const std::string& pred_result_sign, + const roaring::Roaring& index_result); + void _output_index_result_column(uint16_t* sel_rowid_idx, uint16_t select_size, + vectorized::Block* block); + +private: class BitmapRangeIterator; class BackwardBitmapRangeIterator; @@ -178,6 +207,9 @@ class SegmentIterator : public RowwiseIterator { std::map _bitmap_index_iterators; // after init(), `_row_bitmap` contains all rowid to scan roaring::Roaring _row_bitmap; + // "column_name+operator+value-> + std::unordered_map > _rowid_result_for_index; + std::vector _split_row_ranges; // an iterator for `_row_bitmap` that can be used to extract row range to scan std::unique_ptr _range_iter; // the next rowid to read @@ -221,6 +253,10 @@ class SegmentIterator : public RowwiseIterator { StorageReadOptions _opts; // make a copy of `_opts.column_predicates` in order to make local changes std::vector _col_predicates; + std::vector _col_preds_except_leafnode_of_andnode; + doris::vectorized::VExpr* _remaining_vconjunct_root; + std::vector _pred_except_leafnode_of_andnode_evaluate_result; + std::unique_ptr _column_predicate_info; // row schema of the key to seek // only used in `_get_row_ranges_by_keys` diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp b/be/src/olap/rowset/segment_v2/segment_writer.cpp index 9776761aa68da0..df7f26c34f506d 100644 --- a/be/src/olap/rowset/segment_v2/segment_writer.cpp +++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp @@ -112,6 +112,14 @@ Status SegmentWriter::init(const std::vector& col_ids, bool has_key) { // and not support zone map for array type and jsonb type. opts.need_zone_map = column.is_key() || _tablet_schema->keys_type() != KeysType::AGG_KEYS; opts.need_bloom_filter = column.is_bf_column(); + auto* tablet_index = _tablet_schema->get_ngram_bf_index(column.unique_id()); + if (tablet_index) { + opts.need_bloom_filter = true; + opts.is_ngram_bf_index = true; + opts.gram_size = tablet_index->get_gram_size(); + opts.gram_bf_size = tablet_index->get_gram_bf_size(); + } + opts.need_bitmap_index = column.has_bitmap_index(); bool skip_inverted_index = false; if (_opts.rowset_ctx != nullptr) { diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index 99c7523250fcfb..e3d4c6f3ffb060 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -165,6 +165,13 @@ TabletMeta::TabletMeta(int64_t table_id, int64_t partition_id, int64_t tablet_id column->set_has_bitmap_index(true); break; } + } else if (index.index_type == TIndexType::type::BLOOMFILTER || + index.index_type == TIndexType::type::NGRAM_BF) { + DCHECK_EQ(index.columns.size(), 1); + if (iequal(tcolumn.column_name, index.columns[0])) { + column->set_is_bf_column(true); + break; + } } } } @@ -195,7 +202,11 @@ TabletMeta::TabletMeta(int64_t table_id, int64_t partition_id, int64_t tablet_id case TIndexType::BLOOMFILTER: index_pb->set_index_type(IndexType::BLOOMFILTER); break; + case TIndexType::NGRAM_BF: + index_pb->set_index_type(IndexType::NGRAM_BF); + break; } + if (index.__isset.properties) { auto properties = index_pb->mutable_properties(); for (auto kv : index.properties) { @@ -284,6 +295,7 @@ void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& tco if (tcolumn.__isset.is_bloom_filter_column) { column->set_is_bf_column(tcolumn.is_bloom_filter_column); } + if (tcolumn.column_type.type == TPrimitiveType::ARRAY) { ColumnPB* children_column = column->add_children_columns(); init_column_from_tcolumn(0, tcolumn.children_column[0], children_column); diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp index d684806454b854..55f030cbb9b089 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -402,6 +402,7 @@ void TabletColumn::init_from_pb(const ColumnPB& column) { if (column.has_visible()) { _visible = column.visible(); } + if (_type == FieldType::OLAP_FIELD_TYPE_ARRAY) { DCHECK(column.children_columns_size() == 1) << "ARRAY type has more than 1 children types."; TabletColumn child_column; @@ -479,6 +480,9 @@ void TabletIndex::init_from_thrift(const TOlapTableIndex& index, case TIndexType::BLOOMFILTER: _index_type = IndexType::BLOOMFILTER; break; + case TIndexType::NGRAM_BF: + _index_type = IndexType::NGRAM_BF; + break; } if (index.__isset.properties) { for (auto kv : index.properties) { @@ -811,6 +815,36 @@ const TabletIndex* TabletSchema::get_inverted_index(int32_t col_unique_id) const return nullptr; } +bool TabletSchema::has_ngram_bf_index(int32_t col_unique_id) const { + // TODO use more efficient impl + for (size_t i = 0; i < _indexes.size(); i++) { + if (_indexes[i].index_type() == IndexType::NGRAM_BF) { + for (int32_t id : _indexes[i].col_unique_ids()) { + if (id == col_unique_id) { + return true; + } + } + } + } + + return false; +} + +const TabletIndex* TabletSchema::get_ngram_bf_index(int32_t col_unique_id) const { + // TODO use more efficient impl + for (size_t i = 0; i < _indexes.size(); i++) { + if (_indexes[i].index_type() == IndexType::NGRAM_BF) { + for (int32_t id : _indexes[i].col_unique_ids()) { + if (id == col_unique_id) { + return &(_indexes[i]); + } + } + } + } + + return nullptr; +} + vectorized::Block TabletSchema::create_block( const std::vector& return_columns, const std::unordered_set* tablet_columns_need_convert_null) const { diff --git a/be/src/olap/tablet_schema.h b/be/src/olap/tablet_schema.h index 20b05d18012f51..bbbbfc896fd8aa 100644 --- a/be/src/olap/tablet_schema.h +++ b/be/src/olap/tablet_schema.h @@ -69,8 +69,11 @@ class TabletColumn { std::string suffix) const; int precision() const { return _precision; } int frac() const { return _frac; } - bool visible() const { return _visible; } - // Add a sub column. + inline bool visible() const { return _visible; } + + /** + * Add a sub column. + */ void add_sub_column(TabletColumn& sub_column); uint32_t get_subtype_count() const { return _sub_column_count; } @@ -129,6 +132,20 @@ class TabletIndex { const IndexType index_type() const { return _index_type; } const vector& col_unique_ids() const { return _col_unique_ids; } const std::map& properties() const { return _properties; } + int32_t get_gram_size() const { + if (_properties.count("gram_size")) { + return std::stoi(_properties.at("gram_size")); + } + + return 0; + } + int32_t get_gram_bf_size() const { + if (_properties.count("bf_size")) { + return std::stoi(_properties.at("bf_size")); + } + + return 0; + } private: int64_t _index_id; @@ -186,6 +203,8 @@ class TabletSchema { std::vector get_indexes_for_column(int32_t col_unique_id) const; bool has_inverted_index(int32_t col_unique_id) const; const TabletIndex* get_inverted_index(int32_t col_unique_id) const; + bool has_ngram_bf_index(int32_t col_unique_id) const; + const TabletIndex* get_ngram_bf_index(int32_t col_unique_id) const; void update_indexes_from_thrift(const std::vector& indexes); int32_t schema_version() const { return _schema_version; } @@ -250,4 +269,4 @@ bool operator!=(const TabletSchema& a, const TabletSchema& b); using TabletSchemaSPtr = std::shared_ptr; -} // namespace doris \ No newline at end of file +} // namespace doris diff --git a/be/src/pipeline/exec/aggregation_source_operator.h b/be/src/pipeline/exec/aggregation_source_operator.h index 04c28abd40d5e7..f1c93071da9708 100644 --- a/be/src/pipeline/exec/aggregation_source_operator.h +++ b/be/src/pipeline/exec/aggregation_source_operator.h @@ -38,7 +38,7 @@ class AggSourceOperator final : public SourceOperator public: AggSourceOperator(OperatorBuilderBase*, ExecNode*); // if exec node split to: sink, source operator. the source operator - // should skip `alloc_resoucre()` function call, only sink operator + // should skip `alloc_resource()` function call, only sink operator // call the function Status open(RuntimeState*) override { return Status::OK(); } }; diff --git a/be/src/pipeline/exec/assert_num_rows_operator.h b/be/src/pipeline/exec/assert_num_rows_operator.h index 40acfd05f8a78f..a3f9702dd613b8 100644 --- a/be/src/pipeline/exec/assert_num_rows_operator.h +++ b/be/src/pipeline/exec/assert_num_rows_operator.h @@ -27,7 +27,7 @@ namespace pipeline { class AssertNumRowsOperatorBuilder final : public OperatorBuilder { public: AssertNumRowsOperatorBuilder(int32_t id, ExecNode* node) - : OperatorBuilder(id, "AssertNumRowsOperatorBuilder", node) {}; + : OperatorBuilder(id, "AssertNumRowsOperator", node) {}; OperatorPtr build_operator() override; }; diff --git a/be/src/pipeline/exec/const_value_operator.h b/be/src/pipeline/exec/const_value_operator.h index 467f5ded057e95..567501ccf5843e 100644 --- a/be/src/pipeline/exec/const_value_operator.h +++ b/be/src/pipeline/exec/const_value_operator.h @@ -29,7 +29,7 @@ namespace pipeline { class ConstValueOperatorBuilder final : public OperatorBuilder { public: ConstValueOperatorBuilder(int32_t id, ExecNode* node) - : OperatorBuilder(id, "ConstValueOperatorBuilder", node) {}; + : OperatorBuilder(id, "ConstValueOperator", node) {}; OperatorPtr build_operator() override; diff --git a/be/src/pipeline/exec/hashjoin_probe_operator.h b/be/src/pipeline/exec/hashjoin_probe_operator.h index 7ea3e47546fa65..54105e7f8b7cd3 100644 --- a/be/src/pipeline/exec/hashjoin_probe_operator.h +++ b/be/src/pipeline/exec/hashjoin_probe_operator.h @@ -36,7 +36,7 @@ class HashJoinProbeOperator final : public StatefulOperatorget_name(); }; bool is_sink() const; @@ -257,8 +257,6 @@ class DataSinkOperator : public OperatorBase { ~DataSinkOperator() override = default; - std::string get_name() const override { return "DataSinkOperator"; } - Status prepare(RuntimeState* state) override { RETURN_IF_ERROR(_sink->prepare(state)); _runtime_profile.reset(new RuntimeProfile( @@ -317,8 +315,6 @@ class StreamingOperator : public OperatorBase { ~StreamingOperator() override = default; - std::string get_name() const override { return "StreamingOperator"; } - Status prepare(RuntimeState* state) override { _runtime_profile.reset(new RuntimeProfile( fmt::format("{} (id={})", _operator_builder->get_name(), _operator_builder->id()))); @@ -387,10 +383,9 @@ class SourceOperator : public StreamingOperator { ~SourceOperator() override = default; - std::string get_name() const override { return "SourceOperator"; } - Status get_block(RuntimeState* state, vectorized::Block* block, SourceState& source_state) override { + SCOPED_TIMER(this->_runtime_profile->total_time_counter()); auto& node = StreamingOperator::_node; bool eos = false; RETURN_IF_ERROR(node->get_next_after_projects( @@ -423,10 +418,9 @@ class StatefulOperator : public StreamingOperator { virtual ~StatefulOperator() = default; - std::string get_name() const override { return "DataStateOperator"; } - Status get_block(RuntimeState* state, vectorized::Block* block, SourceState& source_state) override { + SCOPED_TIMER(this->_runtime_profile->total_time_counter()); auto& node = StreamingOperator::_node; auto& child = StreamingOperator::_child; diff --git a/be/src/pipeline/exec/scan_operator.cpp b/be/src/pipeline/exec/scan_operator.cpp index f9f2125878b71f..16b210ddf71803 100644 --- a/be/src/pipeline/exec/scan_operator.cpp +++ b/be/src/pipeline/exec/scan_operator.cpp @@ -25,10 +25,10 @@ namespace doris::pipeline { OPERATOR_CODE_GENERATOR(ScanOperator, SourceOperator) bool ScanOperator::can_read() { - if (_node->_eos || _node->_scanner_ctx->done() || _node->_scanner_ctx->can_finish()) { + if (_node->_eos || _node->_scanner_ctx->done() || _node->_scanner_ctx->no_schedule()) { // _eos: need eos // _scanner_ctx->done(): need finish - // _scanner_ctx->can_finish(): should be scheduled + // _scanner_ctx->no_schedule(): should schedule _scanner_ctx return true; } else { return !_node->_scanner_ctx->empty_in_queue(); // there are some blocks to process @@ -36,7 +36,7 @@ bool ScanOperator::can_read() { } bool ScanOperator::is_pending_finish() const { - return _node->_scanner_ctx && !_node->_scanner_ctx->can_finish(); + return _node->_scanner_ctx && !_node->_scanner_ctx->no_schedule(); } bool ScanOperator::runtime_filters_are_ready_or_timeout() { diff --git a/be/src/pipeline/exec/set_probe_sink_operator.h b/be/src/pipeline/exec/set_probe_sink_operator.h index 0687d0aa64f903..899bee2324b9fa 100644 --- a/be/src/pipeline/exec/set_probe_sink_operator.h +++ b/be/src/pipeline/exec/set_probe_sink_operator.h @@ -33,7 +33,7 @@ class SetProbeSinkOperatorBuilder final : public OperatorBuilder> { private: constexpr static auto builder_name = - is_intersect ? "IntersectProbeSinkOperatorBuilder" : "ExceptProbeSinkOperatorBuilder"; + is_intersect ? "IntersectProbeSinkOperator" : "ExceptProbeSinkOperator"; public: SetProbeSinkOperatorBuilder(int32_t id, int child_id, ExecNode* set_node); diff --git a/be/src/pipeline/exec/set_sink_operator.h b/be/src/pipeline/exec/set_sink_operator.h index 2b8d17a1372c54..bd93592769bcf4 100644 --- a/be/src/pipeline/exec/set_sink_operator.h +++ b/be/src/pipeline/exec/set_sink_operator.h @@ -33,7 +33,7 @@ class SetSinkOperatorBuilder final : public OperatorBuilder> { private: constexpr static auto builder_name = - is_intersect ? "IntersectSinkOperatorBuilder" : "ExceptSinkOperatorBuilder"; + is_intersect ? "IntersectSinkOperator" : "ExceptSinkOperator"; public: SetSinkOperatorBuilder(int32_t id, ExecNode* set_node); diff --git a/be/src/pipeline/exec/set_source_operator.h b/be/src/pipeline/exec/set_source_operator.h index 4a90162759e341..99ea8e5242744c 100644 --- a/be/src/pipeline/exec/set_source_operator.h +++ b/be/src/pipeline/exec/set_source_operator.h @@ -33,7 +33,7 @@ class SetSourceOperatorBuilder : public OperatorBuilder> { private: constexpr static auto builder_name = - is_intersect ? "IntersectSourceOperatorBuilder" : "ExceptSourceOperatorBuilder"; + is_intersect ? "IntersectSourceOperator" : "ExceptSourceOperator"; public: SetSourceOperatorBuilder(int32_t id, ExecNode* set_node); diff --git a/be/src/pipeline/exec/union_sink_operator.cpp b/be/src/pipeline/exec/union_sink_operator.cpp index 8e02877cddb57f..488d2dc58a0ffa 100644 --- a/be/src/pipeline/exec/union_sink_operator.cpp +++ b/be/src/pipeline/exec/union_sink_operator.cpp @@ -23,7 +23,7 @@ namespace doris::pipeline { UnionSinkOperatorBuilder::UnionSinkOperatorBuilder(int32_t id, int child_id, ExecNode* node, std::shared_ptr queue) - : OperatorBuilder(id, "UnionSinkOperatorBuilder", node), + : OperatorBuilder(id, "UnionSinkOperator", node), _cur_child_id(child_id), _data_queue(queue) {}; diff --git a/be/src/pipeline/exec/union_source_operator.cpp b/be/src/pipeline/exec/union_source_operator.cpp index c4f3250175085c..d6f0fcf399b9f1 100644 --- a/be/src/pipeline/exec/union_source_operator.cpp +++ b/be/src/pipeline/exec/union_source_operator.cpp @@ -31,7 +31,7 @@ namespace pipeline { UnionSourceOperatorBuilder::UnionSourceOperatorBuilder(int32_t id, ExecNode* node, std::shared_ptr queue) - : OperatorBuilder(id, "UnionSourceOperatorBuilder", node), _data_queue(queue) {}; + : OperatorBuilder(id, "UnionSourceOperator", node), _data_queue(queue) {}; OperatorPtr UnionSourceOperatorBuilder::build_operator() { return std::make_shared(this, _node, _data_queue); diff --git a/be/src/pipeline/pipeline_fragment_context.cpp b/be/src/pipeline/pipeline_fragment_context.cpp index 4cfeb036ae7c7d..1430c8d6f68383 100644 --- a/be/src/pipeline/pipeline_fragment_context.cpp +++ b/be/src/pipeline/pipeline_fragment_context.cpp @@ -305,13 +305,12 @@ Status PipelineFragmentContext::_build_pipeline_tasks( // TODO: use virtual function to do abstruct Status PipelineFragmentContext::_build_pipelines(ExecNode* node, PipelinePtr cur_pipe) { - auto* fragment_context = this; auto node_type = node->type(); switch (node_type) { // for source case TPlanNodeType::BROKER_SCAN_NODE: { - OperatorBuilderPtr operator_t = std::make_shared( - fragment_context->next_operator_builder_id(), node); + OperatorBuilderPtr operator_t = + std::make_shared(next_operator_builder_id(), node); RETURN_IF_ERROR(cur_pipe->add_operator(operator_t)); break; } @@ -320,8 +319,8 @@ Status PipelineFragmentContext::_build_pipelines(ExecNode* node, PipelinePtr cur case TPlanNodeType::ODBC_SCAN_NODE: case TPlanNodeType::FILE_SCAN_NODE: case TPlanNodeType::ES_SCAN_NODE: { - OperatorBuilderPtr operator_t = std::make_shared( - fragment_context->next_operator_builder_id(), node); + OperatorBuilderPtr operator_t = + std::make_shared(next_operator_builder_id(), node); RETURN_IF_ERROR(cur_pipe->add_operator(operator_t)); break; } @@ -332,8 +331,8 @@ Status PipelineFragmentContext::_build_pipelines(ExecNode* node, PipelinePtr cur break; } case TPlanNodeType::SCHEMA_SCAN_NODE: { - OperatorBuilderPtr operator_t = std::make_shared( - fragment_context->next_operator_builder_id(), node); + OperatorBuilderPtr operator_t = + std::make_shared(next_operator_builder_id(), node); RETURN_IF_ERROR(cur_pipe->add_operator(operator_t)); break; } diff --git a/be/src/pipeline/pipeline_task.cpp b/be/src/pipeline/pipeline_task.cpp index b63576b94718da..8aa033a759fa6b 100644 --- a/be/src/pipeline/pipeline_task.cpp +++ b/be/src/pipeline/pipeline_task.cpp @@ -28,33 +28,50 @@ void PipelineTask::_init_profile() { auto* task_profile = new RuntimeProfile(ss.str()); _parent_profile->add_child(task_profile, true, nullptr); _task_profile.reset(task_profile); - _sink_timer = ADD_TIMER(_task_profile, "SinkTime"); - _get_block_timer = ADD_TIMER(_task_profile, "GetBlockTime"); + _task_cpu_timer = ADD_TIMER(_task_profile, "TaskCpuTime"); + + static const char* exec_time = "ExecuteTime"; + _exec_timer = ADD_TIMER(_task_profile, exec_time); + _prepare_timer = ADD_CHILD_TIMER(_task_profile, "PrepareTime", exec_time); + _open_timer = ADD_CHILD_TIMER(_task_profile, "OpenTime", exec_time); + _get_block_timer = ADD_CHILD_TIMER(_task_profile, "GetBlockTime", exec_time); + _sink_timer = ADD_CHILD_TIMER(_task_profile, "SinkTime", exec_time); + _finalize_timer = ADD_CHILD_TIMER(_task_profile, "FinalizeTime", exec_time); + _close_timer = ADD_CHILD_TIMER(_task_profile, "CloseTime", exec_time); + _wait_source_timer = ADD_TIMER(_task_profile, "WaitSourceTime"); _wait_sink_timer = ADD_TIMER(_task_profile, "WaitSinkTime"); _wait_worker_timer = ADD_TIMER(_task_profile, "WaitWorkerTime"); _wait_schedule_timer = ADD_TIMER(_task_profile, "WaitScheduleTime"); _block_counts = ADD_COUNTER(_task_profile, "NumBlockedTimes", TUnit::UNIT); + _block_by_source_counts = ADD_COUNTER(_task_profile, "NumBlockedBySrcTimes", TUnit::UNIT); + _block_by_sink_counts = ADD_COUNTER(_task_profile, "NumBlockedBySinkTimes", TUnit::UNIT); _schedule_counts = ADD_COUNTER(_task_profile, "NumScheduleTimes", TUnit::UNIT); _yield_counts = ADD_COUNTER(_task_profile, "NumYieldTimes", TUnit::UNIT); + _core_change_times = ADD_COUNTER(_task_profile, "CoreChangeTimes", TUnit::UNIT); } Status PipelineTask::prepare(RuntimeState* state) { DCHECK(_sink); DCHECK(_cur_state == NOT_READY); _init_profile(); + SCOPED_TIMER(_task_profile->total_time_counter()); + SCOPED_CPU_TIMER(_task_cpu_timer); + SCOPED_TIMER(_prepare_timer); RETURN_IF_ERROR(_sink->prepare(state)); for (auto& o : _operators) { RETURN_IF_ERROR(o->prepare(state)); } - _task_profile->add_info_string("SinkId", fmt::format("{}", _sink->id())); + _task_profile->add_info_string("Sink", fmt::format("{}({})", _sink->get_name(), _sink->id())); fmt::memory_buffer operator_ids_str; for (size_t i = 0; i < _operators.size(); i++) { if (i == 0) { - fmt::format_to(operator_ids_str, fmt::format("[{}", _operators[i]->id())); + fmt::format_to(operator_ids_str, + fmt::format("[{}({})", _operators[i]->get_name(), _operators[i]->id())); } else { - fmt::format_to(operator_ids_str, fmt::format(", {}", _operators[i]->id())); + fmt::format_to(operator_ids_str, + fmt::format(", {}({})", _operators[i]->get_name(), _operators[i]->id())); } } fmt::format_to(operator_ids_str, "]"); @@ -90,6 +107,9 @@ bool PipelineTask::has_dependency() { } Status PipelineTask::open() { + SCOPED_TIMER(_task_profile->total_time_counter()); + SCOPED_CPU_TIMER(_task_cpu_timer); + SCOPED_TIMER(_open_timer); for (auto& o : _operators) { RETURN_IF_ERROR(o->open(_state)); } @@ -101,8 +121,10 @@ Status PipelineTask::open() { } Status PipelineTask::execute(bool* eos) { - SCOPED_ATTACH_TASK(runtime_state()); SCOPED_TIMER(_task_profile->total_time_counter()); + SCOPED_CPU_TIMER(_task_cpu_timer); + SCOPED_TIMER(_exec_timer); + SCOPED_ATTACH_TASK(runtime_state()); int64_t time_spent = 0; // The status must be runnable *eos = false; @@ -166,15 +188,23 @@ Status PipelineTask::execute(bool* eos) { } Status PipelineTask::finalize() { + SCOPED_TIMER(_task_profile->total_time_counter()); + SCOPED_CPU_TIMER(_task_cpu_timer); + SCOPED_TIMER(_finalize_timer); return _sink->finalize(_state); } Status PipelineTask::close() { - auto s = _sink->close(_state); - for (auto& op : _operators) { - auto tem = op->close(_state); - if (!tem.ok() && s.ok()) { - s = tem; + int64_t close_ns = 0; + Status s; + { + SCOPED_RAW_TIMER(&close_ns); + s = _sink->close(_state); + for (auto& op : _operators) { + auto tem = op->close(_state); + if (!tem.ok() && s.ok()) { + s = tem; + } } } if (_opened) { @@ -183,6 +213,8 @@ Status PipelineTask::close() { COUNTER_UPDATE(_wait_sink_timer, _wait_sink_watcher.elapsed_time()); COUNTER_UPDATE(_wait_worker_timer, _wait_worker_watcher.elapsed_time()); COUNTER_UPDATE(_wait_schedule_timer, _wait_schedule_watcher.elapsed_time()); + COUNTER_UPDATE(_close_timer, close_ns); + COUNTER_UPDATE(_task_profile->total_time_counter(), close_ns); } return s; } @@ -205,14 +237,13 @@ void PipelineTask::set_state(PipelineTaskState state) { _wait_sink_watcher.stop(); } } else if (_cur_state == RUNNABLE) { + COUNTER_UPDATE(_block_counts, 1); if (state == BLOCKED_FOR_SOURCE) { _wait_source_watcher.start(); - COUNTER_UPDATE(_block_counts, 1); + COUNTER_UPDATE(_block_by_source_counts, 1); } else if (state == BLOCKED_FOR_SINK) { _wait_sink_watcher.start(); - COUNTER_UPDATE(_block_counts, 1); - } else if (state == BLOCKED_FOR_DEPENDENCY) { - COUNTER_UPDATE(_block_counts, 1); + COUNTER_UPDATE(_block_by_sink_counts, 1); } } _cur_state = state; diff --git a/be/src/pipeline/pipeline_task.h b/be/src/pipeline/pipeline_task.h index f14669f41a5a94..0225b596f53762 100644 --- a/be/src/pipeline/pipeline_task.h +++ b/be/src/pipeline/pipeline_task.h @@ -150,7 +150,15 @@ class PipelineTask { int get_previous_core_id() const { return _previous_schedule_id; } - void set_previous_core_id(int id) { _previous_schedule_id = id; } + void set_previous_core_id(int id) { + if (id == _previous_schedule_id) { + return; + } + if (_previous_schedule_id != -1) { + COUNTER_UPDATE(_core_change_times, 1); + } + _previous_schedule_id = id; + } bool has_dependency(); @@ -190,9 +198,17 @@ class PipelineTask { RuntimeProfile* _parent_profile; std::unique_ptr _task_profile; - RuntimeProfile::Counter* _sink_timer; + RuntimeProfile::Counter* _task_cpu_timer; + RuntimeProfile::Counter* _prepare_timer; + RuntimeProfile::Counter* _open_timer; + RuntimeProfile::Counter* _exec_timer; RuntimeProfile::Counter* _get_block_timer; + RuntimeProfile::Counter* _sink_timer; + RuntimeProfile::Counter* _finalize_timer; + RuntimeProfile::Counter* _close_timer; RuntimeProfile::Counter* _block_counts; + RuntimeProfile::Counter* _block_by_source_counts; + RuntimeProfile::Counter* _block_by_sink_counts; RuntimeProfile::Counter* _schedule_counts; MonotonicStopWatch _wait_source_watcher; RuntimeProfile::Counter* _wait_source_timer; @@ -204,5 +220,6 @@ class PipelineTask { MonotonicStopWatch _wait_schedule_watcher; RuntimeProfile::Counter* _wait_schedule_timer; RuntimeProfile::Counter* _yield_counts; + RuntimeProfile::Counter* _core_change_times; }; } // namespace doris::pipeline \ No newline at end of file diff --git a/be/src/runtime/jsonb_value.h b/be/src/runtime/jsonb_value.h index bdb5ba49765390..1e03518d9d3a0a 100644 --- a/be/src/runtime/jsonb_value.h +++ b/be/src/runtime/jsonb_value.h @@ -22,7 +22,7 @@ #include "util/cpu_info.h" #include "util/hash_util.hpp" #include "util/jsonb_error.h" -#include "util/jsonb_parser.h" +#include "util/jsonb_parser_simd.h" #include "util/jsonb_utils.h" #include "vec/common/string_ref.h" @@ -38,7 +38,7 @@ struct JsonBinaryValue { // default nullprt and size 0 for invalid or NULL value const char* ptr = nullptr; size_t len = 0; - JsonbParser parser; + JsonbParserSIMD parser; JsonBinaryValue() : ptr(nullptr), len(0) {} JsonBinaryValue(char* ptr, int len) { from_json_string(const_cast(ptr), len); } diff --git a/be/src/service/http_service.cpp b/be/src/service/http_service.cpp index b62e54e6b14918..b7acb1fa6a1281 100644 --- a/be/src/service/http_service.cpp +++ b/be/src/service/http_service.cpp @@ -24,8 +24,10 @@ #include "http/action/config_action.h" #include "http/action/download_action.h" #include "http/action/health_action.h" +#include "http/action/jeprofile_actions.h" #include "http/action/meta_action.h" #include "http/action/metrics_action.h" +#include "http/action/pad_rowset_action.h" #include "http/action/pprof_actions.h" #include "http/action/reload_tablet_action.h" #include "http/action/reset_rpc_channel_action.h" @@ -117,6 +119,9 @@ Status HttpService::start() { // register pprof actions PprofActions::setup(_env, _ev_http_server.get(), _pool); + // register jeprof actions + JeprofileActions::setup(_env, _ev_http_server.get(), _pool); + // register metrics { auto action = _pool.add(new MetricsAction(DorisMetrics::instance()->metric_registry())); @@ -180,6 +185,9 @@ Status HttpService::start() { _ev_http_server->register_handler(HttpMethod::POST, "/api/check_tablet_segment_lost", check_tablet_segment_action); + PadRowsetAction* pad_rowset_action = _pool.add(new PadRowsetAction()); + _ev_http_server->register_handler(HttpMethod::POST, "api/pad_rowset", pad_rowset_action); + _ev_http_server->start(); return Status::OK(); } diff --git a/be/src/util/CMakeLists.txt b/be/src/util/CMakeLists.txt index 067d7442faede8..4b67e12ce84719 100644 --- a/be/src/util/CMakeLists.txt +++ b/be/src/util/CMakeLists.txt @@ -106,6 +106,7 @@ set(UTIL_FILES hdfs_util.cpp time_lut.cpp topn_counter.cpp + cityhash102/city.cc tuple_row_zorder_compare.cpp telemetry/telemetry.cpp telemetry/brpc_carrier.cpp diff --git a/be/src/util/cityhash102/city.cc b/be/src/util/cityhash102/city.cc new file mode 100644 index 00000000000000..6ad5c37c66f38a --- /dev/null +++ b/be/src/util/cityhash102/city.cc @@ -0,0 +1,481 @@ +// Copyright (c) 2011 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// CityHash, by Geoff Pike and Jyrki Alakuijala +// +// This file provides CityHash64() and related functions. +// +// It's probably possible to create even faster hash functions by +// writing a program that systematically explores some of the space of +// possible hash functions, by using SIMD instructions, or by +// compromising on hash quality. + +#include "config.h" +#include "city.h" + +#include +#include // for memcpy and memset + +using namespace std; + + +#if !defined(WORDS_BIGENDIAN) + +#define uint32_in_expected_order(x) (x) +#define uint64_in_expected_order(x) (x) + +#else + +#ifdef _MSC_VER +#include +#define bswap_32(x) _byteswap_ulong(x) +#define bswap_64(x) _byteswap_uint64(x) + +#elif defined(__APPLE__) +// Mac OS X / Darwin features +#include +#define bswap_32(x) OSSwapInt32(x) +#define bswap_64(x) OSSwapInt64(x) + +#else +#include +#endif + +#define uint32_in_expected_order(x) (bswap_32(x)) +#define uint64_in_expected_order(x) (bswap_64(x)) + +#endif // WORDS_BIGENDIAN + +#if !defined(LIKELY) +#if HAVE_BUILTIN_EXPECT +#define LIKELY(x) (__builtin_expect(!!(x), 1)) +#else +#define LIKELY(x) (x) +#endif +#endif + +namespace CityHash_v1_0_2 +{ + +static uint64 UNALIGNED_LOAD64(const char *p) { + uint64 result; + memcpy(&result, p, sizeof(result)); + return result; +} + +static uint32 UNALIGNED_LOAD32(const char *p) { + uint32 result; + memcpy(&result, p, sizeof(result)); + return result; +} + +static uint64 Fetch64(const char *p) { + return uint64_in_expected_order(UNALIGNED_LOAD64(p)); +} + +static uint32 Fetch32(const char *p) { + return uint32_in_expected_order(UNALIGNED_LOAD32(p)); +} + +// Some primes between 2^63 and 2^64 for various uses. +static const uint64 k0 = 0xc3a5c85c97cb3127ULL; +static const uint64 k1 = 0xb492b66fbe98f273ULL; +static const uint64 k2 = 0x9ae16a3b2f90404fULL; +static const uint64 k3 = 0xc949d7c7509e6557ULL; + +// Bitwise right rotate. Normally this will compile to a single +// instruction, especially if the shift is a manifest constant. +static uint64 Rotate(uint64 val, int shift) { + // Avoid shifting by 64: doing so yields an undefined result. + return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); +} + +// Equivalent to Rotate(), but requires the second arg to be non-zero. +// On x86-64, and probably others, it's possible for this to compile +// to a single instruction if both args are already in registers. +static uint64 RotateByAtLeast1(uint64 val, int shift) { + return (val >> shift) | (val << (64 - shift)); +} + +static uint64 ShiftMix(uint64 val) { + return val ^ (val >> 47); +} + +static uint64 HashLen16(uint64 u, uint64 v) { + return Hash128to64(uint128(u, v)); +} + +static uint64 HashLen0to16(const char *s, size_t len) { + if (len > 8) { + uint64 a = Fetch64(s); + uint64 b = Fetch64(s + len - 8); + return HashLen16(a, RotateByAtLeast1(b + len, len)) ^ b; + } + if (len >= 4) { + uint64 a = Fetch32(s); + return HashLen16(len + (a << 3), Fetch32(s + len - 4)); + } + if (len > 0) { + uint8 a = s[0]; + uint8 b = s[len >> 1]; + uint8 c = s[len - 1]; + uint32 y = static_cast(a) + (static_cast(b) << 8); + uint32 z = len + (static_cast(c) << 2); + return ShiftMix(y * k2 ^ z * k3) * k2; + } + return k2; +} + +// This probably works well for 16-byte strings as well, but it may be overkill +// in that case. +static uint64 HashLen17to32(const char *s, size_t len) { + uint64 a = Fetch64(s) * k1; + uint64 b = Fetch64(s + 8); + uint64 c = Fetch64(s + len - 8) * k2; + uint64 d = Fetch64(s + len - 16) * k0; + return HashLen16(Rotate(a - b, 43) + Rotate(c, 30) + d, + a + Rotate(b ^ k3, 20) - c + len); +} + +// Return a 16-byte hash for 48 bytes. Quick and dirty. +// Callers do best to use "random-looking" values for a and b. +static pair WeakHashLen32WithSeeds( + uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) { + a += w; + b = Rotate(b + a + z, 21); + uint64 c = a; + a += x; + a += y; + b += Rotate(a, 44); + return make_pair(a + z, b + c); +} + +// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. +static pair WeakHashLen32WithSeeds( + const char* s, uint64 a, uint64 b) { + return WeakHashLen32WithSeeds(Fetch64(s), + Fetch64(s + 8), + Fetch64(s + 16), + Fetch64(s + 24), + a, + b); +} + +// Return an 8-byte hash for 33 to 64 bytes. +static uint64 HashLen33to64(const char *s, size_t len) { + uint64 z = Fetch64(s + 24); + uint64 a = Fetch64(s) + (len + Fetch64(s + len - 16)) * k0; + uint64 b = Rotate(a + z, 52); + uint64 c = Rotate(a, 37); + a += Fetch64(s + 8); + c += Rotate(a, 7); + a += Fetch64(s + 16); + uint64 vf = a + z; + uint64 vs = b + Rotate(a, 31) + c; + a = Fetch64(s + 16) + Fetch64(s + len - 32); + z = Fetch64(s + len - 8); + b = Rotate(a + z, 52); + c = Rotate(a, 37); + a += Fetch64(s + len - 24); + c += Rotate(a, 7); + a += Fetch64(s + len - 16); + uint64 wf = a + z; + uint64 ws = b + Rotate(a, 31) + c; + uint64 r = ShiftMix((vf + ws) * k2 + (wf + vs) * k0); + return ShiftMix(r * k0 + vs) * k2; +} + +uint64 CityHash64(const char *s, size_t len) { + if (len <= 32) { + if (len <= 16) { + return HashLen0to16(s, len); + } else { + return HashLen17to32(s, len); + } + } else if (len <= 64) { + return HashLen33to64(s, len); + } + + // For strings over 64 bytes we hash the end first, and then as we + // loop we keep 56 bytes of state: v, w, x, y, and z. + uint64 x = Fetch64(s); + uint64 y = Fetch64(s + len - 16) ^ k1; + uint64 z = Fetch64(s + len - 56) ^ k0; + pair v = WeakHashLen32WithSeeds(s + len - 64, len, y); + pair w = WeakHashLen32WithSeeds(s + len - 32, len * k1, k0); + z += ShiftMix(v.second) * k1; + x = Rotate(z + x, 39) * k1; + y = Rotate(y, 33) * k1; + + // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks. + len = (len - 1) & ~static_cast(63); + do { + x = Rotate(x + y + v.first + Fetch64(s + 16), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y ^= v.first; + z = Rotate(z ^ w.first, 33); + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y); + std::swap(z, x); + s += 64; + len -= 64; + } while (len != 0); + return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z, + HashLen16(v.second, w.second) + x); +} + +uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) { + return CityHash64WithSeeds(s, len, k2, seed); +} + +uint64 CityHash64WithSeeds(const char *s, size_t len, + uint64 seed0, uint64 seed1) { + return HashLen16(CityHash64(s, len) - seed0, seed1); +} + +// A subroutine for CityHash128(). Returns a decent 128-bit hash for strings +// of any length representable in ssize_t. Based on City and Murmur. +static uint128 CityMurmur(const char *s, size_t len, uint128 seed) { + uint64 a = Uint128Low64(seed); + uint64 b = Uint128High64(seed); + uint64 c = 0; + uint64 d = 0; + ssize_t l = len - 16; + if (l <= 0) { // len <= 16 + a = ShiftMix(a * k1) * k1; + c = b * k1 + HashLen0to16(s, len); + d = ShiftMix(a + (len >= 8 ? Fetch64(s) : c)); + } else { // len > 16 + c = HashLen16(Fetch64(s + len - 8) + k1, a); + d = HashLen16(b + len, c + Fetch64(s + len - 16)); + a += d; + do { + a ^= ShiftMix(Fetch64(s) * k1) * k1; + a *= k1; + b ^= a; + c ^= ShiftMix(Fetch64(s + 8) * k1) * k1; + c *= k1; + d ^= c; + s += 16; + l -= 16; + } while (l > 0); + } + a = HashLen16(a, c); + b = HashLen16(d, b); + return uint128(a ^ b, HashLen16(b, a)); +} + +uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) { + if (len < 128) { + return CityMurmur(s, len, seed); + } + + // We expect len >= 128 to be the common case. Keep 56 bytes of state: + // v, w, x, y, and z. + pair v, w; + uint64 x = Uint128Low64(seed); + uint64 y = Uint128High64(seed); + uint64 z = len * k1; + v.first = Rotate(y ^ k1, 49) * k1 + Fetch64(s); + v.second = Rotate(v.first, 42) * k1 + Fetch64(s + 8); + w.first = Rotate(y + z, 35) * k1 + x; + w.second = Rotate(x + Fetch64(s + 88), 53) * k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = Rotate(x + y + v.first + Fetch64(s + 16), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y ^= v.first; + z = Rotate(z ^ w.first, 33); + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y); + std::swap(z, x); + s += 64; + x = Rotate(x + y + v.first + Fetch64(s + 16), 37) * k1; + y = Rotate(y + v.second + Fetch64(s + 48), 42) * k1; + x ^= w.second; + y ^= v.first; + z = Rotate(z ^ w.first, 33); + v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first); + w = WeakHashLen32WithSeeds(s + 32, z + w.second, y); + std::swap(z, x); + s += 64; + len -= 128; + } while (LIKELY(len >= 128)); + y += Rotate(w.first, 37) * k0 + z; + x += Rotate(v.first + z, 49) * k0; + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (size_t tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = Rotate(y - x, 42) * k0 + v.second; + w.first += Fetch64(s + len - tail_done + 16); + x = Rotate(x, 49) * k0 + w.first; + w.first += v.first; + v = WeakHashLen32WithSeeds(s + len - tail_done, v.first, v.second); + } + // At this point our 48 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 48-byte-to-8-byte hashes to get a 16-byte final result. + x = HashLen16(x, v.first); + y = HashLen16(y, w.first); + return uint128(HashLen16(x + v.second, w.second) + y, + HashLen16(x + w.second, y + v.second)); +} + +uint128 CityHash128(const char *s, size_t len) { + if (len >= 16) { + return CityHash128WithSeed(s + 16, + len - 16, + uint128(Fetch64(s) ^ k3, + Fetch64(s + 8))); + } else if (len >= 8) { + return CityHash128WithSeed(NULL, + 0, + uint128(Fetch64(s) ^ (len * k0), + Fetch64(s + len - 8) ^ k1)); + } else { + return CityHash128WithSeed(s, len, uint128(k0, k1)); + } +} + +} + +#ifdef __SSE4_2__ +#include "citycrc.h" +#include + +namespace CityHash_v1_0_2 +{ + +// Requires len >= 240. +static void CityHashCrc256Long(const char *s, size_t len, + uint32 seed, uint64 *result) { + uint64 a = Fetch64(s + 56) + k0; + uint64 b = Fetch64(s + 96) + k0; + uint64 c = result[1] = HashLen16(b, len); + uint64 d = result[2] = Fetch64(s + 120) * k0 + len; + uint64 e = Fetch64(s + 184) + seed; + uint64 f = seed; + uint64 g = 0; + uint64 h = 0; + uint64 i = 0; + uint64 j = 0; + uint64 t = c + d; + + // 240 bytes of input per iter. + size_t iters = len / 240; + len -= iters * 240; + do { +#define CHUNK(multiplier, z) \ + { \ + uint64 old_a = a; \ + a = Rotate(b, 41 ^ z) * multiplier + Fetch64(s); \ + b = Rotate(c, 27 ^ z) * multiplier + Fetch64(s + 8); \ + c = Rotate(d, 41 ^ z) * multiplier + Fetch64(s + 16); \ + d = Rotate(e, 33 ^ z) * multiplier + Fetch64(s + 24); \ + e = Rotate(t, 25 ^ z) * multiplier + Fetch64(s + 32); \ + t = old_a; \ + } \ + f = _mm_crc32_u64(f, a); \ + g = _mm_crc32_u64(g, b); \ + h = _mm_crc32_u64(h, c); \ + i = _mm_crc32_u64(i, d); \ + j = _mm_crc32_u64(j, e); \ + s += 40 + + CHUNK(1, 1); CHUNK(k0, 0); + CHUNK(1, 1); CHUNK(k0, 0); + CHUNK(1, 1); CHUNK(k0, 0); + } while (--iters > 0); + j += i << 32; + a = HashLen16(a, j); + h += g << 32; + b = b * k0 + h; + c = HashLen16(c, f) + i; + d = HashLen16(d, e); + pair v(j + e, HashLen16(h, t)); + h = v.second + f; + // If 0 < len < 240, hash chunks of 32 bytes each from the end of s. + for (size_t tail_done = 0; tail_done < len; ) { + tail_done += 32; + c = Rotate(c - a, 42) * k0 + v.second; + d += Fetch64(s + len - tail_done + 16); + a = Rotate(a, 49) * k0 + d; + d += v.first; + v = WeakHashLen32WithSeeds(s + len - tail_done, v.first, v.second); + } + + // Final mix. + e = HashLen16(a, d) + v.first; + f = HashLen16(b, c) + a; + g = HashLen16(v.first, v.second) + c; + result[0] = e + f + g + h; + a = ShiftMix((a + g) * k0) * k0 + b; + result[1] += a + result[0]; + a = ShiftMix(a * k0) * k0 + c; + result[2] += a + result[1]; + a = ShiftMix((a + e) * k0) * k0; + result[3] = a + result[2]; +} + +// Requires len < 240. +static void CityHashCrc256Short(const char *s, size_t len, uint64 *result) { + char buf[240]; + memcpy(buf, s, len); + memset(buf + len, 0, 240 - len); + CityHashCrc256Long(buf, 240, ~static_cast(len), result); +} + +void CityHashCrc256(const char *s, size_t len, uint64 *result) { + if (LIKELY(len >= 240)) { + CityHashCrc256Long(s, len, 0, result); + } else { + CityHashCrc256Short(s, len, result); + } +} + +uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed) { + if (len <= 900) { + return CityHash128WithSeed(s, len, seed); + } else { + uint64 result[4]; + CityHashCrc256(s, len, result); + uint64 u = Uint128High64(seed) + result[0]; + uint64 v = Uint128Low64(seed) + result[1]; + return uint128(HashLen16(u, v + result[2]), + HashLen16(Rotate(v, 32), u * k0 + result[3])); + } +} + +uint128 CityHashCrc128(const char *s, size_t len) { + if (len <= 900) { + return CityHash128(s, len); + } else { + uint64 result[4]; + CityHashCrc256(s, len, result); + return uint128(result[2], result[3]); + } +} + +} + +#endif diff --git a/be/src/util/cityhash102/city.h b/be/src/util/cityhash102/city.h new file mode 100644 index 00000000000000..77d4c988cdd862 --- /dev/null +++ b/be/src/util/cityhash102/city.h @@ -0,0 +1,104 @@ +// Copyright (c) 2011 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// CityHash, by Geoff Pike and Jyrki Alakuijala +// +// This file provides a few functions for hashing strings. On x86-64 +// hardware in 2011, CityHash64() is faster than other high-quality +// hash functions, such as Murmur. This is largely due to higher +// instruction-level parallelism. CityHash64() and CityHash128() also perform +// well on hash-quality tests. +// +// CityHash128() is optimized for relatively long strings and returns +// a 128-bit hash. For strings more than about 2000 bytes it can be +// faster than CityHash64(). +// +// Functions in the CityHash family are not suitable for cryptography. +// +// WARNING: This code has not been tested on big-endian platforms! +// It is known to work well on little-endian platforms that have a small penalty +// for unaligned reads, such as current Intel and AMD moderate-to-high-end CPUs. +// +// By the way, for some hash functions, given strings a and b, the hash +// of a+b is easily derived from the hashes of a and b. This property +// doesn't hold for any hash functions in this file. + +#ifndef CITY_HASH_H_ +#define CITY_HASH_H_ + +#include // for size_t. +#include +#include + +/** This is a version of CityHash that predates v1.0.3 algorithm change. + * Why we need exactly this version? + * Although hash values of CityHash are not recommended for storing persistently anywhere, + * it has already been used this way in ClickHouse: + * - for calculation of checksums of compressed chunks and for data parts; + * - this version of CityHash is exposed in cityHash64 function in ClickHouse SQL language; + * - and already used by many users for data ordering, sampling and sharding. + */ +namespace CityHash_v1_0_2 +{ + +typedef uint8_t uint8; +typedef uint32_t uint32; +typedef uint64_t uint64; +typedef std::pair uint128; + + +inline uint64 Uint128Low64(const uint128& x) { return x.first; } +inline uint64 Uint128High64(const uint128& x) { return x.second; } + +// Hash function for a byte array. +uint64 CityHash64(const char *buf, size_t len); + +// Hash function for a byte array. For convenience, a 64-bit seed is also +// hashed into the result. +uint64 CityHash64WithSeed(const char *buf, size_t len, uint64 seed); + +// Hash function for a byte array. For convenience, two seeds are also +// hashed into the result. +uint64 CityHash64WithSeeds(const char *buf, size_t len, + uint64 seed0, uint64 seed1); + +// Hash function for a byte array. +uint128 CityHash128(const char *s, size_t len); + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed); + +// Hash 128 input bits down to 64 bits of output. +// This is intended to be a reasonably good hash function. +inline uint64 Hash128to64(const uint128& x) { + // Murmur-inspired hashing. + const uint64 kMul = 0x9ddfea08eb382d69ULL; + uint64 a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul; + a ^= (a >> 47); + uint64 b = (Uint128High64(x) ^ a) * kMul; + b ^= (b >> 47); + b *= kMul; + return b; +} + +} + +#endif // CITY_HASH_H_ diff --git a/be/src/util/cityhash102/citycrc.h b/be/src/util/cityhash102/citycrc.h new file mode 100644 index 00000000000000..3ec72cc8875a81 --- /dev/null +++ b/be/src/util/cityhash102/citycrc.h @@ -0,0 +1,48 @@ +// Copyright (c) 2011 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// CityHash, by Geoff Pike and Jyrki Alakuijala +// +// This file declares the subset of the CityHash functions that require +// _mm_crc32_u64(). See the CityHash README for details. +// +// Functions in the CityHash family are not suitable for cryptography. + +#ifndef CITY_HASH_CRC_H_ +#define CITY_HASH_CRC_H_ + +#include "city.h" + +namespace CityHash_v1_0_2 +{ + +// Hash function for a byte array. +uint128 CityHashCrc128(const char *s, size_t len); + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +uint128 CityHashCrc128WithSeed(const char *s, size_t len, uint128 seed); + +// Hash function for a byte array. Sets result[0] ... result[3]. +void CityHashCrc256(const char *s, size_t len, uint64 *result); + +} + +#endif // CITY_HASH_CRC_H_ diff --git a/be/src/util/cityhash102/config.h b/be/src/util/cityhash102/config.h new file mode 100644 index 00000000000000..cca744a35c03f8 --- /dev/null +++ b/be/src/util/cityhash102/config.h @@ -0,0 +1,125 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to 1 if the compiler supports __builtin_expect. */ +#if _MSC_VER +#define HAVE_BUILTIN_EXPECT 0 +#else +#define HAVE_BUILTIN_EXPECT 1 +#endif + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "cityhash-discuss@googlegroups.com" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "CityHash" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "CityHash 1.0.2" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "cityhash" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.0.2" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT32_T */ + +/* Define for Solaris 2.5.1 so the uint64_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT64_T */ + +/* Define for Solaris 2.5.1 so the uint8_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT8_T */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define to `int' if does not define. */ +/* #undef ssize_t */ + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint32_t */ + +/* Define to the type of an unsigned integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint64_t */ + +/* Define to the type of an unsigned integer type of width exactly 8 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint8_t */ + +#ifdef _MSC_VER + #include + typedef SSIZE_T ssize_t; +#else + #include +#endif diff --git a/be/src/util/date_func.cpp b/be/src/util/date_func.cpp index 2c0ebdd811feda..e324d681066fb8 100644 --- a/be/src/util/date_func.cpp +++ b/be/src/util/date_func.cpp @@ -109,4 +109,25 @@ int32_t time_to_buffer_from_double(double time, char* buffer) { return buffer - begin; } +std::string time_to_buffer_from_double(double time) { + fmt::memory_buffer buffer; + if (time < 0) { + time = -time; + fmt::format_to(buffer, "-"); + } + if (time > 3020399) { + time = 3020399; + } + int64_t hour = (int64_t)(time / 3600); + int32_t minute = ((int32_t)(time / 60)) % 60; + int32_t second = ((int32_t)time) % 60; + if (hour >= 100) { + fmt::format_to(buffer, fmt::format("{}", hour)); + } else { + fmt::format_to(buffer, fmt::format("{:02d}", hour)); + } + fmt::format_to(buffer, fmt::format(":{:02d}:{:02d}", minute, second)); + return fmt::to_string(buffer); +} + } // namespace doris diff --git a/be/src/util/date_func.h b/be/src/util/date_func.h index e5843b64af5620..4378fd32e126f1 100644 --- a/be/src/util/date_func.h +++ b/be/src/util/date_func.h @@ -32,4 +32,6 @@ int32_t time_to_buffer_from_double(double time, char* buffer); uint32_t timestamp_from_date_v2(const std::string& date_str); uint64_t timestamp_from_datetime_v2(const std::string& date_str); +std::string time_to_buffer_from_double(double time); + } // namespace doris diff --git a/be/src/util/jsonb_error.h b/be/src/util/jsonb_error.h index 77d6fa16d05b2d..2ad632fb8bd2c6 100644 --- a/be/src/util/jsonb_error.h +++ b/be/src/util/jsonb_error.h @@ -30,12 +30,14 @@ enum class JsonbErrType { E_EMPTY_DOCUMENT, E_OUTPUT_FAIL, E_INVALID_DOCU, + E_INVALID_TYPE, E_INVALID_SCALAR_VALUE, E_INVALID_KEY_STRING, E_INVALID_KEY_LENGTH, E_INVALID_STR, E_INVALID_OBJ, E_INVALID_ARR, + E_INVALID_NUMBER, E_INVALID_HEX, E_INVALID_OCTAL, E_INVALID_DECIMAL, @@ -53,6 +55,7 @@ enum class JsonbErrType { E_INVALID_JSONB_OBJ, E_NESTING_LVL_OVERFLOW, E_INVALID_DOCU_COMPAT, + E_EXCEPTION, // new error code should always be added above E_NUM_ERRORS @@ -77,13 +80,15 @@ class JsonbErrMsg { "Invalid document version", "Empty document", "Fatal error in writing JSONB", - "Invalid document: document must be an object or an array", + "Invalid document", + "Invalid json value type", "Invalid scalar value", "Invalid key string", "Key length exceeds maximum size allowed (64 bytes)", "Invalid string value", "Invalid JSON object", "Invalid JSON array", + "Invalid number", "Invalid HEX number", "Invalid octal number", "Invalid decimal number", @@ -100,7 +105,8 @@ class JsonbErrMsg { "Invalid update operation", "Invalid JSONB object (internal)", "Object or array has too many nesting levels", - "Invalid document: document must be an object or an array", + "Invalid document", + "Exception throwed", nullptr /* E_NUM_ERRORS */ }; diff --git a/be/src/util/jsonb_parser_simd.h b/be/src/util/jsonb_parser_simd.h new file mode 100644 index 00000000000000..10d19a3f570d34 --- /dev/null +++ b/be/src/util/jsonb_parser_simd.h @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +/* + * This file defines JsonbParserTSIMD (template) and JsonbParser. + * + * JsonbParserTSIMD is a template class which implements a JSON parser. + * JsonbParserTSIMD parses JSON text, and serialize it to JSONB binary format + * by using JsonbWriterT object. By default, JsonbParserTSIMD creates a new + * JsonbWriterT object with an output stream object. However, you can also + * pass in your JsonbWriterT or any stream object that implements some basic + * interface of std::ostream (see JsonbStream.h). + * + * JsonbParser specializes JsonbParserTSIMD with JsonbOutStream type (see + * JsonbStream.h). So unless you want to provide own a different output stream + * type, use JsonbParser object. + * + * ** Parsing JSON ** + * JsonbParserTSIMD parses JSON string, and directly serializes into JSONB + * packed bytes. There are three ways to parse a JSON string: (1) using + * c-string, (2) using string with len, (3) using std::istream object. You can + * use custom streambuf to redirect output. JsonbOutBuffer is a streambuf used + * internally if the input is raw character buffer. + * + * You can reuse an JsonbParserTSIMD object to parse/serialize multiple JSON + * strings, and the previous JSONB will be overwritten. + * + * If parsing fails (returned false), the error code will be set to one of + * JsonbErrType, and can be retrieved by calling getErrorCode(). + * + * ** External dictionary ** + * During parsing a JSON string, you can pass a call-back function to map a key + * string to an id, and store the dictionary id in JSONB to save space. The + * purpose of using an external dictionary is more towards a collection of + * documents (which has common keys) rather than a single document, so that + * space saving will be significant. + * + * ** Endianness ** + * Note: JSONB serialization doesn't assume endianness of the server. However + * you will need to ensure that the endianness at the reader side is the same + * as that at the writer side (if they are on different machines). Otherwise, + * proper conversion is needed when a number value is returned to the + * caller/writer. + * + * @author Tian Xia + * + * this file is copied from + * https://github.com/facebook/mysql-5.6/blob/fb-mysql-5.6.35/fbson/FbsonJsonParser.h + * and modified by Doris + */ + +#ifndef JSONB_JSONBJSONPARSERSIMD_H +#define JSONB_JSONBJSONPARSERSIMD_H + +#include + +#include +#include + +#include "jsonb_document.h" +#include "jsonb_error.h" +#include "jsonb_writer.h" +#include "string_parser.hpp" + +namespace doris { + +/* + * Template JsonbParserTSIMD + */ +template +class JsonbParserTSIMD { +public: + JsonbParserTSIMD() : err_(JsonbErrType::E_NONE) {} + + explicit JsonbParserTSIMD(OS_TYPE& os) : writer_(os), err_(JsonbErrType::E_NONE) {} + + // parse a UTF-8 JSON string + bool parse(const std::string& str, hDictInsert handler = nullptr) { + return parse(str.c_str(), (unsigned int)str.size(), handler); + } + + // parse a UTF-8 JSON c-style string (NULL terminated) + bool parse(const char* c_str, hDictInsert handler = nullptr) { + return parse(c_str, (unsigned int)strlen(c_str), handler); + } + + // parse a UTF-8 JSON string with length + bool parse(const char* pch, unsigned int len, hDictInsert handler = nullptr) { + // reset state before parse + reset(); + + if (!pch || len == 0) { + err_ = JsonbErrType::E_EMPTY_DOCUMENT; + LOG(WARNING) << "empty json string"; + return false; + } + + // parse json using simdjson, return false on exception + try { + simdjson::padded_string json_str {pch, len}; + simdjson::ondemand::document doc = parser_.iterate(json_str); + + // simdjson process top level primitive types specially + // so some repeated code here + switch (doc.type()) { + case simdjson::ondemand::json_type::object: + case simdjson::ondemand::json_type::array: { + parse(doc.get_value(), handler); + break; + } + case simdjson::ondemand::json_type::null: { + if (writer_.writeNull() == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeNull failed"; + } + break; + } + case simdjson::ondemand::json_type::boolean: { + if (writer_.writeBool(doc.get_bool()) == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeBool failed"; + } + break; + } + case simdjson::ondemand::json_type::string: { + write_string(doc.get_string()); + break; + } + case simdjson::ondemand::json_type::number: { + write_number(doc.get_number()); + break; + } + } + + return err_ == JsonbErrType::E_NONE; + } catch (simdjson::simdjson_error& e) { + err_ = JsonbErrType::E_EXCEPTION; + LOG(WARNING) << "simdjson parse exception: " << e.what(); + return false; + } + } + + // parse json, recursively if necessary, by simdjson + // and serialize to binary format by writer + void parse(simdjson::ondemand::value value, hDictInsert handler = nullptr) { + switch (value.type()) { + case simdjson::ondemand::json_type::null: { + if (writer_.writeNull() == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeNull failed"; + } + break; + } + case simdjson::ondemand::json_type::boolean: { + if (writer_.writeBool(value.get_bool()) == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeBool failed"; + } + break; + } + case simdjson::ondemand::json_type::string: { + write_string(value.get_string()); + break; + } + case simdjson::ondemand::json_type::number: { + write_number(value.get_number()); + break; + } + case simdjson::ondemand::json_type::object: { + if (!writer_.writeStartObject()) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeStartObject failed"; + break; + } + + for (auto kv : value.get_object()) { + std::string_view key; + simdjson::error_code e = kv.unescaped_key().get(key); + if (e != simdjson::SUCCESS) { + err_ = JsonbErrType::E_INVALID_KEY_STRING; + LOG(WARNING) << "simdjson get key failed: " << e; + break; + } + + int key_id = -1; + if (handler) { + key_id = handler(key.data(), key.size()); + } + + if (key_id < 0) { + if (writer_.writeKey(key.data(), key.size()) == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeKey failed key: " << key; + break; + } + } else { + if (writer_.writeKey(key_id) == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeKey failed key_id: " << key_id; + break; + } + } + + // parse object value + parse(kv.value(), handler); + if (err_ != JsonbErrType::E_NONE) { + LOG(WARNING) << "parse object value failed"; + break; + } + } + if (err_ != JsonbErrType::E_NONE) { + break; + } + + if (!writer_.writeEndObject()) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeEndObject failed"; + break; + } + + break; + } + case simdjson::ondemand::json_type::array: { + if (!writer_.writeStartArray()) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeStartArray failed"; + break; + } + + for (auto elem : value.get_array()) { + // parse array element + parse(elem.value(), handler); + if (err_ != JsonbErrType::E_NONE) { + LOG(WARNING) << "parse array element failed"; + break; + } + } + if (err_ != JsonbErrType::E_NONE) { + break; + } + + if (!writer_.writeEndArray()) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeEndArray failed"; + break; + } + + break; + } + default: { + err_ = JsonbErrType::E_INVALID_TYPE; + LOG(WARNING) << "unknown value type: "; // << value; + break; + } + + } // end of switch + } + + void write_string(std::string_view str) { + // start writing string + if (!writer_.writeStartString()) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeStartString failed"; + return; + } + + // write string + if (str.size() > 0) { + if (writer_.writeString(str.data(), str.size()) == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeString failed"; + return; + } + } + + // end writing string + if (!writer_.writeEndString()) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeEndString failed"; + return; + } + } + + void write_number(simdjson::ondemand::number num) { + if (num.is_double()) { + if (writer_.writeDouble(num.get_double()) == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeDouble failed"; + return; + } + } else if (num.is_int64() || num.is_uint64()) { + if (num.is_uint64() && num.get_uint64() > std::numeric_limits::max()) { + err_ = JsonbErrType::E_OCTAL_OVERFLOW; + LOG(WARNING) << "overflow number: " << num.get_uint64(); + return; + } + int64_t val = num.is_int64() ? num.get_int64() : num.get_uint64(); + int size = 0; + if (val <= std::numeric_limits::max()) { + size = writer_.writeInt8((int8_t)val); + } else if (val <= std::numeric_limits::max()) { + size = writer_.writeInt16((int16_t)val); + } else if (val <= std::numeric_limits::max()) { + size = writer_.writeInt32((int32_t)val); + } else { // val <= INT64_MAX + size = writer_.writeInt64(val); + } + + if (size == 0) { + err_ = JsonbErrType::E_OUTPUT_FAIL; + LOG(WARNING) << "writeInt failed"; + return; + } + } else { + err_ = JsonbErrType::E_INVALID_NUMBER; + LOG(WARNING) << "invalid number: " << num.as_double(); + return; + } + } + + JsonbWriterT& getWriter() { return writer_; } + + JsonbErrType getErrorCode() { return err_; } + + // clear error code + void clearErr() { err_ = JsonbErrType::E_NONE; } + + void reset() { + writer_.reset(); + clearErr(); + } + +private: + simdjson::ondemand::parser parser_; + JsonbWriterT writer_; + JsonbErrType err_; +}; + +using JsonbParserSIMD = JsonbParserTSIMD; + +} // namespace doris + +#endif // JSONB_JSONBJSONPARSERSIMD_H diff --git a/be/src/util/mem_info.cpp b/be/src/util/mem_info.cpp index 55500feea74419..cccf77c060bc6c 100644 --- a/be/src/util/mem_info.cpp +++ b/be/src/util/mem_info.cpp @@ -106,7 +106,7 @@ void MemInfo::process_minor_gc() { StoragePageCache::instance()->prune(segment_v2::DATA_PAGE); if (config::enable_query_memroy_overcommit) { freed_mem += - MemTrackerLimiter::free_top_overcommit_query(_s_process_full_gc_size - freed_mem); + MemTrackerLimiter::free_top_overcommit_query(_s_process_minor_gc_size - freed_mem); } } diff --git a/be/src/util/simd/vstring_function.h b/be/src/util/simd/vstring_function.h index e48d677eb4be63..3c1a4e7f32010f 100644 --- a/be/src/util/simd/vstring_function.h +++ b/be/src/util/simd/vstring_function.h @@ -43,6 +43,10 @@ static constexpr std::array UTF8_BYTE_LENGTH = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6}; +inline uint8_t get_utf8_byte_length(uint8_t character) { + return UTF8_BYTE_LENGTH[character]; +} + namespace simd { class VStringFunctions { diff --git a/be/src/vec/CMakeLists.txt b/be/src/vec/CMakeLists.txt index 4426ba63a76fce..0d845b19dcd836 100644 --- a/be/src/vec/CMakeLists.txt +++ b/be/src/vec/CMakeLists.txt @@ -89,6 +89,7 @@ set(VEC_FILES data_types/data_type_date_time.cpp data_types/data_type_time_v2.cpp data_types/data_type_jsonb.cpp + data_types/data_type_time.cpp exec/vaggregation_node.cpp exec/varrow_scanner.cpp exec/vsort_node.cpp diff --git a/be/src/vec/columns/column_dictionary.h b/be/src/vec/columns/column_dictionary.h index 729957946f435f..422e2fdfbba12d 100644 --- a/be/src/vec/columns/column_dictionary.h +++ b/be/src/vec/columns/column_dictionary.h @@ -211,6 +211,17 @@ class ColumnDictionary final : public COWHelper> { LOG(FATAL) << "should not call replace_column_data_default in ColumnDictionary"; } + /** + * Just insert dictionary data items, the items will append into _dict. + */ + void insert_many_dict_data(const StringRef* dict_array, uint32_t dict_num) { + _dict.reserve(_dict.size() + dict_num); + for (uint32_t i = 0; i < dict_num; ++i) { + auto value = StringValue(dict_array[i].data, dict_array[i].size); + _dict.insert_value(value); + } + } + void insert_many_dict_data(const int32_t* data_array, size_t start_index, const StringRef* dict_array, size_t data_num, uint32_t dict_num) override { diff --git a/be/src/vec/columns/column_string.h b/be/src/vec/columns/column_string.h index 4bbf77a4779686..0fa80190d86840 100644 --- a/be/src/vec/columns/column_string.h +++ b/be/src/vec/columns/column_string.h @@ -44,7 +44,7 @@ class ColumnString final : public COWHelper { private: // currently Offsets is uint32, if chars.size() exceeds 4G, offset will overflow. // limit chars.size() and check the size when inserting data into ColumnString. - static constexpr size_t MAX_STRING_SIZE = 1024 * 1024 * 1024; + static constexpr size_t MAX_STRING_SIZE = 0xffffffff; friend class COWHelper; friend class OlapBlockDataConvertor; @@ -63,7 +63,7 @@ class ColumnString final : public COWHelper { void ALWAYS_INLINE check_chars_length(size_t length) const { if (UNLIKELY(length > MAX_STRING_SIZE)) { - LOG(FATAL) << "string column length is too large."; + LOG(FATAL) << "string column length is too large: " << length; } } diff --git a/be/src/vec/core/column_with_type_and_name.cpp b/be/src/vec/core/column_with_type_and_name.cpp index e141efe8f3146c..e196935bfffbc4 100644 --- a/be/src/vec/core/column_with_type_and_name.cpp +++ b/be/src/vec/core/column_with_type_and_name.cpp @@ -50,7 +50,7 @@ void ColumnWithTypeAndName::dump_structure(std::ostream& out) const { out << name; if (type) - out << " "; + out << " " << type->get_name(); else out << " nullptr"; diff --git a/be/src/vec/core/decimal_comparison.h b/be/src/vec/core/decimal_comparison.h index 1f2bce42000c46..4c7cfcf765c0e2 100644 --- a/be/src/vec/core/decimal_comparison.h +++ b/be/src/vec/core/decimal_comparison.h @@ -142,9 +142,11 @@ class DecimalComparison { Shift shift; if (decimal0 && decimal1) { - auto result_type = decimal_result_type(*decimal0, *decimal1, false, false); - shift.a = result_type.scale_factor_for(*decimal0, false); - shift.b = result_type.scale_factor_for(*decimal1, false); + using Type = std::conditional_t= sizeof(U), T, U>; + auto type_ptr = decimal_result_type(*decimal0, *decimal1, false, false, false); + const DataTypeDecimal* result_type = check_decimal(*type_ptr); + shift.a = result_type->scale_factor_for(*decimal0, false); + shift.b = result_type->scale_factor_for(*decimal1, false); } else if (decimal0) { shift.b = decimal0->get_scale_multiplier(); } else if (decimal1) { diff --git a/be/src/vec/data_types/data_type_decimal.h b/be/src/vec/data_types/data_type_decimal.h index ea29954293d05a..c8e08303a17da7 100644 --- a/be/src/vec/data_types/data_type_decimal.h +++ b/be/src/vec/data_types/data_type_decimal.h @@ -219,56 +219,30 @@ class DataTypeDecimal final : public IDataType { }; template -typename std::enable_if_t<(sizeof(T) >= sizeof(U)), const DataTypeDecimal> decimal_result_type( - const DataTypeDecimal& tx, const DataTypeDecimal& ty, bool is_multiply, - bool is_divide) { +DataTypePtr decimal_result_type(const DataTypeDecimal& tx, const DataTypeDecimal& ty, + bool is_multiply, bool is_divide, bool is_plus_minus) { + using Type = std::conditional_t= sizeof(U), T, U>; if constexpr (IsDecimalV2 && IsDecimalV2) { - return DataTypeDecimal(max_decimal_precision(), 9); + return std::make_shared>((max_decimal_precision(), 9)); } else { - UInt32 scale = (tx.get_scale() > ty.get_scale() ? tx.get_scale() : ty.get_scale()); + UInt32 scale = std::max(tx.get_scale(), ty.get_scale()); + auto precision = max_decimal_precision(); + + size_t multiply_precision = tx.get_precision() + ty.get_precision(); + size_t divide_precision = tx.get_precision() + ty.get_scale(); + size_t plus_minus_precision = + std::max(tx.get_precision() - tx.get_scale(), ty.get_precision() - ty.get_scale()) + + scale; if (is_multiply) { scale = tx.get_scale() + ty.get_scale(); + precision = std::min(multiply_precision, max_decimal_precision()); } else if (is_divide) { scale = tx.get_scale(); + precision = std::min(divide_precision, max_decimal_precision()); + } else if (is_plus_minus) { + precision = std::min(plus_minus_precision, max_decimal_precision()); } - return DataTypeDecimal(max_decimal_precision(), scale); - } -} - -template -typename std::enable_if_t<(sizeof(T) < sizeof(U)), const DataTypeDecimal> decimal_result_type( - const DataTypeDecimal& tx, const DataTypeDecimal& ty, bool is_multiply, - bool is_divide) { - if constexpr (IsDecimalV2 && IsDecimalV2) { - return DataTypeDecimal(max_decimal_precision(), 9); - } else { - UInt32 scale = (tx.get_scale() > ty.get_scale() ? tx.get_scale() : ty.get_scale()); - if (is_multiply) { - scale = tx.get_scale() + ty.get_scale(); - } else if (is_divide) { - scale = tx.get_scale(); - } - return DataTypeDecimal(max_decimal_precision(), scale); - } -} - -template -const DataTypeDecimal decimal_result_type(const DataTypeDecimal& tx, const DataTypeNumber&, - bool, bool) { - if constexpr (IsDecimalV2 && IsDecimalV2) { - return DataTypeDecimal(max_decimal_precision(), 9); - } else { - return DataTypeDecimal(max_decimal_precision(), tx.get_scale()); - } -} - -template -const DataTypeDecimal decimal_result_type(const DataTypeNumber&, const DataTypeDecimal& ty, - bool, bool) { - if constexpr (IsDecimalV2 && IsDecimalV2) { - return DataTypeDecimal(max_decimal_precision(), 9); - } else { - return DataTypeDecimal(max_decimal_precision(), ty.get_scale()); + return create_decimal(precision, scale, false); } } diff --git a/be/src/vec/data_types/data_type_factory.cpp b/be/src/vec/data_types/data_type_factory.cpp index 85dfc445baceff..e622d979d56969 100644 --- a/be/src/vec/data_types/data_type_factory.cpp +++ b/be/src/vec/data_types/data_type_factory.cpp @@ -20,6 +20,8 @@ #include "vec/data_types/data_type_factory.hpp" +#include "data_type_time.h" + namespace doris::vectorized { DataTypePtr DataTypeFactory::create_data_type(const doris::Field& col_desc) { @@ -92,6 +94,8 @@ DataTypePtr DataTypeFactory::create_data_type(const TypeDescriptor& col_desc, bo break; case TYPE_TIME: case TYPE_TIMEV2: + nested = std::make_shared(); + break; case TYPE_DOUBLE: nested = std::make_shared(); break; diff --git a/be/src/vec/data_types/data_type_time.cpp b/be/src/vec/data_types/data_type_time.cpp new file mode 100644 index 00000000000000..caa4e0530c6e0e --- /dev/null +++ b/be/src/vec/data_types/data_type_time.cpp @@ -0,0 +1,52 @@ +// 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. +// This file is copied from +// https://github.com/ClickHouse/ClickHouse/blob/master/src/DataTypes/DataTypeDateTime.cpp +// and modified by Doris + +#include "vec/data_types/data_type_time.h" + +#include "util/date_func.h" +#include "vec/columns/columns_number.h" + +namespace doris::vectorized { + +bool DataTypeTime::equals(const IDataType& rhs) const { + return typeid(rhs) == typeid(*this); +} + +std::string DataTypeTime::to_string(const IColumn& column, size_t row_num) const { + Float64 float_val = + assert_cast(*column.convert_to_full_column_if_const().get()) + .get_data()[row_num]; + return time_to_buffer_from_double(float_val); +} + +void DataTypeTime::to_string(const IColumn& column, size_t row_num, BufferWritable& ostr) const { + Float64 float_val = + assert_cast(*column.convert_to_full_column_if_const().get()) + .get_data()[row_num]; + std::string time_val = time_to_buffer_from_double(float_val); + // DateTime to_string the end is /0 + ostr.write(time_val.data(), time_val.size()); +} + +MutableColumnPtr DataTypeTime::create_column() const { + return DataTypeNumberBase::create_column(); +} + +} // namespace doris::vectorized diff --git a/be/src/vec/data_types/data_type_time.h b/be/src/vec/data_types/data_type_time.h new file mode 100644 index 00000000000000..b10c9d88d54ddf --- /dev/null +++ b/be/src/vec/data_types/data_type_time.h @@ -0,0 +1,53 @@ +// 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. +// This file is copied from +// https://github.com/ClickHouse/ClickHouse/blob/master/src/DataTypes/DataTypeDateTime.h +// and modified by Doris + +#pragma once + +#include "vec/data_types/data_type_number.h" +#include "vec/data_types/data_type_number_base.h" + +namespace doris::vectorized { + +class DataTypeTime final : public DataTypeNumberBase { +public: + DataTypeTime() = default; + + bool equals(const IDataType& rhs) const override; + + std::string to_string(const IColumn& column, size_t row_num) const override; + + void to_string(const IColumn& column, size_t row_num, BufferWritable& ostr) const override; + + MutableColumnPtr create_column() const override; + + bool can_be_used_as_version() const override { return true; } + bool is_summable() const override { return true; } + bool can_be_used_in_bit_operations() const override { return true; } + bool can_be_used_in_boolean_context() const override { return true; } + bool can_be_inside_nullable() const override { return true; } + + bool can_be_promoted() const override { return true; } + DataTypePtr promote_numeric_type() const override { + using PromotedType = DataTypeNumber>; + return std::make_shared(); + } +}; + +} // namespace doris::vectorized diff --git a/be/src/vec/exec/format/csv/csv_reader.cpp b/be/src/vec/exec/format/csv/csv_reader.cpp index 5a7a05ba0a8b0d..5e3a975341a93f 100644 --- a/be/src/vec/exec/format/csv/csv_reader.cpp +++ b/be/src/vec/exec/format/csv/csv_reader.cpp @@ -109,6 +109,10 @@ Status CsvReader::init_reader(bool is_load) { system_properties.system_type = _params.file_type; system_properties.properties = _params.properties; system_properties.hdfs_params = _params.hdfs_params; + if (_params.__isset.broker_addresses) { + system_properties.broker_addresses.assign(_params.broker_addresses.begin(), + _params.broker_addresses.end()); + } FileDescription file_description; file_description.path = _range.path; diff --git a/be/src/vec/exec/format/json/new_json_reader.cpp b/be/src/vec/exec/format/json/new_json_reader.cpp index 13e86b1ba92555..932a792736032b 100644 --- a/be/src/vec/exec/format/json/new_json_reader.cpp +++ b/be/src/vec/exec/format/json/new_json_reader.cpp @@ -291,6 +291,10 @@ Status NewJsonReader::_open_file_reader() { system_properties.system_type = _params.file_type; system_properties.properties = _params.properties; system_properties.hdfs_params = _params.hdfs_params; + if (_params.__isset.broker_addresses) { + system_properties.broker_addresses.assign(_params.broker_addresses.begin(), + _params.broker_addresses.end()); + } FileDescription file_description; file_description.path = _range.path; diff --git a/be/src/vec/exec/format/orc/vorc_reader.cpp b/be/src/vec/exec/format/orc/vorc_reader.cpp index c6867b0d83575c..0d4fac98f8e1ff 100644 --- a/be/src/vec/exec/format/orc/vorc_reader.cpp +++ b/be/src/vec/exec/format/orc/vorc_reader.cpp @@ -143,6 +143,10 @@ Status OrcReader::init_reader( system_properties.system_type = _scan_params.file_type; system_properties.properties = _scan_params.properties; system_properties.hdfs_params = _scan_params.hdfs_params; + if (_scan_params.__isset.broker_addresses) { + system_properties.broker_addresses.assign(_scan_params.broker_addresses.begin(), + _scan_params.broker_addresses.end()); + } FileDescription file_description; file_description.path = _scan_range.path; diff --git a/be/src/vec/exec/format/parquet/parquet_common.cpp b/be/src/vec/exec/format/parquet/parquet_common.cpp index 98f0a7de1a42dc..5f8656fcd9683f 100644 --- a/be/src/vec/exec/format/parquet/parquet_common.cpp +++ b/be/src/vec/exec/format/parquet/parquet_common.cpp @@ -18,6 +18,7 @@ #include "parquet_common.h" #include "util/coding.h" +#include "vec/columns/column_dictionary.h" #include "vec/data_types/data_type_nullable.h" namespace doris::vectorized { @@ -277,6 +278,36 @@ void Decoder::init(FieldSchema* field_schema, cctz::time_zone* ctz) { } } +Status Decoder::_decode_dict_values(MutableColumnPtr& doris_column, + ColumnSelectVector& select_vector) { + DCHECK(doris_column->is_column_dictionary()); + size_t dict_index = 0; + ColumnSelectVector::DataReadType read_type; + auto& column_data = assert_cast(*doris_column).get_data(); + while (size_t run_length = select_vector.get_next_run(&read_type)) { + switch (read_type) { + case ColumnSelectVector::CONTENT: { + uint32_t* start_index = &_indexes[0]; + column_data.insert(start_index + dict_index, start_index + dict_index + run_length); + dict_index += run_length; + break; + } + case ColumnSelectVector::NULL_DATA: { + doris_column->insert_many_defaults(run_length); + break; + } + case ColumnSelectVector::FILTERED_CONTENT: { + dict_index += run_length; + break; + } + case ColumnSelectVector::FILTERED_NULL: { + break; + } + } + } + return Status::OK(); +} + Status FixLengthDecoder::set_dict(std::unique_ptr& dict, int32_t length, size_t num_values) { if (num_values * _type_length != length) { @@ -321,11 +352,26 @@ Status FixLengthDecoder::decode_values(MutableColumnPtr& doris_column, DataTypeP ColumnSelectVector& select_vector) { size_t non_null_size = select_vector.num_values() - select_vector.num_nulls(); if (_has_dict) { + if (doris_column->is_column_dictionary() && + assert_cast(*doris_column).dict_size() == 0) { + std::vector dict_items; + dict_items.reserve(_dict_items.size()); + for (int i = 0; i < _dict_items.size(); ++i) { + dict_items.emplace_back(_dict_items[i], _type_length); + } + assert_cast(*doris_column) + .insert_many_dict_data(&dict_items[0], dict_items.size()); + } _indexes.resize(non_null_size); _index_batch_decoder->GetBatch(&_indexes[0], non_null_size); } else if (UNLIKELY(_offset + _type_length * non_null_size > _data->size)) { return Status::IOError("Out-of-bounds access in parquet data decoder"); } + + if (doris_column->is_column_dictionary()) { + return _decode_dict_values(doris_column, select_vector); + } + TypeIndex logical_type = remove_nullable(data_type)->get_type_id(); switch (logical_type) { #define DISPATCH(NUMERIC_TYPE, CPP_NUMERIC_TYPE) \ @@ -507,9 +553,19 @@ Status ByteArrayDecoder::decode_values(MutableColumnPtr& doris_column, DataTypeP ColumnSelectVector& select_vector) { size_t non_null_size = select_vector.num_values() - select_vector.num_nulls(); if (_has_dict) { + if (doris_column->is_column_dictionary() && + assert_cast(*doris_column).dict_size() == 0) { + assert_cast(*doris_column) + .insert_many_dict_data(&_dict_items[0], _dict_items.size()); + } _indexes.resize(non_null_size); _index_batch_decoder->GetBatch(&_indexes[0], non_null_size); } + + if (doris_column->is_column_dictionary()) { + return _decode_dict_values(doris_column, select_vector); + } + TypeIndex logical_type = remove_nullable(data_type)->get_type_id(); switch (logical_type) { case TypeIndex::String: diff --git a/be/src/vec/exec/format/parquet/parquet_common.h b/be/src/vec/exec/format/parquet/parquet_common.h index 112be6a223ce56..a3d3e0d8a45790 100644 --- a/be/src/vec/exec/format/parquet/parquet_common.h +++ b/be/src/vec/exec/format/parquet/parquet_common.h @@ -178,11 +178,23 @@ class Decoder { } protected: + /** + * Decode dictionary-coded values into doris_column, ensure that doris_column is ColumnDictI32 type, + * and the coded values must be read into _indexes previously. + */ + Status _decode_dict_values(MutableColumnPtr& doris_column, ColumnSelectVector& select_vector); + int32_t _type_length; Slice* _data = nullptr; uint32_t _offset = 0; FieldSchema* _field_schema = nullptr; std::unique_ptr _decode_params = nullptr; + + // For dictionary encoding + bool _has_dict = false; + std::unique_ptr _dict = nullptr; + std::unique_ptr> _index_batch_decoder = nullptr; + std::vector _indexes; }; template @@ -253,12 +265,9 @@ class FixLengthDecoder final : public Decoder { if (!_has_dict) _offset += _type_length tparquet::Type::type _physical_type; + // For dictionary encoding - bool _has_dict = false; - std::unique_ptr _dict = nullptr; std::vector _dict_items; - std::unique_ptr> _index_batch_decoder = nullptr; - std::vector _indexes; }; template @@ -567,11 +576,7 @@ class ByteArrayDecoder final : public Decoder { ColumnSelectVector& select_vector); // For dictionary encoding - bool _has_dict = false; - std::unique_ptr _dict = nullptr; std::vector _dict_items; - std::unique_ptr> _index_batch_decoder = nullptr; - std::vector _indexes; }; template diff --git a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp index 2d398b54095c7b..e1c2c0af645f58 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.cpp @@ -176,6 +176,7 @@ Status ColumnChunkReader::_decode_dict_page() { header.dictionary_page_header.num_values)); _decoders[static_cast(tparquet::Encoding::RLE_DICTIONARY)] = std::move(page_decoder); + _has_dict = true; return Status::OK(); } @@ -218,6 +219,9 @@ size_t ColumnChunkReader::get_def_levels(level_t* levels, size_t n) { Status ColumnChunkReader::decode_values(MutableColumnPtr& doris_column, DataTypePtr& data_type, ColumnSelectVector& select_vector) { SCOPED_RAW_TIMER(&_statistics.decode_value_time); + if (UNLIKELY(doris_column->is_column_dictionary() && !_has_dict)) { + return Status::IOError("Not dictionary coded"); + } if (UNLIKELY(_remaining_num_values < select_vector.num_values())) { return Status::IOError("Decode too many values in current page"); } diff --git a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h index f76c05b735e83b..1bb1d017ceb91e 100644 --- a/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_column_chunk_reader.h @@ -168,6 +168,7 @@ class ColumnChunkReader { Slice _page_data; std::unique_ptr _decompress_buf; size_t _decompress_buf_size = 0; + bool _has_dict = false; Decoder* _page_decoder = nullptr; // Map: encoding -> Decoder // Plain or Dictionary encoding. If the dictionary grows too big, the encoding will fall back to the plain encoding diff --git a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp index b88f6981b383ef..0c4ff2802c8c73 100644 --- a/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_group_reader.cpp @@ -257,8 +257,14 @@ Status RowGroupReader::_do_lazy_read(Block* block, size_t batch_size, size_t* re // filter data in predicate columns, and remove filter column if (select_vector.has_filter()) { - Block::filter_block(block, _lazy_read_ctx.all_predicate_col_ids, filter_column_id, - origin_column_num); + if (block->columns() == origin_column_num) { + // the whole row group has been filtered by _lazy_read_ctx.vconjunct_ctx, and batch_eof is + // generated from next batch, so the filter column is removed ahead. + DCHECK_EQ(block->rows(), 0); + } else { + Block::filter_block(block, _lazy_read_ctx.all_predicate_col_ids, filter_column_id, + origin_column_num); + } } else { Block::erase_useless_column(block, origin_column_num); } diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.cpp b/be/src/vec/exec/format/parquet/vparquet_reader.cpp index ecf4d2325913c7..7e8635dd5d340a 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.cpp +++ b/be/src/vec/exec/format/parquet/vparquet_reader.cpp @@ -140,6 +140,10 @@ Status ParquetReader::_open_file() { system_properties.system_type = _scan_params.file_type; system_properties.properties = _scan_params.properties; system_properties.hdfs_params = _scan_params.hdfs_params; + if (_scan_params.__isset.broker_addresses) { + system_properties.broker_addresses.assign(_scan_params.broker_addresses.begin(), + _scan_params.broker_addresses.end()); + } FileDescription file_description; file_description.path = _scan_range.path; @@ -151,7 +155,6 @@ Status ParquetReader::_open_file() { _profile, system_properties, file_description, &_file_system, &_file_reader)); } if (_file_metadata == nullptr) { - SCOPED_RAW_TIMER(&_statistics.parse_meta_time); if (_file_reader->size() == 0) { return Status::EndOfFile("Empty Parquet File"); } @@ -350,31 +353,31 @@ Status ParquetReader::get_columns(std::unordered_map 0) { RETURN_IF_ERROR(_next_row_group_reader()); } else { + _current_group_reader.reset(nullptr); + _row_group_eof = true; *read_rows = 0; *eof = true; return Status::OK(); } } DCHECK(_current_group_reader != nullptr); - bool batch_eof = false; { SCOPED_RAW_TIMER(&_statistics.column_read_time); RETURN_IF_ERROR( - _current_group_reader->next_batch(block, _batch_size, read_rows, &batch_eof)); + _current_group_reader->next_batch(block, _batch_size, read_rows, &_row_group_eof)); } - if (batch_eof) { + if (_row_group_eof) { auto column_st = _current_group_reader->statistics(); _column_statistics.merge(column_st); _statistics.lazy_read_filtered_rows += _current_group_reader->lazy_read_filtered_rows(); - Status st = _next_row_group_reader(); - if (st.is()) { + if (_read_row_groups.size() == 0) { *eof = true; - } else if (!st.ok()) { - return st; + } else { + *eof = false; } } return Status::OK(); @@ -399,6 +402,7 @@ RowGroupReader::PositionDeleteContext ParquetReader::_get_position_delete_ctx( Status ParquetReader::_next_row_group_reader() { if (_read_row_groups.empty()) { + _row_group_eof = true; _current_group_reader.reset(nullptr); return Status::EndOfFile("No next RowGroupReader"); } @@ -415,6 +419,7 @@ Status ParquetReader::_next_row_group_reader() { _current_group_reader.reset(new RowGroupReader(_file_reader, _read_columns, row_group_index.row_group_id, row_group, _ctz, position_delete_ctx, _lazy_read_ctx)); + _row_group_eof = false; return _current_group_reader->init(_file_metadata->schema(), candidate_row_ranges, _col_offsets); } diff --git a/be/src/vec/exec/format/parquet/vparquet_reader.h b/be/src/vec/exec/format/parquet/vparquet_reader.h index 2f2d37aec51e8b..ac8eb7fa226c2b 100644 --- a/be/src/vec/exec/format/parquet/vparquet_reader.h +++ b/be/src/vec/exec/format/parquet/vparquet_reader.h @@ -156,7 +156,9 @@ class ParquetReader : public GenericReader { io::FileReaderSPtr _file_reader = nullptr; std::shared_ptr _file_metadata; const tparquet::FileMetaData* _t_metadata; - std::unique_ptr _current_group_reader; + std::unique_ptr _current_group_reader = nullptr; + // read to the end of current reader + bool _row_group_eof = true; int32_t _total_groups; // num of groups(stripes) of a parquet(orc) file std::map _map_column; // column-name <---> column-index std::unordered_map* _colname_to_value_range; diff --git a/be/src/vec/exec/format/table/iceberg_reader.cpp b/be/src/vec/exec/format/table/iceberg_reader.cpp index 332aa44e546cc9..1bdae3a6e27923 100644 --- a/be/src/vec/exec/format/table/iceberg_reader.cpp +++ b/be/src/vec/exec/format/table/iceberg_reader.cpp @@ -26,10 +26,16 @@ namespace doris::vectorized { const int64_t MIN_SUPPORT_DELETE_FILES_VERSION = 2; const std::string ICEBERG_ROW_POS = "pos"; +const std::string ICEBERG_FILE_PATH = "file_path"; IcebergTableReader::IcebergTableReader(GenericReader* file_format_reader, RuntimeProfile* profile, - RuntimeState* state, const TFileScanRangeParams& params) - : TableFormatReader(file_format_reader), _profile(profile), _state(state), _params(params) { + RuntimeState* state, const TFileScanRangeParams& params, + const TFileRangeDesc& range) + : TableFormatReader(file_format_reader), + _profile(profile), + _state(state), + _params(params), + _range(range) { static const char* iceberg_profile = "IcebergProfile"; ADD_TIMER(_profile, iceberg_profile); _iceberg_profile.num_delete_files = @@ -38,12 +44,8 @@ IcebergTableReader::IcebergTableReader(GenericReader* file_format_reader, Runtim ADD_CHILD_COUNTER(_profile, "NumDeleteRows", TUnit::UNIT, iceberg_profile); _iceberg_profile.delete_files_read_time = ADD_CHILD_TIMER(_profile, "DeleteFileReadTime", iceberg_profile); -} - -IcebergTableReader::~IcebergTableReader() { - if (_data_path_conjunct_ctx != nullptr) { - _data_path_conjunct_ctx->close(_state); - } + _iceberg_profile.delete_rows_sort_time = + ADD_CHILD_TIMER(_profile, "DeleteRowsSortTime", iceberg_profile); } Status IcebergTableReader::get_next_block(Block* block, size_t* read_rows, bool* eof) { @@ -76,15 +78,6 @@ Status IcebergTableReader::init_row_filters(const TFileRangeDesc& range) { } if (delete_file_type == POSITION_DELETE) { // position delete - SCOPED_TIMER(_iceberg_profile.delete_files_read_time); - auto row_desc = RowDescriptor(_state->desc_tbl(), - std::vector({table_desc.delete_table_tuple_id}), - std::vector({false})); - RETURN_IF_ERROR(VExpr::create_expr_tree(_state->obj_pool(), table_desc.file_select_conjunct, - &_data_path_conjunct_ctx)); - RETURN_IF_ERROR(_data_path_conjunct_ctx->prepare(_state, row_desc)); - RETURN_IF_ERROR(_data_path_conjunct_ctx->open(_state)); - ParquetReader* parquet_reader = (ParquetReader*)(_file_format_reader.get()); RowRange whole_range = parquet_reader->get_whole_range(); bool init_schema = false; @@ -100,6 +93,7 @@ Status IcebergTableReader::init_row_filters(const TFileRangeDesc& range) { delete_rows_iter++; continue; } + SCOPED_TIMER(_iceberg_profile.delete_files_read_time); std::vector& delete_rows = *delete_rows_iter; TFileRangeDesc delete_range; delete_range.path = delete_file.path; @@ -112,49 +106,90 @@ Status IcebergTableReader::init_row_filters(const TFileRangeDesc& range) { delete_reader.get_parsed_schema(&delete_file_col_names, &delete_file_col_types); init_schema = true; } - RETURN_IF_ERROR(delete_reader.init_reader(delete_file_col_names, nullptr, - _data_path_conjunct_ctx, false)); + std::string data_file_path = _range.path; + // the path in _range is remove the namenode prefix, + // and the file_path in delete file is full path, so we should add it back. + if (_params.__isset.hdfs_params && _params.hdfs_params.__isset.fs_name) { + std::string fs_name = _params.hdfs_params.fs_name; + if (!starts_with(data_file_path, fs_name)) { + data_file_path = fs_name + data_file_path; + } + } + RETURN_IF_ERROR( + delete_reader.init_reader(delete_file_col_names, nullptr, nullptr, false)); std::unordered_map> partition_columns; std::unordered_map missing_columns; delete_reader.set_fill_columns(partition_columns, missing_columns); bool eof = false; + // We can only know whether a parquet file is encoded in dictionary after reading the first block, + // so we assume it dictionary encoded first, and reset it false if error thrown. + bool dictionary_coded = true; while (!eof) { Block block = Block(); for (int i = 0; i < delete_file_col_names.size(); ++i) { DataTypePtr data_type = DataTypeFactory::instance().create_data_type( - delete_file_col_types[i], true); - MutableColumnPtr data_column = data_type->create_column(); - block.insert(ColumnWithTypeAndName(std::move(data_column), data_type, - delete_file_col_names[i])); + delete_file_col_types[i], false); + if (delete_file_col_names[i] == ICEBERG_FILE_PATH && dictionary_coded) { + // the dictionary data in ColumnDictI32 is referenced by StringValue, it does keep + // the dictionary data in its life circle, so the upper caller should keep the + // dictionary data alive after ColumnDictI32. + MutableColumnPtr dict_column = ColumnDictI32::create(); + block.insert(ColumnWithTypeAndName(std::move(dict_column), data_type, + delete_file_col_names[i])); + } else { + MutableColumnPtr data_column = data_type->create_column(); + block.insert(ColumnWithTypeAndName(std::move(data_column), data_type, + delete_file_col_names[i])); + } } eof = false; size_t read_rows = 0; - RETURN_IF_ERROR(delete_reader.get_next_block(&block, &read_rows, &eof)); + Status st = delete_reader.get_next_block(&block, &read_rows, &eof); + if (!st.ok()) { + if (st.to_string() == "[IO_ERROR]Not dictionary coded") { + dictionary_coded = false; + continue; + } + return st; + } if (read_rows > 0) { - auto& pos_type_column = block.get_by_name(ICEBERG_ROW_POS); - ColumnPtr pos_column = pos_type_column.column; - using ColumnType = typename PrimitiveTypeTraits::ColumnType; - if (pos_type_column.type->is_nullable()) { - pos_column = assert_cast(*pos_column) - .get_nested_column_ptr(); + ColumnPtr path_column = block.get_by_name(ICEBERG_FILE_PATH).column; + DCHECK_EQ(path_column->size(), read_rows); + std::pair path_range; + if (dictionary_coded) { + path_range = _binary_search(assert_cast(*path_column), + data_file_path); + } else { + path_range = _binary_search(assert_cast(*path_column), + data_file_path); } - const int64_t* src_data = - assert_cast(*pos_column).get_data().data(); - const int64_t* src_data_end = src_data + read_rows; - const int64_t* cpy_start = - std::lower_bound(src_data, src_data_end, whole_range.first_row); - const int64_t* cpy_end = - std::lower_bound(cpy_start, src_data_end, whole_range.last_row); - int64_t cpy_count = cpy_end - cpy_start; - - if (cpy_count > 0) { - int64_t origin_size = delete_rows.size(); - delete_rows.resize(origin_size + cpy_count); - int64_t* dest_position = &delete_rows[origin_size]; - memcpy(dest_position, cpy_start, cpy_count * sizeof(int64_t)); - num_delete_rows += cpy_count; + + int skip_count = path_range.first; + int valid_count = path_range.second; + if (valid_count > 0) { + // delete position + ColumnPtr pos_column = block.get_by_name(ICEBERG_ROW_POS).column; + CHECK_EQ(pos_column->size(), read_rows); + using ColumnType = typename PrimitiveTypeTraits::ColumnType; + const int64_t* src_data = + assert_cast(*pos_column).get_data().data() + + skip_count; + const int64_t* src_data_end = src_data + valid_count; + const int64_t* cpy_start = + std::lower_bound(src_data, src_data_end, whole_range.first_row); + const int64_t* cpy_end = + std::lower_bound(cpy_start, src_data_end, whole_range.last_row); + int64_t cpy_count = cpy_end - cpy_start; + + if (cpy_count > 0) { + int64_t origin_size = delete_rows.size(); + delete_rows.resize(origin_size + cpy_count); + int64_t* dest_position = &delete_rows[origin_size]; + memcpy(dest_position, cpy_start, cpy_count * sizeof(int64_t)); + num_delete_rows += cpy_count; + } } } } @@ -168,6 +203,7 @@ Status IcebergTableReader::init_row_filters(const TFileRangeDesc& range) { iter++; } } + SCOPED_TIMER(_iceberg_profile.delete_rows_sort_time); _merge_sort(delete_rows_list, num_delete_rows); parquet_reader->set_delete_rows(&_delete_rows); COUNTER_UPDATE(_iceberg_profile.num_delete_rows, num_delete_rows); @@ -178,6 +214,64 @@ Status IcebergTableReader::init_row_filters(const TFileRangeDesc& range) { return Status::OK(); } +std::pair IcebergTableReader::_binary_search(const ColumnDictI32& file_path_column, + const std::string& data_file_path) { + size_t read_rows = file_path_column.get_data().size(); + + int data_file_code = file_path_column.find_code(StringValue(data_file_path)); + if (data_file_code == -2) { // -1 is null code + return std::make_pair(read_rows, 0); + } + + const int* coded_path = file_path_column.get_data().data(); + const int* coded_path_end = coded_path + read_rows; + const int* path_start = std::lower_bound(coded_path, coded_path_end, data_file_code); + const int* path_end = std::lower_bound(path_start, coded_path_end, data_file_code + 1); + int skip_count = path_start - coded_path; + int valid_count = path_end - path_start; + + return std::make_pair(skip_count, valid_count); +} + +std::pair IcebergTableReader::_binary_search(const ColumnString& file_path_column, + const std::string& data_file_path) { + const int read_rows = file_path_column.size(); + if (read_rows == 0) { + return std::make_pair(0, 0); + } + StringRef data_file(data_file_path); + + int left = 0; + int right = read_rows - 1; + if (file_path_column.get_data_at(left) > data_file || + file_path_column.get_data_at(right) < data_file) { + return std::make_pair(read_rows, 0); + } + while (left < right) { + int mid = (left + right) / 2; + if (file_path_column.get_data_at(mid) < data_file) { + left = mid; + } else { + right = mid; + } + } + if (file_path_column.get_data_at(left) == data_file) { + int start = left; + int end = read_rows - 1; + while (start < end) { + int pivot = (start + end) / 2; + if (file_path_column.get_data_at(pivot) > data_file) { + end = pivot; + } else { + start = pivot; + } + } + return std::make_pair(left, end - left + 1); + } else { + return std::make_pair(read_rows, 0); + } +} + void IcebergTableReader::_merge_sort(std::list>& delete_rows_list, int64_t num_delete_rows) { if (delete_rows_list.empty()) { diff --git a/be/src/vec/exec/format/table/iceberg_reader.h b/be/src/vec/exec/format/table/iceberg_reader.h index 0a9d4ef71fead5..d689fbcf51c060 100644 --- a/be/src/vec/exec/format/table/iceberg_reader.h +++ b/be/src/vec/exec/format/table/iceberg_reader.h @@ -20,6 +20,7 @@ #include #include "table_format_reader.h" +#include "vec/columns/column_dictionary.h" #include "vec/exec/format/generic_reader.h" #include "vec/exec/format/parquet/parquet_common.h" #include "vec/exprs/vexpr.h" @@ -29,8 +30,9 @@ namespace doris::vectorized { class IcebergTableReader : public TableFormatReader { public: IcebergTableReader(GenericReader* file_format_reader, RuntimeProfile* profile, - RuntimeState* state, const TFileScanRangeParams& params); - ~IcebergTableReader() override; + RuntimeState* state, const TFileScanRangeParams& params, + const TFileRangeDesc& range); + ~IcebergTableReader() override = default; Status init_row_filters(const TFileRangeDesc& range) override; @@ -51,14 +53,34 @@ class IcebergTableReader : public TableFormatReader { RuntimeProfile::Counter* num_delete_files; RuntimeProfile::Counter* num_delete_rows; RuntimeProfile::Counter* delete_files_read_time; + RuntimeProfile::Counter* delete_rows_sort_time; }; + /** + * https://iceberg.apache.org/spec/#position-delete-files + * The rows in the delete file must be sorted by file_path then position to optimize filtering rows while scanning. + * Sorting by file_path allows filter pushdown by file in columnar storage formats. + * Sorting by position allows filtering rows while scanning, to avoid keeping deletes in memory. + * + * So, use merge-sort to merge delete rows from different files. + */ void _merge_sort(std::list>& delete_rows_list, int64_t num_delete_rows); + /** + * Delete rows is sorted by file_path, using binary-search to locate the right delete rows for current data file. + * @return a pair of \, + * and the range of [skip_count, skip_count + valid_count) is the delete rows for current data file. + */ + std::pair _binary_search(const ColumnDictI32& file_path_column, + const std::string& data_file_path); + + std::pair _binary_search(const ColumnString& file_path_column, + const std::string& data_file_path); + RuntimeProfile* _profile; RuntimeState* _state; const TFileScanRangeParams& _params; - VExprContext* _data_path_conjunct_ctx = nullptr; + const TFileRangeDesc& _range; IcebergProfile _iceberg_profile; std::vector _delete_rows; }; diff --git a/be/src/vec/exec/join/vhash_join_node.cpp b/be/src/vec/exec/join/vhash_join_node.cpp index 70bf40cce0f3fe..a71a6c931c8baa 100644 --- a/be/src/vec/exec/join/vhash_join_node.cpp +++ b/be/src/vec/exec/join/vhash_join_node.cpp @@ -460,6 +460,7 @@ void HashJoinNode::prepare_for_next() { Status HashJoinNode::pull(doris::RuntimeState* /*state*/, vectorized::Block* output_block, bool* eos) { + SCOPED_TIMER(_probe_timer); if (_short_circuit_for_null_in_probe_side) { // If we use a short-circuit strategy for null value in build side (e.g. if join operator is // NULL_AWARE_LEFT_ANTI_JOIN), we should return empty block directly. @@ -550,7 +551,7 @@ Status HashJoinNode::pull(doris::RuntimeState* /*state*/, vectorized::Block* out Status HashJoinNode::push(RuntimeState* /*state*/, vectorized::Block* input_block, bool eos) { _probe_eos = eos; if (input_block->rows() > 0) { - COUNTER_UPDATE(_probe_rows_counter, _probe_block.rows()); + COUNTER_UPDATE(_probe_rows_counter, input_block->rows()); int probe_expr_ctxs_sz = _probe_expr_ctxs.size(); _probe_columns.resize(probe_expr_ctxs_sz); @@ -585,7 +586,6 @@ Status HashJoinNode::push(RuntimeState* /*state*/, vectorized::Block* input_bloc Status HashJoinNode::get_next(RuntimeState* state, Block* output_block, bool* eos) { INIT_AND_SCOPE_GET_NEXT_SPAN(state->get_tracer(), _get_next_span, "HashJoinNode::get_next"); SCOPED_TIMER(_runtime_profile->total_time_counter()); - SCOPED_TIMER(_probe_timer); if (_short_circuit_for_null_in_probe_side) { // If we use a short-circuit strategy for null value in build side (e.g. if join operator is @@ -659,6 +659,7 @@ void HashJoinNode::_prepare_probe_block() { Status HashJoinNode::open(RuntimeState* state) { START_AND_SCOPE_SPAN(state->get_tracer(), span, "HashJoinNode::open"); + SCOPED_TIMER(_runtime_profile->total_time_counter()); RETURN_IF_ERROR(VJoinNodeBase::open(state)); SCOPED_CONSUME_MEM_TRACKER(mem_tracker_growh()); RETURN_IF_CANCELLED(state); diff --git a/be/src/vec/exec/scan/new_jdbc_scan_node.cpp b/be/src/vec/exec/scan/new_jdbc_scan_node.cpp index f30596d1e30db6..73b5f633135447 100644 --- a/be/src/vec/exec/scan/new_jdbc_scan_node.cpp +++ b/be/src/vec/exec/scan/new_jdbc_scan_node.cpp @@ -25,7 +25,8 @@ NewJdbcScanNode::NewJdbcScanNode(ObjectPool* pool, const TPlanNode& tnode, : VScanNode(pool, tnode, descs), _table_name(tnode.jdbc_scan_node.table_name), _tuple_id(tnode.jdbc_scan_node.tuple_id), - _query_string(tnode.jdbc_scan_node.query_string) { + _query_string(tnode.jdbc_scan_node.query_string), + _table_type(tnode.jdbc_scan_node.table_type) { _output_tuple_id = tnode.jdbc_scan_node.tuple_id; } @@ -49,8 +50,8 @@ Status NewJdbcScanNode::_init_scanners(std::list* scanners) { if (_eos == true) { return Status::OK(); } - NewJdbcScanner* scanner = - new NewJdbcScanner(_state, this, _limit_per_scanner, _tuple_id, _query_string); + NewJdbcScanner* scanner = new NewJdbcScanner(_state, this, _limit_per_scanner, _tuple_id, + _query_string, _table_type); _scanner_pool.add(scanner); RETURN_IF_ERROR(scanner->prepare(_state, _vconjunct_ctx_ptr.get())); scanners->push_back(static_cast(scanner)); diff --git a/be/src/vec/exec/scan/new_jdbc_scan_node.h b/be/src/vec/exec/scan/new_jdbc_scan_node.h index d527f24b12b490..1cc34e83f0f594 100644 --- a/be/src/vec/exec/scan/new_jdbc_scan_node.h +++ b/be/src/vec/exec/scan/new_jdbc_scan_node.h @@ -37,6 +37,7 @@ class NewJdbcScanNode : public VScanNode { std::string _table_name; TupleId _tuple_id; std::string _query_string; + TOdbcTableType::type _table_type; }; } // namespace vectorized } // namespace doris diff --git a/be/src/vec/exec/scan/new_jdbc_scanner.cpp b/be/src/vec/exec/scan/new_jdbc_scanner.cpp index ef9004530d927c..edfb84373323f5 100644 --- a/be/src/vec/exec/scan/new_jdbc_scanner.cpp +++ b/be/src/vec/exec/scan/new_jdbc_scanner.cpp @@ -19,13 +19,15 @@ namespace doris::vectorized { NewJdbcScanner::NewJdbcScanner(RuntimeState* state, NewJdbcScanNode* parent, int64_t limit, - const TupleId& tuple_id, const std::string& query_string) + const TupleId& tuple_id, const std::string& query_string, + TOdbcTableType::type table_type) : VScanner(state, static_cast(parent), limit), _is_init(false), _jdbc_eos(false), _tuple_id(tuple_id), _query_string(query_string), - _tuple_desc(nullptr) {} + _tuple_desc(nullptr), + _table_type(table_type) {} Status NewJdbcScanner::prepare(RuntimeState* state, VExprContext** vconjunct_ctx_ptr) { VLOG_CRITICAL << "NewJdbcScanner::Prepare"; @@ -63,6 +65,7 @@ Status NewJdbcScanner::prepare(RuntimeState* state, VExprContext** vconjunct_ctx _jdbc_param.passwd = jdbc_table->jdbc_passwd(); _jdbc_param.tuple_desc = _tuple_desc; _jdbc_param.query_string = std::move(_query_string); + _jdbc_param.table_type = _table_type; _jdbc_connector.reset(new (std::nothrow) JdbcConnector(_jdbc_param)); if (_jdbc_connector == nullptr) { @@ -122,7 +125,7 @@ Status NewJdbcScanner::_get_block_impl(RuntimeState* state, Block* block, bool* } } - RETURN_IF_ERROR(_jdbc_connector->get_next(&_jdbc_eos, columns, state->batch_size())); + RETURN_IF_ERROR(_jdbc_connector->get_next(&_jdbc_eos, columns, block, state->batch_size())); if (_jdbc_eos == true) { if (block->rows() == 0) { diff --git a/be/src/vec/exec/scan/new_jdbc_scanner.h b/be/src/vec/exec/scan/new_jdbc_scanner.h index f5584cd5d01bb0..9fa17c4116fdd8 100644 --- a/be/src/vec/exec/scan/new_jdbc_scanner.h +++ b/be/src/vec/exec/scan/new_jdbc_scanner.h @@ -26,12 +26,12 @@ namespace vectorized { class NewJdbcScanner : public VScanner { public: NewJdbcScanner(RuntimeState* state, NewJdbcScanNode* parent, int64_t limit, - const TupleId& tuple_id, const std::string& query_string); + const TupleId& tuple_id, const std::string& query_string, + TOdbcTableType::type table_type); Status open(RuntimeState* state) override; Status close(RuntimeState* state) override; -public: Status prepare(RuntimeState* state, VExprContext** vconjunct_ctx_ptr); protected: @@ -48,6 +48,8 @@ class NewJdbcScanner : public VScanner { std::string _query_string; // Descriptor of tuples read from JDBC table. const TupleDescriptor* _tuple_desc; + // the sql query database type: like mysql, PG... + TOdbcTableType::type _table_type; // Scanner of JDBC. std::unique_ptr _jdbc_connector; JdbcConnectorParam _jdbc_param; diff --git a/be/src/vec/exec/scan/new_olap_scan_node.cpp b/be/src/vec/exec/scan/new_olap_scan_node.cpp index 07e933c4adea67..891d53cf53bdb6 100644 --- a/be/src/vec/exec/scan/new_olap_scan_node.cpp +++ b/be/src/vec/exec/scan/new_olap_scan_node.cpp @@ -233,6 +233,20 @@ Status NewOlapScanNode::_build_key_ranges_and_filters() { } } + for (auto& iter : _compound_value_ranges) { + std::vector filters; + std::visit( + [&](auto&& range) { + if (range.is_in_compound_value_range()) { + range.to_condition_in_compound(filters); + } + }, + iter); + for (const auto& filter : filters) { + _compound_filters.push_back(filter); + } + } + // Append value ranges in "_not_in_value_ranges" for (auto& range : _not_in_value_ranges) { std::visit([&](auto&& the_range) { the_range.to_in_condition(_olap_filters, false); }, @@ -385,6 +399,8 @@ Status NewOlapScanNode::_init_scanners(std::list* scanners) { NewOlapScanner* scanner = new NewOlapScanner( _state, this, _limit_per_scanner, _olap_scan_node.is_preaggregation, _need_agg_finalize, *scan_range, _scanner_profile.get()); + + scanner->set_compound_filters(_compound_filters); // add scanner to pool before doing prepare. // so that scanner can be automatically deconstructed if prepare failed. _scanner_pool.add(scanner); diff --git a/be/src/vec/exec/scan/new_olap_scan_node.h b/be/src/vec/exec/scan/new_olap_scan_node.h index cf477bf8513dd2..3d37f2c5d8faea 100644 --- a/be/src/vec/exec/scan/new_olap_scan_node.h +++ b/be/src/vec/exec/scan/new_olap_scan_node.h @@ -65,6 +65,9 @@ class NewOlapScanNode : public VScanNode { std::vector> _scan_ranges; OlapScanKeys _scan_keys; std::vector _olap_filters; + // _compound_filters store conditions in the one compound relationship in conjunct expr tree except leaf node of `and` node, + // such as: "(a or b) and (c or d)", conditions for a,b,c,d will be stored + std::vector _compound_filters; private: std::unique_ptr _segment_profile; diff --git a/be/src/vec/exec/scan/new_olap_scanner.cpp b/be/src/vec/exec/scan/new_olap_scanner.cpp index fe1a010df47c7f..93919e2d415b11 100644 --- a/be/src/vec/exec/scan/new_olap_scanner.cpp +++ b/be/src/vec/exec/scan/new_olap_scanner.cpp @@ -127,6 +127,10 @@ Status NewOlapScanner::open(RuntimeState* state) { return Status::OK(); } +void NewOlapScanner::set_compound_filters(const std::vector& compound_filters) { + _compound_filters = compound_filters; +} + // it will be called under tablet read lock because capture rs readers need Status NewOlapScanner::_init_tablet_reader_params( const std::vector& key_ranges, const std::vector& filters, @@ -168,11 +172,18 @@ Status NewOlapScanner::_init_tablet_reader_params( real_parent->_olap_scan_node.push_down_agg_type_opt; } _tablet_reader_params.version = Version(0, _version); + _tablet_reader_params.remaining_vconjunct_root = + (_vconjunct_ctx == nullptr) ? nullptr : _vconjunct_ctx->root(); // Condition for (auto& filter : filters) { _tablet_reader_params.conditions.push_back(filter); } + + std::copy(_compound_filters.cbegin(), _compound_filters.cend(), + std::inserter(_tablet_reader_params.conditions_except_leafnode_of_andnode, + _tablet_reader_params.conditions_except_leafnode_of_andnode.begin())); + std::copy(filter_predicates.bloom_filters.cbegin(), filter_predicates.bloom_filters.cend(), std::inserter(_tablet_reader_params.bloom_filters, _tablet_reader_params.bloom_filters.begin())); diff --git a/be/src/vec/exec/scan/new_olap_scanner.h b/be/src/vec/exec/scan/new_olap_scanner.h index 5f253ea93f7a63..b15376dd9b7965 100644 --- a/be/src/vec/exec/scan/new_olap_scanner.h +++ b/be/src/vec/exec/scan/new_olap_scanner.h @@ -49,6 +49,8 @@ class NewOlapScanner : public VScanner { const std::string& scan_disk() const { return _tablet->data_dir()->path(); } + void set_compound_filters(const std::vector& compound_filters); + protected: Status _get_block_impl(RuntimeState* state, Block* block, bool* eos) override; void _update_counters_before_close() override; @@ -75,6 +77,7 @@ class NewOlapScanner : public VScanner { std::vector _return_columns; std::unordered_set _tablet_columns_convert_to_null_set; + std::vector _compound_filters; // ========= profiles ========== int64_t _compressed_bytes_read = 0; diff --git a/be/src/vec/exec/scan/pip_scanner_context.h b/be/src/vec/exec/scan/pip_scanner_context.h index d595396c727a4d..20d45aca9515ad 100644 --- a/be/src/vec/exec/scan/pip_scanner_context.h +++ b/be/src/vec/exec/scan/pip_scanner_context.h @@ -35,9 +35,13 @@ class PipScannerContext : public vectorized::ScannerContext { void _update_block_queue_empty() override { _blocks_queue_empty = _blocks_queue.empty(); } + Status get_block_from_queue(vectorized::Block** block, bool* eos, bool wait = false) override { + return vectorized::ScannerContext::get_block_from_queue(block, eos, false); + } + // We should make those method lock free. bool done() override { return _is_finished || _should_stop || _status_error; } - bool can_finish() override { return _num_running_scanners == 0 && _num_scheduling_ctx == 0; } + bool no_schedule() override { return _num_running_scanners == 0 && _num_scheduling_ctx == 0; } bool empty_in_queue() override { return _blocks_queue_empty; } private: diff --git a/be/src/vec/exec/scan/scanner_context.cpp b/be/src/vec/exec/scan/scanner_context.cpp index 19407589079c65..29b379ecfedd9b 100644 --- a/be/src/vec/exec/scan/scanner_context.cpp +++ b/be/src/vec/exec/scan/scanner_context.cpp @@ -133,7 +133,7 @@ Status ScannerContext::get_block_from_queue(vectorized::Block** block, bool* eos _state->exec_env()->scanner_scheduler()->submit(this); } // Wait for block from queue - { + if (wait) { SCOPED_TIMER(_parent->_scanner_wait_batch_timer); _blocks_queue_added_cv.wait(l, [this]() { return !_blocks_queue.empty() || _is_finished || !_process_status.ok() || @@ -240,7 +240,7 @@ void ScannerContext::clear_and_join() { return; } -bool ScannerContext::can_finish() { +bool ScannerContext::no_schedule() { std::unique_lock l(_transfer_lock); return _num_running_scanners == 0 && _num_scheduling_ctx == 0; } @@ -263,9 +263,11 @@ void ScannerContext::push_back_scanner_and_reschedule(VScanner* scanner) { } std::lock_guard l(_transfer_lock); - _num_running_scanners--; _num_scheduling_ctx++; - _state->exec_env()->scanner_scheduler()->submit(this); + auto submit_st = _state->exec_env()->scanner_scheduler()->submit(this); + if (!submit_st.ok()) { + _num_scheduling_ctx--; + } // Notice that after calling "_scanners.push_front(scanner)", there may be other ctx in scheduler // to schedule that scanner right away, and in that schedule run, the scanner may be marked as closed @@ -274,14 +276,16 @@ void ScannerContext::push_back_scanner_and_reschedule(VScanner* scanner) { // same scanner. if (scanner->need_to_close() && scanner->set_counted_down() && (--_num_unfinished_scanners) == 0) { - _is_finished = true; // ATTN: this 2 counters will be set at close() again, which is the final values. // But we set them here because the counter set at close() can not send to FE's profile. // So we set them here, and the counter value may be little less than final values. COUNTER_SET(_parent->_scanner_sched_counter, _num_scanner_scheduling); COUNTER_SET(_parent->_scanner_ctx_sched_counter, _num_ctx_scheduling); + _is_finished = true; _blocks_queue_added_cv.notify_one(); } + // In pipeline engine, doris will close scanners when `no_schedule`. + _num_running_scanners--; _ctx_finish_cv.notify_one(); } diff --git a/be/src/vec/exec/scan/scanner_context.h b/be/src/vec/exec/scan/scanner_context.h index 2a2d0ffcf19ec5..c6c6afe1e31465 100644 --- a/be/src/vec/exec/scan/scanner_context.h +++ b/be/src/vec/exec/scan/scanner_context.h @@ -78,7 +78,7 @@ class ScannerContext { // Get next block from blocks queue. Called by ScanNode // Set eos to true if there is no more data to read. // And if eos is true, the block returned must be nullptr. - Status get_block_from_queue(vectorized::Block** block, bool* eos, bool wait = true); + virtual Status get_block_from_queue(vectorized::Block** block, bool* eos, bool wait = true); // When a scanner complete a scan, this method will be called // to return the scanner to the list for next scheduling. @@ -118,7 +118,7 @@ class ScannerContext { void clear_and_join(); - virtual bool can_finish(); + virtual bool no_schedule(); std::string debug_string(); diff --git a/be/src/vec/exec/scan/vfile_scanner.cpp b/be/src/vec/exec/scan/vfile_scanner.cpp index 81cfe7fbd8c801..ae22fd77bbd79c 100644 --- a/be/src/vec/exec/scan/vfile_scanner.cpp +++ b/be/src/vec/exec/scan/vfile_scanner.cpp @@ -494,8 +494,8 @@ Status VFileScanner::_get_next_reader() { if (range.__isset.table_format_params && range.table_format_params.table_format_type == "iceberg") { IcebergTableReader* iceberg_reader = new IcebergTableReader( - (GenericReader*)parquet_reader, _profile, _state, _params); - iceberg_reader->init_row_filters(range); + (GenericReader*)parquet_reader, _profile, _state, _params, range); + RETURN_IF_ERROR(iceberg_reader->init_row_filters(range)); _cur_reader.reset((GenericReader*)iceberg_reader); } else { _cur_reader.reset((GenericReader*)parquet_reader); @@ -655,8 +655,27 @@ Status VFileScanner::_init_expr_ctxes() { } } + // set column name to default value expr map + for (auto slot_desc : _real_tuple_desc->slots()) { + if (!slot_desc->is_materialized()) { + continue; + } + vectorized::VExprContext* ctx = nullptr; + auto it = _params.default_value_of_src_slot.find(slot_desc->id()); + if (it != std::end(_params.default_value_of_src_slot)) { + if (!it->second.nodes.empty()) { + RETURN_IF_ERROR( + vectorized::VExpr::create_expr_tree(_state->obj_pool(), it->second, &ctx)); + RETURN_IF_ERROR(ctx->prepare(_state, *_default_val_row_desc)); + RETURN_IF_ERROR(ctx->open(_state)); + } + // if expr is empty, the default value will be null + _col_default_value_ctx.emplace(slot_desc->col_name(), ctx); + } + } + if (_is_load) { - // follow desc expr map and src default value expr map is only for load task. + // follow desc expr map is only for load task. bool has_slot_id_map = _params.__isset.dest_sid_to_src_sid_without_trans; int idx = 0; for (auto slot_desc : _output_tuple_desc->slots()) { @@ -695,24 +714,6 @@ Status VFileScanner::_init_expr_ctxes() { } } } - - for (auto slot_desc : _real_tuple_desc->slots()) { - if (!slot_desc->is_materialized()) { - continue; - } - vectorized::VExprContext* ctx = nullptr; - auto it = _params.default_value_of_src_slot.find(slot_desc->id()); - if (it != std::end(_params.default_value_of_src_slot)) { - if (!it->second.nodes.empty()) { - RETURN_IF_ERROR(vectorized::VExpr::create_expr_tree(_state->obj_pool(), - it->second, &ctx)); - RETURN_IF_ERROR(ctx->prepare(_state, *_default_val_row_desc)); - RETURN_IF_ERROR(ctx->open(_state)); - } - // if expr is empty, the default value will be null - _col_default_value_ctx.emplace(slot_desc->col_name(), ctx); - } - } } return Status::OK(); } diff --git a/be/src/vec/exec/scan/vscan_node.cpp b/be/src/vec/exec/scan/vscan_node.cpp index b0c495799bf713..2445a5d9c9bddb 100644 --- a/be/src/vec/exec/scan/vscan_node.cpp +++ b/be/src/vec/exec/scan/vscan_node.cpp @@ -504,6 +504,15 @@ Status VScanNode::_normalize_predicate(VExpr* conjunct_expr_root, VExpr** output }, *range); } + + if (pdt == PushDownType::UNACCEPTABLE && + TExprNodeType::COMPOUND_PRED == cur_expr->node_type()) { + _normalize_compound_predicate(cur_expr, *(_vconjunct_ctx_ptr.get()), &pdt, + in_predicate_checker, eq_predicate_checker); + *output_expr = conjunct_expr_root; // remaining in conjunct tree + return Status::OK(); + } + if (pdt == PushDownType::ACCEPTABLE && _is_key_column(slot->col_name())) { *output_expr = nullptr; return Status::OK(); @@ -910,6 +919,104 @@ Status VScanNode::_normalize_noneq_binary_predicate(VExpr* expr, VExprContext* e return Status::OK(); } +Status VScanNode::_normalize_compound_predicate( + vectorized::VExpr* expr, VExprContext* expr_ctx, PushDownType* pdt, + const std::function&, const VSlotRef**, VExpr**)>& + in_predicate_checker, + const std::function&, const VSlotRef**, VExpr**)>& + eq_predicate_checker) { + if (TExprNodeType::COMPOUND_PRED == expr->node_type()) { + auto compound_fn_name = expr->fn().name.function_name; + auto children_num = expr->children().size(); + for (auto i = 0; i < children_num; ++i) { + VExpr* child_expr = expr->children()[i]; + if (TExprNodeType::BINARY_PRED == child_expr->node_type()) { + SlotDescriptor* slot = nullptr; + ColumnValueRangeType* range_on_slot = nullptr; + if (_is_predicate_acting_on_slot(child_expr, in_predicate_checker, &slot, + &range_on_slot) || + _is_predicate_acting_on_slot(child_expr, eq_predicate_checker, &slot, + &range_on_slot)) { + ColumnValueRangeType active_range = + *range_on_slot; // copy, in order not to affect the range in the _colname_to_value_range + std::visit( + [&](auto& value_range) { + _normalize_binary_in_compound_predicate(child_expr, expr_ctx, slot, + value_range, pdt); + }, + active_range); + + _compound_value_ranges.emplace_back(active_range); + } + } else if (TExprNodeType::COMPOUND_PRED == child_expr->node_type()) { + _normalize_compound_predicate(child_expr, expr_ctx, pdt, in_predicate_checker, + eq_predicate_checker); + } + } + } + + return Status::OK(); +} + +template +Status VScanNode::_normalize_binary_in_compound_predicate(vectorized::VExpr* expr, + VExprContext* expr_ctx, + SlotDescriptor* slot, + ColumnValueRange& range, + PushDownType* pdt) { + DCHECK(expr->children().size() == 2); + if (TExprNodeType::BINARY_PRED == expr->node_type()) { + auto eq_checker = [](const std::string& fn_name) { return fn_name == "eq"; }; + auto ne_checker = [](const std::string& fn_name) { return fn_name == "ne"; }; + auto noneq_checker = [](const std::string& fn_name) { + return fn_name != "ne" && fn_name != "eq"; + }; + + StringRef value; + int slot_ref_child = -1; + PushDownType eq_pdt; + PushDownType ne_pdt; + PushDownType noneq_pdt; + RETURN_IF_ERROR(_should_push_down_binary_predicate( + reinterpret_cast(expr), expr_ctx, &value, &slot_ref_child, + eq_checker, eq_pdt)); + RETURN_IF_ERROR(_should_push_down_binary_predicate( + reinterpret_cast(expr), expr_ctx, &value, &slot_ref_child, + ne_checker, ne_pdt)); + RETURN_IF_ERROR(_should_push_down_binary_predicate( + reinterpret_cast(expr), expr_ctx, &value, &slot_ref_child, + noneq_checker, noneq_pdt)); + if (eq_pdt == PushDownType::UNACCEPTABLE && ne_pdt == PushDownType::UNACCEPTABLE && + noneq_pdt == PushDownType::UNACCEPTABLE) { + return Status::OK(); + } + DCHECK(slot_ref_child >= 0); + const std::string& fn_name = + reinterpret_cast(expr)->fn().name.function_name; + if (eq_pdt == PushDownType::ACCEPTABLE || ne_pdt == PushDownType::ACCEPTABLE || + noneq_pdt == PushDownType::ACCEPTABLE) { + if (value.data != nullptr) { + if constexpr (T == TYPE_CHAR || T == TYPE_VARCHAR || T == TYPE_STRING || + T == TYPE_HLL) { + auto val = StringValue(value.data, value.size); + RETURN_IF_ERROR(_change_value_range( + range, reinterpret_cast(&val), + ColumnValueRange::add_compound_value_range, fn_name, + slot_ref_child)); + } else { + RETURN_IF_ERROR(_change_value_range( + range, reinterpret_cast(const_cast(value.data)), + ColumnValueRange::add_compound_value_range, fn_name, + slot_ref_child)); + } + } + *pdt = PushDownType::ACCEPTABLE; + } + } + + return Status::OK(); +} + template Status VScanNode::_change_value_range(ColumnValueRange& temp_range, void* value, const ChangeFixedValueRangeFunc& func, diff --git a/be/src/vec/exec/scan/vscan_node.h b/be/src/vec/exec/scan/vscan_node.h index 6279330bee86ab..836d6a67dadca2 100644 --- a/be/src/vec/exec/scan/vscan_node.h +++ b/be/src/vec/exec/scan/vscan_node.h @@ -215,8 +215,21 @@ class VScanNode : public ExecNode { phmap::flat_hash_map> _slot_id_to_value_range; // column -> ColumnValueRange + // We use _colname_to_value_range to store a column and its conresponding value ranges. std::unordered_map _colname_to_value_range; - // We use _colname_to_value_range to store a column and its corresponding value ranges. + /** + * _colname_to_value_range only store the leaf of and in the conjunct expr tree, + * we use _compound_value_ranges to store conresponding value ranges + * in the one compound relationship except the leaf of and node, + * such as `where a > 1 or b > 10 and c < 200`, the expr tree like: + * or + * / \ + * a and + * / \ + * b c + * the value ranges of column a,b,c will all store into _compound_value_ranges + */ + std::vector _compound_value_ranges; // But if a col is with value range, eg: 1 < col < 10, which is "!is_fixed_range", // in this case we can not merge "1 < col < 10" with "col not in (2)". // So we have to save "col not in (2)" to another structure: "_not_in_value_ranges". @@ -309,6 +322,18 @@ class VScanNode : public ExecNode { SlotDescriptor* slot, ColumnValueRange& range, PushDownType* pdt); + Status _normalize_compound_predicate( + vectorized::VExpr* expr, VExprContext* expr_ctx, PushDownType* pdt, + const std::function&, const VSlotRef**, VExpr**)>& + in_predicate_checker, + const std::function&, const VSlotRef**, VExpr**)>& + eq_predicate_checker); + + template + Status _normalize_binary_in_compound_predicate(vectorized::VExpr* expr, VExprContext* expr_ctx, + SlotDescriptor* slot, ColumnValueRange& range, + PushDownType* pdt); + template Status _normalize_is_null_predicate(vectorized::VExpr* expr, VExprContext* expr_ctx, SlotDescriptor* slot, ColumnValueRange& range, diff --git a/be/src/vec/exec/vbroker_scan_node.h b/be/src/vec/exec/vbroker_scan_node.h index de4610408837d1..bad1bd93c7ec5e 100644 --- a/be/src/vec/exec/vbroker_scan_node.h +++ b/be/src/vec/exec/vbroker_scan_node.h @@ -89,7 +89,7 @@ class VBrokerScanNode final : public ScanNode { std::condition_variable _queue_reader_cond; std::condition_variable _queue_writer_cond; - int _num_running_scanners; + std::atomic _num_running_scanners; std::atomic _scan_finished; diff --git a/be/src/vec/exec/vexchange_node.cpp b/be/src/vec/exec/vexchange_node.cpp index 9a30ee743e486d..4e3b5969881735 100644 --- a/be/src/vec/exec/vexchange_node.cpp +++ b/be/src/vec/exec/vexchange_node.cpp @@ -119,6 +119,7 @@ Status VExchangeNode::get_next(RuntimeState* state, Block* block, bool* eos) { *eos = true; auto limit = _limit - _num_rows_returned; block->set_num_rows(limit); + _num_rows_returned = _limit; } COUNTER_SET(_rows_returned_counter, _num_rows_returned); } diff --git a/be/src/vec/exec/vjdbc_connector.cpp b/be/src/vec/exec/vjdbc_connector.cpp index 5a656392a8dd14..ff6e5ecd4b92b7 100644 --- a/be/src/vec/exec/vjdbc_connector.cpp +++ b/be/src/vec/exec/vjdbc_connector.cpp @@ -25,8 +25,11 @@ #include "runtime/define_primitive_type.h" #include "runtime/user_function_cache.h" #include "util/jni-util.h" +#include "vec/columns/column_array.h" #include "vec/columns/column_nullable.h" -#include "vec/exprs/vexpr.h" +#include "vec/data_types/data_type_factory.hpp" +#include "vec/data_types/data_type_string.h" +#include "vec/functions/simple_function_factory.h" namespace doris { namespace vectorized { @@ -36,6 +39,8 @@ const char* JDBC_EXECUTOR_WRITE_SIGNATURE = "(Ljava/lang/String;)I"; const char* JDBC_EXECUTOR_HAS_NEXT_SIGNATURE = "()Z"; const char* JDBC_EXECUTOR_GET_BLOCK_SIGNATURE = "(I)Ljava/util/List;"; const char* JDBC_EXECUTOR_GET_TYPES_SIGNATURE = "()Ljava/util/List;"; +const char* JDBC_EXECUTOR_GET_ARR_LIST_SIGNATURE = "(Ljava/lang/Object;)Ljava/util/List;"; +const char* JDBC_EXECUTOR_GET_ARR_TYPE_SIGNATURE = "()I"; const char* JDBC_EXECUTOR_CLOSE_SIGNATURE = "()V"; const char* JDBC_EXECUTOR_CONVERT_DATE_SIGNATURE = "(Ljava/lang/Object;)J"; const char* JDBC_EXECUTOR_CONVERT_DATETIME_SIGNATURE = "(Ljava/lang/Object;)J"; @@ -195,7 +200,7 @@ Status JdbcConnector::_check_column_type() { env->CallObjectMethod(type_lists, _executor_get_list_id, materialized_column_index); const std::string& type_str = _jobject_to_string(env, column_type); - RETURN_IF_ERROR(_check_type(slot_desc, type_str)); + RETURN_IF_ERROR(_check_type(slot_desc, type_str, column_index)); env->DeleteLocalRef(column_type); materialized_column_index++; } @@ -222,7 +227,8 @@ DATETIME java.sql.Timestamp java.sql.Timestamp java.sql.Tim NOTE: because oracle always use number(p,s) to create all numerical type, so it's java type maybe java.math.BigDecimal */ -Status JdbcConnector::_check_type(SlotDescriptor* slot_desc, const std::string& type_str) { +Status JdbcConnector::_check_type(SlotDescriptor* slot_desc, const std::string& type_str, + int column_index) { const std::string error_msg = fmt::format( "Fail to convert jdbc type of {} to doris type {} on column: {}. You need to " "check this column type between external table and doris table.", @@ -289,6 +295,30 @@ Status JdbcConnector::_check_type(SlotDescriptor* slot_desc, const std::string& } break; } + case TYPE_ARRAY: { + if (type_str != "java.sql.Array" && type_str != "java.lang.String") { + return Status::InternalError(error_msg); + } + if (!slot_desc->type().children[0].children.empty()) { + return Status::InternalError("Now doris not support nested array type in array {}.", + slot_desc->type().debug_string()); + } + // when type is array, except pd database, others use string cast array + if (_conn_param.table_type != TOdbcTableType::POSTGRESQL) { + _need_cast_array_type = true; + _map_column_idx_to_cast_idx[column_index] = _input_array_string_types.size(); + if (slot_desc->is_nullable()) { + _input_array_string_types.push_back( + make_nullable(std::make_shared())); + } else { + _input_array_string_types.push_back(std::make_shared()); + } + str_array_cols.push_back( + _input_array_string_types[_map_column_idx_to_cast_idx[column_index]] + ->create_column()); + } + break; + } default: { return Status::InternalError(error_msg); } @@ -296,7 +326,8 @@ Status JdbcConnector::_check_type(SlotDescriptor* slot_desc, const std::string& return Status::OK(); } -Status JdbcConnector::get_next(bool* eos, std::vector& columns, int batch_size) { +Status JdbcConnector::get_next(bool* eos, std::vector& columns, Block* block, + int batch_size) { if (!_is_open) { return Status::InternalError("get_next before open of jdbc connector."); } @@ -322,17 +353,23 @@ Status JdbcConnector::get_next(bool* eos, std::vector& columns if (!slot_desc->is_materialized()) { continue; } + const std::string& column_name = slot_desc->col_name(); jobject column_data = env->CallObjectMethod(block_obj, _executor_get_list_id, materialized_column_index); jint num_rows = env->CallIntMethod(column_data, _executor_get_list_size_id); for (int row = 0; row < num_rows; ++row) { jobject cur_data = env->CallObjectMethod(column_data, _executor_get_list_id, row); - _convert_column_data(env, cur_data, slot_desc, columns[column_index].get()); + RETURN_IF_ERROR(_convert_column_data(env, cur_data, slot_desc, + columns[column_index].get(), column_index, + column_name)); env->DeleteLocalRef(cur_data); } env->DeleteLocalRef(column_data); - + //here need to cast string to array type + if (_need_cast_array_type && slot_desc->type().is_array_type()) { + _cast_string_to_array(slot_desc, block, column_index, num_rows); + } materialized_column_index++; } // All Java objects returned by JNI functions are local references. @@ -384,25 +421,43 @@ Status JdbcConnector::_register_func_id(JNIEnv* env) { JDBC_EXECUTOR_TRANSACTION_SIGNATURE, _executor_abort_trans_id)); RETURN_IF_ERROR(register_id(_executor_clazz, "getResultColumnTypeNames", JDBC_EXECUTOR_GET_TYPES_SIGNATURE, _executor_get_types_id)); + RETURN_IF_ERROR(register_id(_executor_clazz, "getArrayColumnData", + JDBC_EXECUTOR_GET_ARR_LIST_SIGNATURE, _executor_get_arr_list_id)); + RETURN_IF_ERROR(register_id(_executor_clazz, "getBaseTypeInt", + JDBC_EXECUTOR_GET_ARR_TYPE_SIGNATURE, _executor_get_arr_type_id)); + return Status::OK(); } Status JdbcConnector::_convert_column_data(JNIEnv* env, jobject jobj, const SlotDescriptor* slot_desc, - vectorized::IColumn* column_ptr) { + vectorized::IColumn* column_ptr, int column_index, + std::string_view column_name) { vectorized::IColumn* col_ptr = column_ptr; if (true == slot_desc->is_nullable()) { auto* nullable_column = reinterpret_cast(column_ptr); if (jobj == nullptr) { nullable_column->insert_data(nullptr, 0); + if (_need_cast_array_type && slot_desc->type().type == TYPE_ARRAY) { + reinterpret_cast( + str_array_cols[_map_column_idx_to_cast_idx[column_index]].get()) + ->insert_data(nullptr, 0); + } return Status::OK(); } else { nullable_column->get_null_map_data().push_back(0); col_ptr = &nullable_column->get_nested_column(); } } + RETURN_IF_ERROR( + _insert_column_data(env, jobj, slot_desc->type(), col_ptr, column_index, column_name)); + return Status::OK(); +} - switch (slot_desc->type().type) { +Status JdbcConnector::_insert_column_data(JNIEnv* env, jobject jobj, const TypeDescriptor& type, + vectorized::IColumn* col_ptr, int column_index, + std::string_view column_name) { + switch (type.type) { #define M(TYPE, CPP_TYPE, COLUMN_TYPE) \ case TYPE: { \ CPP_TYPE num = _jobject_to_##CPP_TYPE(env, jobj); \ @@ -417,8 +472,19 @@ Status JdbcConnector::_convert_column_data(JNIEnv* env, jobject jobj, M(TYPE_FLOAT, float, vectorized::ColumnVector) M(TYPE_DOUBLE, double, vectorized::ColumnVector) #undef M + case TYPE_CHAR: { + std::string data = _jobject_to_string(env, jobj); + // Now have test pg and oracle with char(100), if data='abc' + // but read string data length is 100, so need trim extra spaces + if ((_conn_param.table_type == TOdbcTableType::POSTGRESQL) || + (_conn_param.table_type == TOdbcTableType::ORACLE)) { + data = data.erase(data.find_last_not_of(' ') + 1); + } + reinterpret_cast(col_ptr)->insert_data(data.c_str(), + data.length()); + break; + } case TYPE_STRING: - case TYPE_CHAR: case TYPE_VARCHAR: { std::string data = _jobject_to_string(env, jobj); reinterpret_cast(col_ptr)->insert_data(data.c_str(), @@ -456,8 +522,7 @@ Status JdbcConnector::_convert_column_data(JNIEnv* env, jobject jobj, std::string data = _jobject_to_string(env, jobj); StringParser::ParseResult result = StringParser::PARSE_SUCCESS; const Int32 decimal_slot = StringParser::string_to_decimal( - data.c_str(), data.length(), slot_desc->type().precision, slot_desc->type().scale, - &result); + data.c_str(), data.length(), type.precision, type.scale, &result); reinterpret_cast(col_ptr)->insert_data( reinterpret_cast(&decimal_slot), 0); break; @@ -466,8 +531,7 @@ Status JdbcConnector::_convert_column_data(JNIEnv* env, jobject jobj, std::string data = _jobject_to_string(env, jobj); StringParser::ParseResult result = StringParser::PARSE_SUCCESS; const Int64 decimal_slot = StringParser::string_to_decimal( - data.c_str(), data.length(), slot_desc->type().precision, slot_desc->type().scale, - &result); + data.c_str(), data.length(), type.precision, type.scale, &result); reinterpret_cast(col_ptr)->insert_data( reinterpret_cast(&decimal_slot), 0); break; @@ -476,22 +540,114 @@ Status JdbcConnector::_convert_column_data(JNIEnv* env, jobject jobj, std::string data = _jobject_to_string(env, jobj); StringParser::ParseResult result = StringParser::PARSE_SUCCESS; const Int128 decimal_slot = StringParser::string_to_decimal( - data.c_str(), data.length(), slot_desc->type().precision, slot_desc->type().scale, - &result); + data.c_str(), data.length(), type.precision, type.scale, &result); reinterpret_cast(col_ptr)->insert_data( reinterpret_cast(&decimal_slot), 0); break; } + case TYPE_ARRAY: { + if (_need_cast_array_type) { + // read array data is a big string: [1,2,3], need cast it by self + std::string data = _jobject_to_string(env, jobj); + str_array_cols[_map_column_idx_to_cast_idx[column_index]]->insert_data(data.c_str(), + data.length()); + } else { + //POSTGRESQL read array is object[], so could get data by index + jobject arr_lists = env->CallNonvirtualObjectMethod(_executor_obj, _executor_clazz, + _executor_get_arr_list_id, jobj); + jint arr_type = env->CallNonvirtualIntMethod(_executor_obj, _executor_clazz, + _executor_get_arr_type_id); + //here type check is maybe no needed,more checks affect performance + if (_arr_jdbc_map[arr_type] != type.children[0].type) { + const std::string& error_msg = fmt::format( + "Fail to convert jdbc value to array type of {} on column: {}, could check " + "this column type between external table and doris table. {}.{} ", + type.children[0].debug_string(), column_name, _arr_jdbc_map[arr_type], + arr_type); + return Status::InternalError(std::string(error_msg)); + } + jint num_rows = env->CallIntMethod(arr_lists, _executor_get_list_size_id); + RETURN_IF_ERROR(_insert_arr_column_data(env, arr_lists, type.children[0], num_rows, + col_ptr, column_index, column_name)); + env->DeleteLocalRef(arr_lists); + } + break; + } default: { - std::string error_msg = - fmt::format("Fail to convert jdbc value to {} on column: {}.", - slot_desc->type().debug_string(), slot_desc->col_name()); + const std::string& error_msg = fmt::format( + "Fail to convert jdbc value to {} on column: {}, could check this column type " + "between external table and doris table.", + type.debug_string(), column_name); return Status::InternalError(std::string(error_msg)); } } return Status::OK(); } +Status JdbcConnector::_insert_arr_column_data(JNIEnv* env, jobject arr_lists, + const TypeDescriptor& type, int nums, + vectorized::IColumn* arr_column_ptr, int column_index, + std::string_view column_name) { + auto& arr_nested = reinterpret_cast(arr_column_ptr)->get_data(); + vectorized::IColumn* col_ptr = + reinterpret_cast(arr_nested).get_nested_column_ptr(); + auto& nullmap_data = + reinterpret_cast(arr_nested).get_null_map_data(); + for (int i = 0; i < nums; ++i) { + jobject cur_data = env->CallObjectMethod(arr_lists, _executor_get_list_id, i); + if (cur_data == nullptr) { + arr_nested.insert_default(); + continue; + } else { + nullmap_data.push_back(0); + } + RETURN_IF_ERROR( + _insert_column_data(env, cur_data, type, col_ptr, column_index, column_name)); + env->DeleteLocalRef(cur_data); + } + auto old_size = + reinterpret_cast(arr_column_ptr)->get_offsets().back(); + reinterpret_cast(arr_column_ptr) + ->get_offsets() + .push_back(nums + old_size); + return Status::OK(); +} + +Status JdbcConnector::_cast_string_to_array(const SlotDescriptor* slot_desc, Block* block, + int column_index, int rows) { + DataTypePtr _target_data_type = slot_desc->get_data_type_ptr(); + std::string _target_data_type_name = DataTypeFactory::instance().get(_target_data_type); + DataTypePtr _cast_param_data_type = std::make_shared(); + ColumnPtr _cast_param = _cast_param_data_type->create_column_const(1, _target_data_type_name); + + ColumnsWithTypeAndName argument_template; + argument_template.reserve(2); + argument_template.emplace_back( + std::move(str_array_cols[_map_column_idx_to_cast_idx[column_index]]), + _input_array_string_types[_map_column_idx_to_cast_idx[column_index]], + "java.sql.String"); + argument_template.emplace_back(_cast_param, _cast_param_data_type, _target_data_type_name); + FunctionBasePtr func_cast = SimpleFunctionFactory::instance().get_function( + "CAST", argument_template, make_nullable(_target_data_type)); + + Block cast_block(argument_template); + int result_idx = cast_block.columns(); + cast_block.insert({nullptr, make_nullable(_target_data_type), "cast_result"}); + func_cast->execute(nullptr, cast_block, {0, 1}, result_idx, rows); + + auto res_col = cast_block.get_by_position(result_idx).column; + if (_target_data_type->is_nullable()) { + block->replace_by_position(column_index, res_col); + } else { + auto nested_ptr = reinterpret_cast(res_col.get()) + ->get_nested_column_ptr(); + block->replace_by_position(column_index, nested_ptr); + } + str_array_cols[_map_column_idx_to_cast_idx[column_index]] = + _input_array_string_types[_map_column_idx_to_cast_idx[column_index]]->create_column(); + return Status::OK(); +} + Status JdbcConnector::exec_write_sql(const std::u16string& insert_stmt, const fmt::memory_buffer& insert_stmt_buffer) { SCOPED_TIMER(_result_send_timer); diff --git a/be/src/vec/exec/vjdbc_connector.h b/be/src/vec/exec/vjdbc_connector.h index e6da1a01513abd..0d51fd278cbfeb 100644 --- a/be/src/vec/exec/vjdbc_connector.h +++ b/be/src/vec/exec/vjdbc_connector.h @@ -19,8 +19,12 @@ #include +#include + #include "common/status.h" #include "exec/table_connector.h" +#include "runtime/define_primitive_type.h" +#include "vec/data_types/data_type.h" namespace doris { namespace vectorized { @@ -33,6 +37,7 @@ struct JdbcConnectorParam { std::string user; std::string passwd; std::string query_string; + TOdbcTableType::type table_type; const TupleDescriptor* tuple_desc; }; @@ -50,7 +55,8 @@ class JdbcConnector : public TableConnector { Status exec_write_sql(const std::u16string& insert_stmt, const fmt::memory_buffer& insert_stmt_buffer) override; - Status get_next(bool* eos, std::vector& columns, int batch_size); + Status get_next(bool* eos, std::vector& columns, Block* block, + int batch_size); // use in JDBC transaction Status begin_trans() override; // should be call after connect and before query or init_to_write @@ -62,14 +68,28 @@ class JdbcConnector : public TableConnector { private: Status _register_func_id(JNIEnv* env); Status _check_column_type(); - Status _check_type(SlotDescriptor*, const std::string& type_str); + Status _check_type(SlotDescriptor*, const std::string& type_str, int column_index); Status _convert_column_data(JNIEnv* env, jobject jobj, const SlotDescriptor* slot_desc, - vectorized::IColumn* column_ptr); + vectorized::IColumn* column_ptr, int column_index, + std::string_view column_name); + Status _insert_column_data(JNIEnv* env, jobject jobj, const TypeDescriptor& type, + vectorized::IColumn* column_ptr, int column_index, + std::string_view column_name); + Status _insert_arr_column_data(JNIEnv* env, jobject jobj, const TypeDescriptor& type, int nums, + vectorized::IColumn* column_ptr, int column_index, + std::string_view column_name); std::string _jobject_to_string(JNIEnv* env, jobject jobj); int64_t _jobject_to_date(JNIEnv* env, jobject jobj); int64_t _jobject_to_datetime(JNIEnv* env, jobject jobj); + Status _cast_string_to_array(const SlotDescriptor* slot_desc, Block* block, int column_index, + int rows); const JdbcConnectorParam& _conn_param; + //java.sql.Types: https://docs.oracle.com/javase/7/docs/api/constant-values.html#java.sql.Types.INTEGER + std::map _arr_jdbc_map { + {-7, TYPE_BOOLEAN}, {-6, TYPE_TINYINT}, {5, TYPE_SMALLINT}, {4, TYPE_INT}, + {-5, TYPE_BIGINT}, {12, TYPE_STRING}, {7, TYPE_FLOAT}, {8, TYPE_DOUBLE}, + {91, TYPE_DATE}, {93, TYPE_DATETIME}, {2, TYPE_DECIMALV2}}; bool _closed; jclass _executor_clazz; jclass _executor_list_clazz; @@ -82,6 +102,8 @@ class JdbcConnector : public TableConnector { jmethodID _executor_has_next_id; jmethodID _executor_get_blocks_id; jmethodID _executor_get_types_id; + jmethodID _executor_get_arr_list_id; + jmethodID _executor_get_arr_type_id; jmethodID _executor_close_id; jmethodID _executor_get_list_id; jmethodID _executor_get_list_size_id; @@ -92,6 +114,11 @@ class JdbcConnector : public TableConnector { jmethodID _executor_begin_trans_id; jmethodID _executor_finish_trans_id; jmethodID _executor_abort_trans_id; + bool _need_cast_array_type; + std::map _map_column_idx_to_cast_idx; + std::vector _input_array_string_types; + std::vector + str_array_cols; // for array type to save data like big string [1,2,3] #define FUNC_VARI_DECLARE(RETURN_TYPE) \ RETURN_TYPE _jobject_to_##RETURN_TYPE(JNIEnv* env, jobject jobj); \ diff --git a/be/src/vec/exec/vrepeat_node.cpp b/be/src/vec/exec/vrepeat_node.cpp index 882619930e3655..aa32990598dfc1 100644 --- a/be/src/vec/exec/vrepeat_node.cpp +++ b/be/src/vec/exec/vrepeat_node.cpp @@ -171,8 +171,6 @@ Status VRepeatNode::get_repeated_block(Block* child_block, int repeat_id_idx, Bl } Status VRepeatNode::pull(doris::RuntimeState* state, vectorized::Block* output_block, bool* eos) { - SCOPED_TIMER(_runtime_profile->total_time_counter()); - RETURN_IF_CANCELLED(state); DCHECK(_repeat_id_idx >= 0); for (const std::vector& v : _grouping_list) { diff --git a/be/src/vec/exec/vselect_node.cpp b/be/src/vec/exec/vselect_node.cpp index b8f10d57be719b..cd8924abb4e4a9 100644 --- a/be/src/vec/exec/vselect_node.cpp +++ b/be/src/vec/exec/vselect_node.cpp @@ -63,7 +63,6 @@ Status VSelectNode::get_next(RuntimeState* state, vectorized::Block* block, bool Status VSelectNode::pull(RuntimeState* state, vectorized::Block* output_block, bool* eos) { INIT_AND_SCOPE_GET_NEXT_SPAN(state->get_tracer(), _get_next_span, "VSelectNode::pull"); - SCOPED_TIMER(_runtime_profile->total_time_counter()); RETURN_IF_CANCELLED(state); RETURN_IF_ERROR( VExprContext::filter_block(_vconjunct_ctx_ptr, output_block, output_block->columns())); diff --git a/be/src/vec/exprs/vectorized_fn_call.cpp b/be/src/vec/exprs/vectorized_fn_call.cpp index 399959971676f6..cfb2657ff558c1 100644 --- a/be/src/vec/exprs/vectorized_fn_call.cpp +++ b/be/src/vec/exprs/vectorized_fn_call.cpp @@ -104,12 +104,38 @@ doris::Status VectorizedFnCall::execute(VExprContext* context, doris::vectorized size_t num_columns_without_result = block->columns(); // prepare a column to save result block->insert({nullptr, _data_type, _expr_name}); + if (_function->can_fast_execute()) { + bool ok = fast_execute(context->fn_context(_fn_context_index), *block, arguments, + num_columns_without_result, block->rows()); + if (ok) { + *result_column_id = num_columns_without_result; + return Status::OK(); + } + } + RETURN_IF_ERROR(_function->execute(context->fn_context(_fn_context_index), *block, arguments, num_columns_without_result, block->rows(), false)); *result_column_id = num_columns_without_result; return Status::OK(); } +// fast_execute can direct copy expr filter result which build by apply index in segment_iterator +bool VectorizedFnCall::fast_execute(FunctionContext* context, Block& block, + const ColumnNumbers& arguments, size_t result, + size_t input_rows_count) { + auto query_value = block.get_by_position(arguments[1]).to_string(0); + std::string column_name = block.get_by_position(arguments[0]).name; + auto result_column_name = column_name + "_" + _function->get_name() + "_" + query_value; + if (!block.has(result_column_name)) { + return false; + } + + auto result_column = + block.get_by_name(result_column_name).column->convert_to_full_column_if_const(); + block.replace_by_position(result, std::move(result_column)); + return true; +} + const std::string& VectorizedFnCall::expr_name() const { return _expr_name; } diff --git a/be/src/vec/exprs/vectorized_fn_call.h b/be/src/vec/exprs/vectorized_fn_call.h index 63a11847db31e1..9434f02c944bde 100644 --- a/be/src/vec/exprs/vectorized_fn_call.h +++ b/be/src/vec/exprs/vectorized_fn_call.h @@ -35,6 +35,9 @@ class VectorizedFnCall : public VExpr { std::string debug_string() const override; static std::string debug_string(const std::vector& exprs); + bool fast_execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments, + size_t result, size_t input_rows_count); + private: FunctionBasePtr _function; std::string _expr_name; diff --git a/be/src/vec/exprs/vliteral.cpp b/be/src/vec/exprs/vliteral.cpp index 27324e5c0acff5..a0ef2deb17ea0f 100644 --- a/be/src/vec/exprs/vliteral.cpp +++ b/be/src/vec/exprs/vliteral.cpp @@ -191,11 +191,8 @@ Status VLiteral::execute(VExprContext* context, vectorized::Block* block, int* r return Status::OK(); } -std::string VLiteral::debug_string() const { +std::string VLiteral::value() const { std::stringstream out; - out << "VLiteral (name = " << _expr_name; - out << ", type = " << _data_type->get_name(); - out << ", value = ("; for (size_t i = 0; i < _column_ptr->size(); i++) { if (i != 0) { out << ", "; @@ -283,8 +280,17 @@ std::string VLiteral::debug_string() const { } } } + return out.str(); +} + +std::string VLiteral::debug_string() const { + std::stringstream out; + out << "VLiteral (name = " << _expr_name; + out << ", type = " << _data_type->get_name(); + out << ", value = (" << value(); out << "))"; return out.str(); } + } // namespace vectorized } // namespace doris diff --git a/be/src/vec/exprs/vliteral.h b/be/src/vec/exprs/vliteral.h index c5c1c47066c87c..90f40be81c36ab 100644 --- a/be/src/vec/exprs/vliteral.h +++ b/be/src/vec/exprs/vliteral.h @@ -37,6 +37,8 @@ class VLiteral : public VExpr { VExpr* clone(doris::ObjectPool* pool) const override { return pool->add(new VLiteral(*this)); } std::string debug_string() const override; + std::string value() const; + protected: ColumnPtr _column_ptr; std::string _expr_name; diff --git a/be/src/vec/functions/function.h b/be/src/vec/functions/function.h index 9e00f36a33f8dc..334497d0c7b857 100644 --- a/be/src/vec/functions/function.h +++ b/be/src/vec/functions/function.h @@ -144,6 +144,8 @@ class IFunctionBase { virtual bool is_stateful() const { return false; } + virtual bool can_fast_execute() const { return false; } + /** Should we evaluate this function while constant folding, if arguments are constants? * Usually this is true. Notable counterexample is function 'sleep'. * If we will call it during query analysis, we will sleep extra amount of time. @@ -527,6 +529,12 @@ class DefaultFunction final : public IFunctionBase { bool is_deterministic() const override { return function->is_deterministic(); } + bool can_fast_execute() const override { + return function->get_name() == "eq" || function->get_name() == "ne" || + function->get_name() == "lt" || function->get_name() == "gt" || + function->get_name() == "le" || function->get_name() == "ge"; + } + bool is_deterministic_in_scope_of_query() const override { return function->is_deterministic_in_scope_of_query(); } diff --git a/be/src/vec/functions/function_binary_arithmetic.h b/be/src/vec/functions/function_binary_arithmetic.h index 5c98e72486b4c4..2a8da748e355fc 100644 --- a/be/src/vec/functions/function_binary_arithmetic.h +++ b/be/src/vec/functions/function_binary_arithmetic.h @@ -730,10 +730,9 @@ class FunctionBinaryArithmetic : public IFunction { if constexpr (!std::is_same_v) { if constexpr (IsDataTypeDecimal && IsDataTypeDecimal) { - ResultDataType result_type = decimal_result_type( - left, right, OpTraits::is_multiply, OpTraits::is_division); - type_res = std::make_shared(result_type.get_precision(), - result_type.get_scale()); + type_res = decimal_result_type(left, right, OpTraits::is_multiply, + OpTraits::is_division, + OpTraits::is_plus_minus); } else if constexpr (IsDataTypeDecimal) { type_res = std::make_shared(left.get_precision(), left.get_scale()); diff --git a/be/src/vec/functions/function_date_or_datetime_computation.h b/be/src/vec/functions/function_date_or_datetime_computation.h index 4900f1a48a1b5d..eba6d17fc7877a 100644 --- a/be/src/vec/functions/function_date_or_datetime_computation.h +++ b/be/src/vec/functions/function_date_or_datetime_computation.h @@ -27,6 +27,7 @@ #include "vec/data_types/data_type_date.h" #include "vec/data_types/data_type_date_time.h" #include "vec/data_types/data_type_number.h" +#include "vec/data_types/data_type_time.h" #include "vec/functions/function.h" #include "vec/functions/function_helpers.h" #include "vec/runtime/vdatetime_value.h" @@ -245,7 +246,7 @@ struct SubtractYearsImpl : SubtractIntervalImpl, DateType } \ }; DECLARE_DATE_FUNCTIONS(DateDiffImpl, datediff, DataTypeInt32, (ts0.daynr() - ts1.daynr())); -DECLARE_DATE_FUNCTIONS(TimeDiffImpl, timediff, DataTypeFloat64, ts0.second_diff(ts1)); +DECLARE_DATE_FUNCTIONS(TimeDiffImpl, timediff, DataTypeTime, ts0.second_diff(ts1)); #define TIME_DIFF_FUNCTION_IMPL(CLASS, NAME, UNIT) \ DECLARE_DATE_FUNCTIONS(CLASS, NAME, DataTypeInt64, datetime_diff(ts1, ts0)) @@ -798,7 +799,7 @@ struct CurrentDateImpl { template struct CurrentTimeImpl { - using ReturnType = DataTypeFloat64; + using ReturnType = DataTypeTime; static constexpr auto name = FunctionName::name; static Status execute(FunctionContext* context, Block& block, const ColumnNumbers& arguments, size_t result, size_t input_rows_count) { diff --git a/be/src/vec/functions/function_jsonb.cpp b/be/src/vec/functions/function_jsonb.cpp index ea84ddf3ae40d9..02f352fb57e00e 100644 --- a/be/src/vec/functions/function_jsonb.cpp +++ b/be/src/vec/functions/function_jsonb.cpp @@ -18,6 +18,7 @@ #include #include +// #include "util/jsonb_parser_simd.h" #include "util/string_parser.hpp" #include "util/string_util.h" #include "vec/columns/column.h" @@ -47,7 +48,7 @@ enum class JsonbParseErrorMode { FAIL = 0, RETURN_NULL, RETURN_VALUE, RETURN_INV template class FunctionJsonbParseBase : public IFunction { private: - JsonbParser default_value_parser; + JsonbParserSIMD default_value_parser; bool has_const_default_value = false; public: @@ -193,6 +194,10 @@ class FunctionJsonbParseBase : public IFunction { size_t size = col_from.size(); col_to->reserve(size); + // parser can be reused for performance + JsonbParserSIMD parser; + JsonbErrType error = JsonbErrType::E_NONE; + for (size_t i = 0; i < input_rows_count; ++i) { if (col_from.is_null_at(i)) { null_map->get_data()[i] = 1; @@ -201,8 +206,6 @@ class FunctionJsonbParseBase : public IFunction { } const auto& val = col_from_string->get_data_at(i); - JsonbParser parser; - JsonbErrType error = JsonbErrType::E_NONE; if (parser.parse(val.data, val.size)) { // insert jsonb format data col_to->insert_data(parser.getWriter().getOutput()->getBuffer(), diff --git a/be/src/vec/functions/function_running_difference.h b/be/src/vec/functions/function_running_difference.h index b9b53892f9da5e..85f17ad786015a 100644 --- a/be/src/vec/functions/function_running_difference.h +++ b/be/src/vec/functions/function_running_difference.h @@ -31,6 +31,7 @@ #include "vec/data_types/data_type_date_time.h" #include "vec/data_types/data_type_nullable.h" #include "vec/data_types/data_type_number.h" +#include "vec/data_types/data_type_time.h" #include "vec/data_types/data_type_time_v2.h" #include "vec/data_types/number_traits.h" #include "vec/functions/function.h" @@ -75,7 +76,7 @@ class FunctionRunningDifference : public IFunction { } else if (which.is_decimal()) { return_type = nested_type; } else if (which.is_date_time() || which.is_date_time_v2()) { - return_type = std::make_shared(); + return_type = std::make_shared(); } else if (which.is_date() || which.is_date_v2()) { return_type = std::make_shared(); } diff --git a/be/src/vec/runtime/vdata_stream_recvr.cpp b/be/src/vec/runtime/vdata_stream_recvr.cpp index 0195640ec37032..831bf79c12ec07 100644 --- a/be/src/vec/runtime/vdata_stream_recvr.cpp +++ b/be/src/vec/runtime/vdata_stream_recvr.cpp @@ -295,7 +295,8 @@ VDataStreamRecvr::VDataStreamRecvr( std::shared_ptr sub_plan_query_statistics_recvr) : _mgr(stream_mgr), #ifdef USE_MEM_TRACKER - _state(state), + _query_mem_tracker(state->query_mem_tracker()), + _query_id(state->query_id()), #endif _fragment_instance_id(fragment_instance_id), _dest_node_id(dest_node_id), @@ -366,8 +367,7 @@ Status VDataStreamRecvr::create_merger(const std::vector& orderin void VDataStreamRecvr::add_block(const PBlock& pblock, int sender_id, int be_number, int64_t packet_seq, ::google::protobuf::Closure** done) { - SCOPED_ATTACH_TASK(_state->query_mem_tracker(), print_id(_state->query_id()), - _fragment_instance_id); + SCOPED_ATTACH_TASK(_query_mem_tracker, print_id(_query_id), _fragment_instance_id); int use_sender_id = _is_merging ? sender_id : 0; _sender_queues[use_sender_id]->add_block(pblock, be_number, packet_seq, done); } diff --git a/be/src/vec/runtime/vdata_stream_recvr.h b/be/src/vec/runtime/vdata_stream_recvr.h index 13ab43810fa0d2..087ffe1987283a 100644 --- a/be/src/vec/runtime/vdata_stream_recvr.h +++ b/be/src/vec/runtime/vdata_stream_recvr.h @@ -104,7 +104,8 @@ class VDataStreamRecvr { VDataStreamMgr* _mgr; #ifdef USE_MEM_TRACKER - RuntimeState* _state; + std::shared_ptr _query_mem_tracker; + TUniqueId _query_id; #endif // Fragment and node id of the destination exchange node this receiver is used by. @@ -260,6 +261,7 @@ class VDataStreamRecvr::PipSenderQueue : public SenderQueue { _data_arrival_cv.notify_one(); _recvr->_num_buffered_bytes += block_size; + COUNTER_UPDATE(_recvr->_local_bytes_received_counter, block_size); } }; } // namespace vectorized diff --git a/be/src/vec/sink/vjdbc_table_sink.cpp b/be/src/vec/sink/vjdbc_table_sink.cpp index 0007a8b9b72d08..973342da7378f2 100644 --- a/be/src/vec/sink/vjdbc_table_sink.cpp +++ b/be/src/vec/sink/vjdbc_table_sink.cpp @@ -44,9 +44,9 @@ Status VJdbcTableSink::init(const TDataSink& t_sink) { _jdbc_param.driver_path = t_jdbc_sink.jdbc_table.jdbc_driver_url; _jdbc_param.driver_checksum = t_jdbc_sink.jdbc_table.jdbc_driver_checksum; _jdbc_param.resource_name = t_jdbc_sink.jdbc_table.jdbc_resource_name; + _jdbc_param.table_type = t_jdbc_sink.table_type; _table_name = t_jdbc_sink.jdbc_table.jdbc_table_name; _use_transaction = t_jdbc_sink.use_transaction; - _need_extra_convert = (t_jdbc_sink.table_type == TOdbcTableType::ORACLE); return Status::OK(); } @@ -81,7 +81,7 @@ Status VJdbcTableSink::send(RuntimeState* state, Block* block, bool eos) { uint32_t num_row_sent = 0; while (start_send_row < output_block.rows()) { RETURN_IF_ERROR(_writer->append(_table_name, &output_block, _output_vexpr_ctxs, - start_send_row, &num_row_sent, _need_extra_convert)); + start_send_row, &num_row_sent, _jdbc_param.table_type)); start_send_row += num_row_sent; num_row_sent = 0; } diff --git a/be/src/vec/sink/vjdbc_table_sink.h b/be/src/vec/sink/vjdbc_table_sink.h index a3de3ff62bcd4b..c313cc8214e358 100644 --- a/be/src/vec/sink/vjdbc_table_sink.h +++ b/be/src/vec/sink/vjdbc_table_sink.h @@ -39,8 +39,6 @@ class VJdbcTableSink : public VTableSink { private: JdbcConnectorParam _jdbc_param; std::unique_ptr _writer; - //if is ORACLE and date type, insert into need convert - bool _need_extra_convert = false; }; } // namespace vectorized } // namespace doris diff --git a/be/test/CMakeLists.txt b/be/test/CMakeLists.txt index ce33cd1fdab859..0d57b06bc1c188 100644 --- a/be/test/CMakeLists.txt +++ b/be/test/CMakeLists.txt @@ -96,6 +96,7 @@ set(OLAP_TEST_FILES olap/byte_buffer_test.cpp olap/lru_cache_test.cpp olap/bloom_filter_test.cpp + olap/itoken_extractor_test.cpp olap/file_helper_test.cpp olap/file_utils_test.cpp olap/cumulative_compaction_policy_test.cpp diff --git a/be/test/io/cache/remote_file_cache_test.cpp b/be/test/io/cache/remote_file_cache_test.cpp index 6c917a5f246f2a..596ff8872502ed 100644 --- a/be/test/io/cache/remote_file_cache_test.cpp +++ b/be/test/io/cache/remote_file_cache_test.cpp @@ -141,7 +141,7 @@ class RemoteFileCacheTest : public ::testing::Test { EXPECT_NE("", writer.min_encoded_key().to_string()); EXPECT_NE("", writer.max_encoded_key().to_string()); - st = segment_v2::Segment::open(fs, path, "", 0, {}, query_schema, res); + st = segment_v2::Segment::open(fs, path, 0, {}, query_schema, res); EXPECT_TRUE(st.ok()); EXPECT_EQ(nrows, (*res)->num_rows()); } @@ -172,7 +172,7 @@ class RemoteFileCacheTest : public ::testing::Test { std::vector segments; Status st = rowset.load_segments(&segments); - ASSERT_TRUE(st.ok()); + ASSERT_TRUE(st.ok()) << st; } }; diff --git a/be/test/olap/itoken_extractor_test.cpp b/be/test/olap/itoken_extractor_test.cpp new file mode 100644 index 00000000000000..d57682a1eefd26 --- /dev/null +++ b/be/test/olap/itoken_extractor_test.cpp @@ -0,0 +1,78 @@ +// 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. + +#include "olap/itoken_extractor.h" + +#include + +#include + +#include "common/logging.h" +#include "util/utf8_check.h" + +namespace doris { + +class TestITokenExtractor : public testing::Test { +public: + void SetUp() {} + void TearDown() {} +}; + +void runNextInString(const ITokenExtractor& extractor, std::string statement, + std::vector expect) { + ASSERT_TRUE(validate_utf8(statement.c_str(), statement.length())); + + std::vector actual; + actual.reserve(expect.size()); + size_t pos = 0; + size_t token_start = 0; + size_t token_length = 0; + while (extractor.next_in_string(statement.c_str(), statement.size(), &pos, &token_start, + &token_length)) { + actual.push_back(statement.substr(token_start, token_length)); + } + ASSERT_EQ(expect, actual); +} + +void runNextInStringLike(const ITokenExtractor& extractor, std::string statement, + std::vector expect) { + std::vector actual; + actual.reserve(expect.size()); + size_t pos = 0; + std::string str; + while (extractor.next_in_string_like(statement.c_str(), statement.length(), &pos, str)) { + actual.push_back(str); + } + ASSERT_EQ(expect, actual); +} + +TEST_F(TestITokenExtractor, ngram_extractor) { + std::string statement = u8"预计09发布i13手机。"; + std::vector expect = {u8"预计", u8"计0", u8"09", u8"9发", u8"发布", u8"布i", + u8"i1", u8"13", u8"3手", u8"手机", u8"机。"}; + NgramTokenExtractor ngram_extractor(2); + runNextInString(ngram_extractor, statement, expect); +} + +TEST_F(TestITokenExtractor, ngram_like_extractor) { + NgramTokenExtractor ngram_extractor(2); + runNextInStringLike(ngram_extractor, u8"%手机%", {u8"手机"}); + runNextInStringLike(ngram_extractor, u8"%机%", {}); + runNextInStringLike(ngram_extractor, {u8"i_%手机%"}, {u8"手机"}); + runNextInStringLike(ngram_extractor, {u8"\\_手机%"}, {u8"_手", u8"手机"}); +} +} // namespace doris diff --git a/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp b/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp index 9c3f15dcd611db..e48612253035c5 100644 --- a/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp +++ b/be/test/olap/rowset/segment_v2/block_bloom_filter_test.cpp @@ -174,5 +174,34 @@ TEST_F(BlockBloomFilterTest, slice) { EXPECT_FALSE(bf->test_bytes(s.data, s.size)); } +// Test contains +TEST_F(BlockBloomFilterTest, contains) { + std::unique_ptr bf1; + auto st1 = BloomFilter::create(NGRAM_BLOOM_FILTER, &bf1, 512); + ASSERT_TRUE(st1.ok()); + ASSERT_NE(nullptr, bf1); + ASSERT_TRUE(st1.ok()); + ASSERT_TRUE(bf1->size() > 0); + + std::unique_ptr bf2; + auto st2 = BloomFilter::create(NGRAM_BLOOM_FILTER, &bf2, 512); + ASSERT_TRUE(st2.ok()); + ASSERT_NE(nullptr, bf2); + ASSERT_TRUE(st2.ok()); + ASSERT_TRUE(bf2->size() > 0); + + std::vector str_list = {"abc", "csx", "d2", "csxx", "vaa"}; + for (int i = 0; i < str_list.size(); ++i) { + auto str = str_list[i]; + bf1->add_bytes(str.data(), str.size()); + if (1 == i % 2) { + bf2->add_bytes(str.data(), str.size()); + } + } + + ASSERT_TRUE(bf1->contains(*bf2)); + ASSERT_FALSE(bf2->contains(*bf1)); +} + } // namespace segment_v2 } // namespace doris diff --git a/be/test/olap/tablet_test.cpp b/be/test/olap/tablet_test.cpp index b1f949489fb1be..db3ffb02df22f4 100644 --- a/be/test/olap/tablet_test.cpp +++ b/be/test/olap/tablet_test.cpp @@ -21,6 +21,7 @@ #include +#include "http/action/pad_rowset_action.h" #include "olap/olap_define.h" #include "olap/rowset/beta_rowset.h" #include "olap/storage_engine.h" @@ -28,6 +29,7 @@ #include "olap/tablet_meta.h" #include "olap/tablet_schema_cache.h" #include "testutil/mock_rowset.h" +#include "util/file_utils.h" #include "util/time.h" using namespace std; @@ -38,6 +40,8 @@ using namespace ErrorCode; using RowsetMetaSharedContainerPtr = std::shared_ptr>; static StorageEngine* k_engine = nullptr; +static const std::string kTestDir = "/data_test/data/tablet_test"; +static const uint32_t MAX_PATH_LEN = 1024; class TestTablet : public testing::Test { public: @@ -65,6 +69,17 @@ class TestTablet : public testing::Test { }, "creation_time": 1553765670 })"; + char buffer[MAX_PATH_LEN]; + EXPECT_NE(getcwd(buffer, MAX_PATH_LEN), nullptr); + absolute_dir = std::string(buffer) + kTestDir; + + if (FileUtils::check_exist(absolute_dir)) { + EXPECT_TRUE(FileUtils::remove_all(absolute_dir).ok()); + } + EXPECT_TRUE(FileUtils::create_dir(absolute_dir).ok()); + EXPECT_TRUE(FileUtils::create_dir(absolute_dir + "/tablet_path").ok()); + _data_dir = std::make_unique(absolute_dir); + _data_dir->update_capacity(); doris::EngineOptions options; k_engine = new StorageEngine(options); @@ -72,6 +87,9 @@ class TestTablet : public testing::Test { } void TearDown() override { + if (FileUtils::check_exist(absolute_dir)) { + EXPECT_TRUE(FileUtils::remove_all(absolute_dir).ok()); + } if (k_engine != nullptr) { k_engine->stop(); delete k_engine; @@ -197,6 +215,8 @@ class TestTablet : public testing::Test { protected: std::string _json_rowset_meta; TabletMetaSharedPtr _tablet_meta; + string absolute_dir; + std::unique_ptr _data_dir; }; TEST_F(TestTablet, delete_expired_stale_rowset) { @@ -225,6 +245,41 @@ TEST_F(TestTablet, delete_expired_stale_rowset) { _tablet.reset(); } +TEST_F(TestTablet, pad_rowset) { + std::vector rs_metas; + auto ptr1 = std::make_shared(); + init_rs_meta(ptr1, 1, 2); + rs_metas.push_back(ptr1); + RowsetSharedPtr rowset1 = make_shared(nullptr, "", ptr1); + + auto ptr2 = std::make_shared(); + init_rs_meta(ptr2, 3, 4); + rs_metas.push_back(ptr2); + RowsetSharedPtr rowset2 = make_shared(nullptr, "", ptr2); + + auto ptr3 = std::make_shared(); + init_rs_meta(ptr3, 6, 7); + rs_metas.push_back(ptr3); + RowsetSharedPtr rowset3 = make_shared(nullptr, "", ptr3); + + for (auto& rowset : rs_metas) { + _tablet_meta->add_rs_meta(rowset); + } + + _data_dir->init(); + TabletSharedPtr _tablet(new Tablet(_tablet_meta, _data_dir.get())); + _tablet->init(); + + Version version(5, 5); + std::vector readers; + ASSERT_FALSE(_tablet->capture_rs_readers(version, &readers).ok()); + readers.clear(); + + PadRowsetAction action; + action._pad_rowset(_tablet, version); + ASSERT_TRUE(_tablet->capture_rs_readers(version, &readers).ok()); +} + TEST_F(TestTablet, cooldown_policy) { std::vector rs_metas; RowsetMetaSharedPtr ptr1(new RowsetMeta()); diff --git a/be/test/vec/function/function_running_difference_test.cpp b/be/test/vec/function/function_running_difference_test.cpp index 6b002097b78560..0245db4523beaa 100644 --- a/be/test/vec/function/function_running_difference_test.cpp +++ b/be/test/vec/function/function_running_difference_test.cpp @@ -55,7 +55,7 @@ TEST(FunctionRunningDifferenceTest, function_running_difference_test) { {{std::string("2019-07-18 12:00:06")}, (double)1.0}, {{std::string("2019-07-18 12:00:08")}, (double)2.0}, {{std::string("2019-07-18 12:00:10")}, (double)2.0}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { InputTypeSet input_types = {TypeIndex::Date}; diff --git a/be/test/vec/function/function_test_util.h b/be/test/vec/function/function_test_util.h index 2603d224a40010..6083278d2920ec 100644 --- a/be/test/vec/function/function_test_util.h +++ b/be/test/vec/function/function_test_util.h @@ -35,6 +35,7 @@ #include "vec/data_types/data_type_jsonb.h" #include "vec/data_types/data_type_number.h" #include "vec/data_types/data_type_string.h" +#include "vec/data_types/data_type_time.h" #include "vec/functions/simple_function_factory.h" namespace doris::vectorized { @@ -233,7 +234,8 @@ Status check_function(const std::string& func_name, const InputTypeSet& input_ty fn_ctx_return.type = doris_udf::FunctionContext::TYPE_BOOLEAN; } else if constexpr (std::is_same_v) { fn_ctx_return.type = doris_udf::FunctionContext::TYPE_INT; - } else if constexpr (std::is_same_v) { + } else if constexpr (std::is_same_v || + std::is_same_v) { fn_ctx_return.type = doris_udf::FunctionContext::TYPE_DOUBLE; } else if constexpr (std::is_same_v) { fn_ctx_return.type = doris_udf::FunctionContext::TYPE_DATETIME; @@ -293,7 +295,8 @@ Status check_function(const std::string& func_name, const InputTypeSet& input_ty const auto& column_data = field.get>().get_value(); EXPECT_EQ(expect_data.value, column_data.value) << " at row " << i; } else if constexpr (std::is_same_v || - std::is_same_v) { + std::is_same_v || + std::is_same_v) { const auto& column_data = field.get(); EXPECT_DOUBLE_EQ(expect_data, column_data) << " at row " << i; } else { diff --git a/be/test/vec/function/function_time_test.cpp b/be/test/vec/function/function_time_test.cpp index 18455a45667dcd..8a68a608b8d110 100644 --- a/be/test/vec/function/function_time_test.cpp +++ b/be/test/vec/function/function_time_test.cpp @@ -186,7 +186,7 @@ TEST(VTimestampFunctionsTest, timediff_test) { {{std::string("2019-00-18 12:00:00"), std::string("2019-07-18 13:01:02")}, Null()}, {{std::string("2019-07-18 12:00:00"), std::string("2019-07-00 13:01:02")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } TEST(VTimestampFunctionsTest, date_format_test) { @@ -849,7 +849,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18"), std::string("2019-07-18")}, Null()}, {{std::string("2019-07-18"), std::string("2019-07-00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -860,7 +860,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18"), std::string("2019-07-18")}, Null()}, {{std::string("2019-07-18"), std::string("2019-07-00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -871,7 +871,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18"), std::string("2019-07-18")}, Null()}, {{std::string("2019-07-18"), std::string("2019-07-00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -883,7 +883,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18 00:00:00"), std::string("2019-07-18")}, Null()}, {{std::string("2019-07-18 00:00:00"), std::string("2019-07-00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -895,7 +895,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18"), std::string("2019-07-18 00:00:00")}, Null()}, {{std::string("2019-07-18"), std::string("2019-07-00 00:00:00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { InputTypeSet input_types = {TypeIndex::DateTimeV2, TypeIndex::DateTimeV2}; @@ -906,7 +906,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18 00:00:00"), std::string("2019-07-18 00:00:00")}, Null()}, {{std::string("2019-07-18 00:00:00"), std::string("2019-07-00 00:00:00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -918,7 +918,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18 00:00:00"), std::string("2019-07-18")}, Null()}, {{std::string("2019-07-18 00:00:00"), std::string("2019-07-00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -930,7 +930,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18"), std::string("2019-07-18 00:00:00")}, Null()}, {{std::string("2019-07-18"), std::string("2019-07-00 00:00:00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -942,7 +942,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-00-18 00:00:00"), std::string("2019-07-18 00:00:00")}, Null()}, {{std::string("2019-07-18 00:00:00"), std::string("2019-07-00 00:00:00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } { @@ -957,7 +957,7 @@ TEST(VTimestampFunctionsTest, timediff_v2_test) { {{std::string("2019-07-18 00:00:00.123"), std::string("2019-07-00 00:00:00")}, Null()}}; - check_function(func_name, input_types, data_set); + check_function(func_name, input_types, data_set); } } diff --git a/bin/start_be.sh b/bin/start_be.sh index f73a6584f3357a..f34973af3cb06e 100755 --- a/bin/start_be.sh +++ b/bin/start_be.sh @@ -233,7 +233,8 @@ set_tcmalloc_heap_limit() { ## set hdfs conf export LIBHDFS3_CONF="${DORIS_HOME}/conf/hdfs-site.xml" -export MALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:30000,dirty_decay_ms:30000,oversize_threshold:0,lg_tcache_max:16" +# see https://github.com/jemalloc/jemalloc/issues/2366 +export JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:30000,dirty_decay_ms:30000,oversize_threshold:0,lg_tcache_max:16,prof:true,prof_prefix:jeprof.out" if [[ "${RUN_DAEMON}" -eq 1 ]]; then nohup ${LIMIT:+${LIMIT}} "${DORIS_HOME}/lib/doris_be" "$@" >>"${LOG_DIR}/be.out" 2>&1 result.pdf + ``` + +In the above jeprof related commands, remove the `--base` option to analyze only a single heap dump file + + #### ASAN Except for the unreasonable use and leakage of memory. Sometimes there will be memory access illegal address and other errors. At this time, we can use [ASAN](https://github.com/google/sanitizers/wiki/addresssanitizer) to help us find the cause of the problem. Like LSAN, ASAN is integrated into GCC. Doris can open this function by compiling as follows diff --git a/docs/en/docs/admin-manual/cluster-management/elastic-expansion.md b/docs/en/docs/admin-manual/cluster-management/elastic-expansion.md index 12cf8fc27e2b13..b921058c1ab3c8 100644 --- a/docs/en/docs/admin-manual/cluster-management/elastic-expansion.md +++ b/docs/en/docs/admin-manual/cluster-management/elastic-expansion.md @@ -106,7 +106,7 @@ You can also view the BE node through the front-end page connection: ``http://fe All of the above methods require Doris's root user rights. -The expansion and scaling process of BE nodes does not affect the current system operation and the tasks being performed, and does not affect the performance of the current system. Data balancing is done automatically. Depending on the amount of data available in the cluster, the cluster will be restored to load balancing in a few hours to a day. For cluster load, see the [Tablet Load Balancing Document](../../maint-monitor/tablet-repair-and-balance). +The expansion and scaling process of BE nodes does not affect the current system operation and the tasks being performed, and does not affect the performance of the current system. Data balancing is done automatically. Depending on the amount of data available in the cluster, the cluster will be restored to load balancing in a few hours to a day. For cluster load, see the [Tablet Load Balancing Document](../maint-monitor/tablet-repair-and-balance). ### Add BE nodes diff --git a/docs/en/docs/admin-manual/config/be-config.md b/docs/en/docs/admin-manual/config/be-config.md index 4d109b851d058a..00ecb77a8ceef6 100644 --- a/docs/en/docs/admin-manual/config/be-config.md +++ b/docs/en/docs/admin-manual/config/be-config.md @@ -57,13 +57,13 @@ There are two ways to configure BE configuration items: After BE starts, the configuration items can be dynamically set with the following commands. ``` - curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}' + curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value} ``` In version 0.13 and before, the configuration items modified in this way will become invalid after the BE process restarts. In 0.14 and later versions, the modified configuration can be persisted through the following command. The modified configuration items are stored in the `be_custom.conf` file. ``` - curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}&persis=true + curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}\&persist=true ``` ## Examples @@ -346,7 +346,7 @@ There are two ways to configure BE configuration items: #### `doris_max_scan_key_num` * Type: int -* Description: Used to limit the maximum number of scan keys that a scan node can split in a query request. When a conditional query request reaches the scan node, the scan node will try to split the conditions related to the key column in the query condition into multiple scan key ranges. After that, these scan key ranges will be assigned to multiple scanner threads for data scanning. A larger value usually means that more scanner threads can be used to increase the parallelism of the scanning operation. However, in high concurrency scenarios, too many threads may bring greater scheduling overhead and system load, and will slow down the query response speed. An empirical value is 50. This configuration can be configured separately at the session level. For details, please refer to the description of `max_scan_key_num` in [Variables](../../../advanced/variables). +* Description: Used to limit the maximum number of scan keys that a scan node can split in a query request. When a conditional query request reaches the scan node, the scan node will try to split the conditions related to the key column in the query condition into multiple scan key ranges. After that, these scan key ranges will be assigned to multiple scanner threads for data scanning. A larger value usually means that more scanner threads can be used to increase the parallelism of the scanning operation. However, in high concurrency scenarios, too many threads may bring greater scheduling overhead and system load, and will slow down the query response speed. An empirical value is 50. This configuration can be configured separately at the session level. For details, please refer to the description of `max_scan_key_num` in [Variables](../../advanced/variables). - When the concurrency cannot be improved in high concurrency scenarios, try to reduce this value and observe the impact. * Default value: 48 @@ -406,7 +406,7 @@ There are two ways to configure BE configuration items: #### `max_pushdown_conditions_per_column` * Type: int -* Description: Used to limit the maximum number of conditions that can be pushed down to the storage engine for a single column in a query request. During the execution of the query plan, the filter conditions on some columns can be pushed down to the storage engine, so that the index information in the storage engine can be used for data filtering, reducing the amount of data that needs to be scanned by the query. Such as equivalent conditions, conditions in IN predicates, etc. In most cases, this parameter only affects queries containing IN predicates. Such as `WHERE colA IN (1,2,3,4, ...)`. A larger number means that more conditions in the IN predicate can be pushed to the storage engine, but too many conditions may cause an increase in random reads, and in some cases may reduce query efficiency. This configuration can be individually configured for session level. For details, please refer to the description of `max_pushdown_conditions_per_column` in [Variables](../../advanced/variables.md). +* Description: Used to limit the maximum number of conditions that can be pushed down to the storage engine for a single column in a query request. During the execution of the query plan, the filter conditions on some columns can be pushed down to the storage engine, so that the index information in the storage engine can be used for data filtering, reducing the amount of data that needs to be scanned by the query. Such as equivalent conditions, conditions in IN predicates, etc. In most cases, this parameter only affects queries containing IN predicates. Such as `WHERE colA IN (1,2,3,4, ...)`. A larger number means that more conditions in the IN predicate can be pushed to the storage engine, but too many conditions may cause an increase in random reads, and in some cases may reduce query efficiency. This configuration can be individually configured for session level. For details, please refer to the description of `max_pushdown_conditions_per_column` in [Variables](../../advanced/variables). * Default value: 1024 * Example diff --git a/docs/en/docs/admin-manual/http-actions/fe/table-schema-action.md b/docs/en/docs/admin-manual/http-actions/fe/table-schema-action.md index 62b6a457b33aac..4cdb7528dd4c47 100644 --- a/docs/en/docs/admin-manual/http-actions/fe/table-schema-action.md +++ b/docs/en/docs/admin-manual/http-actions/fe/table-schema-action.md @@ -97,7 +97,7 @@ None "count": 0 } ``` -Note: The difference is that the `http` method returns more `aggregation_type` fields than the `http v2` method. The `http v2` is enabled by setting `enable_http_server_v2`. For detailed parameter descriptions, see [fe parameter settings](../../../config/fe-config) +Note: The difference is that the `http` method returns more `aggregation_type` fields than the `http v2` method. The `http v2` is enabled by setting `enable_http_server_v2`. For detailed parameter descriptions, see [fe parameter settings](../../config/fe-config) ## Examples diff --git a/docs/en/docs/admin-manual/http-actions/pad-rowset.md b/docs/en/docs/admin-manual/http-actions/pad-rowset.md new file mode 100644 index 00000000000000..9ff6b890535a4e --- /dev/null +++ b/docs/en/docs/admin-manual/http-actions/pad-rowset.md @@ -0,0 +1,41 @@ +--- +{ + "title": "PAD ROWSET", + "language": "en" +} +--- + + + +# PAD ROWSET +## description + + Pad one empty rowset as one substitute for error replica. + + METHOD: POST + URI: http://be_host:be_http_port/api/pad_rowset?tablet_id=xxx&start_version=xxx&end_version=xxx + +## example + + curl -X POST "http://hostname:8088/api/pad_rowset?tablet_id=123456\&start_version=1111111\$end_version=1111112" + +## keyword + + ROWSET,TABLET,ROWSET,TABLET diff --git a/docs/en/docs/admin-manual/maint-monitor/disk-capacity.md b/docs/en/docs/admin-manual/maint-monitor/disk-capacity.md index 73da70e49dc00e..047b7f6eb5f1dc 100644 --- a/docs/en/docs/admin-manual/maint-monitor/disk-capacity.md +++ b/docs/en/docs/admin-manual/maint-monitor/disk-capacity.md @@ -162,6 +162,6 @@ When the disk capacity is higher than High Watermark or even Flood Stage, many o ```rm -rf data/0/12345/``` - * Delete tablet metadata (refer to [Tablet metadata management tool](./tablet-meta-tool.md)) + * Delete tablet metadata (refer to [Tablet metadata management tool](./tablet-meta-tool)) ```./lib/meta_tool --operation=delete_header --root_path=/path/to/root_path --tablet_id=12345 --schema_hash= 352781111``` diff --git a/docs/en/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md b/docs/en/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md index aa3061a7276a71..be8662dce67e25 100644 --- a/docs/en/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md +++ b/docs/en/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md @@ -28,10 +28,10 @@ under the License. -Ideally, in [Memory Limit Exceeded Analysis](../admin-manual/memory-management/memory-limit-exceeded-analysis.md), we regularly detect the remaining available memory of the operating system and respond in time when the memory is insufficient , such as triggering the memory GC to release the cache or cancel the memory overrun query, but because refreshing process memory statistics and memory GC both have a certain lag, and it is difficult for us to completely catch all large memory applications, there are still OOM risk. +Ideally, in [Memory Limit Exceeded Analysis](./memory-limit-exceeded-analysis), we regularly detect the remaining available memory of the operating system and respond in time when the memory is insufficient , such as triggering the memory GC to release the cache or cancel the memory overrun query, but because refreshing process memory statistics and memory GC both have a certain lag, and it is difficult for us to completely catch all large memory applications, there are still OOM risk. ## Solution -Refer to [BE Configuration Items](../admin-manual/config/be-config.md) to reduce `mem_limit` and increase `max_sys_mem_available_low_water_mark_bytes` in `be.conf`. +Refer to [BE Configuration Items](../../../admin-manual/config/be-config) to reduce `mem_limit` and increase `max_sys_mem_available_low_water_mark_bytes` in `be.conf`. ## Memory analysis If you want to further understand the memory usage location of the BE process before OOM and reduce the memory usage of the process, you can refer to the following steps to analyze. @@ -75,8 +75,8 @@ Memory Tracker Summary: 6. `type=load` imports a lot of memory. -7. When the `type=global` memory is used for a long time, continue to check the `type=global` detailed statistics in the second half of the `Memory Tracker Summary` log. When DataPageCache, IndexPageCache, SegmentCache, ChunkAllocator, LastestSuccessChannelCache, etc. use a lot of memory, refer to [BE Configuration Item](../admin-manual/config/be-config.md) to consider modifying the size of the cache; when Orphan memory usage is too large, Continue the analysis as follows. - - If the sum of the tracker statistics of `Parent Label=Orphan` only accounts for a small part of the Orphan memory, it means that there is currently a large amount of memory that has no accurate statistics, such as the memory of the brpc process. At this time, you can consider using the heap profile [Memory Tracker]( ../community/developer-guide/debug-tool.md) to further analyze memory locations. +7. When the `type=global` memory is used for a long time, continue to check the `type=global` detailed statistics in the second half of the `Memory Tracker Summary` log. When DataPageCache, IndexPageCache, SegmentCache, ChunkAllocator, LastestSuccessChannelCache, etc. use a lot of memory, refer to [BE Configuration Item](../../../admin-manual/config/be-config) to consider modifying the size of the cache; when Orphan memory usage is too large, Continue the analysis as follows. + - If the sum of the tracker statistics of `Parent Label=Orphan` only accounts for a small part of the Orphan memory, it means that there is currently a large amount of memory that has no accurate statistics, such as the memory of the brpc process. At this time, you can consider using the heap profile [Memory Tracker]( ../../../../community/developer-guide/debug-tool) to further analyze memory locations. - If the tracker statistics of `Parent Label=Orphan` account for most of Orphan’s memory, when `Label=TabletManager` uses a lot of memory, further check the number of tablets in the cluster. If there are too many tablets, delete them and they will not be used table or data; when `Label=StorageEngine` uses too much memory, further check the number of segment files in the cluster, and consider manually triggering compaction if the number of segment files is too large; 8. If `be/log/be.INFO` does not print the `Memory Tracker Summary` log before OOM, it means that BE did not detect the memory limit in time, observe Grafana memory monitoring to confirm the memory growth trend of BE before OOM, if OOM is reproducible, consider adding `memory_debug=true` in `be.conf`, after restarting the cluster, the cluster memory statistics will be printed every second, observe the last `Memory Tracker Summary` log before OOM, and continue to step 3 for analysis; diff --git a/docs/en/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md b/docs/en/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md index fad526c37e2798..540730365559a7 100644 --- a/docs/en/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md +++ b/docs/en/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md @@ -49,7 +49,7 @@ The error message is divided into three parts: At the same time, you can find the following log in log/be.INFO to confirm whether the memory usage of the current process meets expectations. The log is also divided into three parts: 1. `Process Memory Summary`: process memory statistics. 2. `Alloc Stacktrace`: The stack that triggers the memory overrun detection, which is not necessarily the location of the large memory application. -3. `Memory Tracker Summary`: Process memory tracker statistics, refer to [Memory Tracker](../admin-manual/memory-management/memory-tracker.md) to analyze the location of memory usage. +3. `Memory Tracker Summary`: Process memory tracker statistics, refer to [Memory Tracker](./memory-tracker) to analyze the location of memory usage. Notice: 1. The printing interval of the process memory overrun log is 1s. After the process memory exceeds the limit, the memory applications in most locations of BE will sense it, and try to make a predetermined callback method, and print the process memory overrun log, so if the log is If the value of Try Alloc is small, you don’t need to pay attention to `Alloc Stacktrace`, just analyze `Memory Tracker Summary` directly. 2. When the process memory exceeds the limit, BE will trigger memory GC. diff --git a/docs/en/docs/advanced/alter-table/replace-table.md b/docs/en/docs/advanced/alter-table/replace-table.md index 21fd3b95d0664e..204b395a44dc27 100644 --- a/docs/en/docs/advanced/alter-table/replace-table.md +++ b/docs/en/docs/advanced/alter-table/replace-table.md @@ -29,7 +29,7 @@ under the License. In version 0.14, Doris supports atomic replacement of two tables. This operation only applies to OLAP tables. -For partition level replacement operations, please refer to [Temporary Partition Document](../../partition/table-temp-partition) +For partition level replacement operations, please refer to [Temporary Partition Document](../partition/table-temp-partition) ## Syntax @@ -69,4 +69,4 @@ If `swap` is `false`, the operation is as follows: 1. Atomic Overwrite Operation - In some cases, the user wants to be able to rewrite the data of a certain table, but if it is dropped and then imported, there will be a period of time in which the data cannot be viewed. At this time, the user can first use the `CREATE TABLE LIKE` statement to create a new table with the same structure, import the new data into the new table, and replace the old table atomically through the replacement operation to achieve the goal. For partition level atomic overwrite operation, please refer to [Temporary partition document](../../partition/table-temp-partition) + In some cases, the user wants to be able to rewrite the data of a certain table, but if it is dropped and then imported, there will be a period of time in which the data cannot be viewed. At this time, the user can first use the `CREATE TABLE LIKE` statement to create a new table with the same structure, import the new data into the new table, and replace the old table atomically through the replacement operation to achieve the goal. For partition level atomic overwrite operation, please refer to [Temporary partition document](../partition/table-temp-partition) diff --git a/docs/en/docs/advanced/alter-table/schema-change.md b/docs/en/docs/advanced/alter-table/schema-change.md index 0503dac489932c..7e8ca9e3f946c3 100644 --- a/docs/en/docs/advanced/alter-table/schema-change.md +++ b/docs/en/docs/advanced/alter-table/schema-change.md @@ -68,7 +68,7 @@ The basic process of executing a Schema Change is to generate a copy of the inde Before starting the conversion of historical data, Doris will obtain a latest transaction ID. And wait for all import transactions before this Transaction ID to complete. This Transaction ID becomes a watershed. This means that Doris guarantees that all import tasks after the watershed will generate data for both the original Index and the new Index. In this way, when the historical data conversion is completed, the data in the new Index can be guaranteed to be complete. ## Create Job -The specific syntax for creating a Schema Change can be found in the help [ALTER TABLE COLUMN](../../sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-COLUMN.md) for the description of the Schema Change section . +The specific syntax for creating a Schema Change can be found in the help [ALTER TABLE COLUMN](../../sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-COLUMN) for the description of the Schema Change section . The creation of Schema Change is an asynchronous process. After the job is submitted successfully, the user needs to view the job progress through the `SHOW ALTER TABLE COLUMN` command. ## View Job @@ -283,5 +283,5 @@ SHOW ALTER TABLE COLUMN\G; ## More Help -For more detailed syntax and best practices used by Schema Change, see [ALTER TABLE COLUMN](../../../sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-COLUMN) command manual, you can also enter `HELP ALTER TABLE COLUMN` in the MySql client command line for more help information. +For more detailed syntax and best practices used by Schema Change, see [ALTER TABLE COLUMN](../../sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-COLUMN) command manual, you can also enter `HELP ALTER TABLE COLUMN` in the MySql client command line for more help information. diff --git a/docs/en/docs/data-operate/import/import-scenes/external-storage-load.md b/docs/en/docs/data-operate/import/import-scenes/external-storage-load.md index ab8bfa7677458d..eaff843294e207 100644 --- a/docs/en/docs/data-operate/import/import-scenes/external-storage-load.md +++ b/docs/en/docs/data-operate/import/import-scenes/external-storage-load.md @@ -82,7 +82,7 @@ Hdfs load creates an import statement. The import method is basically the same a 3. Check import status - Broker load is an asynchronous import method. The specific import results can be accessed through [SHOW LOAD](../../../../sql-manual/sql-reference/Show-Statements/SHOW-LOAD) command to view + Broker load is an asynchronous import method. The specific import results can be accessed through [SHOW LOAD](../../../sql-manual/sql-reference/Show-Statements/SHOW-LOAD) command to view ``` mysql> show load order by createtime desc limit 1\G; diff --git a/docs/en/docs/data-operate/import/import-scenes/jdbc-load.md b/docs/en/docs/data-operate/import/import-scenes/jdbc-load.md index 4dd61e18a6fbf7..45c743dc6dad03 100644 --- a/docs/en/docs/data-operate/import/import-scenes/jdbc-load.md +++ b/docs/en/docs/data-operate/import/import-scenes/jdbc-load.md @@ -160,4 +160,4 @@ Please note the following: As mentioned earlier, we recommend that when using INSERT to import data, use the "batch" method to import, rather than a single insert. - At the same time, we can set a Label for each INSERT operation. Through the [Label mechanism](../load-atomicity), the idempotency and atomicity of operations can be guaranteed, and the data will not be lost or heavy in the end. For the specific usage of Label in INSERT, you can refer to the [INSERT](../../../sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/INSERT) document. + At the same time, we can set a Label for each INSERT operation. Through the [Label mechanism](./load-atomicity), the idempotency and atomicity of operations can be guaranteed, and the data will not be lost or heavy in the end. For the specific usage of Label in INSERT, you can refer to the [INSERT](../../../sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/INSERT) document. diff --git a/docs/en/docs/data-operate/import/import-way/stream-load-manual.md b/docs/en/docs/data-operate/import/import-way/stream-load-manual.md index 51103df3b97423..1d8d7e0254ca76 100644 --- a/docs/en/docs/data-operate/import/import-way/stream-load-manual.md +++ b/docs/en/docs/data-operate/import/import-way/stream-load-manual.md @@ -65,8 +65,7 @@ The final result of the import is returned to the user by Coordinator BE. ## Support data format -Currently Stream Load supports two data formats: CSV (text) and JSON - +Stream Load currently supports data formats: CSV (text), JSON, PARQUET and ORC. ## Basic operations ### Create Load diff --git a/docs/en/docs/data-operate/import/load-manual.md b/docs/en/docs/data-operate/import/load-manual.md index 84469e7e051de5..1eedeed4298be2 100644 --- a/docs/en/docs/data-operate/import/load-manual.md +++ b/docs/en/docs/data-operate/import/load-manual.md @@ -60,8 +60,8 @@ Different import methods support slightly different data formats. | Import Methods | Supported Formats | | -------------- | ----------------------- | -| Broker Load | Parquet, ORC, csv, gzip | -| Stream Load | csv, gzip, json | +| Broker Load | parquet, orc, csv, gzip | +| Stream Load | csv, json, parquet, orc | | Routine Load | csv, json | ## import instructions diff --git a/docs/en/docs/data-table/basic-usage.md b/docs/en/docs/data-table/basic-usage.md index 3f05aa5e1ff0e8..8da31f9652f6c3 100644 --- a/docs/en/docs/data-table/basic-usage.md +++ b/docs/en/docs/data-table/basic-usage.md @@ -142,7 +142,7 @@ mysql> USE example_db; Database changed ``` -Doris supports [composite partition and single partition](../data-partition) two table building methods. The following takes the aggregation model as an example to demonstrate how to create two partitioned data tables. +Doris supports [composite partition and single partition](./data-partition) two table building methods. The following takes the aggregation model as an example to demonstrate how to create two partitioned data tables. #### Single partition @@ -674,7 +674,7 @@ mysql> select sum(table1.pv) from table1 join [shuffle] table2 where table1.site When deploying multiple FE nodes, you can deploy a load balancing layer on top of multiple FEs to achieve high availability of Doris. -Please refer to [Load Balancing](../../admin-manual/cluster-management/load-balancing) for details on installation, deployment, and usage. +Please refer to [Load Balancing](../admin-manual/cluster-management/load-balancing) for details on installation, deployment, and usage. ## Data update and deletion diff --git a/docs/en/docs/data-table/data-model.md b/docs/en/docs/data-table/data-model.md index c34b2d816d3ae0..feb83964496fe2 100644 --- a/docs/en/docs/data-table/data-model.md +++ b/docs/en/docs/data-table/data-model.md @@ -311,7 +311,7 @@ That is to say, the merge-on-read implementation of the Unique model can be comp The merge-on-write implementation of the Unique model is completely different from the aggregation model. The query performance is closer to the duplicate model. Compared with the aggregation model, it has a better query performance. -In version 1.2, as a new feature, merge-on-write is disabled by default, and users can enable it by adding the following property +In version 1.2.0, as a new feature, merge-on-write is disabled by default, and users can enable it by adding the following property ``` "enable_unique_key_merge_on_write" = "true" diff --git a/docs/en/docs/data-table/hit-the-rollup.md b/docs/en/docs/data-table/hit-the-rollup.md index 990518c39cd7eb..94616965382780 100644 --- a/docs/en/docs/data-table/hit-the-rollup.md +++ b/docs/en/docs/data-table/hit-the-rollup.md @@ -44,7 +44,7 @@ Because Uniq is only a special case of the Aggregate model, we do not distinguis Example 1: Get the total consumption per user -Following [Data Model Aggregate Model](./data-model.md) in the **Aggregate Model** section, the Base table structure is as follows: +Following [Data Model Aggregate Model](./data-model) in the **Aggregate Model** section, the Base table structure is as follows: | ColumnName | Type | AggregationType | Comment | |-------------------| ------------ | --------------- | -------------------------------------- | @@ -128,7 +128,7 @@ Doris automatically hits the ROLLUP table. #### ROLLUP in Duplicate Model -Because the Duplicate model has no aggregate semantics. So the ROLLLUP in this model has lost the meaning of "scroll up". It's just to adjust the column order to hit the prefix index. In the next section, we will introduce prefix index in [data model prefix index](./data-model.md), and how to use ROLLUP to change prefix index in order to achieve better query efficiency. +Because the Duplicate model has no aggregate semantics. So the ROLLLUP in this model has lost the meaning of "scroll up". It's just to adjust the column order to hit the prefix index. In the next section, we will introduce prefix index in [data model prefix index](./data-model), and how to use ROLLUP to change prefix index in order to achieve better query efficiency. ## ROLLUP adjusts prefix index diff --git a/docs/en/docs/data-table/index/ngram-bloomfilter-index.md b/docs/en/docs/data-table/index/ngram-bloomfilter-index.md new file mode 100644 index 00000000000000..331b78468d2ac3 --- /dev/null +++ b/docs/en/docs/data-table/index/ngram-bloomfilter-index.md @@ -0,0 +1,79 @@ +--- +{ + "title": "NGram BloomFilter Index", + "language": "en" +} +--- + + + +# Doris NGram BloomFilter Index + +In order to improve the like query performance, the NGram BloomFilter index was implemented, which referenced to the ClickHouse's ngrambf skip indices; + +## Create Column With NGram BloomFilter Index + +During create table: + +```sql +CREATE TABLE `table3` ( + `siteid` int(11) NULL DEFAULT "10" COMMENT "", + `citycode` smallint(6) NULL COMMENT "", + `username` varchar(100) NULL DEFAULT "" COMMENT "", + INDEX idx_ngrambf (`username`) USING NGRAM_BF PROPERTIES("gram_size"="3", "bf_size"="256") COMMENT 'username ngram_bf index' +) ENGINE=OLAP +AGGREGATE KEY(`siteid`, `citycode`, `username`) COMMENT "OLAP" +DISTRIBUTED BY HASH(`siteid`) BUCKETS 10 +PROPERTIES ( +"replication_num" = "1" +); + +-- PROPERTIES("gram_size"="3", "bf_size"="1024"),indicate the number of gram and bytes of bloom filter respectively. +-- the gram size set to same as the like query pattern string length. and the suitable bytes of bloom filter can be get by test, more larger more better, 256 maybe is a good start. +-- Usually, if the data's cardinality is small, you can increase the bytes of bloom filter to improve the efficiency. +``` + +## Show NGram BloomFilter Index + +```sql +show index from example_db.table3; +``` + +## Drop NGram BloomFilter Index + + +```sql +alter table example_db.table3 drop index idx_ngrambf; +``` + +## Add NGram BloomFilter Index + +Add NGram BloomFilter Index for old column: + +```sql +alter table example_db.table3 add index idx_ngrambf(username) using NGRAM_BF PROPERTIES("gram_size"="3", "bf_size"="512")comment 'username ngram_bf index' +``` + +## **Some notes about Doris NGram BloomFilter** + +1. NGram BloomFilter only support CHAR/VARCHAR/String column. +2. NGram BloomFilter index and BloomFilter index should be exclusive on same column +3. The gram number and bytes of BloomFilter can be adjust and optimize. Like if gram is too small, you can increase the bytes of BloomFilter. +4. To find some query whether use the NGram BloomFilter index, you can check the query profile. diff --git a/docs/en/docs/ecosystem/external-table/hive-bitmap-udf.md b/docs/en/docs/ecosystem/external-table/hive-bitmap-udf.md index c56fa7a3ae553a..bf4fdbf950fbbd 100644 --- a/docs/en/docs/ecosystem/external-table/hive-bitmap-udf.md +++ b/docs/en/docs/ecosystem/external-table/hive-bitmap-udf.md @@ -106,4 +106,4 @@ select k1,bitmap_union(uuid) from hive_bitmap_table group by k1 ## Hive Bitmap import into Doris - see details: [Spark Load](../../../data-operate/import/import-way/spark-load-manual) -> Basic operation -> Create load(Example 3: when the upstream data source is hive binary type table) + see details: [Spark Load](../../data-operate/import/import-way/spark-load-manual) -> Basic operation -> Create load(Example 3: when the upstream data source is hive binary type table) diff --git a/docs/en/docs/ecosystem/external-table/multi-catalog.md b/docs/en/docs/ecosystem/external-table/multi-catalog.md index 08228e32900bf9..8c52432dcf4364 100644 --- a/docs/en/docs/ecosystem/external-table/multi-catalog.md +++ b/docs/en/docs/ecosystem/external-table/multi-catalog.md @@ -67,7 +67,7 @@ This function will be used as a supplement and enhancement to the previous exter 4. Drop Catalog - Both Database and Table in External Catalog are read-only. However, the catalog can be deleted (Internal Catalog cannot be deleted). An External Catalog can be dropped via the [DROP CATALOG](../../../sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-CATALOG) command. + Both Database and Table in External Catalog are read-only. However, the catalog can be deleted (Internal Catalog cannot be deleted). An External Catalog can be dropped via the [DROP CATALOG](../../sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-CATALOG) command. This operation will only delete the mapping information of the catalog in Doris, and will not modify or change the contents of any external data source. diff --git a/docs/en/docs/ecosystem/flink-doris-connector.md b/docs/en/docs/ecosystem/flink-doris-connector.md index e5d947babd350e..15a2caf2f2493b 100644 --- a/docs/en/docs/ecosystem/flink-doris-connector.md +++ b/docs/en/docs/ecosystem/flink-doris-connector.md @@ -139,6 +139,8 @@ Add flink-doris-connector Maven dependencies 1. Please replace the corresponding Connector and Flink dependency versions according to different Flink and Scala versions. Version 1.1.0 only supports Flink1.14 +2. You can also download the relevant version jar package from [here](https://repo.maven.apache.org/maven2/org/apache/doris/). + ## How to use There are three ways to use Flink Doris Connector. @@ -419,9 +421,17 @@ The most suitable scenario for using Flink Doris Connector is to synchronize sou 1. The Flink Doris Connector mainly relies on Checkpoint for streaming writing, so the interval between Checkpoints is the visible delay time of the data. 2. To ensure the Exactly Once semantics of Flink, the Flink Doris Connector enables two-phase commit by default, and Doris enables two-phase commit by default after version 1.1. 1.0 can be enabled by modifying the BE parameters, please refer to [two_phase_commit](../data-operate/import/import-way/stream-load-manual.md). -### common problem +## FAQ + +1. **After Doris Source finishes reading data, why does the stream end?** + +Currently Doris Source is a bounded stream and does not support CDC reading. + +2. **Can Flink read Doris and perform conditional pushdown?** -1. **Bitmap type write** +By configuring the doris.filter.query parameter, refer to the configuration section for details. + +3. **How to write Bitmap type?** ```sql CREATE TABLE bitmap_sink ( @@ -439,12 +449,28 @@ WITH ( 'sink.properties.columns' = 'dt,page,user_id,user_id=to_bitmap(user_id)' ) ```` -2. **errCode = 2, detailMessage = Label [label_0_1] has already been used, relate to txn [19650]** +4. **errCode = 2, detailMessage = Label [label_0_1] has already been used, relate to txn [19650]** In the Exactly-Once scenario, the Flink Job must be restarted from the latest Checkpoint/Savepoint, otherwise the above error will be reported. When Exactly-Once is not required, it can also be solved by turning off 2PC commits (sink.enable-2pc=false) or changing to a different sink.label-prefix. -3. **errCode = 2, detailMessage = transaction [19650] not found** +5. **errCode = 2, detailMessage = transaction [19650] not found** Occurred in the Commit phase, the transaction ID recorded in the checkpoint has expired on the FE side, and the above error will occur when committing again at this time. -At this time, it cannot be started from the checkpoint, and the expiration time can be extended by modifying the streaming_label_keep_max_second configuration in fe.conf, which defaults to 12 hours. \ No newline at end of file +At this time, it cannot be started from the checkpoint, and the expiration time can be extended by modifying the streaming_label_keep_max_second configuration in fe.conf, which defaults to 12 hours. + +6. **errCode = 2, detailMessage = current running txns on db 10006 is 100, larger than limit 100** + +This is because the concurrent import of the same library exceeds 100, which can be solved by adjusting the parameter `max_running_txn_num_per_db` of fe.conf. For details, please refer to [max_running_txn_num_per_db](https://doris.apache.org/zh-CN/docs/dev/admin-manual/config/fe-config/#max_running_txn_num_per_db) + +7. **How to ensure the order of a batch of data when Flink writes to the Uniq model?** + +You can add sequence column configuration to ensure that, for details, please refer to [sequence](https://doris.apache.org/zh-CN/docs/dev/data-operate/update-delete/sequence-column-manual) + +8. **The Flink task does not report an error, but the data cannot be synchronized? ** + +Before Connector1.1.0, it was written in batches, and the writing was driven by data. It was necessary to determine whether there was data written upstream. After 1.1.0, it depends on Checkpoint, and Checkpoint must be enabled to write. + +9. **tablet writer write failed, tablet_id=190958, txn_id=3505530, err=-235** + +It usually occurs before Connector1.1.0, because the writing frequency is too fast, resulting in too many versions. The frequency of Streamload can be reduced by setting the sink.batch.size and sink.batch.interval parameters. \ No newline at end of file diff --git a/docs/en/docs/install/source-install/compilation.md b/docs/en/docs/install/source-install/compilation.md index 727ad228a74255..ecc063616fa29b 100644 --- a/docs/en/docs/install/source-install/compilation.md +++ b/docs/en/docs/install/source-install/compilation.md @@ -107,8 +107,6 @@ This document focuses on how to code Doris through source code. After starting the mirror, you should be in the container. The Doris source code can be downloaded from the following command (local source directory mounted is not required): ``` - $ wget https://dist.apache.org/repos/dist/dev/doris/xxx.tar.gz - or $ git clone https://github.com/apache/doris.git ``` diff --git a/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_double.md b/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_double.md index ef6e18d0a46e0f..2b7a6dddcc11a4 100644 --- a/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_double.md +++ b/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_double.md @@ -37,6 +37,8 @@ Use [] to denote array subscripts, starting at 0. The content of path cannot contain ",[and]. If the json_string format is incorrect, or the json_path format is incorrect, or matches cannot be found, NULL is returned. +In addition, it is recommended to use the jsonb type and jsonb_extract_XXX function performs the same function. + ### example 1. Get the value of key as "k1" diff --git a/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_int.md b/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_int.md index 20144d9fd78dd8..4b5a63f93e75ce 100644 --- a/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_int.md +++ b/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_int.md @@ -37,6 +37,8 @@ Use [] to denote array subscripts, starting at 0. The content of path cannot contain ",[and]. If the json_string format is incorrect, or the json_path format is incorrect, or matches cannot be found, NULL is returned. +In addition, it is recommended to use the jsonb type and jsonb_extract_XXX function performs the same function. + ### example 1. Get the value of key as "k1" diff --git a/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_string.md b/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_string.md index 746750e995c80a..50ece140e6ab07 100644 --- a/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_string.md +++ b/docs/en/docs/sql-manual/sql-functions/json-functions/get_json_string.md @@ -37,6 +37,8 @@ Use [] to denote array subscripts, starting at 0. The content of path cannot contain ",[and]. If the json_string format is incorrect, or the json_path format is incorrect, or matches cannot be found, NULL is returned. +In addition, it is recommended to use the jsonb type and jsonb_extract_XXX function performs the same function. + ### example 1. Get the value of key as "k1" diff --git a/docs/en/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md b/docs/en/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md index ccba690ec357e5..e5dfb6cefc3e55 100644 --- a/docs/en/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md +++ b/docs/en/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md @@ -25,6 +25,13 @@ under the License. --> ## jsonb_extract + + + +jsonb_extract + + + ### description jsonb_extract functions extract field specified by json_path from JSONB. A series of functions are provided for different datatype. diff --git a/docs/en/docs/sql-manual/sql-functions/string-functions/uuid.md b/docs/en/docs/sql-manual/sql-functions/string-functions/uuid.md index 328fe9c18e0802..5000354d53c79f 100644 --- a/docs/en/docs/sql-manual/sql-functions/string-functions/uuid.md +++ b/docs/en/docs/sql-manual/sql-functions/string-functions/uuid.md @@ -25,6 +25,13 @@ under the License. --> ## uuid + + + +uuid + + + ### description #### Syntax diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md index d8beb732c42f9c..69b81b5c18a3c8 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md @@ -62,7 +62,7 @@ Notice: - The partition is left closed and right open. If the user only specifies the right boundary, the system will automatically determine the left boundary - If the bucketing method is not specified, the bucketing method and bucket number used for creating the table would be automatically used - If the bucketing method is specified, only the number of buckets can be modified, not the bucketing method or the bucketing column. If the bucketing method is specified but the number of buckets not be specified, the default value `10` will be used for bucket number instead of the number specified when the table is created. If the number of buckets modified, the bucketing method needs to be specified simultaneously. -- The ["key"="value"] section can set some attributes of the partition, see [CREATE TABLE](../../Create/CREATE-TABLE) +- The ["key"="value"] section can set some attributes of the partition, see [CREATE TABLE](../Create/CREATE-TABLE) - If the user does not explicitly create a partition when creating a table, adding a partition by ALTER is not supported 2. Delete the partition diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md index c19578901c0025..596e7cfcc5e3ae 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md @@ -68,7 +68,7 @@ Notice: - If from_index_name is not specified, it will be created from base index by default - Columns in rollup table must be columns already in from_index -- In properties, the storage format can be specified. For details, see [CREATE TABLE](../../Create/CREATE-TABLE) +- In properties, the storage format can be specified. For details, see [CREATE TABLE](../Create/CREATE-TABLE) 3. Delete rollup index diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md index 6f528fc80f7415..6408b83b4aced3 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md @@ -352,6 +352,8 @@ distribution_desc If set to true, the addition and deletion of value columns can be done more quickly and synchronously. `"light_schema_change"="true"` + + This feature is enabled by default after v1.2.1. * `disable_auto_compaction` diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md index 088eebabefe71e..50d655d65a427e 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md @@ -61,6 +61,12 @@ DROP STORAGE POLICY policy_name1 ```sql DROP ROW POLICY test_row_policy_1 on table1 for test ``` + +3. Drop the storage policy named policy_name1 +```sql +DROP STORAGE POLICY policy_name1 +``` + ### Keywords DROP, POLICY diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/BROKER-LOAD.md b/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/BROKER-LOAD.md index d2506675d90669..4c7726d6667a45 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/BROKER-LOAD.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/BROKER-LOAD.md @@ -489,7 +489,7 @@ WITH BROKER broker_name 2. Cancel the import task - Import tasks that have been submitted but not yet completed can be canceled by the [CANCEL LOAD](./CANCEL-LOAD.md) command. After cancellation, the written data will also be rolled back and will not take effect. + Import tasks that have been submitted but not yet completed can be canceled by the [CANCEL LOAD](./CANCEL-LOAD) command. After cancellation, the written data will also be rolled back and will not take effect. 3. Label, import transaction, multi-table atomicity diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md b/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md index fcb2b92b31af37..0313c3f3436ed2 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md @@ -99,7 +99,7 @@ Parameter introduction: 11. exec_mem_limit: Import memory limit. Default is 2GB. The unit is bytes. -12. format: Specify the import data format, the default is csv, and csv_with_names(filter out the first row of your csv file), csv_with_names_and_types(filter out the first two lines of your csv file), json format are supported. +12. format: Specify load data format, support csv, json, csv_with_names(support csv file line header filter), csv_with_names_and_types(support csv file first two lines filter), parquet, orc, default is csv. 13. jsonpaths: The way of importing json is divided into: simple mode and matching mode. @@ -431,11 +431,11 @@ curl --location-trusted -u root -H "columns: k1,k2,source_sequence,v1,v2" -H "fu 4. Label, import transaction, multi-table atomicity - All import tasks in Doris are atomic. And the import of multiple tables in the same import task can also guarantee atomicity. At the same time, Doris can also use the Label mechanism to ensure that the data imported is not lost or heavy. For details, see the [Import Transactions and Atomicity](../../../../../data-operate/import/import-scenes/load-atomicity) documentation. + All import tasks in Doris are atomic. And the import of multiple tables in the same import task can also guarantee atomicity. At the same time, Doris can also use the Label mechanism to ensure that the data imported is not lost or heavy. For details, see the [Import Transactions and Atomicity](../../../../data-operate/import/import-scenes/load-atomicity) documentation. 5. Column mapping, derived columns and filtering - Doris can support very rich column transformation and filtering operations in import statements. Most built-in functions and UDFs are supported. For how to use this function correctly, please refer to the [Column Mapping, Conversion and Filtering](../../../../../data-operate/import/import-scenes/load-data-convert) document. + Doris can support very rich column transformation and filtering operations in import statements. Most built-in functions and UDFs are supported. For how to use this function correctly, please refer to the [Column Mapping, Conversion and Filtering](../../../../data-operate/import/import-scenes/load-data-convert) document. 6. Error data filtering diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md b/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md index a8aa259e8e3164..215769aa567517 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md @@ -69,7 +69,7 @@ SELECT 6. `INTO OUTFILE 'file_name' ` : save the result to a new file (which did not exist before), the difference lies in the save format. - 7. `Group by having`: Group the result set, and brush the result of group by when having appears. `Grouping Sets`, `Rollup`, `Cube` are extensions of group by, please refer to [GROUPING SETS DESIGN](../../../../../community/design/grouping_sets_design.md) for details. + 7. `Group by having`: Group the result set, and brush the result of group by when having appears. `Grouping Sets`, `Rollup`, `Cube` are extensions of group by, please refer to [GROUPING SETS DESIGN](https://doris.apache.org/community/design/grouping_sets_design) for details. 8. `Order by`: Sort the final result, Order by sorts the result set by comparing the size of one or more columns. diff --git a/docs/en/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md b/docs/en/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md index c8f228a80b6986..ef65446193936c 100644 --- a/docs/en/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md +++ b/docs/en/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md @@ -54,7 +54,7 @@ DECIMALV3 has a very complex set of type inference rules. For different expressi #### Aggregation functions * SUM / MULTI_DISTINCT_SUM: SUM(DECIMALV3(a, b)) -> DECIMALV3(38, b). -* AVG: AVG(DECIMALV3(a, b)) -> DECIMALV3(38, b). +* AVG: AVG(DECIMALV3(a, b)) -> DECIMALV3(38, max(b, 4)). #### Default rules diff --git a/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md b/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md index 020935ae99010e..d14842f9472961 100644 --- a/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md +++ b/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md @@ -32,7 +32,7 @@ SHOW ALTER TABLE MATERIALIZED VIEW ### Description -This command is used to view the execution of the Create Materialized View job submitted through the [CREATE-MATERIALIZED-VIEW](../../../sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW) statement. +This command is used to view the execution of the Create Materialized View job submitted through the [CREATE-MATERIALIZED-VIEW](../../sql-reference/Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW) statement. > This statement is equivalent to `SHOW ALTER TABLE ROLLUP`; diff --git a/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md b/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md index 26707d10aaabba..a531011b614990 100644 --- a/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md +++ b/docs/en/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md @@ -32,7 +32,7 @@ SHOW STATUS ### Description -This command is used to view the execution of the Create Materialized View job submitted through the [CREATE-MATERIALIZED-VIEW](../../Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW) statement. +This command is used to view the execution of the Create Materialized View job submitted through the [CREATE-MATERIALIZED-VIEW](../Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW) statement. > This statement is equivalent to `SHOW ALTER TABLE ROLLUP`; diff --git a/docs/sidebars.json b/docs/sidebars.json index 2a4ef60cb03bc3..3318bcbd694cf5 100644 --- a/docs/sidebars.json +++ b/docs/sidebars.json @@ -1119,6 +1119,7 @@ ] }, "admin-manual/http-actions/restore-tablet", + "admin-manual/http-actions/pad-rowset", "admin-manual/http-actions/get-load-state", "admin-manual/http-actions/tablet-migration-action", "admin-manual/http-actions/cancel-label", diff --git a/docs/zh-CN/community/developer-guide/debug-tool.md b/docs/zh-CN/community/developer-guide/debug-tool.md index bf56879c2867dc..b4952f9a13fb56 100644 --- a/docs/zh-CN/community/developer-guide/debug-tool.md +++ b/docs/zh-CN/community/developer-guide/debug-tool.md @@ -199,6 +199,59 @@ Total: 1296.4 MB 这个命令的输出与HEAP PROFILE的输出及查看方式一样,这里就不再详细说明。这个命令只有在执行的过程中才会开启统计,相比HEAP PROFILE对于进程性能的影响有限。 +#### JEMALLOC HEAP PROFILE + +##### 1. runtime heap dump by http +无需重启BE, 使用jemalloc heap dump http接口,jemalloc根据当前内存使用情况,在对应的BE机器上生成heap dump文件。 + +heap dump文件所在目录可以在 ``be.conf`` 中通过``jeprofile_dir``变量进行配置,默认为``${DORIS_HOME}/log`` + +```shell +curl http://be_host:be_webport/jeheap/dump +``` + +##### 2. heap dump by JEMALLOC_CONF +通过更改`start_be.sh` 中`JEMALLOC_CONF` 变量后重新启动BE 来进行heap dump + +1. 每1MB dump一次: + + `JEMALLOC_CONF`变量中新增两个变量设置`prof:true,lg_prof_interval:20` 其中`prof:true`是打开profiling,`lg_prof_interval:20`中表示每1MB(2^20)生成一次dump +2. 每次达到新高时dump: + + `JEMALLOC_CONF`变量中新增两个变量设置`prof:true,prof_gdump:true` 其中`prof:true`是打开profiling,`prof_gdump:true` 代表内存使用达到新高时生成dump +3. 程序退出时内存泄漏dump: + + `JEMALLOC_CONF`变量中新增三个变量设置`prof_leak:true,lg_prof_sample:0,prof_final:true` + + +#### 3. jemalloc heap dump profiling + +3.1 生成纯文本分析结果 + ```shell + jeprof lib/doris_be --base=heap_dump_file_1 heap_dump_file_2 + ``` + +3.2 生成调用关系图片 + + 安装绘图所需的依赖项 + ```shell + yum install ghostscript graphviz + ``` + 通过在一短时间内多次运行上述命令可以生成多份dump 文件,可以选取第一份dump 文件作为baseline 进行diff对比分析 + + ```shell + jeprof --dot lib/doris_be --base=heap_dump_file_1 heap_dump_file_2 + ``` + 执行完上述命令,终端中会输出dot语法的图,将其贴到[在线dot绘图网站](http://www.webgraphviz.com/),生成内存分配图,然后进行分析,此种方式能够直接通过终端输出结果进行绘图,比较适用于传输文件不是很方便的服务器。 + + 也可以通过如下命令直接生成调用关系result.pdf文件传输到本地后进行查看 + ```shell + jeprof --pdf lib/doris_be --base=heap_dump_file_1 heap_dump_file_2 > result.pdf + ``` + +上述jeprof相关命令中均去掉 `--base` 选项来只分析单个heap dump文件 + + #### LSAN [LSAN](https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer)是一个地址检查工具,GCC已经集成。在我们编译代码的时候开启相应的编译选项,就能够开启这个功能。当程序发生可以确定的内存泄露时,会将泄露堆栈打印。Doris BE已经集成了这个工具,只需要在编译的时候使用如下的命令进行编译就能够生成带有内存泄露检测版本的BE二进制 diff --git a/docs/zh-CN/docs/admin-manual/cluster-management/elastic-expansion.md b/docs/zh-CN/docs/admin-manual/cluster-management/elastic-expansion.md index 20e14bd1054026..a966461b34c74d 100644 --- a/docs/zh-CN/docs/admin-manual/cluster-management/elastic-expansion.md +++ b/docs/zh-CN/docs/admin-manual/cluster-management/elastic-expansion.md @@ -102,7 +102,7 @@ FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群, 以上方式,都需要 Doris 的 root 用户权限。 -BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。集群负载情况,可以参见 [Tablet 负载均衡文档](../../maint-monitor/tablet-repair-and-balance)。 +BE 节点的扩容和缩容过程,不影响当前系统运行以及正在执行的任务,并且不会影响当前系统的性能。数据均衡会自动进行。根据集群现有数据量的大小,集群会在几个小时到1天不等的时间内,恢复到负载均衡的状态。集群负载情况,可以参见 [Tablet 负载均衡文档](../maint-monitor/tablet-repair-and-balance)。 ### 增加 BE 节点 @@ -134,7 +134,7 @@ DECOMMISSION 语句如下: > ```CANCEL DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";``` > 命令取消。取消后,该 BE 上的数据将维持当前剩余的数据量。后续 Doris 重新进行负载均衡 -**对于多租户部署环境下,BE 节点的扩容和缩容,请参阅 [多租户设计文档](../multi-tenant.md)。** +**对于多租户部署环境下,BE 节点的扩容和缩容,请参阅 [多租户设计文档](../multi-tenant)。** ## Broker 扩容缩容 diff --git a/docs/zh-CN/docs/admin-manual/config/be-config.md b/docs/zh-CN/docs/admin-manual/config/be-config.md index bed8d275bbc0e7..c37fd2e40a8dba 100644 --- a/docs/zh-CN/docs/admin-manual/config/be-config.md +++ b/docs/zh-CN/docs/admin-manual/config/be-config.md @@ -55,13 +55,13 @@ BE 的配置项有两种方式进行配置: BE 启动后,可以通过以下命令动态设置配置项。 ``` - curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}' + curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value} ``` 在 0.13 版本及之前,通过该方式修改的配置项将在 BE 进程重启后失效。在 0.14 及之后版本中,可以通过以下命令持久化修改后的配置。修改后的配置项存储在 `be_custom.conf` 文件中。 ``` - curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}&persist=true + curl -X POST http://{be_ip}:{be_http_port}/api/update_config?{key}={value}\&persist=true ``` ## 应用举例 @@ -357,7 +357,7 @@ BE 重启后该配置将失效。如果想持久化修改结果,使用如下 #### `doris_max_scan_key_num` * 类型:int -* 描述:用于限制一个查询请求中,scan node 节点能拆分的最大 scan key 的个数。当一个带有条件的查询请求到达 scan node 节点时,scan node 会尝试将查询条件中 key 列相关的条件拆分成多个 scan key range。之后这些 scan key range 会被分配给多个 scanner 线程进行数据扫描。较大的数值通常意味着可以使用更多的 scanner 线程来提升扫描操作的并行度。但在高并发场景下,过多的线程可能会带来更大的调度开销和系统负载,反而会降低查询响应速度。一个经验数值为 50。该配置可以单独进行会话级别的配置,具体可参阅 [变量](../../advanced/variables.md) 中 `max_scan_key_num` 的说明。 +* 描述:用于限制一个查询请求中,scan node 节点能拆分的最大 scan key 的个数。当一个带有条件的查询请求到达 scan node 节点时,scan node 会尝试将查询条件中 key 列相关的条件拆分成多个 scan key range。之后这些 scan key range 会被分配给多个 scanner 线程进行数据扫描。较大的数值通常意味着可以使用更多的 scanner 线程来提升扫描操作的并行度。但在高并发场景下,过多的线程可能会带来更大的调度开销和系统负载,反而会降低查询响应速度。一个经验数值为 50。该配置可以单独进行会话级别的配置,具体可参阅 [变量](../../advanced/variables) 中 `max_scan_key_num` 的说明。 - 当在高并发场景下发下并发度无法提升时,可以尝试降低该数值并观察影响。 * 默认值:48 @@ -417,7 +417,7 @@ BE 重启后该配置将失效。如果想持久化修改结果,使用如下 #### `max_pushdown_conditions_per_column` * 类型:int -* 描述:用于限制一个查询请求中,针对单个列,能够下推到存储引擎的最大条件数量。在查询计划执行的过程中,一些列上的过滤条件可以下推到存储引擎,这样可以利用存储引擎中的索引信息进行数据过滤,减少查询需要扫描的数据量。比如等值条件、IN 谓词中的条件等。这个参数在绝大多数情况下仅影响包含 IN 谓词的查询。如 `WHERE colA IN (1,2,3,4,...)`。较大的数值意味值 IN 谓词中更多的条件可以推送给存储引擎,但过多的条件可能会导致随机读的增加,某些情况下可能会降低查询效率。该配置可以单独进行会话级别的配置,具体可参阅 [变量](../../advanced/variables.md) 中 `max_pushdown_conditions_per_column ` 的说明。 +* 描述:用于限制一个查询请求中,针对单个列,能够下推到存储引擎的最大条件数量。在查询计划执行的过程中,一些列上的过滤条件可以下推到存储引擎,这样可以利用存储引擎中的索引信息进行数据过滤,减少查询需要扫描的数据量。比如等值条件、IN 谓词中的条件等。这个参数在绝大多数情况下仅影响包含 IN 谓词的查询。如 `WHERE colA IN (1,2,3,4,...)`。较大的数值意味值 IN 谓词中更多的条件可以推送给存储引擎,但过多的条件可能会导致随机读的增加,某些情况下可能会降低查询效率。该配置可以单独进行会话级别的配置,具体可参阅 [变量](../../advanced/variables) 中 `max_pushdown_conditions_per_column ` 的说明。 * 默认值:1024 * 示例 diff --git a/docs/zh-CN/docs/admin-manual/http-actions/fe/table-schema-action.md b/docs/zh-CN/docs/admin-manual/http-actions/fe/table-schema-action.md index 8f5a456971fcc6..6ec41bbd48a270 100644 --- a/docs/zh-CN/docs/admin-manual/http-actions/fe/table-schema-action.md +++ b/docs/zh-CN/docs/admin-manual/http-actions/fe/table-schema-action.md @@ -97,7 +97,7 @@ under the License. "count": 0 } ``` -注意:区别为`http`方式比`http v2`方式多返回`aggregation_type`字段,`http v2`开启是通过`enable_http_server_v2`进行设置,具体参数说明详见[fe参数设置](../../../config/fe-config.md) +注意:区别为`http`方式比`http v2`方式多返回`aggregation_type`字段,`http v2`开启是通过`enable_http_server_v2`进行设置,具体参数说明详见[fe参数设置](../../config/fe-config) ## Examples diff --git a/docs/zh-CN/docs/admin-manual/http-actions/pad_rowset.md b/docs/zh-CN/docs/admin-manual/http-actions/pad_rowset.md new file mode 100644 index 00000000000000..dba241fca713bb --- /dev/null +++ b/docs/zh-CN/docs/admin-manual/http-actions/pad_rowset.md @@ -0,0 +1,43 @@ +--- +{ + "title": "PAD ROWSET", + "language": "zh-CN" +} +--- + + + +# PAD ROWSET +## description + + 该功能用于使用一个空的rowset填充损坏的副本。 + + 说明:这个功能暂时只在be服务中提供一个http接口。如果要使用, + 需要向要进行数据恢复的那台be机器的http端口发送pad rowset api请求。api格式如下: + METHOD: POST + URI: http://be_host:be_http_port/api/pad_rowset?tablet_id=xxx&start_version=xxx&end_version=xxx + +## example + + curl -X POST "http://hostname:8088/api/pad_rowset?tablet_id=123456\&start_version=1111111\&end_version=1111112" + +## keyword + + PAD,ROWSET,PAD,ROWSET diff --git a/docs/zh-CN/docs/admin-manual/maint-monitor/disk-capacity.md b/docs/zh-CN/docs/admin-manual/maint-monitor/disk-capacity.md index e83ec4592d556b..ca3c9172e00882 100644 --- a/docs/zh-CN/docs/admin-manual/maint-monitor/disk-capacity.md +++ b/docs/zh-CN/docs/admin-manual/maint-monitor/disk-capacity.md @@ -156,6 +156,6 @@ capacity_min_left_bytes_flood_stage 默认 1GB。 `rm -rf data/0/12345/` - - 删除 Tablet 元数据(具体参考 [Tablet 元数据管理工具](./tablet-meta-tool.md)) + - 删除 Tablet 元数据(具体参考 [Tablet 元数据管理工具](./tablet-meta-tool)) `./lib/meta_tool --operation=delete_header --root_path=/path/to/root_path --tablet_id=12345 --schema_hash= 352781111` diff --git a/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md b/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md index 257e93d95c50b9..41db09f3b3e8a2 100644 --- a/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md +++ b/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/be-oom-analysis.md @@ -28,10 +28,10 @@ under the License. -理想情况下,在 [Memory Limit Exceeded Analysis](../admin-manual/memory-management/memory-limit-exceeded-analysis.md) 中我们定时检测操作系统剩余可用内存,并在内存不足时及时响应,如触发内存GC释放缓存或cancel内存超限的查询,但因为刷新进程内存统计和内存GC都具有一定的滞后性,同时我们很难完全catch所有大内存申请,在集群压力过大时仍有OOM风险。 +理想情况下,在 [Memory Limit Exceeded Analysis](./memory-limit-exceeded-analysis) 中我们定时检测操作系统剩余可用内存,并在内存不足时及时响应,如触发内存GC释放缓存或cancel内存超限的查询,但因为刷新进程内存统计和内存GC都具有一定的滞后性,同时我们很难完全catch所有大内存申请,在集群压力过大时仍有OOM风险。 ## 解决方法 -参考 [BE 配置项](../admin-manual/config/be-config.md) 在`be.conf`中调小`mem_limit`,调大`max_sys_mem_available_low_water_mark_bytes`。 +参考 [BE 配置项](../../../admin-manual/config/be-config) 在`be.conf`中调小`mem_limit`,调大`max_sys_mem_available_low_water_mark_bytes`。 ## 内存分析 若希望进一步了解 OOM 前BE进程的内存使用位置,减少进程内存使用,可参考如下步骤分析。 @@ -67,7 +67,7 @@ Memory Tracker Summary: MemTrackerLimiter Label=DeleteBitmap AggCache, Type=global, Limit=-1.00 B(-1 B), Used=0(0 B), Peak=0(0 B) ``` -3. 当 OOM 前 be/log/be.INFO 的最后包含系统内存超限的日志时,参考 [Memory Limit Exceeded Analysis](../admin-manual/memory-management/memory-limit-exceeded-analysis.md) 中的日志分析方法,查看进程每个类别的内存使用情况。若当前是`type=query`内存使用较多,若已知 OOM 前的查询继续步骤4,否则继续步骤5;若当前是`type=load`内存使用多继续步骤6,若当前是`type=global`内存使用多继续步骤7。 +3. 当 OOM 前 be/log/be.INFO 的最后包含系统内存超限的日志时,参考 [Memory Limit Exceeded Analysis](./memory-limit-exceeded-analysis) 中的日志分析方法,查看进程每个类别的内存使用情况。若当前是`type=query`内存使用较多,若已知 OOM 前的查询继续步骤4,否则继续步骤5;若当前是`type=load`内存使用多继续步骤6,若当前是`type=global`内存使用多继续步骤7。 4. `type=query`查询内存使用多,且已知 OOM 前的查询时,比如测试集群或定时任务,重启BE节点,参考 [Memory Tracker](../admin-manual/memory-management/memory-tracker.md) 查看实时 memory tracker 统计,`set global enable_profile=true`后重试查询,观察具体算子的内存使用位置,确认查询内存使用是否合理,进一步考虑优化SQL内存使用,比如调整join顺序。 @@ -75,8 +75,8 @@ Memory Tracker Summary: 6. `type=load`导入内存使用多时。 -7. `type=global`内存使用多时,继续查看`Memory Tracker Summary`日志后半部分已经打出得`type=global`详细统计。当 DataPageCache、IndexPageCache、SegmentCache、ChunkAllocator、LastestSuccessChannelCache 等内存使用多时,参考 [BE 配置项](../admin-manual/config/be-config.md) 考虑修改cache的大小;当 Orphan 内存使用过多时,如下继续分析。 - - 若`Parent Label=Orphan`的tracker统计值相加只占 Orphan 内存的小部分,则说明当前有大量内存没有准确统计,比如 brpc 过程的内存,此时可以考虑借助 heap profile [Memory Tracker](../community/developer-guide/debug-tool.md) 中的方法进一步分析内存位置。 +7. `type=global`内存使用多时,继续查看`Memory Tracker Summary`日志后半部分已经打出得`type=global`详细统计。当 DataPageCache、IndexPageCache、SegmentCache、ChunkAllocator、LastestSuccessChannelCache 等内存使用多时,参考 [BE 配置项](../../../admin-manual/config/be-config) 考虑修改cache的大小;当 Orphan 内存使用过多时,如下继续分析。 + - 若`Parent Label=Orphan`的tracker统计值相加只占 Orphan 内存的小部分,则说明当前有大量内存没有准确统计,比如 brpc 过程的内存,此时可以考虑借助 heap profile [Memory Tracker](../../../../community/developer-guide/debug-tool) 中的方法进一步分析内存位置。 - 若`Parent Label=Orphan`的tracker统计值相加占 Orphan 内存的大部分,当`Label=TabletManager`内存使用多时,进一步查看集群 Tablet 数量,若 Tablet 数量过多则考虑删除过时不会被使用的表或数据;当`Label=StorageEngine`内存使用过多时,进一步查看集群 Segment 文件个数,若 Segment 文件个数过多则考虑手动触发compaction; 8. 若`be/log/be.INFO`没有在 OOM 前打印出`Memory Tracker Summary`日志,说明 BE 没有及时检测出内存超限,观察 Grafana 内存监控确认BE在 OOM 前的内存增长趋势,若 OOM 可复现,考虑在`be.conf`中增加`memory_debug=true`,重启集群后会每秒打印集群内存统计,观察 OOM 前的最后一次`Memory Tracker Summary`日志,继续步骤3分析; diff --git a/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md b/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md index 432c3232b65e52..e46421016252b7 100644 --- a/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md +++ b/docs/zh-CN/docs/admin-manual/maint-monitor/memory-management/memory-limit-exceeded-analysis.md @@ -49,7 +49,7 @@ ERROR 1105 (HY000): errCode = 2, detailMessage = Memory limit exceeded: show load order by createtime desc limit 1\G; diff --git a/docs/zh-CN/docs/data-operate/import/import-scenes/jdbc-load.md b/docs/zh-CN/docs/data-operate/import/import-scenes/jdbc-load.md index ada0d26ddce403..36725343f07cca 100644 --- a/docs/zh-CN/docs/data-operate/import/import-scenes/jdbc-load.md +++ b/docs/zh-CN/docs/data-operate/import/import-scenes/jdbc-load.md @@ -160,4 +160,4 @@ public class DorisJDBCDemo { 前面提到,我们建议在使用 INSERT 导入数据时,采用 ”批“ 的方式进行导入,而不是单条插入。 - 同时,我们可以为每次 INSERT 操作设置一个 Label。通过 [Label 机制](../load-atomicity) 可以保证操作的幂等性和原子性,最终做到数据的不丢不重。关于 INSERT 中 Label 的具体用法,可以参阅 [INSERT](../../../sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/INSERT) 文档。 + 同时,我们可以为每次 INSERT 操作设置一个 Label。通过 [Label 机制](./load-atomicity) 可以保证操作的幂等性和原子性,最终做到数据的不丢不重。关于 INSERT 中 Label 的具体用法,可以参阅 [INSERT](../../../sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/INSERT) 文档。 diff --git a/docs/zh-CN/docs/data-operate/import/import-way/stream-load-manual.md b/docs/zh-CN/docs/data-operate/import/import-way/stream-load-manual.md index 0d4526ce20231f..c82849e51a0ef1 100644 --- a/docs/zh-CN/docs/data-operate/import/import-way/stream-load-manual.md +++ b/docs/zh-CN/docs/data-operate/import/import-way/stream-load-manual.md @@ -65,7 +65,7 @@ Stream load 中,Doris 会选定一个节点作为 Coordinator 节点。该节 ## 支持数据格式 -目前 Stream Load 支持两个数据格式:CSV(文本) 和 JSON +目前 Stream Load 支持数据格式:CSV(文本)、JSON、 PARQUET 和 ORC。 ## 基本操作 diff --git a/docs/zh-CN/docs/data-operate/import/load-manual.md b/docs/zh-CN/docs/data-operate/import/load-manual.md index 4d8d80baca8d05..ab4407ebb10f24 100644 --- a/docs/zh-CN/docs/data-operate/import/load-manual.md +++ b/docs/zh-CN/docs/data-operate/import/load-manual.md @@ -58,11 +58,11 @@ Doris 提供多种数据导入方案,可以针对不同的数据源进行选 不同的导入方式支持的数据格式略有不同。 -| 导入方式 | 支持的格式 | +| 导入方式 | 支持的格式 | | ------------ | ----------------------- | -| Broker Load | Parquet,ORC,csv,gzip | -| Stream Load | csv, gzip, json | -| Routine Load | csv, json | +| Broker Load | parquet、orc、csv、gzip | +| Stream Load | csv、json、parquet、orc | +| Routine Load | csv、json | ## 导入说明 diff --git a/docs/zh-CN/docs/data-table/basic-usage.md b/docs/zh-CN/docs/data-table/basic-usage.md index e46c72e6880ca6..2098d4960d970f 100644 --- a/docs/zh-CN/docs/data-table/basic-usage.md +++ b/docs/zh-CN/docs/data-table/basic-usage.md @@ -165,7 +165,7 @@ mysql> USE example_db; Database changed ``` -Doris支持[复合分区和单分区](../data-partition)两种建表方式。下面以聚合模型为例,分别演示如何创建两种分区的数据表。 +Doris支持[复合分区和单分区](./data-partition)两种建表方式。下面以聚合模型为例,分别演示如何创建两种分区的数据表。 #### 单分区 @@ -701,7 +701,7 @@ mysql> select sum(table1.pv) from table1 join [shuffle] table2 where table1.site 当部署多个 FE 节点时,用户可以在多个 FE 之上部署负载均衡层来实现 Doris 的高可用。 -具体安装部署及使用方式请参照 [负载均衡](../../admin-manual/cluster-management/load-balancing) +具体安装部署及使用方式请参照 [负载均衡](../admin-manual/cluster-management/load-balancing) ## 数据更新和删除 diff --git a/docs/zh-CN/docs/data-table/data-model.md b/docs/zh-CN/docs/data-table/data-model.md index 50bf754b98410b..0215570c681951 100644 --- a/docs/zh-CN/docs/data-table/data-model.md +++ b/docs/zh-CN/docs/data-table/data-model.md @@ -318,10 +318,10 @@ PROPERTIES ( Unqiue模型的写时合并实现,与聚合模型就是完全不同的两种模型了,查询性能更接近于duplicate模型,在有主键约束需求的场景上相比聚合模型有较大的查询性能优势,尤其是在聚合查询以及需要用索引过滤大量数据的查询中。 -在1.2版本中,作为一个新的feature,写时合并默认关闭,用户可以通过添加下面的property来开启 +在 1.2.0 版本中,作为一个新的feature,写时合并默认关闭,用户可以通过添加下面的property来开启 ``` -“enable_unique_key_merge_on_write” = “true” +"enable_unique_key_merge_on_write" = "true" ``` 仍然以上面的表为例,建表语句为 diff --git a/docs/zh-CN/docs/data-table/hit-the-rollup.md b/docs/zh-CN/docs/data-table/hit-the-rollup.md index 42e21bc7dd3743..6baf8ac2c794d6 100644 --- a/docs/zh-CN/docs/data-table/hit-the-rollup.md +++ b/docs/zh-CN/docs/data-table/hit-the-rollup.md @@ -44,7 +44,7 @@ ROLLUP 表的基本作用,在于在 Base 表的基础上,获得更粗粒度 1. 示例1:获得每个用户的总消费 -接 **[数据模型Aggregate 模型](../data-model)**小节的**示例2**,Base 表结构如下: +接 **[数据模型Aggregate 模型](./data-model)**小节的**示例2**,Base 表结构如下: | ColumnName | Type | AggregationType | Comment | | --------------- | ----------- | --------------- | ---------------------- | diff --git a/docs/zh-CN/docs/data-table/index/ngram-bloomfilter-index.md b/docs/zh-CN/docs/data-table/index/ngram-bloomfilter-index.md new file mode 100644 index 00000000000000..5c94803f535747 --- /dev/null +++ b/docs/zh-CN/docs/data-table/index/ngram-bloomfilter-index.md @@ -0,0 +1,81 @@ +--- +{ + "title": "NGram BloomFilter索引", + "language": "zh-CN" +} +--- + + + +# Doris NGram BloomFilter索引及使用使用场景 + +为了提升like的查询性能,增加了NGram BloomFilter索引,其实现主要参照了ClickHouse的ngrambf。 + +## NGram BloomFilter创建 + +表创建时指定: + +```sql +CREATE TABLE `table3` ( + `siteid` int(11) NULL DEFAULT "10" COMMENT "", + `citycode` smallint(6) NULL COMMENT "", + `username` varchar(32) NULL DEFAULT "" COMMENT "", + INDEX idx_ngrambf (`username`) USING NGRAM_BF PROPERTIES("gram_size"="3", "bf_size"="256") COMMENT 'username ngram_bf index' +) ENGINE=OLAP +AGGREGATE KEY(`siteid`, `citycode`, `username`) COMMENT "OLAP" +DISTRIBUTED BY HASH(`siteid`) BUCKETS 10 +PROPERTIES ( +"replication_num" = "1" +); + +-- PROPERTIES("gram_size"="3", "bf_size"="256"),分别表示gram的个数和bloom filter的字节数。 +-- gram的个数跟实际查询场景相关,通常设置为大部分查询字符串的长度,bloom filter字节数,可以通过测试得出,通常越大过滤效果越好,可以从256开始进行验证测试看看效果。当然字节数越大也会带来索引存储、内存cost上升。 +-- 如果数据基数比较高,字节数可以不用设置过大,如果基数不是很高,可以通过增加字节数来提升过滤效果。 +``` + +## 查看NGram BloomFilter索引 + +查看我们在表上建立的NGram BloomFilter索引是使用: + +```sql +show index from example_db.table3; +``` + +## 删除NGram BloomFilter索引 + + +```sql +alter table example_db.table3 drop index idx_ngrambf; +``` + +## 修改NGram BloomFilter索引 + +为已有列新增NGram BloomFilter索引: + +```sql +alter table example_db.table3 add index idx_ngrambf(username) using NGRAM_BF PROPERTIES("gram_size"="2", "bf_size"="512")comment 'username ngram_bf index' +``` + +## **Doris NGram BloomFilter使用注意事项** + +1. NGram BloomFilter只支持字符串列 +2. NGram BloomFilter索引和BloomFilter索引为互斥关系,即同一个列只能设置两者中的一个 +3. NGram大小和BloomFilter的字节数,可以根据实际情况调优,如果NGram比较小,可以适当增加BloomFilter大小 +4. 如果要查看某个查询是否命中了NGram Bloom Filter索引,可以通过查询的Profile信息查看 diff --git a/docs/zh-CN/docs/ecosystem/external-table/hive-bitmap-udf.md b/docs/zh-CN/docs/ecosystem/external-table/hive-bitmap-udf.md index 06cfd5a890f30d..d2b7aae243325c 100644 --- a/docs/zh-CN/docs/ecosystem/external-table/hive-bitmap-udf.md +++ b/docs/zh-CN/docs/ecosystem/external-table/hive-bitmap-udf.md @@ -115,4 +115,4 @@ select k1,bitmap_union(uuid) from hive_bitmap_table group by k1 ## Hive bitmap 导入 doris - 详见: [Spark Load](../../../data-operate/import/import-way/spark-load-manual) -> 基本操作 -> 创建导入 (示例3:上游数据源是hive binary类型情况) + 详见: [Spark Load](../../data-operate/import/import-way/spark-load-manual) -> 基本操作 -> 创建导入 (示例3:上游数据源是hive binary类型情况) diff --git a/docs/zh-CN/docs/ecosystem/external-table/multi-catalog.md b/docs/zh-CN/docs/ecosystem/external-table/multi-catalog.md index b66159b9783cfa..cc670eefe13f7b 100644 --- a/docs/zh-CN/docs/ecosystem/external-table/multi-catalog.md +++ b/docs/zh-CN/docs/ecosystem/external-table/multi-catalog.md @@ -67,7 +67,7 @@ under the License. 4. 删除 Catalog - External Catalog 中的 Database 和 Table 都是只读的。但是可以删除 Catalog(Internal Catalog无法删除)。可以通过 [DROP CATALOG](../../../sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-CATALOG) 命令删除一个 External Catalog。 + External Catalog 中的 Database 和 Table 都是只读的。但是可以删除 Catalog(Internal Catalog无法删除)。可以通过 [DROP CATALOG](../../sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-CATALOG) 命令删除一个 External Catalog。 该操作仅会删除 Doris 中该 Catalog 的映射信息,并不会修改或变更任何外部数据目录的内容。 diff --git a/docs/zh-CN/docs/ecosystem/flink-doris-connector.md b/docs/zh-CN/docs/ecosystem/flink-doris-connector.md index 0be44b15459e51..90438ed2ea685f 100644 --- a/docs/zh-CN/docs/ecosystem/flink-doris-connector.md +++ b/docs/zh-CN/docs/ecosystem/flink-doris-connector.md @@ -144,6 +144,8 @@ enable_http_server_v2 = true 1.请根据不同的 Flink 和 Scala 版本替换对应的 Connector 和 Flink 依赖版本。 +2.也可从[这里](https://repo.maven.apache.org/maven2/org/apache/doris/)下载相关版本jar包。 + ## 使用方法 Flink 读写 Doris 数据主要有两种方式 @@ -416,9 +418,17 @@ insert into doris_sink select id,name from cdc_mysql_source; 1. Flink Doris Connector主要是依赖Checkpoint进行流式写入,所以Checkpoint的间隔即为数据的可见延迟时间。 2. 为了保证Flink的Exactly Once语义,Flink Doris Connector 默认开启两阶段提交,Doris在1.1版本后默认开启两阶段提交。1.0可通过修改BE参数开启,可参考[two_phase_commit](../data-operate/import/import-way/stream-load-manual.md)。 -### 常见问题 +## 常见问题 + +1. **Doris Source在数据读取完成后,流为什么就结束了?** + +目前Doris Source是有界流,不支持CDC方式读取。 + +2. **Flink读取Doris可以进行条件下推吗?** -1. **Bitmap类型写入** +通过配置doris.filter.query参数,详情参考配置小节。 + +3. **如何写入Bitmap类型?** ```sql CREATE TABLE bitmap_sink ( @@ -436,12 +446,28 @@ WITH ( 'sink.properties.columns' = 'dt,page,user_id,user_id=to_bitmap(user_id)' ) ``` -2. **errCode = 2, detailMessage = Label [label_0_1] has already been used, relate to txn [19650]** +4. **errCode = 2, detailMessage = Label [label_0_1] has already been used, relate to txn [19650]** Exactly-Once场景下,Flink Job重启时必须从最新的Checkpoint/Savepoint启动,否则会报如上错误。 不要求Exactly-Once时,也可通过关闭2PC提交(sink.enable-2pc=false) 或更换不同的sink.label-prefix解决。 -3. **errCode = 2, detailMessage = transaction [19650] not found** +5. **errCode = 2, detailMessage = transaction [19650] not found** 发生在Commit阶段,checkpoint里面记录的事务ID,在FE侧已经过期,此时再次commit就会出现上述错误。 此时无法从checkpoint启动,后续可通过修改fe.conf的streaming_label_keep_max_second配置来延长过期时间,默认12小时。 + +6. **errCode = 2, detailMessage = current running txns on db 10006 is 100, larger than limit 100** + +这是因为同一个库并发导入超过了100,可通过调整 fe.conf的参数 `max_running_txn_num_per_db` 来解决。具体可参考 [max_running_txn_num_per_db](https://doris.apache.org/zh-CN/docs/dev/admin-manual/config/fe-config/#max_running_txn_num_per_db) + +7. **Flink写入Uniq模型时,如何保证一批数据的有序性?** + +可以添加sequence列配置来保证,具体可参考 [sequence](https://doris.apache.org/zh-CN/docs/dev/data-operate/update-delete/sequence-column-manual) + +8. **Flink任务没报错,但是无法同步数据?** + +Connector1.1.0版本以前,是攒批写入的,写入均是由数据驱动,需要判断上游是否有数据写入。1.1.0之后,依赖Checkpoint,必须开启Checkpoint才能写入。 + +9. **tablet writer write failed, tablet_id=190958, txn_id=3505530, err=-235** + +通常发生在Connector1.1.0之前,是由于写入频率过快,导致版本过多。可以通过设置sink.batch.size 和 sink.batch.interval参数来降低Streamload的频率。 \ No newline at end of file diff --git a/docs/zh-CN/docs/install/source-install/compilation.md b/docs/zh-CN/docs/install/source-install/compilation.md index dbe1fe8a7e0333..d28a9da9cd0996 100644 --- a/docs/zh-CN/docs/install/source-install/compilation.md +++ b/docs/zh-CN/docs/install/source-install/compilation.md @@ -106,8 +106,6 @@ under the License. 启动镜像后,你应该已经处于容器内。可以通过以下命令下载 Doris 源码(已挂载本地源码目录则不用): ``` - $ wget https://dist.apache.org/repos/dist/dev/doris/xxx.tar.gz - or $ git clone https://github.com/apache/doris.git ``` diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_double.md b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_double.md index 057fc730913420..22612b12f103b9 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_double.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_double.md @@ -37,6 +37,8 @@ under the License. path 的内容不能包含 ", [ 和 ]。 如果 json_string 格式不对,或 json_path 格式不对,或无法找到匹配项,则返回 NULL。 +另外,推荐使用jsonb类型和jsonb_extract_XXX函数实现同样的功能。 + ### example 1. 获取 key 为 "k1" 的 value diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_int.md b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_int.md index 5135e1b855eb1c..ecc29de09c0ec7 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_int.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_int.md @@ -37,6 +37,8 @@ under the License. path 的内容不能包含 ", [ 和 ]。 如果 json_string 格式不对,或 json_path 格式不对,或无法找到匹配项,则返回 NULL。 +另外,推荐使用jsonb类型和jsonb_extract_XXX函数实现同样的功能。 + ### example 1. 获取 key 为 "k1" 的 value diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_string.md b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_string.md index ce022fabb58039..58d4759155ddd7 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_string.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/get_json_string.md @@ -37,6 +37,8 @@ under the License. path 的内容不能包含 ", [ 和 ]。 如果 json_string 格式不对,或 json_path 格式不对,或无法找到匹配项,则返回 NULL。 +另外,推荐使用jsonb类型和jsonb_extract_XXX函数实现同样的功能。 + ### example 1. 获取 key 为 "k1" 的 value diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md index 1eb2d5e178b69c..56bb8187555e70 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/json-functions/jsonb_extract.md @@ -25,6 +25,13 @@ under the License. --> ## jsonb_extract + + + +jsonb_extract + + + ### description #### Syntax diff --git a/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/uuid.md b/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/uuid.md index 0b1e6b1661c583..29339d1d6bea0d 100644 --- a/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/uuid.md +++ b/docs/zh-CN/docs/sql-manual/sql-functions/string-functions/uuid.md @@ -25,6 +25,13 @@ under the License. --> ## uuid + + + +uuid + + + ### description #### Syntax diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md index 1f1c4085e2e3fd..67ce90fe866e4c 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-PARTITION.md @@ -62,7 +62,7 @@ partition_desc ["key"="value"] - 分区为左闭右开区间,如果用户仅指定右边界,系统会自动确定左边界 - 如果没有指定分桶方式,则自动使用建表使用的分桶方式和分桶数。 - 如指定分桶方式,只能修改分桶数,不可修改分桶方式或分桶列。如果指定了分桶方式,但是没有指定分桶数,则分桶数会使用默认值10,不会使用建表时指定的分桶数。如果要指定分桶数,则必须指定分桶方式。 -- ["key"="value"] 部分可以设置分区的一些属性,具体说明见 [CREATE TABLE](../../Create/CREATE-TABLE) +- ["key"="value"] 部分可以设置分区的一些属性,具体说明见 [CREATE TABLE](../Create/CREATE-TABLE) - 如果建表时用户未显式创建Partition,则不支持通过ALTER的方式增加分区 2. 删除分区 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md index b755c39bc88215..cd72797b57b91d 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Alter/ALTER-TABLE-ROLLUP.md @@ -68,7 +68,7 @@ ADD ROLLUP [rollup_name (column_name1, column_name2, ...) - 如果没有指定 from_index_name,则默认从 base index 创建 - rollup 表中的列必须是 from_index 中已有的列 -- 在 properties 中,可以指定存储格式。具体请参阅 [CREATE TABLE](../../Create/CREATE-TABLE) +- 在 properties 中,可以指定存储格式。具体请参阅 [CREATE TABLE](../Create/CREATE-TABLE) 3. 删除 rollup index diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md index 7dbfd26e260c77..f815f348fa1e83 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-TABLE.md @@ -349,6 +349,8 @@ distribution_desc 如果设置成 `true`, 对于值列的加减操作,可以更快地,同步地完成。 `"light_schema_change" = 'true'` + + 该功能在 1.2.1 及之后版本默认开启。 * `disable_auto_compaction` diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md index d76a70eff21baa..f860a189ee7ca1 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Definition-Statements/Drop/DROP-POLICY.md @@ -43,6 +43,11 @@ DROP POLICY DROP ROW POLICY test_row_policy_1 on table1 [FOR user]; ``` +2. 删除存储策略 +```sql +DROP STORAGE POLICY policy_name1 +``` + ### Example 1. 删除 table1 的 test_row_policy_1 @@ -56,6 +61,12 @@ DROP ROW POLICY test_row_policy_1 on table1 [FOR user]; ```sql DROP ROW POLICY test_row_policy_1 on table1 for test ``` + +3. 删除名字为policy_name1的存储策略 +```sql +DROP STORAGE POLICY policy_name1 +``` + ### Keywords DROP, POLICY diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md index 5dadc7f0e7b0a0..1d40986465555f 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Load/STREAM-LOAD.md @@ -99,7 +99,7 @@ curl --location-trusted -u user:passwd [-H ""...] -T data.file -XPUT http://fe_h 11. exec_mem_limit: 导入内存限制。默认为 2GB。单位为字节。 -12. format: 指定导入数据格式,默认是csv,也支持: csv_with_names(支持csv文件行首过滤),csv_with_names_and_types(支持csv文件前两行过滤) 或 json格式。 +12. format: 指定导入数据格式,支持csv、json、 csv_with_names(支持csv文件行首过滤)、csv_with_names_and_types(支持csv文件前两行过滤)、parquet、orc,默认是csv。 13. jsonpaths: 导入json方式分为:简单模式和匹配模式。 @@ -405,11 +405,11 @@ curl --location-trusted -u root -H "columns: k1,k2,source_sequence,v1,v2" -H "fu 4. Label、导入事务、多表原子性 - Doris 中所有导入任务都是原子生效的。并且在同一个导入任务中对多张表的导入也能够保证原子性。同时,Doris 还可以通过 Label 的机制来保证数据导入的不丢不重。具体说明可以参阅 [导入事务和原子性](../../../../data-operate/import/import-scenes/load-atomicity.md) 文档。 + Doris 中所有导入任务都是原子生效的。并且在同一个导入任务中对多张表的导入也能够保证原子性。同时,Doris 还可以通过 Label 的机制来保证数据导入的不丢不重。具体说明可以参阅 [导入事务和原子性](../../../../data-operate/import/import-scenes/load-atomicity) 文档。 5. 列映射、衍生列和过滤 - Doris 可以在导入语句中支持非常丰富的列转换和过滤操作。支持绝大多数内置函数和 UDF。关于如何正确的使用这个功能,可参阅 [列的映射,转换与过滤](../../../../data-operate/import/import-scenes/load-data-convert.md) 文档。 + Doris 可以在导入语句中支持非常丰富的列转换和过滤操作。支持绝大多数内置函数和 UDF。关于如何正确的使用这个功能,可参阅 [列的映射,转换与过滤](../../../../data-operate/import/import-scenes/load-data-convert) 文档。 6. 错误数据过滤 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md index eed87118d50410..c9364c13777ce3 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Manipulation-Statements/Manipulation/SELECT.md @@ -69,7 +69,7 @@ SELECT 6. `INTO OUTFILE 'file_name' ` :保存结果至新文件(之前不存在)中,区别在于保存的格式。 -7. `Group by having`:对结果集进行分组,having 出现则对 group by 的结果进行刷选。`Grouping Sets`、`Rollup`、`Cube` 为group by的扩展,详细可参考[GROUPING SETS 设计文档](../../../../../community/design/grouping_sets_design.md)。 +7. `Group by having`:对结果集进行分组,having 出现则对 group by 的结果进行刷选。`Grouping Sets`、`Rollup`、`Cube` 为group by的扩展,详细可参考[GROUPING SETS 设计文档](https://doris.apache.org/zh-CN/community/design/grouping_sets_design)。 8. `Order by `: 对最后的结果进行排序,Order by 通过比较一列或者多列的大小来对结果集进行排序。 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md index ff9d64c4722a3b..7eea5f8109253d 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Data-Types/DECIMALV3.md @@ -52,7 +52,7 @@ DECIMALV3有一套很复杂的类型推演规则,针对不同的表达式, #### 聚合运算 * SUM / MULTI_DISTINCT_SUM:SUM(DECIMALV3(a, b)) -> DECIMALV3(38, b)。 -* AVG:AVG(DECIMALV3(a, b)) -> DECIMALV3(38, b)。 +* AVG:AVG(DECIMALV3(a, b)) -> DECIMALV3(38, max(b, 4))。 #### 默认规则 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md index fb4171d69ff62a..ba1f6590527a5f 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER-TABLE-MATERIALIZED-VIEW.md @@ -32,7 +32,7 @@ SHOW ALTER TABLE MATERIALIZED VIEW ### Description -该命令用于查看通过 [CREATE-MATERIALIZED-VIEW](../../../sql-manual/sql-reference/Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW) 语句提交的创建物化视图作业的执行情况。 +该命令用于查看通过 [CREATE-MATERIALIZED-VIEW](../../sql-reference/Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW) 语句提交的创建物化视图作业的执行情况。 > 该语句等同于 `SHOW ALTER TABLE ROLLUP`; diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER.md b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER.md index 8c665814c103a0..7c6e911463784b 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-ALTER.md @@ -43,16 +43,16 @@ SHOW ALTER [CLUSTER | TABLE [COLUMN | ROLLUP] [FROM db_name]]; 1. TABLE COLUMN:展示修改列的 ALTER 任务 2. 支持语法[WHERE TableName|CreateTime|FinishTime|State] [ORDER BY] [LIMIT] -3. TABLE ROLLUP:展示创建或删除 ROLLUP index 的任务 -4. 如果不指定 db_name,使用当前默认 db -5. CLUSTER: 展示集群操作相关任务情况(仅管理员使用!待实现...) +3. TABLE ROLLUP:展示创建或删除 ROLLUP index 的任务 +4. 如果不指定 db_name,使用当前默认 db +5. CLUSTER: 展示集群操作相关任务情况(仅管理员使用!待实现...) ### Example 1. 展示默认 db 的所有修改列的任务执行情况 ```sql - SHOW ALTER TABLE COLUMN; + SHOW ALTER TABLE COLUMN; ``` 2. 展示某个表最近一次修改列的任务执行情况 diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-LOAD-WARNINGS.md b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-LOAD-WARNINGS.md index 19787a14f2bb5a..4c3e314ee2d601 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-LOAD-WARNINGS.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-LOAD-WARNINGS.md @@ -32,7 +32,7 @@ SHOW LOAD WARNINGS ### Description -如果导入任务失败且错误信息为 `ETL_QUALITY_UNSATISFIED`,则说明存在导入质量问题, 如果想看到这些有质量问题的导入任务,改语句就是完成这个操作的。 +如果导入任务失败且错误信息为 `ETL_QUALITY_UNSATISFIED`,则说明存在导入质量问题, 如果想看到这些有质量问题的导入任务,该语句就是完成这个操作的。 语法: @@ -46,9 +46,9 @@ SHOW LOAD WARNINGS ] ``` -1) 如果不指定 db_name,使用当前默认db -2) 如果使用 LABEL = ,则精确匹配指定的 label -3) 如果指定了 LOAD_JOB_ID,则精确匹配指定的 JOB ID +1. 如果不指定 db_name,使用当前默认db +2. 如果使用 LABEL = ,则精确匹配指定的 label +3. 如果指定了 LOAD_JOB_ID,则精确匹配指定的 JOB ID ### Example diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITION-ID.md b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITION-ID.md index 5134064f87fcab..8fdf0d67326bd7 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITION-ID.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITION-ID.md @@ -34,16 +34,16 @@ SHOW PARTITION ID 该语句用于根据 partition id 查找对应的 database name, table name, partition name(仅管理员使用) - 语法: +语法: - ```SQL - SHOW PARTITION [partition_id] - ``` +```sql + SHOW PARTITION [partition_id] +``` ### Example 1. 根据 partition id 查找对应的 database name, table name, partition name - + ```sql SHOW PARTITION 10002; ``` diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITIONS.md b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITIONS.md index 0b06cba8dc0b48..50d39536f42180 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITIONS.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-PARTITIONS.md @@ -32,7 +32,7 @@ SHOW PARTITIONS ### Description - 该语句用于展示分区信息 +该语句用于展示分区信息 语法: @@ -47,26 +47,26 @@ SHOW PARTITIONS ### Example -1.展示指定db下指定表的所有非临时分区信息 +1. 展示指定db下指定表的所有非临时分区信息 -```SQL - SHOW PARTITIONS FROM example_db.table_name; -``` + ```SQL + SHOW PARTITIONS FROM example_db.table_name; + ``` 2. 展示指定db下指定表的所有临时分区信 - + ```SQL SHOW TEMPORARY PARTITIONS FROM example_db.table_name; ``` - + 3. 展示指定db下指定表的指定非临时分区的信息 - + ```SQL SHOW PARTITIONS FROM example_db.table_name WHERE PartitionName = "p1"; ``` - + 4. 展示指定db下指定表的最新非临时分区的信息 - + ```SQL SHOW PARTITIONS FROM example_db.table_name ORDER BY PartitionId DESC LIMIT 1; ``` diff --git a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md index 5ab40e24c1fdc3..a34345f068245d 100644 --- a/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md +++ b/docs/zh-CN/docs/sql-manual/sql-reference/Show-Statements/SHOW-STATUS.md @@ -32,7 +32,7 @@ SHOW STATUS ### Description -该命令用于查看通过[创建物化视图](../../Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW)语句提交的创建物化视图作业的执行情况。 +该命令用于查看通过[创建物化视图](../Data-Definition-Statements/Create/CREATE-MATERIALIZED-VIEW)语句提交的创建物化视图作业的执行情况。 > 该语句相当于`SHOW ALTER TABLE ROLLUP`; diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index c48294225f7083..e4b28a006990ad 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -226,6 +226,7 @@ multipartIdentifier // -----------------Expression----------------- namedExpression : expression (AS? name=errorCapturingIdentifier)? + | expression (AS? strName=STRING+)? ; namedExpressionSeq @@ -296,7 +297,7 @@ primaryExpression | constant #constantDefault | ASTERISK #star | qualifiedName DOT ASTERISK #star - | identifier LEFT_PAREN (DISTINCT? arguments+=expression + | identifier LEFT_PAREN ((DISTINCT|ALL)? arguments+=expression (COMMA arguments+=expression)*)? RIGHT_PAREN #functionCall | LEFT_PAREN query RIGHT_PAREN #subqueryExpression | identifier #columnReference diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup index ac678a28984800..8f6aaa63b806a4 100644 --- a/fe/fe-core/src/main/cup/sql_parser.cup +++ b/fe/fe-core/src/main/cup/sql_parser.cup @@ -267,6 +267,7 @@ terminal String KW_BINLOG, KW_BITMAP, KW_BITMAP_UNION, + KW_NGRAM_BF, KW_BLOB, KW_BOOLEAN, KW_BROKER, @@ -456,6 +457,7 @@ terminal String KW_NULL, KW_NULLS, KW_OBSERVER, + KW_OF, KW_OFFSET, KW_ON, KW_ONLY, @@ -592,6 +594,7 @@ terminal String KW_VARCHAR, KW_VARIABLES, KW_VERBOSE, + KW_VERSION, KW_VIEW, KW_WARNINGS, KW_WEEK, @@ -684,6 +687,7 @@ nonterminal ArrayList ident_list; nonterminal PartitionNames opt_partition_names, partition_names; nonterminal ArrayList opt_tablet_list, tablet_list; nonterminal TableSample opt_table_sample, table_sample; +nonterminal TableSnapshot opt_table_snapshot, table_snapshot; nonterminal ClusterName cluster_name; nonterminal ClusterName des_cluster_name; nonterminal TableName table_name, opt_table_name; @@ -2143,7 +2147,7 @@ opt_password_lock_time ::= | KW_PASSWORD_LOCK_TIME passwd_lock_time_opt:opt {: RESULT = opt; - :} + :} ; passwd_lock_time_opt ::= @@ -3270,6 +3274,10 @@ opt_index_type ::= {: RESULT = IndexDef.IndexType.BITMAP; :} + | KW_USING KW_NGRAM_BF + {: + RESULT = IndexDef.IndexType.NGRAM_BF; + :} | KW_USING KW_INVERTED {: RESULT = IndexDef.IndexType.INVERTED; @@ -5095,9 +5103,31 @@ base_table_ref_list ::= ; base_table_ref ::= - table_name:name opt_partition_names:partitionNames opt_tablet_list:tabletIds opt_table_alias:alias opt_table_sample:tableSample opt_common_hints:commonHints + table_name:name opt_table_snapshot:tableSnapshot opt_partition_names:partitionNames opt_tablet_list:tabletIds opt_table_alias:alias opt_table_sample:tableSample opt_common_hints:commonHints + {: + RESULT = new TableRef(name, alias, partitionNames, tabletIds, tableSample, commonHints, tableSnapshot); + :} + ; + +opt_table_snapshot ::= + /* empty */ + {: + RESULT = null; + :} + | table_snapshot:tableSnapshot {: - RESULT = new TableRef(name, alias, partitionNames, tabletIds, tableSample, commonHints); + RESULT = tableSnapshot; + :} + ; + +table_snapshot ::= + KW_FOR KW_VERSION KW_AS KW_OF INTEGER_LITERAL:version + {: + RESULT = new TableSnapshot(version); + :} + | KW_FOR KW_TIME KW_AS KW_OF STRING_LITERAL:time + {: + RESULT = new TableSnapshot(time); :} ; @@ -5662,10 +5692,10 @@ func_args_def ::= cast_expr ::= KW_CAST LPAREN expr:e KW_AS type_def:targetType RPAREN - {: - CastExpr castExpr = new CastExpr(targetType, e); + {: + CastExpr castExpr = new CastExpr(targetType, e); if (targetType.getType().getLength() != -1 - && (targetType.getType().getPrimitiveType() == PrimitiveType.VARCHAR + && (targetType.getType().getPrimitiveType() == PrimitiveType.VARCHAR || targetType.getType().getPrimitiveType() == PrimitiveType.CHAR)) { // transfer cast(xx as char(N)/varchar(N)) to substr(cast(xx as char), 1, N) // this is just a workaround to make the result correct @@ -6504,6 +6534,8 @@ keyword ::= {: RESULT = id; :} | KW_BITMAP_UNION:id {: RESULT = id; :} + | KW_NGRAM_BF:id + {: RESULT = id; :} | KW_QUANTILE_UNION:id {: RESULT = id; :} | KW_BLOB:id @@ -6686,6 +6718,8 @@ keyword ::= {: RESULT = id; :} | KW_NULLS:id {: RESULT = id; :} + | KW_OF:id + {: RESULT = id; :} | KW_OFFSET:id {: RESULT = id; :} | KW_ONLY:id @@ -6810,6 +6844,8 @@ keyword ::= {: RESULT = id; :} | KW_VERBOSE:id {: RESULT = id; :} + | KW_VERSION:id + {: RESULT = id; :} | KW_VIEW:id {: RESULT = id; :} | KW_WARNINGS:id diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java index e506a1adc3819a..d3f188c46eef63 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java @@ -52,9 +52,11 @@ import org.apache.doris.catalog.OlapTable.OlapTableState; import org.apache.doris.catalog.Partition; import org.apache.doris.catalog.PartitionInfo; +import org.apache.doris.catalog.Replica; import org.apache.doris.catalog.ReplicaAllocation; import org.apache.doris.catalog.Table; import org.apache.doris.catalog.TableIf.TableType; +import org.apache.doris.catalog.Tablet; import org.apache.doris.catalog.View; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.DdlException; @@ -187,8 +189,17 @@ private boolean processAlterOlapTable(AlterTableStmt stmt, OlapTable olapTable, if (currentAlterOps.checkTableStoragePolicy(alterClauses)) { String tableStoragePolicy = olapTable.getStoragePolicy(); if (!tableStoragePolicy.equals("")) { - throw new DdlException("Do not support alter table's storage policy , this table [" - + olapTable.getName() + "] has storage policy " + tableStoragePolicy); + for (Partition partition : olapTable.getAllPartitions()) { + for (Tablet tablet : partition.getBaseIndex().getTablets()) { + for (Replica replica : tablet.getReplicas()) { + if (replica.getRowCount() > 0 || replica.getDataSize() > 0) { + throw new DdlException("Do not support alter table's storage policy , this table [" + + olapTable.getName() + "] has storage policy " + tableStoragePolicy + + ", the table need to be empty."); + } + } + } + } } String currentStoragePolicy = currentAlterOps.getTableStoragePolicy(alterClauses); // check currentStoragePolicy resource exist. diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java index 1a0489ea583d8e..de171e25c77e4b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java +++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java @@ -1247,6 +1247,8 @@ private void createJob(long dbId, OlapTable olapTable, Map existedIdxColSet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER); existedIdxColSet.addAll(existedIdx.getColumns()); - if (newColset.equals(existedIdxColSet)) { + if (existedIdx.getIndexType() == indexDef.getIndexType() && newColset.equals(existedIdxColSet)) { throw new DdlException( - "index for columns (" + String.join(",", indexDef.getColumns()) + " ) already exist."); + indexDef.getIndexType() + + " index for columns (" + + String.join(",", indexDef.getColumns()) + + " ) already exist." + ); } } @@ -2069,7 +2075,7 @@ private boolean processAddIndex(CreateIndexClause alterClause, OlapTable olapTab if (column != null) { indexDef.checkColumn(column, olapTable.getKeysType()); } else { - throw new DdlException("BITMAP column does not exist in table. invalid column: " + col); + throw new DdlException("index column does not exist in table. invalid column: " + col); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java index 9c5b2e0be1f909..946718b2c659e7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java @@ -46,7 +46,6 @@ import org.apache.doris.planner.RuntimeFilter; import org.apache.doris.qe.ConnectContext; import org.apache.doris.rewrite.BetweenToCompoundRule; -import org.apache.doris.rewrite.CompactEqualsToInPredicateRule; import org.apache.doris.rewrite.CompoundPredicateWriteRule; import org.apache.doris.rewrite.ExprRewriteRule; import org.apache.doris.rewrite.ExprRewriter; @@ -415,7 +414,6 @@ public GlobalState(Env env, ConnectContext context) { rules.add(RewriteEncryptKeyRule.INSTANCE); rules.add(RewriteInPredicateRule.INSTANCE); rules.add(RewriteAliasFunctionRule.INSTANCE); - rules.add(CompactEqualsToInPredicateRule.INSTANCE); List onceRules = Lists.newArrayList(); onceRules.add(ExtractCommonFactorsRule.INSTANCE); onceRules.add(InferFiltersRule.INSTANCE); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseTableRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseTableRef.java index ccfc508cd14a21..05c7b9c588261c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseTableRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BaseTableRef.java @@ -70,6 +70,7 @@ public void analyze(Analyzer analyzer) throws UserException { name.analyze(analyzer); desc = analyzer.registerTableRef(this); isAnalyzed = true; // true that we have assigned desc + analyzeTableSnapshot(analyzer); analyzeLateralViewRef(analyzer); analyzeJoin(analyzer); analyzeSortHints(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java index 36b556c623a3e6..66670db2f26c26 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnDef.java @@ -266,7 +266,7 @@ public void analyze(boolean isOlap) throws AnalysisException { defaultValue = DefaultValue.BITMAP_EMPTY_DEFAULT_VALUE; } - if (type.getPrimitiveType() == PrimitiveType.ARRAY) { + if (type.getPrimitiveType() == PrimitiveType.ARRAY && isOlap) { if (isKey()) { throw new AnalysisException("Array can only be used in the non-key column of" + " the duplicate table at present."); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java index 1f431930356b2f..c72b8820645b80 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java @@ -390,7 +390,7 @@ public void analyze(Analyzer analyzer) throws UserException { for (ColumnDef columnDef : columnDefs) { columnDef.analyze(engineName.equals("olap")); - if (columnDef.getType().isArrayType()) { + if (columnDef.getType().isArrayType() && engineName.equals("olap")) { if (columnDef.getAggregateType() != null && columnDef.getAggregateType() != AggregateType.NONE) { throw new AnalysisException("Array column can't support aggregation " + columnDef.getAggregateType()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPolicyStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPolicyStmt.java index 2c4199d8ce775d..50ff6185ed913b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPolicyStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DropPolicyStmt.java @@ -18,7 +18,6 @@ package org.apache.doris.analysis; import org.apache.doris.catalog.Env; -import org.apache.doris.common.DdlException; import org.apache.doris.common.ErrorCode; import org.apache.doris.common.ErrorReport; import org.apache.doris.common.UserException; @@ -57,8 +56,7 @@ public void analyze(Analyzer analyzer) throws UserException { super.analyze(analyzer); switch (type) { case STORAGE: - // current not support drop storage policy, because be use it policy name to find s3 resource. - throw new DdlException("current not support drop storage policy."); + break; case ROW: default: tableName.analyze(analyzer); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 287f7d23770fe0..fe31db58faefb0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -125,7 +125,7 @@ public class FunctionCallExpr extends Expr { Preconditions.checkArgument(children != null && children.size() > 0); if (children.get(0).getType().isDecimalV3()) { return ScalarType.createDecimalV3Type(ScalarType.MAX_DECIMAL128_PRECISION, - ((ScalarType) children.get(0).getType()).getScalarScale()); + Math.max(((ScalarType) children.get(0).getType()).getScalarScale(), 4)); } else { return returnType; } @@ -739,6 +739,14 @@ private void analyzeBuiltinAggFunction(Analyzer analyzer) throws AnalysisExcepti && ((!arg.type.isNumericType() && !arg.type.isNull()) || arg.type.isOnlyMetricType())) { throw new AnalysisException(fnName.getFunction() + " requires a numeric parameter: " + this.toSql()); } + // DecimalV3 scale lower than DEFAULT_MIN_AVG_DECIMAL128_SCALE should do cast + if (fnName.getFunction().equalsIgnoreCase("avg") && arg.type.isDecimalV3() + && arg.type.getDecimalDigits() < ScalarType.DEFAULT_MIN_AVG_DECIMAL128_SCALE) { + Type t = ScalarType.createDecimalType(arg.type.getPrimitiveType(), arg.type.getPrecision(), + ScalarType.DEFAULT_MIN_AVG_DECIMAL128_SCALE); + Expr e = getChild(0).castTo(t); + setChild(0, e); + } if (fnName.getFunction().equalsIgnoreCase("sum_distinct") && ((!arg.type.isNumericType() && !arg.type.isNull()) || arg.type.isOnlyMetricType())) { throw new AnalysisException( @@ -815,12 +823,13 @@ private void analyzeBuiltinAggFunction(Analyzer analyzer) throws AnalysisExcepti } } - if ((fnName.getFunction().equalsIgnoreCase(FunctionSet.HLL_UNION_AGG) - || fnName.getFunction().equalsIgnoreCase(FunctionSet.HLL_CARDINALITY) - || fnName.getFunction().equalsIgnoreCase(FunctionSet.HLL_RAW_AGG)) + if ((fnName.getFunction().equalsIgnoreCase("HLL_UNION_AGG") + || fnName.getFunction().equalsIgnoreCase("HLL_CARDINALITY") + || fnName.getFunction().equalsIgnoreCase("HLL_RAW_AGG") + || fnName.getFunction().equalsIgnoreCase("HLL_UNION")) && !arg.type.isHllType()) { throw new AnalysisException( - "HLL_UNION_AGG, HLL_RAW_AGG and HLL_CARDINALITY's params must be hll column"); + "HLL_UNION, HLL_UNION_AGG, HLL_RAW_AGG and HLL_CARDINALITY's params must be hll column"); } if (fnName.getFunction().equalsIgnoreCase("min") @@ -829,7 +838,7 @@ private void analyzeBuiltinAggFunction(Analyzer analyzer) throws AnalysisExcepti } else if (fnName.getFunction().equalsIgnoreCase("DISTINCT_PC") || fnName.getFunction().equalsIgnoreCase("DISTINCT_PCSA") || fnName.getFunction().equalsIgnoreCase("NDV") - || fnName.getFunction().equalsIgnoreCase(FunctionSet.HLL_UNION_AGG)) { + || fnName.getFunction().equalsIgnoreCase("HLL_UNION_AGG")) { fnParams.setIsDistinct(false); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java index 4df18a98792241..ed03dbd84e6642 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java @@ -37,6 +37,11 @@ public class IndexDef { private String comment; private Map properties; + public static final String NGRAM_SIZE_KEY = "gram_size"; + public static final String NGRAM_BF_SIZE_KEY = "bf_size"; + public static final String DEFAULT_NGRAM_SIZE = "2"; + public static final String DEFAULT_NGRAM_BF_SIZE = "256"; + public IndexDef(String indexName, boolean ifNotExists, List columns, IndexType indexType, Map properties, String comment) { this.indexName = indexName; @@ -57,6 +62,10 @@ public IndexDef(String indexName, boolean ifNotExists, List columns, Ind } else { this.properties = properties; } + if (indexType == IndexType.NGRAM_BF) { + properties.putIfAbsent(NGRAM_SIZE_KEY, DEFAULT_NGRAM_SIZE); + properties.putIfAbsent(NGRAM_BF_SIZE_KEY, DEFAULT_NGRAM_BF_SIZE); + } } public void analyze() throws AnalysisException { @@ -155,6 +164,7 @@ public enum IndexType { BITMAP, INVERTED, BLOOMFILTER, + NGRAM_BF } public boolean isInvertedIndex() { @@ -162,7 +172,8 @@ public boolean isInvertedIndex() { } public void checkColumn(Column column, KeysType keysType) throws AnalysisException { - if (indexType == IndexType.BITMAP || indexType == IndexType.INVERTED || indexType == IndexType.BLOOMFILTER) { + if (indexType == IndexType.BITMAP || indexType == IndexType.INVERTED || indexType == IndexType.BLOOMFILTER + || indexType == IndexType.NGRAM_BF) { String indexColName = column.getName(); PrimitiveType colType = column.getDataType(); if (!(colType.isDateType() || colType.isDecimalV2Type() || colType.isDecimalV3Type() @@ -177,6 +188,31 @@ public void checkColumn(Column column, KeysType keysType) throws AnalysisExcepti if (indexType == IndexType.INVERTED) { InvertedIndexUtil.checkInvertedIndexParser(indexColName, colType, properties); + } else if (indexType == IndexType.NGRAM_BF) { + if (colType != PrimitiveType.CHAR && colType != PrimitiveType.VARCHAR + && colType != PrimitiveType.STRING) { + throw new AnalysisException(colType + " is not supported in ngram_bf index. " + + "invalid column: " + indexColName); + } else if ((keysType == KeysType.AGG_KEYS && !column.isKey())) { + throw new AnalysisException( + "ngram_bf index only used in columns of DUP_KEYS/UNIQUE_KEYS table or key columns of" + + " AGG_KEYS table. invalid column: " + indexColName); + } + if (properties.size() != 2) { + throw new AnalysisException("ngram_bf index should have gram_size and bf_size properties"); + } + try { + int ngramSize = Integer.parseInt(properties.get(NGRAM_SIZE_KEY)); + int bfSize = Integer.parseInt(properties.get(NGRAM_BF_SIZE_KEY)); + if (ngramSize > 256 || ngramSize < 1) { + throw new AnalysisException("gram_size should be integer and less than 256"); + } + if (bfSize > 65536 || bfSize < 64) { + throw new AnalysisException("bf_size should be integer and between 64 and 65536"); + } + } catch (NumberFormatException e) { + throw new AnalysisException("invalid ngram properties:" + e.getMessage(), e); + } } } else { throw new AnalysisException("Unsupported index type: " + indexType); diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java index 528a024b2d76de..5b0951d37b3e9a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ModifyTablePropertiesClause.java @@ -103,7 +103,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException { this.needTableStable = false; setStoragePolicy(properties.getOrDefault(PropertyAnalyzer.PROPERTIES_STORAGE_POLICY, "")); } else if (properties.containsKey(PropertyAnalyzer.ENABLE_UNIQUE_KEY_MERGE_ON_WRITE)) { - throw new AnalysisException("Alter tablet type not supported"); + throw new AnalysisException("Can not change UNIQUE KEY to Merge-On-Write mode"); } else { throw new AnalysisException("Unknown table property: " + properties.keySet()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index 26a0eb5e8b4c8b..1af417841a3590 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -304,7 +304,6 @@ public void getTables(Analyzer analyzer, boolean expandView, Map inlineStmt.getTables(analyzer, expandView, tableMap, parentViewNameSet); } else if (tblRef instanceof TableValuedFunctionRef) { TableValuedFunctionRef tblFuncRef = (TableValuedFunctionRef) tblRef; - tblFuncRef.analyze(analyzer); tableMap.put(tblFuncRef.getTableFunction().getTable().getId(), tblFuncRef.getTableFunction().getTable()); } else { diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SinglePartitionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SinglePartitionDesc.java index 06b4bcfa71dd00..7ffec7c1d2a7d6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SinglePartitionDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SinglePartitionDesc.java @@ -58,7 +58,7 @@ public SinglePartitionDesc(boolean ifNotExists, String partName, PartitionKeyDes this.partitionKeyDesc = partitionKeyDesc; this.properties = properties; - this.partitionDataProperty = DataProperty.DEFAULT_DATA_PROPERTY; + this.partitionDataProperty = new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM); this.replicaAlloc = ReplicaAllocation.DEFAULT_ALLOCATION; this.storagePolicy = ""; } @@ -127,7 +127,7 @@ public void analyze(int partColNum, Map otherProperties) throws // analyze data property partitionDataProperty = PropertyAnalyzer.analyzeDataProperty(properties, - DataProperty.DEFAULT_DATA_PROPERTY); + new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); Preconditions.checkNotNull(partitionDataProperty); // analyze replication num diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java index 3b5577fd6b12c6..bf43f552ea2e06 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableRef.java @@ -22,6 +22,7 @@ import org.apache.doris.catalog.Env; import org.apache.doris.catalog.TableIf; +import org.apache.doris.catalog.external.HMSExternalTable; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.ErrorCode; import org.apache.doris.common.ErrorReport; @@ -29,6 +30,7 @@ import org.apache.doris.common.UserException; import org.apache.doris.common.io.Text; import org.apache.doris.common.io.Writable; +import org.apache.doris.common.util.TimeUtils; import org.apache.doris.rewrite.ExprRewriter; import org.apache.doris.rewrite.ExprRewriter.ClauseType; @@ -48,6 +50,7 @@ import java.util.List; import java.util.Set; import java.util.StringJoiner; +import java.util.regex.Matcher; /** * Superclass of all table references, including references to views, base tables @@ -129,6 +132,8 @@ public class TableRef implements ParseNode, Writable { private boolean isPartitionJoin; private String sortColumn = null; + private TableSnapshot tableSnapshot; + // END: Members that need to be reset() // /////////////////////////////////////// @@ -153,6 +158,11 @@ public TableRef(TableName name, String alias, PartitionNames partitionNames, Arr */ public TableRef(TableName name, String alias, PartitionNames partitionNames, ArrayList sampleTabletIds, TableSample tableSample, ArrayList commonHints) { + this(name, alias, partitionNames, sampleTabletIds, tableSample, commonHints, null); + } + + public TableRef(TableName name, String alias, PartitionNames partitionNames, ArrayList sampleTabletIds, + TableSample tableSample, ArrayList commonHints, TableSnapshot tableSnapshot) { this.name = name; if (alias != null) { if (Env.isStoredTableNamesLowerCase()) { @@ -167,6 +177,7 @@ public TableRef(TableName name, String alias, PartitionNames partitionNames, Arr this.sampleTabletIds = sampleTabletIds; this.tableSample = tableSample; this.commonHints = commonHints; + this.tableSnapshot = tableSnapshot; isAnalyzed = false; } @@ -186,6 +197,7 @@ protected TableRef(TableRef other) { (other.sortHints != null) ? Lists.newArrayList(other.sortHints) : null; onClause = (other.onClause != null) ? other.onClause.clone().reset() : null; partitionNames = (other.partitionNames != null) ? new PartitionNames(other.partitionNames) : null; + tableSnapshot = (other.tableSnapshot != null) ? new TableSnapshot(other.tableSnapshot) : null; tableSample = (other.tableSample != null) ? new TableSample(other.tableSample) : null; commonHints = other.commonHints; @@ -302,6 +314,10 @@ public TableSample getTableSample() { return tableSample; } + public TableSnapshot getTableSnapshot() { + return tableSnapshot; + } + /** * This method should only be called after the TableRef has been analyzed. */ @@ -499,6 +515,27 @@ protected void analyzeHints() throws AnalysisException { } } + protected void analyzeTableSnapshot(Analyzer analyzer) throws AnalysisException { + if (tableSnapshot == null) { + return; + } + TableIf.TableType tableType = this.getTable().getType(); + if (tableType != TableIf.TableType.HMS_EXTERNAL_TABLE) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_NONSUPPORT_TIME_TRAVEL_TABLE); + } + HMSExternalTable extTable = (HMSExternalTable) this.getTable(); + if (extTable.getDlaType() != HMSExternalTable.DLAType.ICEBERG) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_NONSUPPORT_TIME_TRAVEL_TABLE); + } + if (tableSnapshot.getType() == TableSnapshot.VersionType.TIME) { + String asOfTime = tableSnapshot.getTime(); + Matcher matcher = TimeUtils.DATETIME_FORMAT_REG.matcher(asOfTime); + if (!matcher.matches()) { + throw new AnalysisException("Invalid datetime string: " + asOfTime); + } + } + } + /** * Analyze the join clause. * The join clause can only be analyzed after the left table has been analyzed diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableSnapshot.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableSnapshot.java new file mode 100644 index 00000000000000..e5d43b6d0ba68f --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableSnapshot.java @@ -0,0 +1,70 @@ +// 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. + +package org.apache.doris.analysis; + +/** + * Snapshot read for time travel + * the version in 2022.12.28 just supports external iceberg table + */ +public class TableSnapshot { + + public enum VersionType { + TIME, VERSION + } + + private final VersionType type; + private String time; + private long version; + + public TableSnapshot(long version) { + this.version = version; + this.type = VersionType.VERSION; + } + + public TableSnapshot(String time) { + this.time = time; + this.type = VersionType.TIME; + } + + public TableSnapshot(TableSnapshot other) { + this.type = other.type; + this.time = other.time; + this.version = other.version; + } + + public VersionType getType() { + return type; + } + + public String getTime() { + return time; + } + + public long getVersion() { + return version; + } + + @Override + public String toString() { + if (this.type == VersionType.VERSION) { + return " FOR VERSION AS OF " + version; + } else { + return " FOR TIME AS OF '" + time + "'"; + } + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java index 2bbf5e00bed807..4871baf8893221 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TableValuedFunctionRef.java @@ -32,10 +32,12 @@ public class TableValuedFunctionRef extends TableRef { private String funcName; private Map params; - public TableValuedFunctionRef(String funcName, String alias, Map params) { + public TableValuedFunctionRef(String funcName, String alias, Map params) throws AnalysisException { super(new TableName(null, null, "_table_valued_function_" + funcName), alias); this.funcName = funcName; this.params = params; + this.tableFunction = TableValuedFunctionIf.getTableFunction(funcName, params); + this.table = tableFunction.getTable(); if (hasExplicitAlias()) { return; } @@ -70,10 +72,6 @@ public void analyze(Analyzer analyzer) throws AnalysisException { if (isAnalyzed) { return; } - // Table function could generate a table which will has columns - // Maybe will call be during this process - this.tableFunction = TableValuedFunctionIf.getTableFunction(funcName, params); - this.table = tableFunction.getTable(); desc = analyzer.registerTableRef(this); isAnalyzed = true; // true that we have assigned desc analyzeJoin(analyzer); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java index 0729b0aa03c513..07996451d3794d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java @@ -559,23 +559,32 @@ public String toSql(boolean ifNotExists) { sb.append(" INTERMEDIATE " + getIntermediateType()); } - sb.append(" PROPERTIES (") - .append("\n \"INIT_FN\"=\"" + getInitFnSymbol() + "\"") - .append(",\n \"UPDATE_FN\"=\"" + getUpdateFnSymbol() + "\"") - .append(",\n \"MERGE_FN\"=\"" + getMergeFnSymbol() + "\""); - if (getSerializeFnSymbol() != null) { - sb.append(",\n \"SERIALIZE_FN\"=\"" + getSerializeFnSymbol() + "\""); - } - if (getFinalizeFnSymbol() != null) { - sb.append(",\n \"FINALIZE_FN\"=\"" + getFinalizeFnSymbol() + "\""); + sb.append(" PROPERTIES ("); + if (getBinaryType() != TFunctionBinaryType.JAVA_UDF) { + sb.append("\n \"INIT_FN\"=\"" + getInitFnSymbol() + "\",") + .append("\n \"UPDATE_FN\"=\"" + getUpdateFnSymbol() + "\",") + .append("\n \"MERGE_FN\"=\"" + getMergeFnSymbol() + "\","); + if (getSerializeFnSymbol() != null) { + sb.append("\n \"SERIALIZE_FN\"=\"" + getSerializeFnSymbol() + "\","); + } + if (getFinalizeFnSymbol() != null) { + sb.append("\n \"FINALIZE_FN\"=\"" + getFinalizeFnSymbol() + "\","); + } } if (getSymbolName() != null) { - sb.append(",\n \"SYMBOL\"=\"" + getSymbolName() + "\""); + sb.append("\n \"SYMBOL\"=\"" + getSymbolName() + "\","); } - sb.append(",\n \"OBJECT_FILE\"=") - .append("\"" + (getLocation() == null ? "" : getLocation().toString()) + "\""); - sb.append(",\n \"MD5\"=").append("\"" + getChecksum() + "\""); + if (getBinaryType() == TFunctionBinaryType.JAVA_UDF) { + sb.append("\n \"FILE\"=") + .append("\"" + (getLocation() == null ? "" : getLocation().toString()) + "\","); + boolean isReturnNull = this.getNullableMode() == NullableMode.ALWAYS_NULLABLE; + sb.append("\n \"ALWAYS_NULLABLE\"=").append("\"" + isReturnNull + "\","); + } else { + sb.append("\n \"OBJECT_FILE\"=") + .append("\"" + (getLocation() == null ? "" : getLocation().toString()) + "\","); + } + sb.append("\n \"TYPE\"=").append("\"" + this.getBinaryType() + "\""); sb.append("\n);"); return sb.toString(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java index 863057988e0477..074472c5742dfb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BuiltinAggregateFunctions.java @@ -17,6 +17,7 @@ package org.apache.doris.catalog; +import org.apache.doris.nereids.trees.expressions.functions.agg.ApproxCountDistinct; import org.apache.doris.nereids.trees.expressions.functions.agg.Avg; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapIntersect; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnion; @@ -33,6 +34,7 @@ import org.apache.doris.nereids.trees.expressions.functions.agg.Min; import org.apache.doris.nereids.trees.expressions.functions.agg.Ndv; import org.apache.doris.nereids.trees.expressions.functions.agg.Sum; +import org.apache.doris.nereids.trees.expressions.functions.agg.Variance; import com.google.common.collect.ImmutableList; @@ -44,23 +46,25 @@ */ public class BuiltinAggregateFunctions implements FunctionHelper { public final ImmutableList aggregateFunctions = ImmutableList.of( + agg(ApproxCountDistinct.class, "approx_count_distinct"), agg(Avg.class), agg(BitmapIntersect.class, "bitmap_intersect"), agg(BitmapUnion.class, "bitmap_union"), agg(BitmapUnionCount.class, "bitmap_union_count"), agg(BitmapUnionInt.class, "bitmap_union_int"), agg(Count.class), + + agg(GroupBitAnd.class, "group_bit_and"), agg(GroupBitmapXor.class, "group_bitmap_xor"), + agg(GroupBitOr.class, "group_bit_or"), + agg(GroupBitXor.class, "group_bit_xor"), agg(HllUnion.class, "hll_union", "hll_raw_agg"), agg(HllUnionAgg.class, "hll_union_agg"), agg(Max.class), agg(Min.class), + agg(Ndv.class), agg(Sum.class), - agg(GroupBitAnd.class, "group_bit_and"), - agg(GroupBitOr.class, "group_bit_or"), - agg(GroupBitXor.class, "group_bit_xor"), - agg(Ndv.class) - + agg(Variance.class, "variance") ); public static final BuiltinAggregateFunctions INSTANCE = new BuiltinAggregateFunctions(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/DataProperty.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/DataProperty.java index 50fcbf7e728313..13b1fd61238dfc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/DataProperty.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/DataProperty.java @@ -35,9 +35,8 @@ import java.util.Objects; public class DataProperty implements Writable, GsonPostProcessable { - public static final DataProperty DEFAULT_DATA_PROPERTY = new DataProperty( - "SSD".equalsIgnoreCase(Config.default_storage_medium) ? TStorageMedium.SSD : TStorageMedium.HDD - ); + public static final TStorageMedium DEFAULT_STORAGE_MEDIUM = + "SSD".equalsIgnoreCase(Config.default_storage_medium) ? TStorageMedium.SSD : TStorageMedium.HDD; public static final long MAX_COOLDOWN_TIME_MS = 253402271999000L; // 9999-12-31 23:59:59 @SerializedName(value = "storageMedium") diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java index a8a1c8b78fa495..1d95551df861a5 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java @@ -2949,7 +2949,7 @@ public static void getDdlStmt(DdlStmt ddlStmt, String dbName, TableIf table, Lis } // unique key table with merge on write - if (olapTable.getEnableUniqueKeyMergeOnWrite()) { + if (olapTable.getKeysType() == KeysType.UNIQUE_KEYS && olapTable.getEnableUniqueKeyMergeOnWrite()) { sb.append(",\n\"").append(PropertyAnalyzer.ENABLE_UNIQUE_KEY_MERGE_ON_WRITE).append("\" = \""); sb.append(olapTable.getEnableUniqueKeyMergeOnWrite()).append("\""); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java index 2da8ce35ff9425..b7058d2d2073fb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Index.java @@ -19,6 +19,7 @@ import org.apache.doris.analysis.IndexDef; import org.apache.doris.analysis.InvertedIndexUtil; +import org.apache.doris.common.AnalysisException; import org.apache.doris.common.io.Text; import org.apache.doris.common.io.Writable; import org.apache.doris.common.util.PrintableMap; @@ -32,9 +33,13 @@ import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; /** * Internal representation of index, including index type, name, columns and comments. @@ -197,4 +202,31 @@ public TOlapTableIndex toThrift() { } return tIndex; } + + public static void checkConflict(Collection indices, Set bloomFilters) throws AnalysisException { + indices = indices == null ? Collections.emptyList() : indices; + bloomFilters = bloomFilters == null ? Collections.emptySet() : bloomFilters; + Set bfColumns = new HashSet<>(); + for (Index index : indices) { + if (IndexDef.IndexType.NGRAM_BF == index.getIndexType() + || IndexDef.IndexType.BLOOMFILTER == index.getIndexType()) { + for (String column : index.getColumns()) { + column = column.toLowerCase(); + if (bfColumns.contains(column)) { + throw new AnalysisException(column + " should have only one ngram bloom filter index or bloom " + + "filter index"); + } + bfColumns.add(column); + } + } + } + for (String column : bloomFilters) { + column = column.toLowerCase(); + if (bfColumns.contains(column)) { + throw new AnalysisException(column + " should have only one ngram bloom filter index or bloom " + + "filter index"); + } + bfColumns.add(column); + } + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java index 148faa8ecd8397..c8e89cae1acb45 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarFunction.java @@ -389,9 +389,17 @@ public String toSql(boolean ifNotExists) { if (getCloseFnSymbol() != null) { sb.append(",\n \"CLOSE_FN\"=").append("\"" + getCloseFnSymbol() + "\""); } - sb.append(",\n \"OBJECT_FILE\"=") - .append("\"" + (getLocation() == null ? "" : getLocation().toString()) + "\""); - sb.append(",\n \"MD5\"=").append("\"" + getChecksum() + "\""); + + if (getBinaryType() == TFunctionBinaryType.JAVA_UDF) { + sb.append(",\n \"FILE\"=") + .append("\"" + (getLocation() == null ? "" : getLocation().toString()) + "\""); + boolean isReturnNull = this.getNullableMode() == NullableMode.ALWAYS_NULLABLE; + sb.append(",\n \"ALWAYS_NULLABLE\"=").append("\"" + isReturnNull + "\""); + } else { + sb.append(",\n \"OBJECT_FILE\"=") + .append("\"" + (getLocation() == null ? "" : getLocation().toString()) + "\""); + } + sb.append(",\n \"TYPE\"=").append("\"" + this.getBinaryType() + "\""); sb.append("\n);"); return sb.toString(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java index 3cd713b507811d..446c73f58e31d0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/ScalarType.java @@ -84,6 +84,7 @@ public class ScalarType extends Type { public static final int MAX_DECIMAL32_PRECISION = 9; public static final int MAX_DECIMAL64_PRECISION = 18; public static final int MAX_DECIMAL128_PRECISION = 38; + public static final int DEFAULT_MIN_AVG_DECIMAL128_SCALE = 4; public static final int MAX_DATETIMEV2_SCALE = 6; private static final Logger LOG = LogManager.getLogger(ScalarType.class); @@ -557,9 +558,6 @@ public String toSql(int depth) { } break; case DECIMALV2: - case DECIMAL32: - case DECIMAL64: - case DECIMAL128: if (Strings.isNullOrEmpty(precisionStr)) { stringBuilder.append("decimal").append("(").append(precision) .append(", ").append(scale).append(")"); @@ -570,8 +568,22 @@ public String toSql(int depth) { stringBuilder.append("decimal").append("(`").append(precisionStr).append("`)"); } break; + case DECIMAL32: + case DECIMAL64: + case DECIMAL128: + String typeName = Config.enable_decimal_conversion ? "decimal" : "decimalv3"; + if (Strings.isNullOrEmpty(precisionStr)) { + stringBuilder.append(typeName).append("(").append(precision) + .append(", ").append(scale).append(")"); + } else if (!Strings.isNullOrEmpty(precisionStr) && !Strings.isNullOrEmpty(scaleStr)) { + stringBuilder.append(typeName).append("(`").append(precisionStr) + .append("`, `").append(scaleStr).append("`)"); + } else { + stringBuilder.append(typeName).append("(`").append(precisionStr).append("`)"); + } + break; case DATETIMEV2: - stringBuilder.append("datetime").append("(").append(scale).append(")"); + stringBuilder.append("datetimev2").append("(").append(scale).append(")"); break; case TIME: stringBuilder.append("time"); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java index 2385863a405c18..df013b7cc75608 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TableIf.java @@ -127,6 +127,8 @@ default int getBaseColumnIdxByName(String colName) { BaseAnalysisTask createAnalysisTask(AnalysisTaskScheduler scheduler, AnalysisTaskInfo info); + long estimatedRowCount(); + /** * Doris table type. */ diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java index b8ee68aacd10a0..774ead88c960d9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Type.java @@ -354,7 +354,7 @@ public boolean isNativeType() { public boolean isDateType() { return isScalarType(PrimitiveType.DATE) || isScalarType(PrimitiveType.DATETIME) - || isScalarType(PrimitiveType.DATEV2) || isScalarType(PrimitiveType.DATETIMEV2); + || isScalarType(PrimitiveType.DATEV2) || isScalarType(PrimitiveType.DATETIMEV2); } public boolean isDatetime() { @@ -609,7 +609,7 @@ public boolean exceedsMaxNestingDepth() { * Helper for exceedsMaxNestingDepth(). Recursively computes the max nesting depth, * terminating early if MAX_NESTING_DEPTH is reached. Returns true if this type * exceeds the MAX_NESTING_DEPTH, false otherwise. - * + *

* Examples of types and their nesting depth: * INT --> 1 * STRUCT --> 2 @@ -1004,7 +1004,7 @@ public Integer getNumPrecRadix() { * of the assignment-compatible type. For strict compatibility, this can be done * without any loss of precision. For non-strict compatibility, there may be loss of * precision, e.g. if converting from BIGINT to FLOAT. - * + *

* We chose not to follow MySQL's type casting behavior as described here: * http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html * for the following reasons: @@ -1567,7 +1567,7 @@ public static Type getCmpType(Type t1, Type t2) { // int family type and char family type should cast to char family type if ((t1ResultType.isFixedPointType() && t2ResultType.isCharFamily()) || (t2ResultType.isFixedPointType() && t1ResultType.isCharFamily())) { - return t1.isStringType() ? t1 : t2; + return t1.isStringType() ? t1 : t2; } if (t1ResultType == PrimitiveType.BIGINT && t2ResultType == PrimitiveType.BIGINT) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java index 8f111cf067fe6d..8d30eda46a0317 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/ExternalTable.java @@ -305,6 +305,11 @@ public BaseAnalysisTask createAnalysisTask(AnalysisTaskScheduler scheduler, Anal throw new NotImplementedException(); } + @Override + public long estimatedRowCount() { + return 1; + } + @Override public void write(DataOutput out) throws IOException { String json = GsonUtils.GSON.toJson(this); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java index b5db5df42fd204..29cff71cf24ccf 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/external/HMSExternalTable.java @@ -194,6 +194,7 @@ public List getPartitionColumnNames() { @Override public boolean isView() { + makeSureInitialized(); return remoteTable.isSetViewOriginalText() || remoteTable.isSetViewExpandedText(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java index a6a78d054b1acb..20948c039f4265 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/ErrorCode.java @@ -1699,7 +1699,10 @@ public enum ErrorCode { ERR_NONSUPPORT_HMS_TABLE(5088, new byte[]{'4', '2', '0', '0', '0'}, "Nonsupport hive metastore table named '%s' in database '%s' with catalog '%s'."), ERR_TABLE_NAME_LENGTH_LIMIT(5089, new byte[]{'4', '2', '0', '0', '0'}, "Table name length exceeds limit, " - + "the length of table name '%s' is %d which is greater than the configuration 'table_name_length_limit' (%d)."); + + "the length of table name '%s' is %d which is greater than the configuration 'table_name_length_limit' (%d)."), + + ERR_NONSUPPORT_TIME_TRAVEL_TABLE(5090, new byte[]{'4', '2', '0', '0', '0'}, "Only iceberg external" + + " table supports time travel in current version"); // This is error code private final int code; diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java index 571fa92975beeb..ae2b50bcc7f78a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/PrintableMap.java @@ -32,6 +32,7 @@ public class PrintableMap { private String entryDelimiter = ","; public static final Set SENSITIVE_KEY; + public static final String PASSWORD_MASK = "*XXX"; static { SENSITIVE_KEY = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER); @@ -39,6 +40,7 @@ public class PrintableMap { SENSITIVE_KEY.add("kerberos_keytab_content"); SENSITIVE_KEY.add("bos_secret_accesskey"); SENSITIVE_KEY.add("jdbc.password"); + SENSITIVE_KEY.add("elasticsearch.password"); } public PrintableMap(Map map, String keyValueSeparator, @@ -80,7 +82,7 @@ public String toString() { sb.append("\""); } if (hidePassword && SENSITIVE_KEY.contains(entry.getKey())) { - sb.append("*XXX"); + sb.append(PASSWORD_MASK); } else { sb.append(entry.getValue()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/ProfileManager.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/ProfileManager.java index 3922c496c74e55..6429b0854e10a0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/ProfileManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/ProfileManager.java @@ -74,6 +74,8 @@ public class ProfileManager { public static final String INSTANCES_NUM_PER_BE = "Instances Num Per BE"; + public static final String PARALLEL_FRAGMENT_EXEC_INSTANCE = "Parallel Fragment Exec Instance Num"; + public static final String TRACE_ID = "Trace ID"; public enum ProfileType { diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java index ff595465430e1e..52bb87dbb3b8d5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java @@ -447,12 +447,12 @@ public static long analyzeTimeout(Map properties, long defaultTi public static Boolean analyzeUseLightSchemaChange(Map properties) throws AnalysisException { if (properties == null || properties.isEmpty()) { - return false; + return true; } String value = properties.get(PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE); - // set light schema change false by default + // set light schema change true by default if (null == value) { - return false; + return true; } properties.remove(PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE); if (value.equalsIgnoreCase("true")) { @@ -460,8 +460,7 @@ public static Boolean analyzeUseLightSchemaChange(Map properties } else if (value.equalsIgnoreCase("false")) { return false; } - throw new AnalysisException(PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE - + " must be `true` or `false`"); + throw new AnalysisException(PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE + " must be `true` or `false`"); } public static Boolean analyzeDisableAutoCompaction(Map properties) throws AnalysisException { diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/TimeUtils.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/TimeUtils.java index b5dd620f25c623..9d73d0b368718d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/TimeUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/TimeUtils.java @@ -68,7 +68,7 @@ public class TimeUtils { private static final SimpleDateFormat DATETIME_FORMAT; private static final SimpleDateFormat TIME_FORMAT; - private static final Pattern DATETIME_FORMAT_REG = + public static final Pattern DATETIME_FORMAT_REG = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?" + "((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?" + "((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(" diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java index 255b63526f7808..a62562acd7a216 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogMgr.java @@ -396,7 +396,11 @@ public ShowResultSet showCatalogs(ShowCatalogStmt showStmt, String currentCtlg) rows.add(Arrays.asList("resource", catalog.getResource())); } for (Map.Entry elem : catalog.getProperties().entrySet()) { - rows.add(Arrays.asList(elem.getKey(), elem.getValue())); + if (PrintableMap.SENSITIVE_KEY.contains(elem.getKey())) { + rows.add(Arrays.asList(elem.getKey(), PrintableMap.PASSWORD_MASK)); + } else { + rows.add(Arrays.asList(elem.getKey(), elem.getValue())); + } } } } finally { diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java index 85fd9d411ce1e9..5b2b37125e9a64 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java @@ -1848,7 +1848,7 @@ private void createOlapTable(Database db, CreateTableStmt stmt) throws UserExcep Map properties = stmt.getProperties(); // get use light schema change - Boolean enableLightSchemaChange = false; + Boolean enableLightSchemaChange; try { enableLightSchemaChange = PropertyAnalyzer.analyzeUseLightSchemaChange(properties); } catch (AnalysisException e) { @@ -1889,7 +1889,7 @@ private void createOlapTable(Database db, CreateTableStmt stmt) throws UserExcep keysDesc.keysColumnSize(), storageFormat); olapTable.setDataSortInfo(dataSortInfo); - boolean enableUniqueKeyMergeOnWrite = false; + boolean enableUniqueKeyMergeOnWrite; try { enableUniqueKeyMergeOnWrite = PropertyAnalyzer.analyzeUniqueKeyMergeOnWrite(properties); } catch (AnalysisException e) { @@ -1918,6 +1918,8 @@ private void createOlapTable(Database db, CreateTableStmt stmt) throws UserExcep throw new DdlException(e.getMessage()); } + Index.checkConflict(stmt.getIndexes(), bfColumns); + olapTable.setReplicationAllocation(replicaAlloc); // set in memory @@ -1947,7 +1949,7 @@ private void createOlapTable(Database db, CreateTableStmt stmt) throws UserExcep DataProperty dataProperty = null; try { dataProperty = PropertyAnalyzer.analyzeDataProperty(stmt.getProperties(), - DataProperty.DEFAULT_DATA_PROPERTY); + new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); } catch (AnalysisException e) { throw new DdlException(e.getMessage()); } @@ -2104,7 +2106,8 @@ private void createOlapTable(Database db, CreateTableStmt stmt) throws UserExcep try { // just for remove entries in stmt.getProperties(), // and then check if there still has unknown properties - PropertyAnalyzer.analyzeDataProperty(stmt.getProperties(), DataProperty.DEFAULT_DATA_PROPERTY); + PropertyAnalyzer.analyzeDataProperty(stmt.getProperties(), + new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); if (partitionInfo.getType() == PartitionType.RANGE) { DynamicPartitionUtil.checkAndSetDynamicPartitionProperty(olapTable, properties, db); diff --git a/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java index 48b71320266fb5..60787f3f2bde5f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java @@ -190,20 +190,20 @@ public void visitHistogram(StringBuilder sb, String prefix, String name, Histogr } } final String fullName = prefix + String.join("_", names); - final String fullTag = String.join(" ", tags); + final String fullTag = String.join(",", tags); sb.append(HELP).append(fullName).append(" ").append("\n"); sb.append(TYPE).append(fullName).append(" ").append("summary\n"); - + String delimiter = tags.isEmpty() ? "" : ","; Snapshot snapshot = histogram.getSnapshot(); - sb.append(fullName).append("{quantile=\"0.75\" ").append(fullTag).append("} ") + sb.append(fullName).append("{quantile=\"0.75\"").append(delimiter).append(fullTag).append("} ") .append(snapshot.get75thPercentile()).append("\n"); - sb.append(fullName).append("{quantile=\"0.95\" ").append(fullTag).append("} ") + sb.append(fullName).append("{quantile=\"0.95\"").append(delimiter).append(fullTag).append("} ") .append(snapshot.get95thPercentile()).append("\n"); - sb.append(fullName).append("{quantile=\"0.98\" ").append(fullTag).append("} ") + sb.append(fullName).append("{quantile=\"0.98\"").append(delimiter).append(fullTag).append("} ") .append(snapshot.get98thPercentile()).append("\n"); - sb.append(fullName).append("{quantile=\"0.99\" ").append(fullTag).append("} ") + sb.append(fullName).append("{quantile=\"0.99\"").append(delimiter).append(fullTag).append("} ") .append(snapshot.get99thPercentile()).append("\n"); - sb.append(fullName).append("{quantile=\"0.999\" ").append(fullTag).append("} ") + sb.append(fullName).append("{quantile=\"0.999\"").append(delimiter).append(fullTag).append("} ") .append(snapshot.get999thPercentile()).append("\n"); sb.append(fullName).append("_sum {").append(fullTag).append("} ") .append(histogram.getCount() * snapshot.getMean()).append("\n"); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java index 26243a9b55c8c3..1a9af3126edae0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/CascadesContext.java @@ -215,22 +215,6 @@ private CascadesContext execute(Job job) { return this; } - public void addToTable(Table table) { - tables.add(table); - } - - public void lockTableOnRead() { - for (Table t : tables) { - t.readLock(); - } - } - - public void releaseTableReadLock() { - for (Table t : tables) { - t.readUnlock(); - } - } - /** * Extract tables. */ diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostCalculator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostCalculator.java index 7ee533e0f666b0..51fb7076f4206d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostCalculator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostCalculator.java @@ -27,6 +27,7 @@ import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.PhysicalAssertNumRows; import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute; +import org.apache.doris.nereids.trees.plans.physical.PhysicalFileScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalGenerate; import org.apache.doris.nereids.trees.plans.physical.PhysicalHashAggregate; import org.apache.doris.nereids.trees.plans.physical.PhysicalHashJoin; @@ -35,6 +36,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalOlapScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalProject; import org.apache.doris.nereids.trees.plans.physical.PhysicalQuickSort; +import org.apache.doris.nereids.trees.plans.physical.PhysicalSchemaScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalStorageLayerAggregate; import org.apache.doris.nereids.trees.plans.physical.PhysicalTopN; import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; @@ -62,7 +64,7 @@ public class CostCalculator { * AGG is time-consuming operator. From the perspective of rowCount, nereids may choose Plan1, * because `Agg1 join Agg2` generates few tuples. But in Plan1, Agg1 and Agg2 are done in serial, in Plan2, Agg1 and * Agg2 are done in parallel. And hence, Plan1 should be punished. - * + *

* An example is tpch q15. */ static final double HEAVY_OPERATOR_PUNISH_FACTOR = 6.0; @@ -100,6 +102,11 @@ public CostEstimate visitPhysicalOlapScan(PhysicalOlapScan physicalOlapScan, Pla return CostEstimate.ofCpu(statistics.getRowCount()); } + public CostEstimate visitPhysicalSchemaScan(PhysicalSchemaScan physicalSchemaScan, PlanContext context) { + StatsDeriveResult statistics = context.getStatisticsWithCheck(); + return CostEstimate.ofCpu(statistics.getRowCount()); + } + @Override public CostEstimate visitPhysicalStorageLayerAggregate( PhysicalStorageLayerAggregate storageLayerAggregate, PlanContext context) { @@ -109,6 +116,12 @@ public CostEstimate visitPhysicalStorageLayerAggregate( costEstimate.getNetworkCost(), costEstimate.getPenalty()); } + @Override + public CostEstimate visitPhysicalFileScan(PhysicalFileScan physicalFileScan, PlanContext context) { + StatsDeriveResult statistics = context.getStatisticsWithCheck(); + return CostEstimate.ofCpu(statistics.getRowCount()); + } + @Override public CostEstimate visitPhysicalProject(PhysicalProject physicalProject, PlanContext context) { return CostEstimate.ofCpu(1); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 6867c4227d3d9e..6ee4db75d4d122 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -34,6 +34,8 @@ import org.apache.doris.analysis.TupleId; import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Table; +import org.apache.doris.catalog.TableIf; +import org.apache.doris.catalog.external.ExternalTable; import org.apache.doris.common.Pair; import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.properties.DistributionSpecAny; @@ -65,6 +67,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute; import org.apache.doris.nereids.trees.plans.physical.PhysicalEmptyRelation; import org.apache.doris.nereids.trees.plans.physical.PhysicalExcept; +import org.apache.doris.nereids.trees.plans.physical.PhysicalFileScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalFilter; import org.apache.doris.nereids.trees.plans.physical.PhysicalGenerate; import org.apache.doris.nereids.trees.plans.physical.PhysicalHashAggregate; @@ -78,6 +81,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalProject; import org.apache.doris.nereids.trees.plans.physical.PhysicalQuickSort; import org.apache.doris.nereids.trees.plans.physical.PhysicalRepeat; +import org.apache.doris.nereids.trees.plans.physical.PhysicalSchemaScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalSetOperation; import org.apache.doris.nereids.trees.plans.physical.PhysicalStorageLayerAggregate; import org.apache.doris.nereids.trees.plans.physical.PhysicalTVFRelation; @@ -105,11 +109,13 @@ import org.apache.doris.planner.PlanNode; import org.apache.doris.planner.RepeatNode; import org.apache.doris.planner.ScanNode; +import org.apache.doris.planner.SchemaScanNode; import org.apache.doris.planner.SelectNode; import org.apache.doris.planner.SetOperationNode; import org.apache.doris.planner.SortNode; import org.apache.doris.planner.TableFunctionNode; import org.apache.doris.planner.UnionNode; +import org.apache.doris.planner.external.ExternalFileScanNode; import org.apache.doris.tablefunction.TableValuedFunctionIf; import org.apache.doris.thrift.TPartitionType; import org.apache.doris.thrift.TPushAggOp; @@ -446,6 +452,7 @@ public PlanFragment visitPhysicalOlapScan(PhysicalOlapScan olapScan, PlanTransla OlapTable olapTable = olapScan.getTable(); TupleDescriptor tupleDescriptor = generateTupleDesc(slotList, olapTable, context); tupleDescriptor.setTable(olapTable); + OlapScanNode olapScanNode = new OlapScanNode(context.nextPlanNodeId(), tupleDescriptor, "OlapScanNode"); if (olapScan.getStats() != null) { olapScanNode.setCardinality((long) olapScan.getStats().getRowCount()); @@ -491,6 +498,48 @@ public PlanFragment visitPhysicalOlapScan(PhysicalOlapScan olapScan, PlanTransla return planFragment; } + @Override + public PlanFragment visitPhysicalSchemaScan(PhysicalSchemaScan schemaScan, PlanTranslatorContext context) { + Table table = schemaScan.getTable(); + + List slotList = new ImmutableList.Builder() + .addAll(schemaScan.getOutput()) + .addAll(schemaScan.getNonUserVisibleOutput()) + .build(); + TupleDescriptor tupleDescriptor = generateTupleDesc(slotList, table, context); + tupleDescriptor.setTable(table); + + SchemaScanNode scanNode = new SchemaScanNode(context.nextPlanNodeId(), tupleDescriptor); + + context.getScanNodes().add(scanNode); + PlanFragment planFragment = + new PlanFragment(context.nextFragmentId(), scanNode, DataPartition.RANDOM); + context.addPlanFragment(planFragment); + return planFragment; + } + + @Override + public PlanFragment visitPhysicalFileScan(PhysicalFileScan fileScan, PlanTranslatorContext context) { + List slotList = fileScan.getOutput(); + ExternalTable table = fileScan.getTable(); + TupleDescriptor tupleDescriptor = generateTupleDesc(slotList, table, context); + tupleDescriptor.setTable(table); + ExternalFileScanNode fileScanNode = new ExternalFileScanNode(context.nextPlanNodeId(), tupleDescriptor); + TableName tableName = new TableName(null, "", ""); + TableRef ref = new TableRef(tableName, null, null); + BaseTableRef tableRef = new BaseTableRef(ref, table, tableName); + tupleDescriptor.setRef(tableRef); + + Utils.execWithUncheckedException(fileScanNode::init); + context.addScanNode(fileScanNode); + Utils.execWithUncheckedException(fileScanNode::finalizeForNerieds); + // Create PlanFragment + DataPartition dataPartition = DataPartition.RANDOM; + PlanFragment planFragment = new PlanFragment(context.nextFragmentId(), fileScanNode, dataPartition); + context.addPlanFragment(planFragment); + return planFragment; + } + @Override public PlanFragment visitPhysicalTVFRelation(PhysicalTVFRelation tvfRelation, PlanTranslatorContext context) { List slots = tvfRelation.getLogicalProperties().getOutput(); @@ -1276,8 +1325,9 @@ public PlanFragment visitPhysicalSetOperation( // Absorb the plan trees of all childFragments into unionNode // and fix up the fragment tree in the process. for (int i = 0; i < childrenFragments.size(); ++i) { - setOperationFragment.setFragmentInPlanTree(setOperationNode.getChild(i)); - setOperationFragment.addChildren(childrenFragments.get(i).getChildren()); + connectChildFragmentNotCheckExchangeNode(setOperationNode, i, setOperationFragment, + childrenFragments.get(i), + context); } } else { setOperationFragment = new PlanFragment(context.nextFragmentId(), setOperationNode, @@ -1382,7 +1432,7 @@ private void extractExecSlot(Expr root, Set slotIdList) { } } - private TupleDescriptor generateTupleDesc(List slotList, Table table, PlanTranslatorContext context) { + private TupleDescriptor generateTupleDesc(List slotList, TableIf table, PlanTranslatorContext context) { TupleDescriptor tupleDescriptor = context.generateTupleDesc(); tupleDescriptor.setTable(table); for (Slot slot : slotList) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java index fc7fd788563f88..9e7cebac75f025 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java @@ -31,6 +31,9 @@ import org.apache.doris.nereids.rules.analysis.ResolveOrdinalInOrderByAndGroupBy; import org.apache.doris.nereids.rules.analysis.Scope; import org.apache.doris.nereids.rules.analysis.UserAuthentication; +import org.apache.doris.nereids.rules.expression.rewrite.ExpressionNormalization; +import org.apache.doris.nereids.rules.expression.rewrite.rules.CharacterLiteralTypeCoercion; +import org.apache.doris.nereids.rules.expression.rewrite.rules.TypeCoercion; import org.apache.doris.nereids.rules.rewrite.logical.HideOneRowRelationUnderUnion; import com.google.common.collect.ImmutableList; @@ -68,7 +71,9 @@ public AnalyzeRulesJob(CascadesContext cascadesContext, Optional scope) { new ProjectWithDistinctToAggregate(), new ResolveOrdinalInOrderByAndGroupBy(), new ReplaceExpressionByChildOutput(), - new HideOneRowRelationUnderUnion() + new HideOneRowRelationUnderUnion(), + new ExpressionNormalization(cascadesContext.getConnectContext(), + ImmutableList.of(CharacterLiteralTypeCoercion.INSTANCE, TypeCoercion.INSTANCE)) )), topDownBatch(ImmutableList.of( new FillUpMissingSlots(), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/NereidsRewriteJobExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/NereidsRewriteJobExecutor.java index b6cd0dc5b6028e..0715bfa51b64fd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/NereidsRewriteJobExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/NereidsRewriteJobExecutor.java @@ -98,14 +98,14 @@ public NereidsRewriteJobExecutor(CascadesContext cascadesContext) { .add(topDownBatch(ImmutableList.of(new EliminateFilter()))) .add(topDownBatch(ImmutableList.of(new PruneOlapScanPartition()))) .add(topDownBatch(ImmutableList.of(new CountDistinctRewrite()))) - .add(topDownBatch(ImmutableList.of(new SelectMaterializedIndexWithAggregate()))) - .add(topDownBatch(ImmutableList.of(new SelectMaterializedIndexWithoutAggregate()))) - .add(topDownBatch(ImmutableList.of(new PruneOlapScanTablet()))) // we need to execute this rule at the end of rewrite // to avoid two consecutive same project appear when we do optimization. .add(topDownBatch(ImmutableList.of(new EliminateGroupByConstant()))) .add(topDownBatch(ImmutableList.of(new EliminateOrderByConstant()))) .add(topDownBatch(ImmutableList.of(new EliminateUnnecessaryProject()))) + .add(topDownBatch(ImmutableList.of(new SelectMaterializedIndexWithAggregate()))) + .add(topDownBatch(ImmutableList.of(new SelectMaterializedIndexWithoutAggregate()))) + .add(topDownBatch(ImmutableList.of(new PruneOlapScanTablet()))) .add(topDownBatch(ImmutableList.of(new EliminateAggregate()))) .add(bottomUpBatch(ImmutableList.of(new MergeSetOperations()))) .add(topDownBatch(ImmutableList.of(new LimitPushDown()))) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 269704fe1590a3..551a594ca6040c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -122,6 +122,7 @@ import org.apache.doris.nereids.trees.expressions.GreaterThanEqual; import org.apache.doris.nereids.trees.expressions.InPredicate; import org.apache.doris.nereids.trees.expressions.InSubquery; +import org.apache.doris.nereids.trees.expressions.IntegralDivide; import org.apache.doris.nereids.trees.expressions.IsNull; import org.apache.doris.nereids.trees.expressions.LessThan; import org.apache.doris.nereids.trees.expressions.LessThanEqual; @@ -199,6 +200,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalSubQueryAlias; import org.apache.doris.nereids.trees.plans.logical.LogicalUnion; import org.apache.doris.nereids.trees.plans.logical.RelationUtil; +import org.apache.doris.nereids.trees.plans.logical.UsingJoin; import org.apache.doris.nereids.types.DataType; import org.apache.doris.nereids.types.IntegerType; import org.apache.doris.nereids.types.TinyIntType; @@ -450,7 +452,11 @@ public LogicalPlan visitTableName(TableNameContext ctx) { @Override public LogicalPlan visitAliasedQuery(AliasedQueryContext ctx) { - return withTableAlias(visitQuery(ctx.query()), ctx.tableAlias()); + LogicalPlan plan = withTableAlias(visitQuery(ctx.query()), ctx.tableAlias()); + for (LateralViewContext lateralViewContext : ctx.lateralView()) { + plan = withGenerate(plan, lateralViewContext); + } + return plan; } @Override @@ -500,6 +506,9 @@ public Expression visitNamedExpression(NamedExpressionContext ctx) { Expression expression = getExpression(ctx.expression()); if (ctx.name != null) { return new UnboundAlias(expression, ctx.name.getText()); + } else if (ctx.strName != null) { + return new UnboundAlias(expression, ctx.strName.getText() + .substring(1, ctx.strName.getText().length() - 1)); } else { return expression; } @@ -664,7 +673,7 @@ public Expression visitArithmeticBinary(ArithmeticBinaryContext ctx) { case DorisParser.MINUS: return new Subtract(left, right); case DorisParser.DIV: - return new Divide(left, right); + return new IntegralDivide(left, right); case DorisParser.HAT: return new BitXor(left, right); case DorisParser.PIPE: @@ -1246,20 +1255,27 @@ private LogicalPlan withJoinRelations(LogicalPlan input, RelationContext ctx) { } else { joinType = JoinType.CROSS_JOIN; } - + JoinHint joinHint = Optional.ofNullable(join.joinHint()).map(hintCtx -> { + String hint = typedVisit(join.joinHint()); + if (JoinHint.JoinHintType.SHUFFLE.toString().equalsIgnoreCase(hint)) { + return JoinHint.SHUFFLE_RIGHT; + } else if (JoinHint.JoinHintType.BROADCAST.toString().equalsIgnoreCase(hint)) { + return JoinHint.BROADCAST_RIGHT; + } else { + throw new ParseException("Invalid join hint: " + hint, hintCtx); + } + }).orElse(JoinHint.NONE); // TODO: natural join, lateral join, using join, union join JoinCriteriaContext joinCriteria = join.joinCriteria(); Optional condition = Optional.empty(); + List ids = null; if (joinCriteria != null) { if (joinCriteria.booleanExpression() != null) { condition = Optional.ofNullable(getExpression(joinCriteria.booleanExpression())); - } - if (joinCriteria.USING() != null) { - List ids = - visitIdentifierList(joinCriteria.identifierList()) + } else if (joinCriteria.USING() != null) { + ids = visitIdentifierList(joinCriteria.identifierList()) .stream().map(UnboundSlot::quoted).collect( Collectors.toList()); - return new LogicalJoin(JoinType.USING_JOIN, ids, last, plan(join.relationPrimary())); } } else { // keep same with original planner, allow cross/inner join @@ -1267,24 +1283,17 @@ private LogicalPlan withJoinRelations(LogicalPlan input, RelationContext ctx) { throw new ParseException("on mustn't be empty except for cross/inner join", join); } } - - JoinHint joinHint = Optional.ofNullable(join.joinHint()).map(hintCtx -> { - String hint = typedVisit(join.joinHint()); - if (JoinHint.JoinHintType.SHUFFLE.toString().equalsIgnoreCase(hint)) { - return JoinHint.SHUFFLE_RIGHT; - } else if (JoinHint.JoinHintType.BROADCAST.toString().equalsIgnoreCase(hint)) { - return JoinHint.BROADCAST_RIGHT; - } else { - throw new ParseException("Invalid join hint: " + hint, hintCtx); - } - }).orElse(JoinHint.NONE); - - last = new LogicalJoin<>(joinType, ExpressionUtils.EMPTY_CONDITION, - condition.map(ExpressionUtils::extractConjunction) - .orElse(ExpressionUtils.EMPTY_CONDITION), - joinHint, - last, - plan(join.relationPrimary())); + if (ids == null) { + last = new LogicalJoin<>(joinType, ExpressionUtils.EMPTY_CONDITION, + condition.map(ExpressionUtils::extractConjunction) + .orElse(ExpressionUtils.EMPTY_CONDITION), + joinHint, + last, + plan(join.relationPrimary())); + } else { + last = new UsingJoin(joinType, last, + plan(join.relationPrimary()), Collections.emptyList(), ids, joinHint); + } } return last; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildOutputPropertyDeriver.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildOutputPropertyDeriver.java index 099c8f5ab11078..ccdd299b9a998d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildOutputPropertyDeriver.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/properties/ChildOutputPropertyDeriver.java @@ -28,6 +28,7 @@ import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.physical.PhysicalAssertNumRows; import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute; +import org.apache.doris.nereids.trees.plans.physical.PhysicalFileScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalFilter; import org.apache.doris.nereids.trees.plans.physical.PhysicalGenerate; import org.apache.doris.nereids.trees.plans.physical.PhysicalHashAggregate; @@ -233,6 +234,11 @@ public PhysicalProperties visitPhysicalOlapScan(PhysicalOlapScan olapScan, PlanC } } + @Override + public PhysicalProperties visitPhysicalFileScan(PhysicalFileScan fileScan, PlanContext context) { + return PhysicalProperties.ANY; + } + @Override public PhysicalProperties visitPhysicalStorageLayerAggregate( PhysicalStorageLayerAggregate storageLayerAggregate, PlanContext context) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java index 7d59f130f43523..a4e28f7ba75f70 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleSet.java @@ -29,6 +29,7 @@ import org.apache.doris.nereids.rules.implementation.LogicalAssertNumRowsToPhysicalAssertNumRows; import org.apache.doris.nereids.rules.implementation.LogicalEmptyRelationToPhysicalEmptyRelation; import org.apache.doris.nereids.rules.implementation.LogicalExceptToPhysicalExcept; +import org.apache.doris.nereids.rules.implementation.LogicalFileScanToPhysicalFileScan; import org.apache.doris.nereids.rules.implementation.LogicalFilterToPhysicalFilter; import org.apache.doris.nereids.rules.implementation.LogicalGenerateToPhysicalGenerate; import org.apache.doris.nereids.rules.implementation.LogicalIntersectToPhysicalIntersect; @@ -39,6 +40,7 @@ import org.apache.doris.nereids.rules.implementation.LogicalOneRowRelationToPhysicalOneRowRelation; import org.apache.doris.nereids.rules.implementation.LogicalProjectToPhysicalProject; import org.apache.doris.nereids.rules.implementation.LogicalRepeatToPhysicalRepeat; +import org.apache.doris.nereids.rules.implementation.LogicalSchemaScanToPhysicalSchemaScan; import org.apache.doris.nereids.rules.implementation.LogicalSortToPhysicalQuickSort; import org.apache.doris.nereids.rules.implementation.LogicalTVFRelationToPhysicalTVFRelation; import org.apache.doris.nereids.rules.implementation.LogicalTopNToPhysicalTopN; @@ -103,6 +105,8 @@ public class RuleSet { .add(new LogicalJoinToHashJoin()) .add(new LogicalJoinToNestedLoopJoin()) .add(new LogicalOlapScanToPhysicalOlapScan()) + .add(new LogicalSchemaScanToPhysicalSchemaScan()) + .add(new LogicalFileScanToPhysicalFileScan()) .add(new LogicalProjectToPhysicalProject()) .add(new LogicalLimitToPhysicalLimit()) .add(new LogicalSortToPhysicalQuickSort()) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java index 00c4053f7f45e5..71149d8d8343d0 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java @@ -135,6 +135,9 @@ public enum RuleType { REWRITE_FILTER_EXPRESSION(RuleTypeClass.REWRITE), REWRITE_JOIN_EXPRESSION(RuleTypeClass.REWRITE), REWRITE_GENERATE_EXPRESSION(RuleTypeClass.REWRITE), + REWRITE_SORT_EXPRESSION(RuleTypeClass.REWRITE), + REWRITE_HAVING_EXPRESSSION(RuleTypeClass.REWRITE), + REWRITE_REPEAT_EXPRESSSION(RuleTypeClass.REWRITE), REORDER_JOIN(RuleTypeClass.REWRITE), // Merge Consecutive plan MERGE_PROJECTS(RuleTypeClass.REWRITE), @@ -151,6 +154,11 @@ public enum RuleType { MATERIALIZED_INDEX_AGG_PROJECT_SCAN(RuleTypeClass.REWRITE), MATERIALIZED_INDEX_AGG_PROJECT_FILTER_SCAN(RuleTypeClass.REWRITE), MATERIALIZED_INDEX_AGG_FILTER_PROJECT_SCAN(RuleTypeClass.REWRITE), + MATERIALIZED_INDEX_AGG_REPEAT_SCAN(RuleTypeClass.REWRITE), + MATERIALIZED_INDEX_AGG_REPEAT_FILTER_SCAN(RuleTypeClass.REWRITE), + MATERIALIZED_INDEX_AGG_REPEAT_PROJECT_SCAN(RuleTypeClass.REWRITE), + MATERIALIZED_INDEX_AGG_REPEAT_PROJECT_FILTER_SCAN(RuleTypeClass.REWRITE), + MATERIALIZED_INDEX_AGG_REPEAT_FILTER_PROJECT_SCAN(RuleTypeClass.REWRITE), MATERIALIZED_INDEX_SCAN(RuleTypeClass.REWRITE), MATERIALIZED_INDEX_FILTER_SCAN(RuleTypeClass.REWRITE), MATERIALIZED_INDEX_PROJECT_SCAN(RuleTypeClass.REWRITE), @@ -207,6 +215,8 @@ public enum RuleType { LOGICAL_EMPTY_RELATION_TO_PHYSICAL_EMPTY_RELATION_RULE(RuleTypeClass.IMPLEMENTATION), LOGICAL_LIMIT_TO_PHYSICAL_LIMIT_RULE(RuleTypeClass.IMPLEMENTATION), LOGICAL_OLAP_SCAN_TO_PHYSICAL_OLAP_SCAN_RULE(RuleTypeClass.IMPLEMENTATION), + LOGICAL_SCHEMA_SCAN_TO_PHYSICAL_SCHEMA_SCAN_RULE(RuleTypeClass.IMPLEMENTATION), + LOGICAL_FILE_SCAN_TO_PHYSICAL_FILE_SCAN_RULE(RuleTypeClass.IMPLEMENTATION), LOGICAL_ASSERT_NUM_ROWS_TO_PHYSICAL_ASSERT_NUM_ROWS(RuleTypeClass.IMPLEMENTATION), STORAGE_LAYER_AGGREGATE_WITHOUT_PROJECT(RuleTypeClass.IMPLEMENTATION), STORAGE_LAYER_AGGREGATE_WITH_PROJECT(RuleTypeClass.IMPLEMENTATION), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java index a87e72060ad128..d706c8043841d7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java @@ -17,10 +17,15 @@ package org.apache.doris.nereids.rules.analysis; +import org.apache.doris.catalog.DatabaseIf; +import org.apache.doris.catalog.Env; import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Partition; import org.apache.doris.catalog.Table; -import org.apache.doris.catalog.TableIf.TableType; +import org.apache.doris.catalog.TableIf; +import org.apache.doris.catalog.View; +import org.apache.doris.catalog.external.HMSExternalTable; +import org.apache.doris.datasource.CatalogIf; import org.apache.doris.nereids.CascadesContext; import org.apache.doris.nereids.analyzer.UnboundRelation; import org.apache.doris.nereids.exceptions.AnalysisException; @@ -29,8 +34,10 @@ import org.apache.doris.nereids.rules.Rule; import org.apache.doris.nereids.rules.RuleType; import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.logical.LogicalFileScan; import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan; import org.apache.doris.nereids.trees.plans.logical.LogicalPlan; +import org.apache.doris.nereids.trees.plans.logical.LogicalSchemaScan; import org.apache.doris.nereids.trees.plans.logical.LogicalSubQueryAlias; import org.apache.doris.nereids.trees.plans.logical.RelationUtil; import org.apache.doris.qe.ConnectContext; @@ -63,12 +70,32 @@ public Rule build() { // Use database name from table name parts. return bindWithDbNameFromNamePart(ctx.cascadesContext, ctx.root); } + case 3: { // catalog.db.table + // Use catalog and database name from name parts. + return bindWithCatalogNameFromNamePart(ctx.cascadesContext, ctx.root); + } default: throw new IllegalStateException("Table name [" + ctx.root.getTableName() + "] is invalid."); } }).toRule(RuleType.BINDING_RELATION); } + private TableIf getTable(String catalogName, String dbName, String tableName, Env env) { + CatalogIf catalog = env.getCatalogMgr().getCatalog(catalogName); + if (catalog == null) { + throw new RuntimeException(String.format("Catalog %s does not exist.", catalogName)); + } + DatabaseIf db = null; + try { + db = (DatabaseIf) catalog.getDb(dbName) + .orElseThrow(() -> new RuntimeException("Database [" + dbName + "] does not exist.")); + } catch (Throwable e) { + throw new RuntimeException(e); + } + return db.getTable(tableName).orElseThrow(() -> new RuntimeException( + "Table [" + tableName + "] does not exist in database [" + dbName + "].")); + } + private LogicalPlan bindWithCurrentDb(CascadesContext cascadesContext, UnboundRelation unboundRelation) { String tableName = unboundRelation.getNameParts().get(0); // check if it is a CTE's name @@ -82,48 +109,64 @@ private LogicalPlan bindWithCurrentDb(CascadesContext cascadesContext, UnboundRe } return new LogicalSubQueryAlias<>(tableName, ctePlan); } - + String catalogName = cascadesContext.getConnectContext().getCurrentCatalog().getName(); String dbName = cascadesContext.getConnectContext().getDatabase(); - Table table = cascadesContext.getTable(dbName, tableName, cascadesContext.getConnectContext().getEnv()); + TableIf table = getTable(catalogName, dbName, tableName, cascadesContext.getConnectContext().getEnv()); // TODO: should generate different Scan sub class according to table's type - List partIds = getPartitionIds(table, unboundRelation); - if (table.getType() == TableType.OLAP) { - if (!CollectionUtils.isEmpty(partIds)) { - return new LogicalOlapScan(RelationUtil.newRelationId(), - (OlapTable) table, ImmutableList.of(dbName), partIds); - } else { - return new LogicalOlapScan(RelationUtil.newRelationId(), - (OlapTable) table, ImmutableList.of(dbName)); - } - } else if (table.getType() == TableType.VIEW) { - Plan viewPlan = parseAndAnalyzeView(table.getDdlSql(), cascadesContext); - return new LogicalSubQueryAlias<>(table.getName(), viewPlan); - } - throw new AnalysisException("Unsupported tableType:" + table.getType()); + return getLogicalPlan(table, unboundRelation, dbName, cascadesContext); } private LogicalPlan bindWithDbNameFromNamePart(CascadesContext cascadesContext, UnboundRelation unboundRelation) { List nameParts = unboundRelation.getNameParts(); ConnectContext connectContext = cascadesContext.getConnectContext(); + String catalogName = cascadesContext.getConnectContext().getCurrentCatalog().getName(); // if the relation is view, nameParts.get(0) is dbName. String dbName = nameParts.get(0); if (!dbName.equals(connectContext.getDatabase())) { dbName = connectContext.getClusterName() + ":" + dbName; } - Table table = cascadesContext.getTable(dbName, nameParts.get(1), connectContext.getEnv()); - List partIds = getPartitionIds(table, unboundRelation); - if (table.getType() == TableType.OLAP) { - if (!CollectionUtils.isEmpty(partIds)) { - return new LogicalOlapScan(RelationUtil.newRelationId(), (OlapTable) table, - ImmutableList.of(dbName), partIds); - } else { - return new LogicalOlapScan(RelationUtil.newRelationId(), (OlapTable) table, ImmutableList.of(dbName)); - } - } else if (table.getType() == TableType.VIEW) { - Plan viewPlan = parseAndAnalyzeView(table.getDdlSql(), cascadesContext); - return new LogicalSubQueryAlias<>(table.getName(), viewPlan); + String tableName = nameParts.get(1); + TableIf table = getTable(catalogName, dbName, tableName, connectContext.getEnv()); + return getLogicalPlan(table, unboundRelation, dbName, cascadesContext); + } + + private LogicalPlan bindWithCatalogNameFromNamePart(CascadesContext cascadesContext, + UnboundRelation unboundRelation) { + List nameParts = unboundRelation.getNameParts(); + ConnectContext connectContext = cascadesContext.getConnectContext(); + String catalogName = nameParts.get(0); + String dbName = nameParts.get(1); + if (!dbName.equals(connectContext.getDatabase())) { + dbName = connectContext.getClusterName() + ":" + dbName; + } + String tableName = nameParts.get(2); + TableIf table = getTable(catalogName, dbName, tableName, connectContext.getEnv()); + return getLogicalPlan(table, unboundRelation, dbName, cascadesContext); + } + + private LogicalPlan getLogicalPlan(TableIf table, UnboundRelation unboundRelation, String dbName, + CascadesContext cascadesContext) { + switch (table.getType()) { + case OLAP: + List partIds = getPartitionIds(table, unboundRelation); + if (!CollectionUtils.isEmpty(partIds)) { + return new LogicalOlapScan(RelationUtil.newRelationId(), + (OlapTable) table, ImmutableList.of(dbName), partIds); + } else { + return new LogicalOlapScan(RelationUtil.newRelationId(), + (OlapTable) table, ImmutableList.of(dbName)); + } + case VIEW: + Plan viewPlan = parseAndAnalyzeView(((View) table).getDdlSql(), cascadesContext); + return new LogicalSubQueryAlias<>(table.getName(), viewPlan); + case HMS_EXTERNAL_TABLE: + return new LogicalFileScan(cascadesContext.getStatementContext().getNextRelationId(), + (HMSExternalTable) table, ImmutableList.of(dbName)); + case SCHEMA: + return new LogicalSchemaScan(RelationUtil.newRelationId(), (Table) table, ImmutableList.of(dbName)); + default: + throw new AnalysisException("Unsupported tableType:" + table.getType()); } - throw new AnalysisException("Unsupported tableType:" + table.getType()); } private Plan parseAndAnalyzeView(String viewSql, CascadesContext parentContext) { @@ -136,12 +179,12 @@ private Plan parseAndAnalyzeView(String viewSql, CascadesContext parentContext) return viewContext.getMemo().copyOut(false); } - private List getPartitionIds(Table t, UnboundRelation unboundRelation) { + private List getPartitionIds(TableIf t, UnboundRelation unboundRelation) { List parts = unboundRelation.getPartNames(); if (CollectionUtils.isEmpty(parts)) { return Collections.emptyList(); } - if (!t.getType().equals(TableType.OLAP)) { + if (!t.getType().equals(TableIf.TableType.OLAP)) { throw new IllegalStateException(String.format( "Only OLAP table is support select by partition for now," + "Table: %s is not OLAP table", t.getName())); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java index 3590d07483f0b9..003967757bd0d5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java @@ -66,6 +66,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat; import org.apache.doris.nereids.trees.plans.logical.LogicalSetOperation; import org.apache.doris.nereids.trees.plans.logical.LogicalSort; +import org.apache.doris.nereids.trees.plans.logical.UsingJoin; import org.apache.doris.planner.PlannerContext; import com.google.common.base.Preconditions; @@ -76,6 +77,7 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -127,58 +129,88 @@ public List buildRules() { return new LogicalFilter<>(boundConjuncts, filter.child()); }) ), - RuleType.BINDING_JOIN_SLOT.build( - logicalJoin().when(Plan::canBind) - .whenNot(j -> j.getJoinType().equals(JoinType.USING_JOIN)).thenApply(ctx -> { - LogicalJoin join = ctx.root; - List cond = join.getOtherJoinConjuncts().stream() - .map(expr -> bind(expr, join.children(), join, ctx.cascadesContext)) - .collect(Collectors.toList()); - List hashJoinConjuncts = join.getHashJoinConjuncts().stream() - .map(expr -> bind(expr, join.children(), join, ctx.cascadesContext)) - .collect(Collectors.toList()); - return new LogicalJoin<>(join.getJoinType(), - hashJoinConjuncts, cond, join.getHint(), join.left(), join.right()); - }) - ), + RuleType.BINDING_USING_JOIN_SLOT.build( - logicalJoin().when(j -> j.getJoinType().equals(JoinType.USING_JOIN)).thenApply(ctx -> { - LogicalJoin join = ctx.root; - List unboundSlots = join.getHashJoinConjuncts(); - List leftSlots = unboundSlots.stream() - .map(expr -> bind(expr, Collections.singletonList(join.left()), - join, ctx.cascadesContext)) - .collect(Collectors.toList()); - List rightSlots = unboundSlots.stream() - .map(expr -> bind(expr, Collections.singletonList(join.right()), - join, ctx.cascadesContext)) - .collect(Collectors.toList()); + usingJoin().thenApply(ctx -> { + UsingJoin using = ctx.root; + LogicalJoin lj = new LogicalJoin(using.getJoinType() == JoinType.CROSS_JOIN + ? JoinType.INNER_JOIN : using.getJoinType(), + using.getHashJoinConjuncts(), + using.getOtherJoinConjuncts(), using.getHint(), using.left(), + using.right()); + List unboundSlots = lj.getHashJoinConjuncts(); + Set slotNames = new HashSet<>(); + List leftOutput = new ArrayList<>(lj.left().getOutput()); + // Suppose A JOIN B USING(name) JOIN C USING(name), [A JOIN B] is the left node, in this case, + // C should combine with table B on C.name=B.name. so we reverse the output to make sure that + // the most right slot is matched with priority. + Collections.reverse(leftOutput); + List leftSlots = new ArrayList<>(); + Scope scope = toScope(leftOutput.stream() + .filter(s -> !slotNames.contains(s.getName())) + .peek(s -> slotNames.add(s.getName())).collect( + Collectors.toList())); + for (Expression unboundSlot : unboundSlots) { + Expression expression = new SlotBinder(scope, lj, ctx.cascadesContext).bind(unboundSlot); + leftSlots.add(expression); + } + slotNames.clear(); + scope = toScope(lj.right().getOutput().stream() + .filter(s -> !slotNames.contains(s.getName())) + .peek(s -> slotNames.add(s.getName())).collect( + Collectors.toList())); + List rightSlots = new ArrayList<>(); + for (Expression unboundSlot : unboundSlots) { + Expression expression = new SlotBinder(scope, lj, ctx.cascadesContext).bind(unboundSlot); + rightSlots.add(expression); + } int size = leftSlots.size(); List hashEqExpr = new ArrayList<>(); for (int i = 0; i < size; i++) { hashEqExpr.add(new EqualTo(leftSlots.get(i), rightSlots.get(i))); } - return new LogicalJoin(JoinType.INNER_JOIN, hashEqExpr, - join.getOtherJoinConjuncts(), join.getHint(), join.left(), join.right()); + return lj.withHashJoinConjuncts(hashEqExpr); }) ), + RuleType.BINDING_JOIN_SLOT.build( + logicalJoin().when(Plan::canBind) + .whenNot(j -> j.getJoinType().equals(JoinType.USING_JOIN)).thenApply(ctx -> { + LogicalJoin join = ctx.root; + List cond = join.getOtherJoinConjuncts().stream() + .map(expr -> bind(expr, join.children(), join, ctx.cascadesContext)) + .collect(Collectors.toList()); + List hashJoinConjuncts = join.getHashJoinConjuncts().stream() + .map(expr -> bind(expr, join.children(), join, ctx.cascadesContext)) + .collect(Collectors.toList()); + return new LogicalJoin<>(join.getJoinType(), + hashJoinConjuncts, cond, join.getHint(), join.left(), join.right()); + }) + ), RuleType.BINDING_AGGREGATE_SLOT.build( logicalAggregate().when(Plan::canBind).thenApply(ctx -> { LogicalAggregate agg = ctx.root; List output = bind(agg.getOutputExpressions(), agg.children(), agg, ctx.cascadesContext); + + // The columns referenced in group by are first obtained from the child's output, + // and then from the node's output + Map childOutputsToExpr = agg.child().getOutput().stream() + .collect(Collectors.toMap(Slot::getName, Slot::toSlot, (oldExpr, newExpr) -> oldExpr)); Map aliasNameToExpr = output.stream() .filter(ne -> ne instanceof Alias) .map(Alias.class::cast) .collect(Collectors.toMap(Alias::getName, UnaryNode::child, (oldExpr, newExpr) -> oldExpr)); + aliasNameToExpr.entrySet().stream() + .forEach(e -> childOutputsToExpr.putIfAbsent(e.getKey(), e.getValue())); + List replacedGroupBy = agg.getGroupByExpressions().stream() .map(groupBy -> { if (groupBy instanceof UnboundSlot) { UnboundSlot unboundSlot = (UnboundSlot) groupBy; if (unboundSlot.getNameParts().size() == 1) { String name = unboundSlot.getNameParts().get(0); - if (aliasNameToExpr.containsKey(name)) { - return aliasNameToExpr.get(name); + if (childOutputsToExpr.containsKey(name)) { + return childOutputsToExpr.get(name); } } } @@ -197,10 +229,17 @@ public List buildRules() { List output = bind(repeat.getOutputExpressions(), repeat.children(), repeat, ctx.cascadesContext); + // The columns referenced in group by are first obtained from the child's output, + // and then from the node's output + Map childOutputsToExpr = repeat.child().getOutput().stream() + .collect(Collectors.toMap(Slot::getName, Slot::toSlot, (oldExpr, newExpr) -> oldExpr)); Map aliasNameToExpr = output.stream() .filter(ne -> ne instanceof Alias) .map(Alias.class::cast) .collect(Collectors.toMap(Alias::getName, UnaryNode::child, (oldExpr, newExpr) -> oldExpr)); + aliasNameToExpr.entrySet().stream() + .forEach(e -> childOutputsToExpr.putIfAbsent(e.getKey(), e.getValue())); + List> replacedGroupingSets = repeat.getGroupingSets().stream() .map(groupBy -> groupBy.stream().map(expr -> { @@ -208,8 +247,8 @@ public List buildRules() { UnboundSlot unboundSlot = (UnboundSlot) expr; if (unboundSlot.getNameParts().size() == 1) { String name = unboundSlot.getNameParts().get(0); - if (aliasNameToExpr.containsKey(name)) { - return aliasNameToExpr.get(name); + if (childOutputsToExpr.containsKey(name)) { + return childOutputsToExpr.get(name); } } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java index 8c62aab3d4a300..7818fe2bb78208 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java @@ -200,7 +200,7 @@ private Set collectNeedToSlotExpressions(LogicalRepeat repeat) } private Plan pushDownProject(Set pushedExprs, Plan originBottomPlan) { - if (!pushedExprs.equals(originBottomPlan.getOutputSet())) { + if (!pushedExprs.equals(originBottomPlan.getOutputSet()) && !pushedExprs.isEmpty()) { return new LogicalProject<>(ImmutableList.copyOf(pushedExprs), originBottomPlan); } return originBottomPlan; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveOrdinalInOrderByAndGroupBy.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveOrdinalInOrderByAndGroupBy.java index 9b551f68f2da86..b04f085cef541a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveOrdinalInOrderByAndGroupBy.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveOrdinalInOrderByAndGroupBy.java @@ -66,6 +66,7 @@ public List buildRules() { logicalAggregate().then(agg -> { List aggOutput = agg.getOutputExpressions(); List groupByWithoutOrd = new ArrayList<>(); + boolean ordExists = false; for (Expression groupByExpr : agg.getGroupByExpressions()) { groupByExpr = FoldConstantRule.INSTANCE.rewrite(groupByExpr); if (groupByExpr instanceof IntegerLikeLiteral) { @@ -74,11 +75,17 @@ public List buildRules() { checkOrd(ord, aggOutput.size()); Expression aggExpr = aggOutput.get(ord - 1); groupByWithoutOrd.add(aggExpr); + ordExists = true; } else { groupByWithoutOrd.add(groupByExpr); } } - return new LogicalAggregate(groupByWithoutOrd, agg.getOutputExpressions(), agg.child()); + if (ordExists) { + return new LogicalAggregate(groupByWithoutOrd, agg.getOutputExpressions(), agg.child()); + } else { + return agg; + } + }))).build(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewrite.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewrite.java index dfa270992a170b..11167739b2caaa 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewrite.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewrite.java @@ -17,6 +17,7 @@ package org.apache.doris.nereids.rules.expression.rewrite; +import org.apache.doris.nereids.properties.OrderKey; import org.apache.doris.nereids.rules.Rule; import org.apache.doris.nereids.rules.RuleType; import org.apache.doris.nereids.rules.rewrite.OneRewriteRuleFactory; @@ -35,6 +36,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; @@ -66,7 +69,10 @@ public List buildRules() { new ProjectExpressionRewrite().build(), new AggExpressionRewrite().build(), new FilterExpressionRewrite().build(), - new JoinExpressionRewrite().build()); + new JoinExpressionRewrite().build(), + new SortExpressionRewrite().build(), + new LogicalRepeatRewrite().build(), + new HavingExpressionRewrite().build()); } private class GenerateExpressionRewrite extends OneRewriteRuleFactory { @@ -183,4 +189,48 @@ public Rule build() { }).toRule(RuleType.REWRITE_JOIN_EXPRESSION); } } + + private class SortExpressionRewrite extends OneRewriteRuleFactory { + + @Override + public Rule build() { + return logicalSort().then(sort -> { + List orderKeys = sort.getOrderKeys(); + List rewrittenOrderKeys = new ArrayList<>(); + for (OrderKey k : orderKeys) { + Expression expression = rewriter.rewrite(k.getExpr()); + rewrittenOrderKeys.add(new OrderKey(expression, k.isAsc(), k.isNullFirst())); + } + return sort.withOrderByKey(rewrittenOrderKeys); + }).toRule(RuleType.REWRITE_SORT_EXPRESSION); + } + } + + private class HavingExpressionRewrite extends OneRewriteRuleFactory { + @Override + public Rule build() { + return logicalHaving().then(having -> { + Set rewrittenExpr = new HashSet<>(); + for (Expression e : having.getExpressions()) { + rewrittenExpr.add(rewriter.rewrite(e)); + } + return having.withExpressions(rewrittenExpr); + }).toRule(RuleType.REWRITE_HAVING_EXPRESSSION); + } + } + + private class LogicalRepeatRewrite extends OneRewriteRuleFactory { + @Override + public Rule build() { + return logicalRepeat().then(r -> { + List> groupingExprs = new ArrayList<>(); + for (List expressions : r.getGroupingSets()) { + groupingExprs.add(expressions.stream().map(rewriter::rewrite).collect(Collectors.toList())); + } + return r.withGroupSetsAndOutput(groupingExprs, + r.getOutputExpressions().stream().map(rewriter::rewrite).map(e -> (NamedExpression) e) + .collect(Collectors.toList())); + }).toRule(RuleType.REWRITE_REPEAT_EXPRESSSION); + } + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/TypeCoercion.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/TypeCoercion.java index cee94f8af69b92..a81aefc986198c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/TypeCoercion.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rewrite/rules/TypeCoercion.java @@ -29,6 +29,7 @@ import org.apache.doris.nereids.trees.expressions.Divide; import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.InPredicate; +import org.apache.doris.nereids.trees.expressions.IntegralDivide; import org.apache.doris.nereids.trees.expressions.typecoercion.ImplicitCastInputTypes; import org.apache.doris.nereids.types.BigIntType; import org.apache.doris.nereids.types.DataType; @@ -218,4 +219,12 @@ private Expression castInputs(Expression expr, List> castType } }); } + + @Override + public Expression visitIntegralDivide(IntegralDivide integralDivide, ExpressionRewriteContext context) { + DataType commonType = BigIntType.INSTANCE; + Expression newLeft = TypeCoercionUtils.castIfNotSameType(integralDivide.left(), commonType); + Expression newRight = TypeCoercionUtils.castIfNotSameType(integralDivide.right(), commonType); + return integralDivide.withChildren(newLeft, newRight); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileScanToPhysicalFileScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileScanToPhysicalFileScan.java new file mode 100644 index 00000000000000..e277c6b7b1b18a --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalFileScanToPhysicalFileScan.java @@ -0,0 +1,43 @@ +// 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. + +package org.apache.doris.nereids.rules.implementation; + +import org.apache.doris.nereids.properties.DistributionSpecAny; +import org.apache.doris.nereids.rules.Rule; +import org.apache.doris.nereids.rules.RuleType; +import org.apache.doris.nereids.trees.plans.physical.PhysicalFileScan; + +import java.util.Optional; + +/** + * Implementation rule that convert logical FileScan to physical FileScan. + */ +public class LogicalFileScanToPhysicalFileScan extends OneImplementationRuleFactory { + @Override + public Rule build() { + return logicalFileScan().then(fileScan -> + new PhysicalFileScan( + fileScan.getId(), + fileScan.getTable(), + fileScan.getQualifier(), + DistributionSpecAny.INSTANCE, + Optional.empty(), + fileScan.getLogicalProperties()) + ).toRule(RuleType.LOGICAL_FILE_SCAN_TO_PHYSICAL_FILE_SCAN_RULE); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalSchemaScanToPhysicalSchemaScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalSchemaScanToPhysicalSchemaScan.java new file mode 100644 index 00000000000000..cb4832067adce7 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/implementation/LogicalSchemaScanToPhysicalSchemaScan.java @@ -0,0 +1,40 @@ +// 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. + +package org.apache.doris.nereids.rules.implementation; + +import org.apache.doris.nereids.rules.Rule; +import org.apache.doris.nereids.rules.RuleType; +import org.apache.doris.nereids.trees.plans.physical.PhysicalSchemaScan; + +import java.util.Optional; + +/** + * SchemaScan + */ +public class LogicalSchemaScanToPhysicalSchemaScan extends OneImplementationRuleFactory { + @Override + public Rule build() { + return logicalSchemaScan().then(scan -> + new PhysicalSchemaScan(scan.getId(), + scan.getTable(), + scan.getQualifier(), + Optional.empty(), + scan.getLogicalProperties()) + ).toRule(RuleType.LOGICAL_SCHEMA_SCAN_TO_PHYSICAL_SCHEMA_SCAN_RULE); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/mv/SelectMaterializedIndexWithAggregate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/mv/SelectMaterializedIndexWithAggregate.java index c189292510ea2a..a193b6390124dd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/mv/SelectMaterializedIndexWithAggregate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/mv/SelectMaterializedIndexWithAggregate.java @@ -32,6 +32,7 @@ import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.NamedExpression; import org.apache.doris.nereids.trees.expressions.Slot; +import org.apache.doris.nereids.trees.expressions.VirtualSlotReference; import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnionCount; import org.apache.doris.nereids.trees.expressions.functions.agg.Count; @@ -52,6 +53,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan; import org.apache.doris.nereids.trees.plans.logical.LogicalProject; +import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat; import org.apache.doris.nereids.util.ExpressionUtils; import com.google.common.base.Preconditions; @@ -160,7 +162,8 @@ public List buildRules() { ImmutableSet.of(), extractAggFunctionAndReplaceSlot(agg, Optional.of(project)), - agg.getGroupByExpressions() + ExpressionUtils.replace(agg.getGroupByExpressions(), + project.getAliasToProducer()) ); if (result.exprRewriteMap.isEmpty()) { @@ -262,7 +265,200 @@ public List buildRules() { filter.withChildren(newProject) ); } - }).toRule(RuleType.MATERIALIZED_INDEX_AGG_FILTER_PROJECT_SCAN) + }).toRule(RuleType.MATERIALIZED_INDEX_AGG_FILTER_PROJECT_SCAN), + + // only agg above scan + // Aggregate(Repeat(Scan)) + logicalAggregate(logicalRepeat(logicalOlapScan().when(this::shouldSelectIndex))).then(agg -> { + LogicalRepeat repeat = agg.child(); + LogicalOlapScan scan = repeat.child(); + SelectResult result = select( + scan, + agg.getInputSlots(), + ImmutableSet.of(), + extractAggFunctionAndReplaceSlot(agg, Optional.empty()), + nonVirtualGroupByExprs(agg)); + if (result.exprRewriteMap.isEmpty()) { + return agg.withChildren( + repeat.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId)) + ); + } else { + return new LogicalAggregate<>( + agg.getGroupByExpressions(), + replaceAggOutput(agg, Optional.empty(), Optional.empty(), result.exprRewriteMap), + agg.isNormalized(), + agg.getSourceRepeat(), + repeat.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId)) + ); + } + }).toRule(RuleType.MATERIALIZED_INDEX_AGG_REPEAT_SCAN), + + // filter could push down scan. + // Aggregate(Repeat(Filter(Scan))) + logicalAggregate(logicalRepeat(logicalFilter(logicalOlapScan().when(this::shouldSelectIndex)))) + .then(agg -> { + LogicalRepeat> repeat = agg.child(); + LogicalFilter filter = repeat.child(); + LogicalOlapScan scan = filter.child(); + ImmutableSet requiredSlots = ImmutableSet.builder() + .addAll(agg.getInputSlots()) + .addAll(filter.getInputSlots()) + .build(); + + SelectResult result = select( + scan, + requiredSlots, + filter.getConjuncts(), + extractAggFunctionAndReplaceSlot(agg, Optional.empty()), + nonVirtualGroupByExprs(agg) + ); + + if (result.exprRewriteMap.isEmpty()) { + return agg.withChildren( + repeat.withChildren( + filter.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, + result.indexId)) + )); + } else { + return new LogicalAggregate<>( + agg.getGroupByExpressions(), + replaceAggOutput(agg, Optional.empty(), Optional.empty(), + result.exprRewriteMap), + agg.isNormalized(), + agg.getSourceRepeat(), + // Not that no need to replace slots in the filter, because the slots to replace + // are value columns, which shouldn't appear in filters. + repeat.withChildren(filter.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, + result.indexId))) + ); + } + }).toRule(RuleType.MATERIALIZED_INDEX_AGG_REPEAT_FILTER_SCAN), + + // column pruning or other projections such as alias, etc. + // Aggregate(Repeat(Project(Scan))) + logicalAggregate(logicalRepeat(logicalProject(logicalOlapScan().when(this::shouldSelectIndex)))) + .then(agg -> { + LogicalRepeat> repeat = agg.child(); + LogicalProject project = repeat.child(); + LogicalOlapScan scan = project.child(); + SelectResult result = select( + scan, + project.getInputSlots(), + ImmutableSet.of(), + extractAggFunctionAndReplaceSlot(agg, + Optional.of(project)), + ExpressionUtils.replace(nonVirtualGroupByExprs(agg), + project.getAliasToProducer()) + ); + + if (result.exprRewriteMap.isEmpty()) { + return agg.withChildren( + repeat.withChildren( + project.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, + result.indexId) + )) + ); + } else { + List newProjectList = replaceProjectList(project, + result.exprRewriteMap.projectExprMap); + LogicalProject newProject = new LogicalProject<>( + newProjectList, + scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId)); + return new LogicalAggregate<>( + agg.getGroupByExpressions(), + replaceAggOutput(agg, Optional.of(project), Optional.of(newProject), + result.exprRewriteMap), + agg.isNormalized(), + agg.getSourceRepeat(), + repeat.withChildren(newProject) + ); + } + }).toRule(RuleType.MATERIALIZED_INDEX_AGG_REPEAT_PROJECT_SCAN), + + // filter could push down and project. + // Aggregate(Repeat(Project(Filter(Scan)))) + logicalAggregate(logicalRepeat(logicalProject(logicalFilter(logicalOlapScan() + .when(this::shouldSelectIndex))))).then(agg -> { + LogicalRepeat>> repeat = agg.child(); + LogicalProject> project = repeat.child(); + LogicalFilter filter = project.child(); + LogicalOlapScan scan = filter.child(); + Set requiredSlots = Stream.concat( + project.getInputSlots().stream(), filter.getInputSlots().stream()) + .collect(Collectors.toSet()); + SelectResult result = select( + scan, + requiredSlots, + filter.getConjuncts(), + extractAggFunctionAndReplaceSlot(agg, Optional.of(project)), + ExpressionUtils.replace(nonVirtualGroupByExprs(agg), + project.getAliasToProducer()) + ); + + if (result.exprRewriteMap.isEmpty()) { + return agg.withChildren(repeat.withChildren(project.withChildren(filter.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId)) + ))); + } else { + List newProjectList = replaceProjectList(project, + result.exprRewriteMap.projectExprMap); + LogicalProject newProject = new LogicalProject<>(newProjectList, + filter.withChildren(scan.withMaterializedIndexSelected(result.preAggStatus, + result.indexId))); + + return new LogicalAggregate<>( + agg.getGroupByExpressions(), + replaceAggOutput(agg, Optional.of(project), Optional.of(newProject), + result.exprRewriteMap), + agg.isNormalized(), + agg.getSourceRepeat(), + repeat.withChildren(newProject) + ); + } + }).toRule(RuleType.MATERIALIZED_INDEX_AGG_REPEAT_PROJECT_FILTER_SCAN), + + // filter can't push down + // Aggregate(Repeat(Filter(Project(Scan)))) + logicalAggregate(logicalRepeat(logicalFilter(logicalProject(logicalOlapScan() + .when(this::shouldSelectIndex))))).then(agg -> { + LogicalRepeat>> repeat = agg.child(); + LogicalFilter> filter = repeat.child(); + LogicalProject project = filter.child(); + LogicalOlapScan scan = project.child(); + SelectResult result = select( + scan, + project.getInputSlots(), + ImmutableSet.of(), + extractAggFunctionAndReplaceSlot(agg, Optional.of(project)), + ExpressionUtils.replace(nonVirtualGroupByExprs(agg), + project.getAliasToProducer()) + ); + + if (result.exprRewriteMap.isEmpty()) { + return agg.withChildren(repeat.withChildren(filter.withChildren(project.withChildren( + scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId)) + ))); + } else { + List newProjectList = replaceProjectList(project, + result.exprRewriteMap.projectExprMap); + LogicalProject newProject = new LogicalProject<>(newProjectList, + scan.withMaterializedIndexSelected(result.preAggStatus, result.indexId)); + + return new LogicalAggregate<>( + agg.getGroupByExpressions(), + replaceAggOutput(agg, Optional.of(project), Optional.of(newProject), + result.exprRewriteMap), + agg.isNormalized(), + agg.getSourceRepeat(), + repeat.withChildren(filter.withChildren(newProject)) + ); + } + }).toRule(RuleType.MATERIALIZED_INDEX_AGG_REPEAT_FILTER_PROJECT_SCAN) ); } @@ -284,9 +480,13 @@ private SelectResult select( Set predicates, List aggregateFunctions, List groupingExprs) { - Preconditions.checkArgument(scan.getOutputSet().containsAll(requiredScanOutput), + // remove virtual slot for grouping sets. + Set nonVirtualRequiredScanOutput = requiredScanOutput.stream() + .filter(slot -> !(slot instanceof VirtualSlotReference)) + .collect(ImmutableSet.toImmutableSet()); + Preconditions.checkArgument(scan.getOutputSet().containsAll(nonVirtualRequiredScanOutput), String.format("Scan's output (%s) should contains all the input required scan output (%s).", - scan.getOutput(), requiredScanOutput)); + scan.getOutput(), nonVirtualRequiredScanOutput)); OlapTable table = scan.getTable(); @@ -303,7 +503,7 @@ private SelectResult select( return new SelectResult(preAggStatus, scan.getTable().getBaseIndexId(), new ExprRewriteMap()); } else { List rollupsWithAllRequiredCols = table.getVisibleIndex().stream() - .filter(index -> containAllRequiredColumns(index, scan, requiredScanOutput)) + .filter(index -> containAllRequiredColumns(index, scan, nonVirtualRequiredScanOutput)) .collect(Collectors.toList()); return new SelectResult(preAggStatus, selectBestIndex(rollupsWithAllRequiredCols, scan, predicates), new ExprRewriteMap()); @@ -328,7 +528,8 @@ private SelectResult select( ImmutableList.of()) .stream() .filter(index -> !candidatesWithoutRewriting.contains(index)) - .map(index -> rewriteAgg(index, scan, requiredScanOutput, predicates, aggregateFunctions, + .map(index -> rewriteAgg(index, scan, nonVirtualRequiredScanOutput, predicates, + aggregateFunctions, groupingExprs)) .filter(aggRewriteResult -> checkPreAggStatus(scan, aggRewriteResult.index.getId(), predicates, @@ -340,7 +541,7 @@ private SelectResult select( List haveAllRequiredColumns = Streams.concat( candidatesWithoutRewriting.stream() - .filter(index -> containAllRequiredColumns(index, scan, requiredScanOutput)), + .filter(index -> containAllRequiredColumns(index, scan, nonVirtualRequiredScanOutput)), candidatesWithRewriting .stream() .filter(aggRewriteResult -> containAllRequiredColumns(aggRewriteResult.index, scan, @@ -995,4 +1196,10 @@ private List replaceProjectList( .map(expr -> (NamedExpression) ExpressionUtils.replace(expr, projectMap)) .collect(ImmutableList.toImmutableList()); } + + private List nonVirtualGroupByExprs(LogicalAggregate agg) { + return agg.getGroupByExpressions().stream() + .filter(expr -> !(expr instanceof VirtualSlotReference)) + .collect(ImmutableList.toImmutableList()); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/NormalizeAggregate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/NormalizeAggregate.java index d69cff4d58e18c..b5a1ddc32b7594 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/NormalizeAggregate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/logical/NormalizeAggregate.java @@ -93,7 +93,8 @@ public Rule build() { aggregateFunctionToSlotContext.pushDownToNamedExpression(normalizedAggregateFunctions); List normalizedGroupBy = - (List) groupByAndArgumentToSlotContext.normalizeToUseSlotRef(aggregate.getGroupByExpressions()); + (List) groupByAndArgumentToSlotContext + .normalizeToUseSlotRef(aggregate.getGroupByExpressions()); // we can safely add all groupBy and aggregate functions to output, because we will // add a project on it, and the upper project can protect the scope of visible of slot diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java index 494dfe93713aa0..c65df40433605a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/ExpressionEstimation.java @@ -25,6 +25,7 @@ import org.apache.doris.nereids.trees.expressions.Cast; import org.apache.doris.nereids.trees.expressions.Divide; import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.IntegralDivide; import org.apache.doris.nereids.trees.expressions.Multiply; import org.apache.doris.nereids.trees.expressions.SlotReference; import org.apache.doris.nereids.trees.expressions.Subtract; @@ -150,7 +151,7 @@ public ColumnStatistic visitBinaryArithmetic(BinaryArithmetic binaryArithmetic, .setNumNulls(numNulls).setDataSize(dataSize).setMinValue(min).setMaxValue(max).setSelectivity(1.0) .setMaxExpr(null).setMinExpr(null).build(); } - if (binaryArithmetic instanceof Divide) { + if (binaryArithmetic instanceof Divide || binaryArithmetic instanceof IntegralDivide) { double min = Math.min( Math.min( Math.min(leftMin / noneZeroDivisor(rightMin), leftMin / noneZeroDivisor(rightMax)), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java index 60455f9c4db6b5..e464fd45ac5393 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.stats; import org.apache.doris.catalog.Env; -import org.apache.doris.catalog.Table; +import org.apache.doris.catalog.TableIf; import org.apache.doris.common.Id; import org.apache.doris.common.Pair; import org.apache.doris.nereids.memo.GroupExpression; @@ -42,6 +42,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalAssertNumRows; import org.apache.doris.nereids.trees.plans.logical.LogicalEmptyRelation; import org.apache.doris.nereids.trees.plans.logical.LogicalExcept; +import org.apache.doris.nereids.trees.plans.logical.LogicalFileScan; import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; import org.apache.doris.nereids.trees.plans.logical.LogicalGenerate; import org.apache.doris.nereids.trees.plans.logical.LogicalIntersect; @@ -51,6 +52,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalOneRowRelation; import org.apache.doris.nereids.trees.plans.logical.LogicalProject; import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat; +import org.apache.doris.nereids.trees.plans.logical.LogicalSchemaScan; import org.apache.doris.nereids.trees.plans.logical.LogicalSort; import org.apache.doris.nereids.trees.plans.logical.LogicalTVFRelation; import org.apache.doris.nereids.trees.plans.logical.LogicalTopN; @@ -59,6 +61,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute; import org.apache.doris.nereids.trees.plans.physical.PhysicalEmptyRelation; import org.apache.doris.nereids.trees.plans.physical.PhysicalExcept; +import org.apache.doris.nereids.trees.plans.physical.PhysicalFileScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalFilter; import org.apache.doris.nereids.trees.plans.physical.PhysicalGenerate; import org.apache.doris.nereids.trees.plans.physical.PhysicalHashAggregate; @@ -72,6 +75,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalProject; import org.apache.doris.nereids.trees.plans.physical.PhysicalQuickSort; import org.apache.doris.nereids.trees.plans.physical.PhysicalRepeat; +import org.apache.doris.nereids.trees.plans.physical.PhysicalSchemaScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalStorageLayerAggregate; import org.apache.doris.nereids.trees.plans.physical.PhysicalTVFRelation; import org.apache.doris.nereids.trees.plans.physical.PhysicalTopN; @@ -164,6 +168,17 @@ public StatsDeriveResult visitLogicalOlapScan(LogicalOlapScan olapScan, Void con return computeScan(olapScan); } + @Override + public StatsDeriveResult visitLogicalSchemaScan(LogicalSchemaScan schemaScan, Void context) { + return new StatsDeriveResult(1); + } + + @Override + public StatsDeriveResult visitLogicalFileScan(LogicalFileScan fileScan, Void context) { + fileScan.getExpressions(); + return computeScan(fileScan); + } + @Override public StatsDeriveResult visitLogicalTVFRelation(LogicalTVFRelation tvfRelation, Void context) { return tvfRelation.getFunction().computeStats(tvfRelation.getOutput()); @@ -244,6 +259,16 @@ public StatsDeriveResult visitPhysicalOlapScan(PhysicalOlapScan olapScan, Void c return computeScan(olapScan); } + @Override + public StatsDeriveResult visitPhysicalSchemaScan(PhysicalSchemaScan schemaScan, Void context) { + return new StatsDeriveResult(1); + } + + @Override + public StatsDeriveResult visitPhysicalFileScan(PhysicalFileScan fileScan, Void context) { + return computeScan(fileScan); + } + @Override public StatsDeriveResult visitPhysicalStorageLayerAggregate( PhysicalStorageLayerAggregate storageLayerAggregate, Void context) { @@ -347,7 +372,7 @@ private StatsDeriveResult computeScan(Scan scan) { Set slotSet = scan.getOutput().stream().filter(SlotReference.class::isInstance) .map(s -> (SlotReference) s).collect(Collectors.toSet()); Map columnStatisticMap = new HashMap<>(); - Table table = scan.getTable(); + TableIf table = scan.getTable(); double rowCount = scan.getTable().estimatedRowCount(); for (SlotReference slotReference : slotSet) { String colName = slotReference.getName(); @@ -358,7 +383,6 @@ private StatsDeriveResult computeScan(Scan scan) { Env.getCurrentEnv().getStatisticsCache().getColumnStatistics(table.getId(), colName); if (!colStats.isUnKnown) { rowCount = colStats.count; - } columnStatisticMap.put(slotReference.getExprId(), colStats); } @@ -532,9 +556,9 @@ private Slot getLeftSlot(int fistSetOperation, int outputSlotIdx, SetOperation s } private ColumnStatistic getLeftStats(int fistSetOperation, - Slot leftSlot, - Map leftStatsSlotIdToColumnStats, - Map newColumnStatsMap) { + Slot leftSlot, + Map leftStatsSlotIdToColumnStats, + Map newColumnStatsMap) { return fistSetOperation == 0 ? leftStatsSlotIdToColumnStats.get(leftSlot.getExprId()) : newColumnStatsMap.get(leftSlot.getExprId()); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Cast.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Cast.java index 7228807e141057..6cf587a820cafa 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Cast.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Cast.java @@ -51,7 +51,14 @@ public R accept(ExpressionVisitor visitor, C context) { @Override public boolean nullable() { - return child().nullable(); + DataType childDataType = child().getDataType(); + if (childDataType.isStringType() && !targetType.isStringType()) { + return true; + } else if (!childDataType.isDateType() && targetType.isDateType()) { + return true; + } else { + return child().nullable(); + } } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/IntegralDivide.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/IntegralDivide.java new file mode 100644 index 00000000000000..42d6a54935abd0 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/IntegralDivide.java @@ -0,0 +1,60 @@ +// 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. + +package org.apache.doris.nereids.trees.expressions; + +import org.apache.doris.analysis.ArithmeticExpr.Operator; +import org.apache.doris.nereids.exceptions.UnboundException; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.coercion.AbstractDataType; +import org.apache.doris.nereids.types.coercion.NumericType; + +import com.google.common.base.Preconditions; + +import java.util.List; + +/** + * A DIV B + */ +public class IntegralDivide extends BinaryArithmetic { + + public IntegralDivide(Expression left, Expression right) { + super(left, right, Operator.INT_DIVIDE); + } + + @Override + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitIntegralDivide(this, context); + } + + @Override + public AbstractDataType inputType() { + return NumericType.INSTANCE; + } + + // Divide is implemented as a scalar function which return type is always nullable. + @Override + public boolean nullable() throws UnboundException { + return true; + } + + @Override + public Expression withChildren(List children) { + Preconditions.checkArgument(children.size() == 2); + return new IntegralDivide(children.get(0), children.get(1)); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/ApproxCountDistinct.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/ApproxCountDistinct.java new file mode 100644 index 00000000000000..161465ac189e9f --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/ApproxCountDistinct.java @@ -0,0 +1,76 @@ +// 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. + +package org.apache.doris.nereids.trees.expressions.functions.agg; + +import org.apache.doris.catalog.FunctionSignature; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.BigIntType; +import org.apache.doris.nereids.types.DataType; +import org.apache.doris.nereids.util.ExpressionUtils; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** MultiDistinctCount */ +public class ApproxCountDistinct extends AggregateFunction + implements AlwaysNotNullable, ExplicitlyCastableSignature { + public ApproxCountDistinct(Expression arg0, Expression... varArgs) { + super("approx_count_distinct", false, ExpressionUtils.mergeArguments(arg0, varArgs)); + } + + public ApproxCountDistinct(boolean isDistinct, Expression arg0, Expression... varArgs) { + super("approx_count_distinct", false, ExpressionUtils.mergeArguments(arg0, varArgs)); + } + + @Override + public List getSignatures() { + List argumentsTypes = getArgumentsTypes(); + return ImmutableList.of(FunctionSignature.of(BigIntType.INSTANCE, (List) argumentsTypes)); + } + + @Override + public ApproxCountDistinct withChildren(List children) { + Preconditions.checkArgument(children.size() > 0); + if (children.size() > 1) { + return new ApproxCountDistinct(children.get(0), + children.subList(1, children.size()).toArray(new Expression[0])); + } else { + return new ApproxCountDistinct(children.get(0)); + } + } + + @Override + public ApproxCountDistinct withDistinctAndChildren(boolean isDistinct, List children) { + if (children.size() > 1) { + return new ApproxCountDistinct(isDistinct, children.get(0), + children.subList(1, children.size()).toArray(new Expression[0])); + } else { + return new ApproxCountDistinct(isDistinct, children.get(0)); + } + } + + @Override + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitApproxCountDistinct(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Variance.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Variance.java new file mode 100644 index 00000000000000..85f08279d1c9f3 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Variance.java @@ -0,0 +1,86 @@ +// 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. + +package org.apache.doris.nereids.trees.expressions.functions.agg; + +import org.apache.doris.catalog.FunctionSignature; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; +import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable; +import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression; +import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.BigIntType; +import org.apache.doris.nereids.types.DecimalV2Type; +import org.apache.doris.nereids.types.DoubleType; +import org.apache.doris.nereids.types.FloatType; +import org.apache.doris.nereids.types.IntegerType; +import org.apache.doris.nereids.types.LargeIntType; +import org.apache.doris.nereids.types.SmallIntType; +import org.apache.doris.nereids.types.TinyIntType; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; + +/** + * Variance function + */ +public class Variance extends AggregateFunction implements UnaryExpression, PropagateNullable, + ExplicitlyCastableSignature { + + public static final List SIGNATURES = ImmutableList.of( + FunctionSignature.ret(DoubleType.INSTANCE).args(DoubleType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(FloatType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(LargeIntType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(BigIntType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(SmallIntType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(IntegerType.INSTANCE), + FunctionSignature.ret(DoubleType.INSTANCE).args(TinyIntType.INSTANCE), + FunctionSignature.ret(DecimalV2Type.SYSTEM_DEFAULT).args(DecimalV2Type.SYSTEM_DEFAULT) + ); + + public Variance(Expression child) { + super("variance", child); + } + + public Variance(boolean isDistinct, Expression child) { + super("variance", isDistinct, child); + } + + @Override + public List getSignatures() { + return SIGNATURES; + } + + @Override + public AggregateFunction withChildren(List children) { + Preconditions.checkArgument(children.size() == 1); + return new Variance(isDistinct, children.get(0)); + } + + @Override + public AggregateFunction withDistinctAndChildren(boolean isDistinct, List children) { + Preconditions.checkArgument(children.size() == 1); + return new Variance(isDistinct, children.get(0)); + } + + @Override + public R accept(ExpressionVisitor visitor, C context) { + return visitor.visitVariance(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java index b31f6d1811f33f..a76093e80eeb8f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/AggregateFunctionVisitor.java @@ -18,6 +18,7 @@ package org.apache.doris.nereids.trees.expressions.visitor; import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction; +import org.apache.doris.nereids.trees.expressions.functions.agg.ApproxCountDistinct; import org.apache.doris.nereids.trees.expressions.functions.agg.Avg; import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnionCount; import org.apache.doris.nereids.trees.expressions.functions.agg.Count; @@ -32,6 +33,7 @@ import org.apache.doris.nereids.trees.expressions.functions.agg.MultiDistinctSum; import org.apache.doris.nereids.trees.expressions.functions.agg.Ndv; import org.apache.doris.nereids.trees.expressions.functions.agg.Sum; +import org.apache.doris.nereids.trees.expressions.functions.agg.Variance; /** AggregateFunctionVisitor. */ public interface AggregateFunctionVisitor { @@ -81,6 +83,10 @@ default R visitBitmapUnionCount(BitmapUnionCount bitmapUnionCount, C context) { return visitAggregateFunction(bitmapUnionCount, context); } + default R visitVariance(Variance variance, C context) { + return visitAggregateFunction(variance, context); + } + default R visitNdv(Ndv ndv, C context) { return visitAggregateFunction(ndv, context); } @@ -92,4 +98,8 @@ default R visitHllUnionAgg(HllUnionAgg hllUnionAgg, C context) { default R visitHllUnion(HllUnion hllUnion, C context) { return visitAggregateFunction(hllUnion, context); } + + default R visitApproxCountDistinct(ApproxCountDistinct approxCountDistinct, C context) { + return visitAggregateFunction(approxCountDistinct, context); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java index a2383d5c2c685f..5fc68638c7d444 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/visitor/ExpressionVisitor.java @@ -46,6 +46,7 @@ import org.apache.doris.nereids.trees.expressions.GreaterThanEqual; import org.apache.doris.nereids.trees.expressions.InPredicate; import org.apache.doris.nereids.trees.expressions.InSubquery; +import org.apache.doris.nereids.trees.expressions.IntegralDivide; import org.apache.doris.nereids.trees.expressions.IsNull; import org.apache.doris.nereids.trees.expressions.LessThan; import org.apache.doris.nereids.trees.expressions.LessThanEqual; @@ -391,6 +392,10 @@ public R visitBoundStar(BoundStar boundStar, C context) { return visit(boundStar, context); } + public R visitIntegralDivide(IntegralDivide integralDivide, C context) { + return visitBinaryArithmetic(integralDivide, context); + } + /* ******************************************************************************************** * Unbound expressions * ********************************************************************************************/ diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java index 368a561d3fbf25..ab355837fe2045 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/PlanType.java @@ -42,6 +42,8 @@ public enum PlanType { LOGICAL_TOP_N, LOGICAL_LIMIT, LOGICAL_OLAP_SCAN, + LOGICAL_SCHEMA_SCAN, + LOGICAL_FILE_SCAN, LOGICAL_APPLY, LOGICAL_SELECT_HINT, LOGICAL_ASSERT_NUM_ROWS, @@ -51,13 +53,16 @@ public enum PlanType { LOGICAL_UNION, LOGICAL_EXCEPT, LOGICAL_INTERSECT, + LOGICAL_USING_JOIN, GROUP_PLAN, // physical plan PHYSICAL_EMPTY_RELATION, PHYSICAL_ONE_ROW_RELATION, PHYSICAL_OLAP_SCAN, + PHYSICAL_FILE_SCAN, PHYSICAL_TVF_RELATION, + PHYSICAL_SCHEMA_SCAN, PHYSICAL_PROJECT, PHYSICAL_FILTER, PHYSICAL_BROADCAST_HASH_JOIN, diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Scan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Scan.java index c6a0b454b3cad7..c221391e3f8887 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Scan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/algebra/Scan.java @@ -17,12 +17,12 @@ package org.apache.doris.nereids.trees.plans.algebra; -import org.apache.doris.catalog.Table; +import org.apache.doris.catalog.TableIf; import org.apache.doris.nereids.analyzer.Relation; /** * Common interface for logical/physical scan. */ public interface Scan extends Relation { - Table getTable(); + TableIf getTable(); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java new file mode 100644 index 00000000000000..43152b9fd6bfdd --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalFileScan.java @@ -0,0 +1,87 @@ +// 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. + +package org.apache.doris.nereids.trees.plans.logical; + +import org.apache.doris.catalog.external.ExternalTable; +import org.apache.doris.nereids.memo.GroupExpression; +import org.apache.doris.nereids.properties.LogicalProperties; +import org.apache.doris.nereids.trees.plans.PlanType; +import org.apache.doris.nereids.trees.plans.RelationId; +import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; +import org.apache.doris.nereids.util.Utils; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; + +import java.util.List; +import java.util.Optional; + +/** + * Logical file scan for external catalog. + */ +public class LogicalFileScan extends LogicalRelation { + + /** + * Constructor for LogicalFileScan. + */ + public LogicalFileScan(RelationId id, ExternalTable table, List qualifier, + Optional groupExpression, + Optional logicalProperties) { + super(id, PlanType.LOGICAL_FILE_SCAN, table, qualifier, + groupExpression, logicalProperties); + } + + public LogicalFileScan(RelationId id, ExternalTable table) { + this(id, table, ImmutableList.of()); + } + + public LogicalFileScan(RelationId id, ExternalTable table, List qualifier) { + this(id, table, qualifier, Optional.empty(), Optional.empty()); + } + + @Override + public ExternalTable getTable() { + Preconditions.checkArgument(table instanceof ExternalTable); + return (ExternalTable) table; + } + + @Override + public String toString() { + return Utils.toSqlString("LogicalFileScan", + "qualified", qualifiedName(), + "output", getOutput() + ); + } + + @Override + public LogicalFileScan withGroupExpression(Optional groupExpression) { + return new LogicalFileScan(id, (ExternalTable) table, qualifier, groupExpression, + Optional.of(getLogicalProperties())); + } + + @Override + public LogicalFileScan withLogicalProperties(Optional logicalProperties) { + return new LogicalFileScan(id, (ExternalTable) table, qualifier, groupExpression, + logicalProperties); + } + + @Override + public R accept(PlanVisitor visitor, C context) { + return visitor.visitLogicalFileScan(this, context); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java index 3a0796b448c932..d6f0ae6d598d3b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalHaving.java @@ -84,6 +84,11 @@ public Plan withLogicalProperties(Optional logicalProperties) return new LogicalHaving<>(conjuncts, Optional.empty(), logicalProperties, child()); } + public Plan withExpressions(Set expressions) { + return new LogicalHaving(expressions, Optional.empty(), + Optional.of(getLogicalProperties()), child()); + } + @Override public List computeOutput() { return child().getOutput(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java index 751fc72d74278b..b11b65d0cc76ab 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java @@ -27,7 +27,6 @@ import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.SlotReference; -import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.PlanType; import org.apache.doris.nereids.trees.plans.PreAggStatus; import org.apache.doris.nereids.trees.plans.RelationId; @@ -95,6 +94,8 @@ public class LogicalOlapScan extends LogicalRelation implements CatalogRelation, private final boolean partitionPruned; private final List manuallySpecifiedPartitions; + private final ImmutableList selectedPartitionIds; + public LogicalOlapScan(RelationId id, OlapTable table) { this(id, table, ImmutableList.of()); } @@ -128,7 +129,7 @@ public LogicalOlapScan(RelationId id, Table table, List qualifier, long selectedIndexId, boolean indexSelected, PreAggStatus preAggStatus, List partitions) { super(id, PlanType.LOGICAL_OLAP_SCAN, table, qualifier, - groupExpression, logicalProperties, selectedPartitionIds); + groupExpression, logicalProperties); this.selectedTabletIds = ImmutableList.copyOf(selectedTabletIds); this.partitionPruned = partitionPruned; this.tabletPruned = tabletPruned; @@ -136,6 +137,12 @@ public LogicalOlapScan(RelationId id, Table table, List qualifier, this.indexSelected = indexSelected; this.preAggStatus = preAggStatus; this.manuallySpecifiedPartitions = ImmutableList.copyOf(partitions); + this.selectedPartitionIds = ImmutableList.copyOf( + Objects.requireNonNull(selectedPartitionIds, "selectedPartitionIds can not be null")); + } + + public List getSelectedPartitionIds() { + return selectedPartitionIds; } @Override @@ -188,33 +195,33 @@ public int hashCode() { } @Override - public Plan withGroupExpression(Optional groupExpression) { - return new LogicalOlapScan(id, table, qualifier, groupExpression, Optional.of(getLogicalProperties()), + public LogicalOlapScan withGroupExpression(Optional groupExpression) { + return new LogicalOlapScan(id, (Table) table, qualifier, groupExpression, Optional.of(getLogicalProperties()), selectedPartitionIds, partitionPruned, selectedTabletIds, tabletPruned, selectedIndexId, indexSelected, preAggStatus, manuallySpecifiedPartitions); } @Override public LogicalOlapScan withLogicalProperties(Optional logicalProperties) { - return new LogicalOlapScan(id, table, qualifier, Optional.empty(), logicalProperties, + return new LogicalOlapScan(id, (Table) table, qualifier, Optional.empty(), logicalProperties, selectedPartitionIds, partitionPruned, selectedTabletIds, tabletPruned, selectedIndexId, indexSelected, preAggStatus, manuallySpecifiedPartitions); } public LogicalOlapScan withSelectedPartitionIds(List selectedPartitionIds) { - return new LogicalOlapScan(id, table, qualifier, Optional.empty(), Optional.of(getLogicalProperties()), + return new LogicalOlapScan(id, (Table) table, qualifier, Optional.empty(), Optional.of(getLogicalProperties()), selectedPartitionIds, true, selectedTabletIds, tabletPruned, selectedIndexId, indexSelected, preAggStatus, manuallySpecifiedPartitions); } public LogicalOlapScan withMaterializedIndexSelected(PreAggStatus preAgg, long indexId) { - return new LogicalOlapScan(id, table, qualifier, Optional.empty(), Optional.of(getLogicalProperties()), + return new LogicalOlapScan(id, (Table) table, qualifier, Optional.empty(), Optional.of(getLogicalProperties()), selectedPartitionIds, partitionPruned, selectedTabletIds, tabletPruned, indexId, true, preAgg, manuallySpecifiedPartitions); } public LogicalOlapScan withSelectedTabletIds(List selectedTabletIds) { - return new LogicalOlapScan(id, table, qualifier, Optional.empty(), Optional.of(getLogicalProperties()), + return new LogicalOlapScan(id, (Table) table, qualifier, Optional.empty(), Optional.of(getLogicalProperties()), selectedPartitionIds, partitionPruned, selectedTabletIds, true, selectedIndexId, indexSelected, preAggStatus, manuallySpecifiedPartitions); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRelation.java index ce57dd0aa973e7..f959ecca429ff2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalRelation.java @@ -18,7 +18,7 @@ package org.apache.doris.nereids.trees.plans.logical; import org.apache.doris.catalog.OlapTable; -import org.apache.doris.catalog.Table; +import org.apache.doris.catalog.TableIf; import org.apache.doris.nereids.memo.GroupExpression; import org.apache.doris.nereids.properties.LogicalProperties; import org.apache.doris.nereids.trees.expressions.Expression; @@ -42,20 +42,19 @@ */ public abstract class LogicalRelation extends LogicalLeaf implements Scan { - protected final Table table; + protected final TableIf table; protected final ImmutableList qualifier; - protected final ImmutableList selectedPartitionIds; protected final RelationId id; - public LogicalRelation(RelationId id, PlanType type, Table table, List qualifier) { - this(id, type, table, qualifier, Optional.empty(), Optional.empty(), Collections.emptyList()); + public LogicalRelation(RelationId id, PlanType type, TableIf table, List qualifier) { + this(id, type, table, qualifier, Optional.empty(), Optional.empty()); } public LogicalRelation(RelationId id, PlanType type, Optional groupExpression, Optional logicalProperties) { this(id, type, new OlapTable(), Collections.emptyList(), groupExpression, - logicalProperties, Collections.emptyList()); + logicalProperties); } /** @@ -64,19 +63,16 @@ public LogicalRelation(RelationId id, PlanType type, Optional g * @param table Doris table * @param qualifier qualified relation name */ - public LogicalRelation(RelationId id, PlanType type, Table table, List qualifier, - Optional groupExpression, Optional logicalProperties, - List selectedPartitionIds) { + public LogicalRelation(RelationId id, PlanType type, TableIf table, List qualifier, + Optional groupExpression, Optional logicalProperties) { super(type, groupExpression, logicalProperties); this.table = Objects.requireNonNull(table, "table can not be null"); this.qualifier = ImmutableList.copyOf(Objects.requireNonNull(qualifier, "qualifier can not be null")); - this.selectedPartitionIds = ImmutableList.copyOf( - Objects.requireNonNull(selectedPartitionIds, "selectedPartitionIds can not be null")); this.id = id; } @Override - public Table getTable() { + public TableIf getTable() { return table; } @@ -135,10 +131,6 @@ public String qualifiedName() { return Utils.qualifiedName(qualifier, table.getName()); } - public List getSelectedPartitionIds() { - return selectedPartitionIds; - } - public RelationId getId() { return id; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java new file mode 100644 index 00000000000000..402da0da48b211 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalSchemaScan.java @@ -0,0 +1,97 @@ +// 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. + +package org.apache.doris.nereids.trees.plans.logical; + +import org.apache.doris.catalog.SchemaTable; +import org.apache.doris.catalog.TableIf; +import org.apache.doris.nereids.memo.GroupExpression; +import org.apache.doris.nereids.properties.LogicalProperties; +import org.apache.doris.nereids.trees.expressions.Slot; +import org.apache.doris.nereids.trees.expressions.SlotReference; +import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.PlanType; +import org.apache.doris.nereids.trees.plans.RelationId; +import org.apache.doris.nereids.trees.plans.algebra.Scan; +import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; +import org.apache.doris.nereids.util.Utils; + +import com.google.common.collect.ImmutableList; + +import java.util.List; +import java.util.Optional; + +/** + * LogicalSchemaScan. + */ +public class LogicalSchemaScan extends LogicalRelation implements Scan { + public LogicalSchemaScan(RelationId id, + TableIf table, + List qualifier) { + super(id, PlanType.LOGICAL_SCHEMA_SCAN, table, qualifier); + } + + public LogicalSchemaScan(RelationId id, + TableIf table, + List qualifier, Optional groupExpression, + Optional logicalProperties) { + super(id, PlanType.LOGICAL_SCHEMA_SCAN, table, qualifier, groupExpression, logicalProperties); + } + + @Override + public SchemaTable getTable() { + return (SchemaTable) table; + } + + @Override + public R accept(PlanVisitor visitor, C context) { + return visitor.visitLogicalSchemaScan(this, context); + } + + @Override + public List computeNonUserVisibleOutput() { + SchemaTable schemaTable = getTable(); + return schemaTable.getBaseSchema().stream() + .map(col -> SlotReference.fromColumn(col, qualified())) + .collect(ImmutableList.toImmutableList()); + } + + @Override + public Plan withGroupExpression(Optional groupExpression) { + return new LogicalSchemaScan(id, table, qualifier, groupExpression, Optional.of(getLogicalProperties())); + } + + @Override + public Plan withLogicalProperties(Optional logicalProperties) { + return new LogicalSchemaScan(id, table, qualifier, groupExpression, logicalProperties); + } + + @Override + public boolean equals(Object o) { + return super.equals(o); + } + + @Override + public int hashCode() { + return super.hashCode(); + } + + @Override + public String toString() { + return Utils.toSqlString("LogicalSchemaScan"); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java index b9f7b94de4ea3d..8d89fcf15909d9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalTVFRelation.java @@ -46,7 +46,7 @@ public LogicalTVFRelation(RelationId id, TableValuedFunction function, Optional< Optional logicalProperties) { super(id, PlanType.LOGICAL_TVF_RELATION, Objects.requireNonNull(function, "table valued function can not be null").getTable(), - ImmutableList.of(), groupExpression, logicalProperties, ImmutableList.of()); + ImmutableList.of(), groupExpression, logicalProperties); this.function = function; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java new file mode 100644 index 00000000000000..8a9d7af75269f7 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/UsingJoin.java @@ -0,0 +1,169 @@ +// 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. + +package org.apache.doris.nereids.trees.plans.logical; + +import org.apache.doris.nereids.memo.GroupExpression; +import org.apache.doris.nereids.properties.LogicalProperties; +import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.Slot; +import org.apache.doris.nereids.trees.plans.JoinHint; +import org.apache.doris.nereids.trees.plans.JoinType; +import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.PlanType; +import org.apache.doris.nereids.trees.plans.algebra.Join; +import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; +import org.apache.doris.nereids.util.ExpressionUtils; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; +import org.apache.commons.collections.CollectionUtils; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * select col1 from t1 join t2 using(col1); + */ +public class UsingJoin + extends LogicalBinary implements Join { + + private final JoinType joinType; + private final ImmutableList otherJoinConjuncts; + private final ImmutableList hashJoinConjuncts; + private final JoinHint hint; + + public UsingJoin(JoinType joinType, LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild, + List expressions, List hashJoinConjuncts, + JoinHint hint) { + this(joinType, leftChild, rightChild, expressions, + hashJoinConjuncts, Optional.empty(), Optional.empty(), hint); + } + + public UsingJoin(JoinType joinType, LEFT_CHILD_TYPE leftChild, RIGHT_CHILD_TYPE rightChild, + List expressions, List hashJoinConjuncts, Optional groupExpression, + Optional logicalProperties, + JoinHint hint) { + super(PlanType.LOGICAL_USING_JOIN, groupExpression, logicalProperties, leftChild, rightChild); + this.joinType = joinType; + this.otherJoinConjuncts = ImmutableList.copyOf(expressions); + this.hashJoinConjuncts = ImmutableList.copyOf(hashJoinConjuncts); + this.hint = hint; + } + + @Override + public List computeOutput() { + + List newLeftOutput = left().getOutput().stream().map(o -> o.withNullable(true)) + .collect(Collectors.toList()); + + List newRightOutput = right().getOutput().stream().map(o -> o.withNullable(true)) + .collect(Collectors.toList()); + + switch (joinType) { + case LEFT_SEMI_JOIN: + case LEFT_ANTI_JOIN: + return ImmutableList.copyOf(left().getOutput()); + case RIGHT_SEMI_JOIN: + case RIGHT_ANTI_JOIN: + return ImmutableList.copyOf(right().getOutput()); + case LEFT_OUTER_JOIN: + return ImmutableList.builder() + .addAll(left().getOutput()) + .addAll(newRightOutput) + .build(); + case RIGHT_OUTER_JOIN: + return ImmutableList.builder() + .addAll(newLeftOutput) + .addAll(right().getOutput()) + .build(); + case FULL_OUTER_JOIN: + return ImmutableList.builder() + .addAll(newLeftOutput) + .addAll(newRightOutput) + .build(); + default: + return ImmutableList.builder() + .addAll(left().getOutput()) + .addAll(right().getOutput()) + .build(); + } + } + + @Override + public Plan withGroupExpression(Optional groupExpression) { + return new UsingJoin(joinType, child(0), child(1), otherJoinConjuncts, + hashJoinConjuncts, groupExpression, Optional.of(getLogicalProperties()), hint); + } + + @Override + public Plan withLogicalProperties(Optional logicalProperties) { + return new UsingJoin(joinType, child(0), child(1), otherJoinConjuncts, + hashJoinConjuncts, groupExpression, logicalProperties, hint); + } + + @Override + public Plan withChildren(List children) { + return new UsingJoin(joinType, children.get(0), children.get(1), otherJoinConjuncts, + hashJoinConjuncts, groupExpression, Optional.of(getLogicalProperties()), hint); + } + + @Override + public R accept(PlanVisitor visitor, C context) { + return visitor.visit(this, context); + } + + @Override + public List getExpressions() { + return new Builder() + .addAll(hashJoinConjuncts) + .addAll(otherJoinConjuncts) + .build(); + } + + public JoinType getJoinType() { + return joinType; + } + + public List getOtherJoinConjuncts() { + return otherJoinConjuncts; + } + + public List getHashJoinConjuncts() { + return hashJoinConjuncts; + } + + public JoinHint getHint() { + return hint; + } + + @Override + public Optional getOnClauseCondition() { + return ExpressionUtils.optionalAnd(hashJoinConjuncts, otherJoinConjuncts); + } + + @Override + public boolean hasJoinHint() { + return hint != null; + } + + @Override + public boolean hasJoinCondition() { + return !CollectionUtils.isEmpty(hashJoinConjuncts); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java new file mode 100644 index 00000000000000..49091d229c512b --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalFileScan.java @@ -0,0 +1,119 @@ +// 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. + +package org.apache.doris.nereids.trees.plans.physical; + +import org.apache.doris.catalog.external.ExternalTable; +import org.apache.doris.nereids.memo.GroupExpression; +import org.apache.doris.nereids.properties.DistributionSpec; +import org.apache.doris.nereids.properties.LogicalProperties; +import org.apache.doris.nereids.properties.PhysicalProperties; +import org.apache.doris.nereids.trees.plans.PlanType; +import org.apache.doris.nereids.trees.plans.RelationId; +import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; +import org.apache.doris.nereids.util.Utils; +import org.apache.doris.statistics.StatsDeriveResult; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +/** + * Physical file scan for external catalog. + */ +public class PhysicalFileScan extends PhysicalRelation { + + private final ExternalTable table; + private final DistributionSpec distributionSpec; + + /** + * Constructor for PhysicalFileScan. + */ + public PhysicalFileScan(RelationId id, ExternalTable table, List qualifier, + DistributionSpec distributionSpec, Optional groupExpression, + LogicalProperties logicalProperties) { + super(id, PlanType.PHYSICAL_FILE_SCAN, qualifier, groupExpression, logicalProperties); + this.table = table; + this.distributionSpec = distributionSpec; + } + + /** + * Constructor for PhysicalFileScan. + */ + public PhysicalFileScan(RelationId id, ExternalTable table, List qualifier, + DistributionSpec distributionSpec, Optional groupExpression, + LogicalProperties logicalProperties, PhysicalProperties physicalProperties, + StatsDeriveResult statsDeriveResult) { + super(id, PlanType.PHYSICAL_FILE_SCAN, qualifier, groupExpression, logicalProperties, + physicalProperties, statsDeriveResult); + this.table = table; + this.distributionSpec = distributionSpec; + } + + @Override + public String toString() { + return Utils.toSqlString("PhysicalFileScan", + "qualified", Utils.qualifiedName(qualifier, table.getName()), + "output", getOutput(), + "stats", statsDeriveResult + ); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass() || !super.equals(o)) { + return false; + } + PhysicalFileScan that = ((PhysicalFileScan) o); + return Objects.equals(table, that.table); + } + + @Override + public int hashCode() { + return Objects.hash(id, table); + } + + @Override + public R accept(PlanVisitor visitor, C context) { + return visitor.visitPhysicalFileScan(this, context); + } + + @Override + public PhysicalFileScan withGroupExpression(Optional groupExpression) { + return new PhysicalFileScan(id, table, qualifier, distributionSpec, groupExpression, getLogicalProperties()); + } + + @Override + public PhysicalFileScan withLogicalProperties(Optional logicalProperties) { + return new PhysicalFileScan(id, table, qualifier, distributionSpec, groupExpression, logicalProperties.get()); + } + + @Override + public ExternalTable getTable() { + return table; + } + + @Override + public PhysicalFileScan withPhysicalPropertiesAndStats(PhysicalProperties physicalProperties, + StatsDeriveResult statsDeriveResult) { + return new PhysicalFileScan(id, table, qualifier, distributionSpec, groupExpression, getLogicalProperties(), + physicalProperties, statsDeriveResult); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java new file mode 100644 index 00000000000000..7d751d4fa4a944 --- /dev/null +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalSchemaScan.java @@ -0,0 +1,99 @@ +// 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. + +package org.apache.doris.nereids.trees.plans.physical; + +import org.apache.doris.catalog.Table; +import org.apache.doris.nereids.memo.GroupExpression; +import org.apache.doris.nereids.properties.LogicalProperties; +import org.apache.doris.nereids.properties.PhysicalProperties; +import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.doris.nereids.trees.plans.PlanType; +import org.apache.doris.nereids.trees.plans.RelationId; +import org.apache.doris.nereids.trees.plans.algebra.Scan; +import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor; +import org.apache.doris.nereids.util.Utils; +import org.apache.doris.statistics.StatsDeriveResult; + +import java.util.List; +import java.util.Optional; + +/** + * PhysicalSchemaScan. + */ +public class PhysicalSchemaScan extends PhysicalRelation implements Scan { + + private final Table table; + + public PhysicalSchemaScan(RelationId id, Table table, List qualifier, + Optional groupExpression, LogicalProperties logicalProperties) { + super(id, PlanType.PHYSICAL_SCHEMA_SCAN, qualifier, groupExpression, logicalProperties); + this.table = table; + } + + public PhysicalSchemaScan(RelationId id, Table table, List qualifier, + Optional groupExpression, LogicalProperties logicalProperties, + PhysicalProperties physicalProperties, StatsDeriveResult statsDeriveResult) { + super(id, PlanType.PHYSICAL_SCHEMA_SCAN, qualifier, groupExpression, logicalProperties, physicalProperties, + statsDeriveResult); + this.table = table; + } + + @Override + public Table getTable() { + return table; + } + + @Override + public R accept(PlanVisitor visitor, C context) { + return visitor.visitPhysicalSchemaScan(this, context); + } + + @Override + public Plan withGroupExpression(Optional groupExpression) { + return new PhysicalSchemaScan(id, table, qualifier, groupExpression, getLogicalProperties(), physicalProperties, + statsDeriveResult); + } + + @Override + public Plan withLogicalProperties(Optional logicalProperties) { + return new PhysicalSchemaScan(id, table, qualifier, groupExpression, logicalProperties.get(), + physicalProperties, statsDeriveResult); + } + + @Override + public PhysicalPlan withPhysicalPropertiesAndStats(PhysicalProperties physicalProperties, + StatsDeriveResult statsDeriveResult) { + return new PhysicalSchemaScan(id, table, qualifier, groupExpression, getLogicalProperties(), physicalProperties, + statsDeriveResult); + } + + @Override + public boolean equals(Object o) { + return super.equals(o); + } + + @Override + public int hashCode() { + return super.hashCode(); + } + + @Override + public String toString() { + return Utils.toSqlString("PhysicalSchemaScan"); + } +} diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java index 08eebb3e36860d..461266e440cda8 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/physical/PhysicalStorageLayerAggregate.java @@ -69,7 +69,7 @@ public PushDownAggOp getAggOp() { @Override public Table getTable() { - return relation.getTable(); + return (Table) relation.getTable(); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/PlanVisitor.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/PlanVisitor.java index 8b204446974630..af464b0fb1f7e4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/PlanVisitor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/PlanVisitor.java @@ -32,6 +32,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalCheckPolicy; import org.apache.doris.nereids.trees.plans.logical.LogicalEmptyRelation; import org.apache.doris.nereids.trees.plans.logical.LogicalExcept; +import org.apache.doris.nereids.trees.plans.logical.LogicalFileScan; import org.apache.doris.nereids.trees.plans.logical.LogicalFilter; import org.apache.doris.nereids.trees.plans.logical.LogicalGenerate; import org.apache.doris.nereids.trees.plans.logical.LogicalHaving; @@ -43,6 +44,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalProject; import org.apache.doris.nereids.trees.plans.logical.LogicalRelation; import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat; +import org.apache.doris.nereids.trees.plans.logical.LogicalSchemaScan; import org.apache.doris.nereids.trees.plans.logical.LogicalSelectHint; import org.apache.doris.nereids.trees.plans.logical.LogicalSetOperation; import org.apache.doris.nereids.trees.plans.logical.LogicalSort; @@ -56,6 +58,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalDistribute; import org.apache.doris.nereids.trees.plans.physical.PhysicalEmptyRelation; import org.apache.doris.nereids.trees.plans.physical.PhysicalExcept; +import org.apache.doris.nereids.trees.plans.physical.PhysicalFileScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalFilter; import org.apache.doris.nereids.trees.plans.physical.PhysicalGenerate; import org.apache.doris.nereids.trees.plans.physical.PhysicalHashAggregate; @@ -70,6 +73,7 @@ import org.apache.doris.nereids.trees.plans.physical.PhysicalQuickSort; import org.apache.doris.nereids.trees.plans.physical.PhysicalRelation; import org.apache.doris.nereids.trees.plans.physical.PhysicalRepeat; +import org.apache.doris.nereids.trees.plans.physical.PhysicalSchemaScan; import org.apache.doris.nereids.trees.plans.physical.PhysicalSetOperation; import org.apache.doris.nereids.trees.plans.physical.PhysicalStorageLayerAggregate; import org.apache.doris.nereids.trees.plans.physical.PhysicalTVFRelation; @@ -162,6 +166,14 @@ public R visitLogicalOlapScan(LogicalOlapScan olapScan, C context) { return visitLogicalRelation(olapScan, context); } + public R visitLogicalSchemaScan(LogicalSchemaScan schemaScan, C context) { + return visitLogicalRelation(schemaScan, context); + } + + public R visitLogicalFileScan(LogicalFileScan fileScan, C context) { + return visitLogicalRelation(fileScan, context); + } + public R visitLogicalTVFRelation(LogicalTVFRelation tvfRelation, C context) { return visitLogicalRelation(tvfRelation, context); } @@ -251,6 +263,14 @@ public R visitPhysicalOlapScan(PhysicalOlapScan olapScan, C context) { return visitPhysicalScan(olapScan, context); } + public R visitPhysicalSchemaScan(PhysicalSchemaScan schemaScan, C context) { + return visitPhysicalScan(schemaScan, context); + } + + public R visitPhysicalFileScan(PhysicalFileScan fileScan, C context) { + return visitPhysicalScan(fileScan, context); + } + public R visitPhysicalStorageLayerAggregate(PhysicalStorageLayerAggregate storageLayerAggregate, C context) { return storageLayerAggregate.getRelation().accept(this, context); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java index 6abe61d9f706fa..8c4be55c861911 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java @@ -449,7 +449,7 @@ public boolean isDate() { } public boolean isDateType() { - return isDate() || isDateTime(); + return isDate() || isDateTime() || isDateV2() || isDateTimeV2(); } public boolean isNullType() { diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java index 85b9f5a666f222..ccb0796ae67388 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/util/TypeCoercionUtils.java @@ -156,6 +156,14 @@ public static boolean canHandleTypeCoercion(DataType leftType, DataType rightTyp || leftType instanceof IntegralType && rightType instanceof DecimalV2Type) { return true; } + if (leftType instanceof FloatType && rightType instanceof DecimalV2Type + || leftType instanceof DecimalV2Type && rightType instanceof FloatType) { + return true; + } + if (leftType instanceof DoubleType && rightType instanceof DecimalV2Type + || leftType instanceof DecimalV2Type && rightType instanceof DoubleType) { + return true; + } // TODO: add decimal promotion support if (!(leftType instanceof DecimalV2Type) && !(rightType instanceof DecimalV2Type) @@ -230,7 +238,7 @@ public static Optional findTightestCommonType(DataType left, DataType || (right instanceof DateLikeType && left instanceof IntegralType)) { tightestCommonType = BigIntType.INSTANCE; } - return Optional.ofNullable(tightestCommonType); + return tightestCommonType == null ? Optional.of(DoubleType.INSTANCE) : Optional.of(tightestCommonType); } /** diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java index b9da4b45c06c48..c15a12371c56c2 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/JdbcScanNode.java @@ -195,6 +195,7 @@ protected void toThrift(TPlanNode msg) { msg.jdbc_scan_node.setTupleId(desc.getId().asInt()); msg.jdbc_scan_node.setTableName(tableName); msg.jdbc_scan_node.setQueryString(getJdbcQueryStr()); + msg.jdbc_scan_node.setTableType(jdbcType); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java index 4117f205390a37..37d7fd58f38414 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/external/ExternalFileScanNode.java @@ -192,6 +192,43 @@ public void init(Analyzer analyzer) throws UserException { initParamCreateContexts(analyzer); } + /** + * Init ExternalFileScanNode, ONLY used for Nereids. Should NOT use this function in anywhere else. + */ + public void init() throws UserException { + if (!Config.enable_vectorized_load) { + throw new UserException( + "Please set 'enable_vectorized_load=true' in fe.conf to enable external file scan node"); + } + + switch (type) { + case QUERY: + // prepare for partition prune + // computeColumnFilter(); + if (this.desc.getTable() instanceof HMSExternalTable) { + HMSExternalTable hmsTable = (HMSExternalTable) this.desc.getTable(); + initHMSExternalTable(hmsTable); + } else if (this.desc.getTable() instanceof FunctionGenTable) { + FunctionGenTable table = (FunctionGenTable) this.desc.getTable(); + initFunctionGenTable(table, (ExternalFileTableValuedFunction) table.getTvf()); + } + break; + default: + throw new UserException("Unknown type: " + type); + } + + backendPolicy.init(); + numNodes = backendPolicy.numBackends(); + for (FileScanProviderIf scanProvider : scanProviders) { + ParamCreateContext context = scanProvider.createContext(analyzer); + context.createDestSlotMap(); + initAndSetPrecedingFilter(context.fileGroup.getPrecedingFilterExpr(), context.srcTupleDescriptor, analyzer); + initAndSetWhereExpr(context.fileGroup.getWhereExpr(), context.destTupleDescriptor, analyzer); + context.conjuncts = conjuncts; + this.contexts.add(context); + } + } + private void initHMSExternalTable(HMSExternalTable hmsTable) throws UserException { Preconditions.checkNotNull(hmsTable); @@ -312,6 +349,25 @@ public void finalize(Analyzer analyzer) throws UserException { } } + public void finalizeForNerieds() throws UserException { + Preconditions.checkState(contexts.size() == scanProviders.size(), + contexts.size() + " vs. " + scanProviders.size()); + for (int i = 0; i < contexts.size(); ++i) { + ParamCreateContext context = contexts.get(i); + FileScanProviderIf scanProvider = scanProviders.get(i); + setDefaultValueExprs(scanProvider, context); + setColumnPositionMappingForTextFile(scanProvider, context); + finalizeParamsForLoad(context, analyzer); + createScanRangeLocations(context, scanProvider); + this.inputSplitsNum += scanProvider.getInputSplitNum(); + this.totalFileSize += scanProvider.getInputFileSize(); + if (scanProvider instanceof HiveScanProvider) { + this.totalPartitionNum = ((HiveScanProvider) scanProvider).getTotalPartitionNum(); + this.readPartitionNum = ((HiveScanProvider) scanProvider).getReadPartitionNum(); + } + } + } + private void setColumnPositionMappingForTextFile(FileScanProviderIf scanProvider, ParamCreateContext context) throws UserException { if (type != Type.QUERY) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergScanProvider.java b/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergScanProvider.java index e51b39144f77d0..21bfb6670fef56 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergScanProvider.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergScanProvider.java @@ -18,35 +18,23 @@ package org.apache.doris.planner.external; import org.apache.doris.analysis.Analyzer; -import org.apache.doris.analysis.BaseTableRef; -import org.apache.doris.analysis.BinaryPredicate; import org.apache.doris.analysis.Expr; -import org.apache.doris.analysis.SlotRef; -import org.apache.doris.analysis.StringLiteral; -import org.apache.doris.analysis.TableName; -import org.apache.doris.analysis.TableRef; +import org.apache.doris.analysis.TableSnapshot; import org.apache.doris.analysis.TupleDescriptor; -import org.apache.doris.catalog.Column; import org.apache.doris.catalog.HMSResource; -import org.apache.doris.catalog.PrimitiveType; -import org.apache.doris.catalog.TableIf; -import org.apache.doris.catalog.external.ExternalTable; import org.apache.doris.catalog.external.HMSExternalTable; import org.apache.doris.common.DdlException; import org.apache.doris.common.MetaNotFoundException; import org.apache.doris.common.UserException; +import org.apache.doris.common.util.TimeUtils; import org.apache.doris.external.iceberg.util.IcebergUtils; import org.apache.doris.planner.ColumnRange; import org.apache.doris.thrift.TFileFormatType; import org.apache.doris.thrift.TFileRangeDesc; import org.apache.doris.thrift.TIcebergDeleteFileDesc; import org.apache.doris.thrift.TIcebergFileDesc; -import org.apache.doris.thrift.TIcebergTable; -import org.apache.doris.thrift.TTableDescriptor; import org.apache.doris.thrift.TTableFormatFileDesc; -import org.apache.doris.thrift.TTableType; -import lombok.Data; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.mapred.InputSplit; @@ -54,14 +42,17 @@ import org.apache.iceberg.DeleteFile; import org.apache.iceberg.FileContent; import org.apache.iceberg.FileScanTask; +import org.apache.iceberg.HistoryEntry; import org.apache.iceberg.MetadataColumns; import org.apache.iceberg.TableProperties; import org.apache.iceberg.TableScan; import org.apache.iceberg.catalog.TableIdentifier; +import org.apache.iceberg.exceptions.NotFoundException; import org.apache.iceberg.expressions.Expression; import org.apache.iceberg.types.Conversions; import java.nio.ByteBuffer; +import java.time.Instant; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -76,10 +67,6 @@ public class IcebergScanProvider extends HiveScanProvider { private static final int MIN_DELETE_FILE_SUPPORT_VERSION = 2; - public static final String V2_DELETE_TBL = "iceberg#delete#tbl"; - public static final String V2_DELETE_DB = "iceberg#delete#db"; - private static final DeleteFileTempTable scanDeleteTable = - new DeleteFileTempTable(TableIf.TableType.HMS_EXTERNAL_TABLE); private final Analyzer analyzer; public IcebergScanProvider(HMSExternalTable hmsTable, Analyzer analyzer, TupleDescriptor desc, @@ -98,7 +85,6 @@ public static void setIcebergParams(TFileRangeDesc rangeDesc, IcebergSplit icebe if (formatVersion < MIN_DELETE_FILE_SUPPORT_VERSION) { fileDesc.setContent(FileContent.DATA.id()); } else { - setPathSelectConjunct(fileDesc, icebergSplit); for (IcebergDeleteFileFilter filter : icebergSplit.getDeleteFileFilters()) { TIcebergDeleteFileDesc deleteFileDesc = new TIcebergDeleteFileDesc(); deleteFileDesc.setPath(filter.getDeleteFilePath()); @@ -127,19 +113,6 @@ public static void setIcebergParams(TFileRangeDesc rangeDesc, IcebergSplit icebe rangeDesc.setTableFormatParams(tableFormatFileDesc); } - private static void setPathSelectConjunct(TIcebergFileDesc fileDesc, IcebergSplit icebergSplit) - throws UserException { - BaseTableRef tableRef = icebergSplit.getDeleteTableRef(); - fileDesc.setDeleteTableTupleId(tableRef.getDesc().getId().asInt()); - SlotRef lhs = new SlotRef(tableRef.getName(), DeleteFileTempTable.DATA_FILE_PATH); - lhs.analyze(icebergSplit.getAnalyzer()); - lhs.getDesc().setIsMaterialized(true); - StringLiteral rhs = new StringLiteral(icebergSplit.getPath().toUri().toString()); - BinaryPredicate pathSelectConjunct = new BinaryPredicate(BinaryPredicate.Operator.EQ, lhs, rhs); - pathSelectConjunct.analyze(icebergSplit.getAnalyzer()); - fileDesc.setFileSelectConjunct(pathSelectConjunct.treeToThrift()); - } - @Override public TFileFormatType getFileFormatType() throws DdlException, MetaNotFoundException { TFileFormatType type; @@ -168,19 +141,25 @@ public List getSplits(List exprs) throws UserException { org.apache.iceberg.Table table = getIcebergTable(); TableScan scan = table.newScan(); + TableSnapshot tableSnapshot = desc.getRef().getTableSnapshot(); + if (tableSnapshot != null) { + TableSnapshot.VersionType type = tableSnapshot.getType(); + try { + if (type == TableSnapshot.VersionType.VERSION) { + scan = scan.useSnapshot(tableSnapshot.getVersion()); + } else { + long snapshotId = TimeUtils.timeStringToLong(tableSnapshot.getTime(), TimeUtils.getTimeZone()); + scan = scan.useSnapshot(getSnapshotIdAsOfTime(table.history(), snapshotId)); + } + } catch (IllegalArgumentException e) { + throw new UserException(e); + } + } for (Expression predicate : expressions) { scan = scan.filter(predicate); } List splits = new ArrayList<>(); int formatVersion = ((BaseTable) table).operations().current().formatVersion(); - BaseTableRef tableRef = null; - if (formatVersion >= MIN_DELETE_FILE_SUPPORT_VERSION) { - TableName fullName = analyzer.getFqTableName(scanDeleteTable.getTableName()); - fullName.analyze(analyzer); - TableRef ref = new TableRef(fullName, fullName.toString(), null); - tableRef = new BaseTableRef(ref, scanDeleteTable, scanDeleteTable.getTableName()); - tableRef.analyze(analyzer); - } for (FileScanTask task : scan.planFiles()) { for (FileScanTask spitTask : task.split(128 * 1024 * 1024)) { String dataFilePath = spitTask.file().path().toString(); @@ -189,7 +168,6 @@ public List getSplits(List exprs) throws UserException { split.setFormatVersion(formatVersion); if (formatVersion >= MIN_DELETE_FILE_SUPPORT_VERSION) { split.setDeleteFileFilters(getDeleteFileFilters(spitTask)); - split.setDeleteTableRef(tableRef); } split.setTableFormatType(TableFormatType.ICEBERG); split.setAnalyzer(analyzer); @@ -199,6 +177,27 @@ public List getSplits(List exprs) throws UserException { return splits; } + public static long getSnapshotIdAsOfTime(List historyEntries, long asOfTimestamp) { + // find history at or before asOfTimestamp + HistoryEntry latestHistory = null; + for (HistoryEntry entry : historyEntries) { + if (entry.timestampMillis() <= asOfTimestamp) { + if (latestHistory == null) { + latestHistory = entry; + continue; + } + if (entry.timestampMillis() > latestHistory.timestampMillis()) { + latestHistory = entry; + } + } + } + if (latestHistory == null) { + throw new NotFoundException("No version history at or before " + + Instant.ofEpochMilli(asOfTimestamp)); + } + return latestHistory.snapshotId(); + } + private List getDeleteFileFilters(FileScanTask spitTask) { List filters = new ArrayList<>(); for (DeleteFile delete : spitTask.deletes()) { @@ -239,32 +238,4 @@ private org.apache.iceberg.Table getIcebergTable() throws MetaNotFoundException public List getPathPartitionKeys() throws DdlException, MetaNotFoundException { return Collections.emptyList(); } - - @Data - static class DeleteFileTempTable extends ExternalTable { - public static final String DATA_FILE_PATH = "file_path"; - private final TableName tableName; - private final List fullSchema = new ArrayList<>(); - - public DeleteFileTempTable(TableType type) { - super(0, V2_DELETE_TBL, null, V2_DELETE_DB, type); - this.tableName = new TableName(null, V2_DELETE_DB, V2_DELETE_TBL); - Column dataFilePathCol = new Column(DATA_FILE_PATH, PrimitiveType.STRING, true); - this.fullSchema.add(dataFilePathCol); - } - - @Override - public List getFullSchema() { - return fullSchema; - } - - @Override - public TTableDescriptor toThrift() { - TIcebergTable tIcebergTable = new TIcebergTable(V2_DELETE_DB, V2_DELETE_TBL, new HashMap<>()); - TTableDescriptor tTableDescriptor = new TTableDescriptor(getId(), TTableType.ICEBERG_TABLE, - fullSchema.size(), 0, getName(), ""); - tTableDescriptor.setIcebergTable(tIcebergTable); - return tTableDescriptor; - } - } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergSplit.java b/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergSplit.java index 14fce6caf85bbc..b9607a7f00c00f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergSplit.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/external/IcebergSplit.java @@ -18,7 +18,6 @@ package org.apache.doris.planner.external; import org.apache.doris.analysis.Analyzer; -import org.apache.doris.analysis.BaseTableRef; import lombok.Data; import org.apache.hadoop.fs.Path; @@ -34,7 +33,6 @@ public IcebergSplit(Path file, long start, long length, String[] hosts) { private Analyzer analyzer; private String dataFilePath; private Integer formatVersion; - private BaseTableRef deleteTableRef; private List deleteFileFilters; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java b/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java index b6321ada97f72c..796513187451ee 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/policy/PolicyMgr.java @@ -23,7 +23,10 @@ import org.apache.doris.analysis.DropPolicyStmt; import org.apache.doris.analysis.ShowPolicyStmt; import org.apache.doris.analysis.UserIdentity; +import org.apache.doris.catalog.Database; import org.apache.doris.catalog.Env; +import org.apache.doris.catalog.OlapTable; +import org.apache.doris.catalog.Table; import org.apache.doris.common.AnalysisException; import org.apache.doris.common.DdlException; import org.apache.doris.common.UserException; @@ -137,6 +140,20 @@ public void createPolicy(CreatePolicyStmt stmt) throws UserException { **/ public void dropPolicy(DropPolicyStmt stmt) throws DdlException, AnalysisException { DropPolicyLog dropPolicyLog = DropPolicyLog.fromDropStmt(stmt); + if (dropPolicyLog.getType() == PolicyTypeEnum.STORAGE) { + List databases = Env.getCurrentEnv().getInternalCatalog().getDbs(); + for (Database db : databases) { + List tables = db.getTables(); + for (Table table : tables) { + if (table instanceof OlapTable) { + if (((OlapTable) table).getStoragePolicy().equals(dropPolicyLog.getPolicyName())) { + throw new DdlException("the policy " + dropPolicyLog.getPolicyName() + " is used by table: " + + table.getName()); + } + } + } + } + } writeLock(); try { if (!existPolicy(dropPolicyLog)) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 68877f71e20387..7faa4922951bb4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -205,7 +205,7 @@ public class SessionVariable implements Serializable, Writable { // percentage of EXEC_MEM_LIMIT public static final String BROADCAST_HASHTABLE_MEM_LIMIT_PERCENTAGE = "broadcast_hashtable_mem_limit_percentage"; - public static final String COMPACT_EQUAL_TO_IN_PREDICATE_THRESHOLD = "compact_equal_to_in_predicate_threshold"; + public static final String REWRITE_OR_TO_IN_PREDICATE_THRESHOLD = "rewrite_or_to_in_predicate_threshold"; public static final String NEREIDS_STAR_SCHEMA_SUPPORT = "nereids_star_schema_support"; @@ -557,8 +557,8 @@ public class SessionVariable implements Serializable, Writable { @VariableMgr.VarAttr(name = NEREIDS_STAR_SCHEMA_SUPPORT) private boolean nereidsStarSchemaSupport = true; - @VariableMgr.VarAttr(name = COMPACT_EQUAL_TO_IN_PREDICATE_THRESHOLD) - private int compactEqualToInPredicateThreshold = 2; + @VariableMgr.VarAttr(name = REWRITE_OR_TO_IN_PREDICATE_THRESHOLD) + private int rewriteOrToInPredicateThreshold = 2; @VariableMgr.VarAttr(name = NEREIDS_CBO_PENALTY_FACTOR) private double nereidsCboPenaltyFactor = 0.7; @@ -708,12 +708,12 @@ public void setBlockEncryptionMode(String blockEncryptionMode) { this.blockEncryptionMode = blockEncryptionMode; } - public void setCompactEqualToInPredicateThreshold(int threshold) { - this.compactEqualToInPredicateThreshold = threshold; + public void setRewriteOrToInPredicateThreshold(int threshold) { + this.rewriteOrToInPredicateThreshold = threshold; } - public int getCompactEqualToInPredicateThreshold() { - return compactEqualToInPredicateThreshold; + public int getRewriteOrToInPredicateThreshold() { + return rewriteOrToInPredicateThreshold; } public long getMaxExecMemByte() { @@ -1340,7 +1340,10 @@ public TQueryOptions toThrift() { tResult.setEnablePipelineEngine(enablePipelineEngine); tResult.setReturnObjectDataAsBinary(returnObjectDataAsBinary); tResult.setTrimTailingSpacesForExternalTableQuery(trimTailingSpacesForExternalTableQuery); - tResult.setEnableShareHashTableForBroadcastJoin(enableShareHashTableForBroadcastJoin); + + // TODO: enable share hashtable for broadcast after switching completely to pipeline engine. + tResult.setEnableShareHashTableForBroadcastJoin( + enablePipelineEngine ? false : enableShareHashTableForBroadcastJoin); tResult.setBatchSize(batchSize); tResult.setDisableStreamPreaggregations(disableStreamPreaggregations); diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 065776ce6a90b2..f3c5e9d2c96515 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -314,6 +314,8 @@ private Map getSummaryInfo() { infos.put(ProfileManager.TOTAL_INSTANCES_NUM, String.valueOf(beToInstancesNum.values().stream().reduce(0, Integer::sum))); infos.put(ProfileManager.INSTANCES_NUM_PER_BE, beToInstancesNum.toString()); + infos.put(ProfileManager.PARALLEL_FRAGMENT_EXEC_INSTANCE, + String.valueOf(context.sessionVariable.parallelExecInstanceNum)); return infos; } diff --git a/fe/fe-core/src/main/java/org/apache/doris/rewrite/CompactEqualsToInPredicateRule.java b/fe/fe-core/src/main/java/org/apache/doris/rewrite/CompactEqualsToInPredicateRule.java deleted file mode 100644 index 2b8ad5ed2c8819..00000000000000 --- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/CompactEqualsToInPredicateRule.java +++ /dev/null @@ -1,166 +0,0 @@ -// 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. - -package org.apache.doris.rewrite; - -import org.apache.doris.analysis.Analyzer; -import org.apache.doris.analysis.BinaryPredicate; -import org.apache.doris.analysis.CompoundPredicate; -import org.apache.doris.analysis.CompoundPredicate.Operator; -import org.apache.doris.analysis.Expr; -import org.apache.doris.analysis.InPredicate; -import org.apache.doris.analysis.LiteralExpr; -import org.apache.doris.analysis.SlotRef; -import org.apache.doris.common.AnalysisException; -import org.apache.doris.common.Pair; -import org.apache.doris.qe.ConnectContext; -import org.apache.doris.rewrite.ExprRewriter.ClauseType; - -import com.google.common.collect.Lists; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -/* -a = 1 or a = 2 or a = 3 or a in (4, 5, 6) => a in (1, 2, 3, 4, 5, 6) - */ -public class CompactEqualsToInPredicateRule implements ExprRewriteRule { - public static CompactEqualsToInPredicateRule INSTANCE = new CompactEqualsToInPredicateRule(); - - @Override - public Expr apply(Expr expr, Analyzer analyzer, ClauseType clauseType) throws AnalysisException { - if (expr == null) { - return expr; - } - if (expr instanceof CompoundPredicate) { - CompoundPredicate comp = (CompoundPredicate) expr; - if (comp.getOp() == Operator.OR) { - Pair compactResult = compactEqualsToInPredicate(expr); - if (compactResult.first) { - return compactResult.second; - } - } - } - return expr; - } - - /* - expr in form of A or B or ... - */ - private Pair compactEqualsToInPredicate(Expr expr) { - int compactThreshold; - if (ConnectContext.get() == null) { - compactThreshold = 2; - } else { - compactThreshold = ConnectContext.get().getSessionVariable().getCompactEqualToInPredicateThreshold(); - } - boolean changed = false; - List disConjuncts = getDisconjuncts(expr); - if (disConjuncts.size() < compactThreshold) { - return Pair.of(false, expr); - } - Map> equalMap = new HashMap<>(); - Map inPredMap = new HashMap<>(); - Expr result = null; - for (Expr disConj : disConjuncts) { - if (disConj instanceof BinaryPredicate - && ((BinaryPredicate) disConj).getOp() == BinaryPredicate.Operator.EQ) { - BinaryPredicate binary = (BinaryPredicate) disConj; - if (binary.getChild(0) instanceof SlotRef - && binary.getChild(1) instanceof LiteralExpr) { - equalMap.computeIfAbsent((SlotRef) binary.getChild(0), k -> new HashSet<>()); - equalMap.get((SlotRef) binary.getChild(0)).add((LiteralExpr) binary.getChild(1)); - } else if (binary.getChild(0) instanceof LiteralExpr - && binary.getChild(1) instanceof SlotRef) { - equalMap.computeIfAbsent((SlotRef) binary.getChild(1), k -> new HashSet<>()); - equalMap.get((SlotRef) binary.getChild(1)).add((LiteralExpr) binary.getChild(0)); - } else { - result = addDisconjunct(result, disConj); - } - } else if (disConj instanceof InPredicate && !((InPredicate) disConj).isNotIn()) { - InPredicate in = (InPredicate) disConj; - Expr compareExpr = in.getChild(0); - if (compareExpr instanceof SlotRef) { - SlotRef slot = (SlotRef) compareExpr; - InPredicate val = inPredMap.get(slot); - if (val == null) { - inPredMap.put(slot, in); - } else { - val.getChildren().addAll(in.getListChildren()); - inPredMap.put(slot, val); - } - } - } else { - result = addDisconjunct(result, disConj); - } - } - - for (Entry> entry : equalMap.entrySet()) { - SlotRef slot = entry.getKey(); - InPredicate in = inPredMap.get(slot); - if (entry.getValue().size() >= compactThreshold || in != null) { - if (in == null) { - in = new InPredicate(entry.getKey(), Lists.newArrayList(entry.getValue()), false); - inPredMap.put(slot, in); - } else { - in.getChildren().addAll(Lists.newArrayList(entry.getValue())); - } - changed = true; - } else { - for (Expr right : entry.getValue()) { - result = addDisconjunct(result, - new BinaryPredicate(BinaryPredicate.Operator.EQ, - entry.getKey(), - right)); - } - } - } - for (InPredicate in : inPredMap.values()) { - result = addDisconjunct(result, in); - } - return Pair.of(changed, result); - } - - private Expr addDisconjunct(Expr result, Expr conj) { - if (result == null) { - return conj; - } else { - return new CompoundPredicate(Operator.OR, result, conj); - } - } - - private List getDisconjuncts(Expr expr) { - List result = new ArrayList<>(); - if (expr instanceof CompoundPredicate) { - CompoundPredicate comp = ((CompoundPredicate) expr); - if (comp.getOp() == Operator.OR) { - result.addAll(getDisconjuncts(comp.getChild(0))); - result.addAll(getDisconjuncts(comp.getChild(1))); - } else { - result.add(expr); - } - } else { - result.add(expr); - } - return result; - } -} diff --git a/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java b/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java index 6ff72d858b0bec..3c808c6100bbd3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java @@ -25,8 +25,10 @@ import org.apache.doris.analysis.InPredicate; import org.apache.doris.analysis.LiteralExpr; import org.apache.doris.analysis.SlotRef; +import org.apache.doris.analysis.TableName; import org.apache.doris.common.AnalysisException; import org.apache.doris.planner.PlanNode; +import org.apache.doris.qe.ConnectContext; import org.apache.doris.rewrite.ExprRewriter.ClauseType; import com.google.common.base.Preconditions; @@ -42,6 +44,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -68,6 +71,7 @@ public class ExtractCommonFactorsRule implements ExprRewriteRule { @Override public Expr apply(Expr expr, Analyzer analyzer, ExprRewriter.ClauseType clauseType) throws AnalysisException { + Expr resultExpr = null; if (expr == null) { return null; } else if (expr instanceof CompoundPredicate @@ -77,12 +81,19 @@ public Expr apply(Expr expr, Analyzer analyzer, ExprRewriter.ClauseType clauseTy return rewrittenExpr; } } else { - for (int i = 0; i < expr.getChildren().size(); i++) { + if (!(expr instanceof CompoundPredicate)) { + return expr; + } + + resultExpr = expr.clone(); + + for (int i = 0; i < resultExpr.getChildren().size(); i++) { Expr rewrittenExpr = apply(expr.getChild(i), analyzer, clauseType); if (rewrittenExpr != null) { - expr.setChild(i, rewrittenExpr); + resultExpr.setChild(i, rewrittenExpr); } } + return resultExpr; } return expr; } @@ -179,10 +190,10 @@ private Expr extractCommonFactors(List> exprs, Analyzer analyzer, Exp if (CollectionUtils.isNotEmpty(commonFactorList)) { result = new CompoundPredicate(CompoundPredicate.Operator.AND, makeCompound(commonFactorList, CompoundPredicate.Operator.AND), - makeCompound(remainingOrClause, CompoundPredicate.Operator.OR)); + makeCompoundRemaining(remainingOrClause, CompoundPredicate.Operator.OR)); result.setPrintSqlInParens(true); } else { - result = makeCompound(remainingOrClause, CompoundPredicate.Operator.OR); + result = makeCompoundRemaining(remainingOrClause, CompoundPredicate.Operator.OR); } if (LOG.isDebugEnabled()) { LOG.debug("equal ors: " + result.toSql()); @@ -399,6 +410,11 @@ private List flatAndExpr(Expr expr) { /** * Rebuild CompoundPredicate, [a, e, f] AND => a and e and f + * Rewrite OR :[a, b, c] + * while (a.columnName == b.columnName == c.columnName) && (a,b,c) + * instance of (BinaryPredicate, InPredicate) + * && (a,b,c).op = BinaryPredicate.Operator.EQ =======>>>>>> + * =======>>>>>> columnName IN (a.value,b.value,c.value) */ private Expr makeCompound(List exprs, CompoundPredicate.Operator op) { if (CollectionUtils.isEmpty(exprs)) { @@ -415,6 +431,114 @@ private Expr makeCompound(List exprs, CompoundPredicate.Operator op) { return result; } + private Expr makeCompoundRemaining(List exprs, CompoundPredicate.Operator op) { + if (CollectionUtils.isEmpty(exprs)) { + return null; + } + if (exprs.size() == 1) { + return exprs.get(0); + } + + Expr rewritePredicate = null; + // only OR will be rewrite to IN + if (op == CompoundPredicate.Operator.OR) { + rewritePredicate = rewriteOrToIn(exprs); + // IF rewrite finished, rewritePredicate will not be null + // IF not rewrite, do compoundPredicate + if (rewritePredicate != null) { + return rewritePredicate; + } + } + + CompoundPredicate result = new CompoundPredicate(op, exprs.get(0), exprs.get(1)); + for (int i = 2; i < exprs.size(); i++) { + result = new CompoundPredicate(op, result.clone(), exprs.get(i)); + } + result.setPrintSqlInParens(true); + return result; + } + + private Expr rewriteOrToIn(List exprs) { + // remainingOR expr = BP IP + InPredicate inPredicate = null; + boolean isOrToInAllowed = true; + Set slotSet = new LinkedHashSet<>(); + + int rewriteThreshold; + if (ConnectContext.get() == null) { + rewriteThreshold = 2; + } else { + rewriteThreshold = ConnectContext.get().getSessionVariable().getRewriteOrToInPredicateThreshold(); + } + + for (int i = 0; i < exprs.size(); i++) { + Expr predicate = exprs.get(i); + if (!(predicate instanceof BinaryPredicate) && !(predicate instanceof InPredicate)) { + isOrToInAllowed = false; + break; + } else if (!(predicate.getChild(0) instanceof SlotRef)) { + isOrToInAllowed = false; + break; + } else if (!(predicate.getChild(1) instanceof LiteralExpr)) { + isOrToInAllowed = false; + break; + } else if (predicate instanceof BinaryPredicate + && ((BinaryPredicate) predicate).getOp() != BinaryPredicate.Operator.EQ) { + isOrToInAllowed = false; + break; + } else { + TableName tableName = ((SlotRef) predicate.getChild(0)).getTableName(); + if (tableName != null) { + String tblName = tableName.toString(); + String columnWithTable = tblName + "." + ((SlotRef) predicate.getChild(0)).getColumnName(); + slotSet.add(columnWithTable); + } else { + slotSet.add(((SlotRef) predicate.getChild(0)).getColumnName()); + } + } + } + + // isOrToInAllowed : true, means can rewrite + // slotSet.size : nums of columnName in exprs, should be 1 + if (isOrToInAllowed && slotSet.size() == 1) { + if (exprs.size() < rewriteThreshold) { + return null; + } + + // get deduplication list + List deduplicationExprs = getDeduplicationList(exprs); + inPredicate = new InPredicate(deduplicationExprs.get(0), + deduplicationExprs.subList(1, deduplicationExprs.size()), false); + } + + return inPredicate; + } + + public List getDeduplicationList(List exprs) { + Set set = new HashSet<>(); + List deduplicationExprList = new ArrayList<>(); + + deduplicationExprList.add(exprs.get(0).getChild(0)); + + for (Expr expr : exprs) { + if (expr instanceof BinaryPredicate) { + if (!set.contains(expr.getChild(1))) { + set.add(expr.getChild(1)); + deduplicationExprList.add(expr.getChild(1)); + } + } else { + List childrenExprs = expr.getChildren(); + for (Expr childrenExpr : childrenExprs.subList(1, childrenExprs.size())) { + if (!set.contains(childrenExpr)) { + set.add(childrenExpr); + deduplicationExprList.add(childrenExpr); + } + } + } + } + return deduplicationExprList; + } + /** * Convert RangeSet to Compound Predicate * @param slotRef: diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java index 16a4a66ffc7605..08822bb27c78c4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java @@ -53,10 +53,12 @@ import org.apache.doris.thrift.TUniqueId; import com.google.common.base.Preconditions; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.text.StringSubstitutor; import org.apache.thrift.TException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.UUID; @@ -99,6 +101,9 @@ public static List deserializeToAnalysisJob(List re public static List deserializeToColumnStatistics(List resultBatches) throws Exception { + if (CollectionUtils.isEmpty(resultBatches)) { + return Collections.emptyList(); + } return resultBatches.stream().map(ColumnStatistic::fromResultRow).collect(Collectors.toList()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java b/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java index d416c7579676e9..eeef983cdd3241 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java +++ b/fe/fe-core/src/main/java/org/apache/doris/task/CreateReplicaTask.java @@ -88,7 +88,7 @@ public class CreateReplicaTask extends AgentTask { private boolean isRecoverTask = false; private DataSortInfo dataSortInfo; - private static String storagePolicy; + private String storagePolicy; private boolean enableUniqueKeyMergeOnWrite; diff --git a/fe/fe-core/src/main/jflex/sql_scanner.flex b/fe/fe-core/src/main/jflex/sql_scanner.flex index 2b0b02ecc60c1a..e481039c35a40a 100644 --- a/fe/fe-core/src/main/jflex/sql_scanner.flex +++ b/fe/fe-core/src/main/jflex/sql_scanner.flex @@ -120,6 +120,7 @@ import org.apache.doris.qe.SqlModeHelper; keywordMap.put("bitmap", new Integer(SqlParserSymbols.KW_BITMAP)); keywordMap.put("inverted", new Integer(SqlParserSymbols.KW_INVERTED)); keywordMap.put("bitmap_union", new Integer(SqlParserSymbols.KW_BITMAP_UNION)); + keywordMap.put("ngram_bf", new Integer(SqlParserSymbols.KW_NGRAM_BF)); keywordMap.put("blob", new Integer(SqlParserSymbols.KW_BLOB)); keywordMap.put("boolean", new Integer(SqlParserSymbols.KW_BOOLEAN)); keywordMap.put("broker", new Integer(SqlParserSymbols.KW_BROKER)); @@ -316,6 +317,7 @@ import org.apache.doris.qe.SqlModeHelper; keywordMap.put("null", new Integer(SqlParserSymbols.KW_NULL)); keywordMap.put("nulls", new Integer(SqlParserSymbols.KW_NULLS)); keywordMap.put("observer", new Integer(SqlParserSymbols.KW_OBSERVER)); + keywordMap.put("of", new Integer(SqlParserSymbols.KW_OF)); keywordMap.put("offset", new Integer(SqlParserSymbols.KW_OFFSET)); keywordMap.put("on", new Integer(SqlParserSymbols.KW_ON)); keywordMap.put("only", new Integer(SqlParserSymbols.KW_ONLY)); @@ -454,6 +456,7 @@ import org.apache.doris.qe.SqlModeHelper; keywordMap.put("varchar", new Integer(SqlParserSymbols.KW_VARCHAR)); keywordMap.put("variables", new Integer(SqlParserSymbols.KW_VARIABLES)); keywordMap.put("verbose", new Integer(SqlParserSymbols.KW_VERBOSE)); + keywordMap.put("version", new Integer(SqlParserSymbols.KW_VERSION)); keywordMap.put("view", new Integer(SqlParserSymbols.KW_VIEW)); keywordMap.put("warnings", new Integer(SqlParserSymbols.KW_WARNINGS)); keywordMap.put("week", new Integer(SqlParserSymbols.KW_WEEK)); diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableAsSelectStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableAsSelectStmtTest.java index 06892a10428092..de0f65f1809abe 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableAsSelectStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/CreateTableAsSelectStmtTest.java @@ -82,12 +82,20 @@ public void testDecimal() throws Exception { String selectFromDecimal = "create table `test`.`select_decimal_table` PROPERTIES(\"replication_num\" = \"1\") " + "as select * from `test`.`decimal_table`"; createTableAsSelect(selectFromDecimal); - Assertions.assertEquals("CREATE TABLE `select_decimal_table` (\n" + " `userId` varchar(65533) NOT NULL,\n" + Assertions.assertEquals("CREATE TABLE `select_decimal_table` (\n" + + " `userId` varchar(65533) NOT NULL,\n" + " `amount_decimal` decimal(10, 2) NOT NULL\n" - + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`userId`)\n" - + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\"," + "\n\"disable_auto_compaction\" = \"false\"\n" + ");", + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showCreateTableByName("select_decimal_table").getResultRows().get(0).get(1)); String selectFromDecimal1 = "create table `test`.`select_decimal_table_1` PROPERTIES(\"replication_num\" = \"1\") " @@ -104,12 +112,19 @@ public void testDecimal() throws Exception { showCreateTableByName("select_decimal_table_1").getResultRows().get(0).get(1)); } else { Assertions.assertEquals( - "CREATE TABLE `select_decimal_table_1` (\n" + " `_col0` decimal(27, 9) NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`_col0`)\n" + "COMMENT 'OLAP'\n" - + "DISTRIBUTED BY HASH(`_col0`) BUCKETS 10\n" + "PROPERTIES (\n" + "CREATE TABLE `select_decimal_table_1` (\n" + + " `_col0` decimal(27, 9) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`_col0`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`_col0`) BUCKETS 10\n" + + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" - + "\"in_memory\" = \"false\",\n" + "\"storage_format\" = \"V2\"," - + "\n\"disable_auto_compaction\" = \"false\"\n" + ");", + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showCreateTableByName("select_decimal_table_1").getResultRows().get(0).get(1)); } } @@ -130,11 +145,20 @@ public void testVarchar() throws Exception { + "as select * from `test`.`varchar_table`"; createTableAsSelect(selectFromVarchar); ShowResultSet showResultSet = showCreateTableByName("select_varchar"); - Assertions.assertEquals("CREATE TABLE `select_varchar` (\n" + " `userId` varchar(65533) NOT NULL,\n" - + " `username` text NOT NULL\n" + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`userId`)\n" - + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + Assertions.assertEquals("CREATE TABLE `select_varchar` (\n" + + " `userId` varchar(65533) NOT NULL,\n" + + " `username` text NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @@ -145,11 +169,19 @@ public void testFunction() throws Exception { createTableAsSelect(selectFromFunction1); ShowResultSet showResultSet1 = showCreateTableByName("select_function_1"); Assertions.assertEquals( - "CREATE TABLE `select_function_1` (\n" + " `_col0` bigint(20) NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`_col0`)\n" + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`_col0`) BUCKETS 10\n" - + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" - + "\"in_memory\" = \"false\",\n" + "\"storage_format\" = \"V2\"" - + ",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + "CREATE TABLE `select_function_1` (\n" + + " `_col0` bigint(20) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`_col0`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`_col0`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet1.getResultRows().get(0).get(1)); String selectFromFunction2 = "create table `test`.`select_function_2` PROPERTIES(\"replication_num\" = \"1\") " @@ -158,13 +190,23 @@ public void testFunction() throws Exception { createTableAsSelect(selectFromFunction2); ShowResultSet showResultSet2 = showCreateTableByName("select_function_2"); Assertions.assertEquals( - "CREATE TABLE `select_function_2` (\n" + " `_col0` bigint(20) NULL,\n" + " `_col1` bigint(20) NULL,\n" - + " `_col2` bigint(20) NULL,\n" + " `_col3` bigint(20) NULL,\n" - + " `_col4` bigint(20) NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`_col0`, `_col1`, `_col2`)\n" + "COMMENT 'OLAP'\n" - + "DISTRIBUTED BY HASH(`_col0`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + "CREATE TABLE `select_function_2` (\n" + + " `_col0` bigint(20) NULL,\n" + + " `_col1` bigint(20) NULL,\n" + + " `_col2` bigint(20) NULL,\n" + + " `_col3` bigint(20) NULL,\n" + + " `_col4` bigint(20) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`_col0`, `_col1`, `_col2`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`_col0`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet2.getResultRows().get(0).get(1)); } @@ -174,20 +216,37 @@ public void testAlias() throws Exception { + "as select count(*) as amount from `test`.`varchar_table`"; createTableAsSelect(selectAlias1); ShowResultSet showResultSet1 = showCreateTableByName("select_alias_1"); - Assertions.assertEquals("CREATE TABLE `select_alias_1` (\n" + " `amount` bigint(20) NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`amount`)\n" + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`amount`) BUCKETS 10\n" - + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" - + "\"in_memory\" = \"false\",\n" + "\"storage_format\" = \"V2\"," - + "\n\"disable_auto_compaction\" = \"false\"\n" + ");", showResultSet1.getResultRows().get(0).get(1)); + Assertions.assertEquals("CREATE TABLE `select_alias_1` (\n" + + " `amount` bigint(20) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`amount`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`amount`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet1.getResultRows().get(0).get(1)); String selectAlias2 = "create table `test`.`select_alias_2` PROPERTIES(\"replication_num\" = \"1\") " + "as select userId as alias_name, username from `test`.`varchar_table`"; createTableAsSelect(selectAlias2); ShowResultSet showResultSet2 = showCreateTableByName("select_alias_2"); - Assertions.assertEquals("CREATE TABLE `select_alias_2` (\n" + " `alias_name` varchar(65533) NOT NULL,\n" - + " `username` text NOT NULL\n" + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`alias_name`)\n" - + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`alias_name`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + Assertions.assertEquals("CREATE TABLE `select_alias_2` (\n" + + " `alias_name` varchar(65533) NOT NULL,\n" + + " `username` text NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`alias_name`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`alias_name`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet2.getResultRows().get(0).get(1)); } @@ -198,26 +257,43 @@ public void testJoin() throws Exception { + "join `test`.`join_table` jt on vt.userId=jt.userId"; createTableAsSelect(selectFromJoin); ShowResultSet showResultSet = showCreateTableByName("select_join"); - Assertions.assertEquals("CREATE TABLE `select_join` (\n" + " `userId` varchar(65533) NOT NULL,\n" + Assertions.assertEquals("CREATE TABLE `select_join` (\n" + + " `userId` varchar(65533) NOT NULL,\n" + " `username` text NOT NULL,\n" - + " `status` int(11) NOT NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`userId`)\n" + "COMMENT 'OLAP'\n" + + " `status` int(11) NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" - + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); String selectFromJoin1 = "create table `test`.`select_join1` PROPERTIES(\"replication_num\" = \"1\") " + "as select vt.userId as userId1, jt.userId as userId2, vt.username, jt.status " + "from `test`.`varchar_table` vt " + "join `test`.`join_table` jt on vt.userId=jt.userId"; createTableAsSelect(selectFromJoin1); ShowResultSet showResultSet1 = showCreateTableByName("select_join1"); - Assertions.assertEquals("CREATE TABLE `select_join1` (\n" + " `userId1` varchar(65533) NOT NULL,\n" - + " `userId2` text NOT NULL,\n" + " `username` text NOT NULL,\n" - + " `status` int(11) NOT NULL\n" + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`userId1`)\n" - + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId1`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + Assertions.assertEquals("CREATE TABLE `select_join1` (\n" + + " `userId1` varchar(65533) NOT NULL,\n" + + " `userId2` text NOT NULL,\n" + + " `username` text NOT NULL,\n" + + " `status` int(11) NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId1`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`userId1`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet1.getResultRows().get(0).get(1)); } @@ -229,13 +305,21 @@ public void testName() throws Exception { + "join `test`.`join_table` jt on vt.userId=jt.userId"; createTableAsSelect(selectFromName); ShowResultSet showResultSet = showCreateTableByName("select_name"); - Assertions.assertEquals("CREATE TABLE `select_name` (\n" + " `user` varchar(65533) NOT NULL,\n" + Assertions.assertEquals("CREATE TABLE `select_name` (\n" + + " `user` varchar(65533) NOT NULL,\n" + " `testname` text NOT NULL,\n" - + " `userstatus` int(11) NOT NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`user`)\n" + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`user`) BUCKETS 10\n" - + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + " `userstatus` int(11) NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`user`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`user`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @@ -246,12 +330,19 @@ public void testUnion() throws Exception { createTableAsSelect(selectFromName); ShowResultSet showResultSet = showCreateTableByName("select_union"); Assertions.assertEquals( - "CREATE TABLE `select_union` (\n" + " `userId` varchar(65533) NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`userId`)\n" + "COMMENT 'OLAP'\n" + "CREATE TABLE `select_union` (\n" + + " `userId` varchar(65533) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" - + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" - + "\"in_memory\" = \"false\",\n" + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\"" - + " = \"false\"\n" + ");", showResultSet.getResultRows().get(0).get(1)); + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @Test @@ -261,21 +352,37 @@ public void testCte() throws Exception { createTableAsSelect(selectFromCte); ShowResultSet showResultSet = showCreateTableByName("select_cte"); Assertions.assertEquals( - "CREATE TABLE `select_cte` (\n" + " `userId` varchar(65533) NOT NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`userId`)\n" + "COMMENT 'OLAP'\n" - + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + "CREATE TABLE `select_cte` (\n" + + " `userId` varchar(65533) NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); String selectFromCteAndUnion = "create table `test`.`select_cte_union` PROPERTIES(\"replication_num\" = \"1\")" + "as with source_data as (select 1 as id union all select 2 as id) select * from source_data;"; createTableAsSelect(selectFromCteAndUnion); ShowResultSet showResultSet1 = showCreateTableByName("select_cte_union"); - Assertions.assertEquals("CREATE TABLE `select_cte_union` (\n" + " `id` tinyint(4) NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`id`)\n" + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`id`) BUCKETS 10\n" - + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" - + "\"in_memory\" = \"false\",\n" + "\"storage_format\" = \"V2\"," - + "\n\"disable_auto_compaction\" = \"false\"\n" + ");", showResultSet1.getResultRows().get(0).get(1)); + Assertions.assertEquals("CREATE TABLE `select_cte_union` (\n" + + " `id` tinyint(4) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`id`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`id`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet1.getResultRows().get(0).get(1)); } @Test @@ -285,13 +392,22 @@ public void testPartition() throws Exception { + "PROPERTIES (\"replication_num\" = \"1\") as " + "select * from `test`.`varchar_table`;"; createTableAsSelect(selectFromPartition); ShowResultSet showResultSet = showCreateTableByName("selectPartition"); - Assertions.assertEquals("CREATE TABLE `selectPartition` (\n" + " `userId` varchar(65533) NOT NULL,\n" - + " `username` text NOT NULL\n" + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`userId`)\n" - + "COMMENT 'OLAP'\n" + "PARTITION BY LIST(`userId`)\n" + Assertions.assertEquals("CREATE TABLE `selectPartition` (\n" + + " `userId` varchar(65533) NOT NULL,\n" + + " `username` text NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + + "PARTITION BY LIST(`userId`)\n" + "(PARTITION p1 VALUES IN (\"CA\",\"GB\",\"US\",\"ZH\"))\n" - + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n\"disable_auto_compaction\" = \"false\"\n" + ");", + + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @@ -301,12 +417,20 @@ public void testDefaultTimestamp() throws Exception { + " as select * from `test`.`default_timestamp_table`"; createTableAsSelect(createSql); ShowResultSet showResultSet = showCreateTableByName("test_default_timestamp"); - Assertions.assertEquals("CREATE TABLE `test_default_timestamp` (\n" + " `userId` varchar(65533) NOT NULL,\n" + Assertions.assertEquals("CREATE TABLE `test_default_timestamp` (\n" + + " `userId` varchar(65533) NOT NULL,\n" + " `date` datetime NULL DEFAULT CURRENT_TIMESTAMP\n" - + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`userId`)\n" - + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n" + "\"disable_auto_compaction\" = \"false\"\n" + ");", + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @@ -317,11 +441,19 @@ public void testAggValue() throws Exception { createTableAsSelect(createSql); ShowResultSet showResultSet = showCreateTableByName("test_agg_value"); Assertions.assertEquals( - "CREATE TABLE `test_agg_value` (\n" + " `username` varchar(65533) NOT NULL\n" + ") ENGINE=OLAP\n" - + "DUPLICATE KEY(`username`)\n" + "COMMENT 'OLAP'\n" - + "DISTRIBUTED BY HASH(`username`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n" + "\"disable_auto_compaction\" = \"false\"\n" + ");", + "CREATE TABLE `test_agg_value` (\n" + + " `username` varchar(65533) NOT NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`username`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`username`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @@ -332,11 +464,20 @@ public void testUseKeyType() throws Exception { createTableAsSelect(createSql); ShowResultSet showResultSet = showCreateTableByName("test_use_key_type"); Assertions.assertEquals( - "CREATE TABLE `test_use_key_type` (\n" + " `userId` varchar(65533) NOT NULL,\n" - + " `username` text NOT NULL\n" + ") ENGINE=OLAP\n" + "UNIQUE KEY(`userId`)\n" - + "COMMENT 'OLAP'\n" + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + "PROPERTIES (\n" - + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n" + "\"disable_auto_compaction\" = \"false\"\n" + ");", + "CREATE TABLE `test_use_key_type` (\n" + + " `userId` varchar(65533) NOT NULL,\n" + + " `username` text NOT NULL\n" + + ") ENGINE=OLAP\n" + + "UNIQUE KEY(`userId`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`userId`) BUCKETS 10\n" + + "PROPERTIES (\n" + + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + + "\"in_memory\" = \"false\",\n" + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", showResultSet.getResultRows().get(0).get(1)); } @@ -371,20 +512,36 @@ public void testQuerySchema() throws Exception { Env.getDdlStmt(tbl, createTableStmts, null, null, false, true, -1L); createStmts.add(createTableStmts.get(0)); if (tbl.getName().equals("qs1")) { - Assert.assertEquals("CREATE TABLE `qs1` (\n" + " `k1` int(11) NULL,\n" + " `k2` int(11) NULL\n" - + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`k1`, `k2`)\n" + "COMMENT 'OLAP'\n" - + "DISTRIBUTED BY HASH(`k1`) BUCKETS 1\n" + "PROPERTIES (\n" + Assert.assertEquals("CREATE TABLE `qs1` (\n" + + " `k1` int(11) NULL,\n" + + " `k2` int(11) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`k1`, `k2`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`k1`) BUCKETS 1\n" + + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n" + "\"disable_auto_compaction\" = \"false\"\n" + ");", + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", createTableStmts.get(0)); } else { - Assert.assertEquals("CREATE TABLE `qs2` (\n" + " `k1` int(11) NULL,\n" + " `k2` int(11) NULL\n" - + ") ENGINE=OLAP\n" + "DUPLICATE KEY(`k1`, `k2`)\n" + "COMMENT 'OLAP'\n" - + "DISTRIBUTED BY HASH(`k1`) BUCKETS 1\n" + "PROPERTIES (\n" + Assert.assertEquals("CREATE TABLE `qs2` (\n" + + " `k1` int(11) NULL,\n" + + " `k2` int(11) NULL\n" + + ") ENGINE=OLAP\n" + + "DUPLICATE KEY(`k1`, `k2`)\n" + + "COMMENT 'OLAP'\n" + + "DISTRIBUTED BY HASH(`k1`) BUCKETS 1\n" + + "PROPERTIES (\n" + "\"replication_allocation\" = \"tag.location.default: 1\",\n" + "\"in_memory\" = \"false\",\n" - + "\"storage_format\" = \"V2\",\n" + "\"disable_auto_compaction\" = \"false\"\n" + ");", + + "\"storage_format\" = \"V2\",\n" + + "\"light_schema_change\" = \"true\",\n" + + "\"disable_auto_compaction\" = \"false\"\n" + + ");", createTableStmts.get(0)); } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java index d7bae60c8f564f..a377ef0d68db9c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ListPartitionPrunerTest.java @@ -109,9 +109,9 @@ private void initTestCases() { addCase("select * from test.t4 where k1 >= 2 and k2 = \"shanghai\";", "partitions=2/3", "partitions=1/3"); // Disjunctive predicates - addCase("select * from test.t2 where k1=1 or k1=4", "partitions=3/3", "partitions=2/3"); - addCase("select * from test.t4 where k1=1 or k1=3", "partitions=3/3", "partitions=2/3"); - addCase("select * from test.t4 where k2=\"tianjin\" or k2=\"shanghai\"", "partitions=3/3", "partitions=2/3"); + addCase("select * from test.t2 where k1=1 or k1=4", "partitions=2/3", "partitions=2/3"); + addCase("select * from test.t4 where k1=1 or k1=3", "partitions=2/3", "partitions=2/3"); + addCase("select * from test.t4 where k2=\"tianjin\" or k2=\"shanghai\"", "partitions=2/3", "partitions=2/3"); addCase("select * from test.t4 where k1 > 1 or k2 < \"shanghai\"", "partitions=3/3", "partitions=3/3"); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java index 7ff8e2fda11188..95c4790bea917e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/PartitionPruneTestBase.java @@ -29,6 +29,8 @@ public abstract class PartitionPruneTestBase extends TestWithFeService { protected void doTest() throws Exception { for (RangePartitionPruneTest.TestCase testCase : cases) { + connectContext.getSessionVariable().partitionPruneAlgorithmVersion = 1; + assertExplainContains(1, testCase.sql, testCase.v1Result); connectContext.getSessionVariable().partitionPruneAlgorithmVersion = 2; assertExplainContains(2, testCase.sql, testCase.v2Result); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java index 8c60f543f42b89..f1bbc3ba91c218 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/RangePartitionPruneTest.java @@ -171,19 +171,19 @@ private void initTestCases() { addCase("select * from test.multi_not_null where k1 > 10 and k1 is null", "partitions=0/2", "partitions=0/2"); // others predicates combination addCase("select * from test.t2 where k1 > 10 and k2 < 4", "partitions=6/9", "partitions=6/9"); - addCase("select * from test.t2 where k1 >10 and k1 < 10 and (k1=11 or k1=12)", "partitions=0/9", "partitions=0/9"); + addCase("select * from test.t2 where k1 >10 and k1 < 10 and (k1=11 or k1=12)", "partitions=1/9", "partitions=0/9"); addCase("select * from test.t2 where k1 > 20 and k1 < 7 and k1 = 10", "partitions=0/9", "partitions=0/9"); // 4. Disjunctive predicates - addCase("select * from test.t2 where k1=10 or k1=23", "partitions=9/9", "partitions=3/9"); - addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=5)", "partitions=9/9", "partitions=1/9"); - addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=11)", "partitions=9/9", "partitions=2/9"); - addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=3 or k2=4 or k2=11)", "partitions=9/9", "partitions=3/9"); - addCase("select * from test.t1 where dt=20211123 or dt=20211124", "partitions=8/8", "partitions=2/8"); + addCase("select * from test.t2 where k1=10 or k1=23", "partitions=3/9", "partitions=3/9"); + addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=5)", "partitions=1/9", "partitions=1/9"); + addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=4 or k2=11)", "partitions=2/9", "partitions=2/9"); + addCase("select * from test.t2 where (k1=10 or k1=23) and (k2=3 or k2=4 or k2=11)", "partitions=3/9", "partitions=3/9"); + addCase("select * from test.t1 where dt=20211123 or dt=20211124", "partitions=2/8", "partitions=2/8"); addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3))", "partitions=8/8", "partitions=2/8"); // TODO: predicates are "PREDICATES: ((`dt` = 20211123 AND `k1` = 1) OR (`dt` = 20211125 AND `k1` = 3)), `k2` > ", // maybe something goes wrong with ExtractCommonFactorsRule. - addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3)) and k2>0", "partitions=8/8", "partitions=8/8"); + addCase("select * from test.t1 where ((dt=20211123 and k1=1) or (dt=20211125 and k1=3)) and k2>0", "partitions=8/8", "partitions=2/8"); addCase("select * from test.t2 where k1 > 10 or k2 < 1", "partitions=9/9", "partitions=9/9"); // add some cases for CompoundPredicate addCase("select * from test.t1 where (dt >= 20211121 and dt <= 20211122) or (dt >= 20211123 and dt <= 20211125)", diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogTestUtil.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogTestUtil.java index b475e9a57b8c7e..61f5f0d967d4bf 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogTestUtil.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/CatalogTestUtil.java @@ -225,7 +225,7 @@ public static Database createSimpleDb(long dbId, long tableId, long partitionId, // table PartitionInfo partitionInfo = new SinglePartitionInfo(); - partitionInfo.setDataProperty(partitionId, DataProperty.DEFAULT_DATA_PROPERTY); + partitionInfo.setDataProperty(partitionId, new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); partitionInfo.setReplicaAllocation(partitionId, new ReplicaAllocation((short) 3)); OlapTable table = new OlapTable(tableId, testTable1, columns, KeysType.AGG_KEYS, partitionInfo, distributionInfo); @@ -284,7 +284,7 @@ public static void createDupTable(Database db) { // table PartitionInfo partitionInfo = new SinglePartitionInfo(); - partitionInfo.setDataProperty(testPartitionId2, DataProperty.DEFAULT_DATA_PROPERTY); + partitionInfo.setDataProperty(testPartitionId2, new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); partitionInfo.setReplicaAllocation(testPartitionId2, new ReplicaAllocation((short) 1)); OlapTable table = new OlapTable(testTableId2, testTable2, columns, KeysType.DUP_KEYS, partitionInfo, distributionInfo); diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/ColumnTypeTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/ColumnTypeTest.java index 9a69d908cde065..8779c2d7ddb4be 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/ColumnTypeTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/ColumnTypeTest.java @@ -125,7 +125,7 @@ public void testDecimal() throws AnalysisException { public void testDatetimeV2() throws AnalysisException { TypeDef type = TypeDef.createDatetimeV2(3); type.analyze(null); - Assert.assertEquals("datetime(3)", type.toString()); + Assert.assertEquals("datetimev2(3)", type.toString()); Assert.assertEquals(PrimitiveType.DATETIMEV2, type.getType().getPrimitiveType()); Assert.assertEquals(ScalarType.DATETIME_PRECISION, ((ScalarType) type.getType()).getScalarPrecision()); Assert.assertEquals(3, ((ScalarType) type.getType()).getScalarScale()); diff --git a/fe/fe-core/src/test/java/org/apache/doris/catalog/DataPropertyTest.java b/fe/fe-core/src/test/java/org/apache/doris/catalog/DataPropertyTest.java index 5114142569255f..b1b006067e845f 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/catalog/DataPropertyTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/catalog/DataPropertyTest.java @@ -28,7 +28,7 @@ public class DataPropertyTest { @Test public void testCooldownTimeMs() throws Exception { Config.default_storage_medium = "ssd"; - DataProperty dataProperty = DataProperty.DEFAULT_DATA_PROPERTY; + DataProperty dataProperty = new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM); Assert.assertNotEquals(DataProperty.MAX_COOLDOWN_TIME_MS, dataProperty.getCooldownTimeMs()); dataProperty = new DataProperty(TStorageMedium.SSD); diff --git a/fe/fe-core/src/test/java/org/apache/doris/common/util/UnitTestUtil.java b/fe/fe-core/src/test/java/org/apache/doris/common/util/UnitTestUtil.java index 66885b2b4b7eb7..4460fcb31f5af8 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/common/util/UnitTestUtil.java +++ b/fe/fe-core/src/test/java/org/apache/doris/common/util/UnitTestUtil.java @@ -109,7 +109,7 @@ public static Database createDb(long dbId, long tableId, long partitionId, long // table PartitionInfo partitionInfo = new SinglePartitionInfo(); - partitionInfo.setDataProperty(partitionId, DataProperty.DEFAULT_DATA_PROPERTY); + partitionInfo.setDataProperty(partitionId, new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); partitionInfo.setReplicaAllocation(partitionId, new ReplicaAllocation((short) 3)); partitionInfo.setIsInMemory(partitionId, false); partitionInfo.setTabletType(partitionId, TTabletType.TABLET_TYPE_DISK); diff --git a/fe/fe-core/src/test/java/org/apache/doris/http/DorisHttpTestCase.java b/fe/fe-core/src/test/java/org/apache/doris/http/DorisHttpTestCase.java index fdc5df25a49f05..e4310243c415b9 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/http/DorisHttpTestCase.java +++ b/fe/fe-core/src/test/java/org/apache/doris/http/DorisHttpTestCase.java @@ -171,7 +171,7 @@ public static OlapTable newTable(String name) { // table PartitionInfo partitionInfo = new SinglePartitionInfo(); - partitionInfo.setDataProperty(testPartitionId, DataProperty.DEFAULT_DATA_PROPERTY); + partitionInfo.setDataProperty(testPartitionId, new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); partitionInfo.setReplicaAllocation(testPartitionId, new ReplicaAllocation((short) 3)); OlapTable table = new OlapTable(testTableId, name, columns, KeysType.AGG_KEYS, partitionInfo, distributionInfo); @@ -189,7 +189,8 @@ private static EsTable newEsTable(String name) { columns.add(k1); columns.add(k2); PartitionInfo partitionInfo = new SinglePartitionInfo(); - partitionInfo.setDataProperty(testPartitionId + 100, DataProperty.DEFAULT_DATA_PROPERTY); + partitionInfo.setDataProperty(testPartitionId + 100, + new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM)); partitionInfo.setReplicaAllocation(testPartitionId + 100, ReplicaAllocation.DEFAULT_ALLOCATION); EsTable table = null; Map props = new HashMap<>(); diff --git a/fe/fe-core/src/test/java/org/apache/doris/metric/MetricsTest.java b/fe/fe-core/src/test/java/org/apache/doris/metric/MetricsTest.java index b4f0e73ec5b6a2..044649502596ea 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/metric/MetricsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/metric/MetricsTest.java @@ -66,6 +66,10 @@ public void testDBMetrics() { for (Map.Entry entry : histograms.entrySet()) { visitor.visitHistogram(sb, MetricVisitor.FE_PREFIX, entry.getKey(), entry.getValue()); } - Assert.assertTrue(sb.toString().contains("# TYPE doris_fe_query_latency_ms summary")); + String metricResult = sb.toString(); + Assert.assertTrue(metricResult.contains("# TYPE doris_fe_query_latency_ms summary")); + Assert.assertTrue(metricResult.contains("doris_fe_query_latency_ms{quantile=\"0.999\"} 0.0")); + Assert.assertTrue(metricResult.contains("doris_fe_query_latency_ms{quantile=\"0.999\",db=\"test_db\"} 10.0")); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java index 92894b39adf01d..b80d9af8d8f703 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/RewriteTopDownJobTest.java @@ -17,7 +17,7 @@ package org.apache.doris.nereids.jobs; -import org.apache.doris.catalog.Table; +import org.apache.doris.catalog.TableIf; import org.apache.doris.nereids.analyzer.UnboundRelation; import org.apache.doris.nereids.memo.Group; import org.apache.doris.nereids.memo.GroupExpression; @@ -44,7 +44,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -104,14 +103,14 @@ public void testSimplestScene() { private static class LogicalBoundRelation extends LogicalRelation { - public LogicalBoundRelation(Table table, List qualifier) { + public LogicalBoundRelation(TableIf table, List qualifier) { super(RelationUtil.newRelationId(), PlanType.LOGICAL_BOUND_RELATION, table, qualifier); } - public LogicalBoundRelation(Table table, List qualifier, Optional groupExpression, + public LogicalBoundRelation(TableIf table, List qualifier, Optional groupExpression, Optional logicalProperties) { super(RelationUtil.newRelationId(), PlanType.LOGICAL_BOUND_RELATION, table, qualifier, - groupExpression, logicalProperties, Collections.emptyList()); + groupExpression, logicalProperties); } @Override diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java index e325504c230ca1..29d41859325c3c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlotsTest.java @@ -32,6 +32,7 @@ import org.apache.doris.nereids.trees.expressions.functions.agg.Count; import org.apache.doris.nereids.trees.expressions.functions.agg.Min; import org.apache.doris.nereids.trees.expressions.functions.agg.Sum; +import org.apache.doris.nereids.trees.expressions.literal.BigIntLiteral; import org.apache.doris.nereids.trees.expressions.literal.Literal; import org.apache.doris.nereids.trees.expressions.literal.SmallIntLiteral; import org.apache.doris.nereids.trees.expressions.literal.TinyIntLiteral; @@ -312,14 +313,16 @@ void testInvalidHaving() { ExceptionChecker.expectThrowsWithMsg( AnalysisException.class, - "Aggregate functions in having clause can't be nested: sum((a1 + avg(a2))).", + "Aggregate functions in having clause can't be nested:" + + " sum(cast((cast(a1 as DOUBLE) + avg(cast(a2 as DOUBLE))) as SMALLINT)).", () -> PlanChecker.from(connectContext).analyze( "SELECT a1 FROM t1 GROUP BY a1 HAVING SUM(a1 + AVG(a2)) > 0" )); ExceptionChecker.expectThrowsWithMsg( AnalysisException.class, - "Aggregate functions in having clause can't be nested: sum(((a1 + a2) + avg(a2))).", + "Aggregate functions in having clause can't be nested:" + + " sum(cast((cast((a1 + a2) as DOUBLE) + avg(cast(a2 as DOUBLE))) as INT)).", () -> PlanChecker.from(connectContext).analyze( "SELECT a1 FROM t1 GROUP BY a1 HAVING SUM(a1 + a2 + AVG(a2)) > 0" )); @@ -530,8 +533,8 @@ void testComplexQueryWithOrderBy() { ImmutableList.of( new OrderKey(pk, true, true), new OrderKey(countA11.toSlot(), true, true), - new OrderKey(new Add(sumA1A2.toSlot(), new TinyIntLiteral((byte) 1)), true, true), - new OrderKey(new Add(v1.toSlot(), new TinyIntLiteral((byte) 1)), true, true), + new OrderKey(new Add(sumA1A2.toSlot(), new BigIntLiteral((byte) 1)), true, true), + new OrderKey(new Add(v1.toSlot(), new BigIntLiteral((byte) 1)), true, true), new OrderKey(v1.toSlot(), true, true) ) )) diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewriteTestHelper.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewriteTestHelper.java index f4aabee6f4d7a4..75824b24414961 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewriteTestHelper.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/rewrite/ExpressionRewriteTestHelper.java @@ -66,7 +66,6 @@ protected void assertRewriteAfterTypeCoercion(String expression, String expected Expression needRewriteExpression = PARSER.parseExpression(expression); needRewriteExpression = typeCoercion(replaceUnboundSlot(needRewriteExpression, mem)); Expression expectedExpression = PARSER.parseExpression(expected); - expectedExpression = typeCoercion(replaceUnboundSlot(expectedExpression, mem)); Expression rewrittenExpression = executor.rewrite(needRewriteExpression); Assertions.assertEquals(expectedExpression.toSql(), rewrittenExpression.toSql()); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java index 422041e93cb89d..cb1eb6dd65546e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/mv/SelectMvIndexTest.java @@ -223,9 +223,8 @@ public void testAggQuqeryOnAggMV6() throws Exception { /** * Aggregation query with groupSets at coarser level of aggregation than * aggregation materialized view. - * TODO: enable this when group by rollup is supported. */ - @Disabled + @Test public void testGroupingSetQueryOnAggMV() throws Exception { String createMVSql = "create materialized view " + EMPS_MV_NAME + " as select empid, deptno, sum(salary) " + "from " + EMPS_TABLE_NAME + " group by empid, deptno;"; @@ -271,9 +270,8 @@ public void testAggQueryOnAggMV9() throws Exception { /** * Query with rollup and arithmetic expr - * TODO: enable this when group by rollup is supported. */ - @Disabled + @Test public void testAggQueryOnAggMV10() throws Exception { String createMVSql = "create materialized view " + EMPS_MV_NAME + " as select deptno, commission, sum(salary) " + "from " + EMPS_TABLE_NAME + " group by deptno, commission;"; diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/GroupingSetsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/GroupingSetsTest.java index cec372311eb773..a30364b1162fd6 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/GroupingSetsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/GroupingSetsTest.java @@ -183,4 +183,53 @@ public void test() { PlanChecker.from(connectContext) .checkPlannerResult("select if(k1 = 1, 2, k1) k_if from t1"); } + + @Test + public void test1() { + PlanChecker.from(connectContext) + .checkPlannerResult("select coalesce(col1, 'all') as col1, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),());"); + } + + @Test + public void test1_1() { + PlanChecker.from(connectContext) + .checkPlannerResult("select coalesce(col1, 'all') as col2, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),());"); + } + + @Test + public void test1_2() { + PlanChecker.from(connectContext) + .checkPlannerResult("select coalesce(col1, 'all') as col2, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col2),());"); + } + + @Test + public void test2() { + PlanChecker.from(connectContext) + .checkPlannerResult("select if(1 = null, 'all', 2) as col1, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),());"); + } + + @Test + public void test2_1() { + PlanChecker.from(connectContext) + .checkPlannerResult("select if(col1 = null, 'all', 2) as col1, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),());"); + } + + @Test + public void test2_2() { + PlanChecker.from(connectContext) + .checkPlannerResult("select if(col1 = null, 'all', 2) as col2, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),());"); + } + + @Test + public void test2_3() { + PlanChecker.from(connectContext) + .checkPlannerResult("select if(col1 = null, 'all', 2) as col2, count(*) as cnt from" + + " (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col2),());"); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java index cd40e287671d96..bbd75d48c282a4 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/TypeCoercionUtilsTest.java @@ -145,7 +145,7 @@ public void testFindTightestCommonType() { testFindTightestCommonType(BigIntType.INSTANCE, IntegerType.INSTANCE, BigIntType.INSTANCE); testFindTightestCommonType(StringType.INSTANCE, StringType.INSTANCE, IntegerType.INSTANCE); testFindTightestCommonType(StringType.INSTANCE, IntegerType.INSTANCE, StringType.INSTANCE); - testFindTightestCommonType(null, DecimalV2Type.SYSTEM_DEFAULT, DecimalV2Type.createDecimalV2Type(2, 1)); + testFindTightestCommonType(DoubleType.INSTANCE, DecimalV2Type.SYSTEM_DEFAULT, DecimalV2Type.createDecimalV2Type(2, 1)); testFindTightestCommonType(VarcharType.createVarcharType(10), CharType.createCharType(8), CharType.createCharType(10)); testFindTightestCommonType(VarcharType.createVarcharType(10), VarcharType.createVarcharType(8), VarcharType.createVarcharType(10)); testFindTightestCommonType(VarcharType.createVarcharType(10), VarcharType.createVarcharType(8), CharType.createCharType(10)); diff --git a/fe/fe-core/src/test/java/org/apache/doris/persist/BatchModifyPartitionsInfoTest.java b/fe/fe-core/src/test/java/org/apache/doris/persist/BatchModifyPartitionsInfoTest.java index 159ef9f2e0e956..82b0766c76f075 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/persist/BatchModifyPartitionsInfoTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/persist/BatchModifyPartitionsInfoTest.java @@ -60,8 +60,9 @@ public void testSerializeBatchModifyPartitionsInfo() throws IOException, Analysi List partitionIds = Lists.newArrayList(PARTITION_ID_1, PARTITION_ID_2, PARTITION_ID_3); for (long partitionId : partitionIds) { - modifyInfos.add(new ModifyPartitionInfo(DB_ID, TB_ID, partitionId, DataProperty.DEFAULT_DATA_PROPERTY, - ReplicaAllocation.DEFAULT_ALLOCATION, true, "", Maps.newHashMap())); + modifyInfos.add(new ModifyPartitionInfo(DB_ID, TB_ID, partitionId, + new DataProperty(DataProperty.DEFAULT_STORAGE_MEDIUM), ReplicaAllocation.DEFAULT_ALLOCATION, + true, "", Maps.newHashMap())); } BatchModifyPartitionsInfo batchModifyPartitionsInfo = new BatchModifyPartitionsInfo(modifyInfos); diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java index 56b68df2359a3b..034f673ddce322 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -2219,4 +2219,41 @@ public void testPreaggregationOfHllUnion() throws Exception { String explainString = getSQLPlanOrErrorMsg(queryBaseTableStr); Assert.assertTrue(explainString.contains("PREAGGREGATION: ON")); } + + @Test + public void testRewriteOrToIn() throws Exception { + connectContext.setDatabase("default_cluster:test"); + String sql = "SELECT * from test1 where query_time = 1 or query_time = 2 or query_time in (3, 4)"; + String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2, 3, 4)")); + + sql = "SELECT * from test1 where (query_time = 1 or query_time = 2) and query_time in (3, 4)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2), `query_time` IN (3, 4)")); + + sql = "SELECT * from test1 where (query_time = 1 or query_time = 2 or scan_bytes = 2) and scan_bytes in (2, 3)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: (`query_time` = 1 OR `query_time` = 2 OR `scan_bytes` = 2), `scan_bytes` IN (2, 3)")); + + sql = "SELECT * from test1 where (query_time = 1 or query_time = 2) and (scan_bytes = 2 or scan_bytes = 3)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2), `scan_bytes` IN (2, 3)")); + + sql = "SELECT * from test1 where query_time = 1 or query_time = 2 or query_time = 3 or query_time = 1"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2, 3)")); + + sql = "SELECT * from test1 where query_time = 1 or query_time = 2 or query_time in (3, 2)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: `query_time` IN (1, 2, 3)")); + + connectContext.getSessionVariable().setRewriteOrToInPredicateThreshold(100); + sql = "SELECT * from test1 where query_time = 1 or query_time = 2 or query_time in (3, 4)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: (`query_time` = 1 OR `query_time` = 2 OR `query_time` IN (3, 4))")); + + sql = "SELECT * from test1 where (query_time = 1 or query_time = 2) and query_time in (3, 4)"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, "EXPLAIN " + sql); + Assert.assertTrue(explainString.contains("PREDICATES: (`query_time` = 1 OR `query_time` = 2), `query_time` IN (3, 4)")); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/rewrite/CompactEqualsToInPredicateRuleTest.java b/fe/fe-core/src/test/java/org/apache/doris/rewrite/CompactEqualsToInPredicateRuleTest.java deleted file mode 100644 index baa694ea422d24..00000000000000 --- a/fe/fe-core/src/test/java/org/apache/doris/rewrite/CompactEqualsToInPredicateRuleTest.java +++ /dev/null @@ -1,116 +0,0 @@ -// 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. - -package org.apache.doris.rewrite; - -import org.apache.doris.analysis.BinaryPredicate; -import org.apache.doris.analysis.CompoundPredicate; -import org.apache.doris.analysis.CompoundPredicate.Operator; -import org.apache.doris.analysis.InPredicate; -import org.apache.doris.analysis.IntLiteral; -import org.apache.doris.analysis.SlotRef; -import org.apache.doris.analysis.TableName; -import org.apache.doris.common.Pair; -import org.apache.doris.common.jmockit.Deencapsulation; -import org.apache.doris.datasource.InternalCatalog; - -import com.google.common.collect.Lists; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.util.HashSet; - -public class CompactEqualsToInPredicateRuleTest { - private static final String internalCtl = InternalCatalog.INTERNAL_CATALOG_NAME; - - //a=1 or b=2 or a=3 or b=4 - //=> a in (1, 2) or b in (3, 4) - @Test - public void testCompactEquals() { - SlotRef a = new SlotRef(new TableName(internalCtl, "db1", "tb1"), "a"); - SlotRef b = new SlotRef(new TableName(internalCtl, "db1", "tb1"), "b"); - IntLiteral i1 = new IntLiteral(1); - IntLiteral i2 = new IntLiteral(2); - IntLiteral i3 = new IntLiteral(3); - IntLiteral i4 = new IntLiteral(4); - BinaryPredicate aeq1 = new BinaryPredicate(BinaryPredicate.Operator.EQ, i1, a); - BinaryPredicate aeq3 = new BinaryPredicate(BinaryPredicate.Operator.EQ, a, i3); - BinaryPredicate beq2 = new BinaryPredicate(BinaryPredicate.Operator.EQ, b, i2); - BinaryPredicate beq4 = new BinaryPredicate(BinaryPredicate.Operator.EQ, b, i4); - CompoundPredicate or1 = new CompoundPredicate(Operator.OR, aeq1, beq2); - CompoundPredicate or2 = new CompoundPredicate(Operator.OR, or1, aeq3); - CompoundPredicate or3 = new CompoundPredicate(Operator.OR, or2, beq4); - CompactEqualsToInPredicateRule rule = new CompactEqualsToInPredicateRule(); - Pair result = Deencapsulation.invoke(rule, - "compactEqualsToInPredicate", or3); - Assertions.assertEquals(true, result.first); - Assertions.assertTrue(result.second instanceof CompoundPredicate); - CompoundPredicate or = (CompoundPredicate) result.second; - Assertions.assertEquals(Operator.OR, or.getOp()); - InPredicate in1 = (InPredicate) or.getChild(0); - InPredicate in2 = (InPredicate) or.getChild(1); - SlotRef s1 = (SlotRef) in1.getChildren().get(0); - InPredicate tmp; - if (s1.getColumnName().equals("b")) { - tmp = in1; - in1 = in2; - in2 = tmp; - } - Assertions.assertEquals(in1.getChild(0), a); - Assertions.assertEquals(in2.getChild(0), b); - - HashSet seta = new HashSet<>(); - seta.add(i1); - seta.add(i3); - HashSet setb = new HashSet<>(); - setb.add(i2); - setb.add(i4); - - Assertions.assertTrue(seta.contains(in1.getChild(1))); - Assertions.assertTrue(seta.contains(in1.getChild(2))); - - Assertions.assertTrue(setb.contains(in2.getChild(1))); - Assertions.assertTrue(setb.contains(in2.getChild(2))); - } - - //a=1 or a in (3, 2) => a in (1, 2, 3) - @Test - public void testCompactEqualsAndIn() { - SlotRef a = new SlotRef(new TableName(internalCtl, "db1", "tb1"), "a"); - IntLiteral i1 = new IntLiteral(1); - IntLiteral i2 = new IntLiteral(2); - IntLiteral i3 = new IntLiteral(3); - BinaryPredicate aeq1 = new BinaryPredicate(BinaryPredicate.Operator.EQ, i1, a); - InPredicate ain23 = new InPredicate(a, Lists.newArrayList(i2, i3), false); - CompoundPredicate or1 = new CompoundPredicate(Operator.OR, aeq1, ain23); - CompactEqualsToInPredicateRule rule = new CompactEqualsToInPredicateRule(); - Pair result = Deencapsulation.invoke(rule, - "compactEqualsToInPredicate", or1); - Assertions.assertEquals(true, result.first); - Assertions.assertTrue(result.second instanceof InPredicate); - InPredicate in123 = (InPredicate) result.second; - Assertions.assertEquals(in123.getChild(0), a); - HashSet seta = new HashSet<>(); - seta.add(i1); - seta.add(i2); - seta.add(i3); - - Assertions.assertTrue(seta.contains(in123.getChild(1))); - Assertions.assertTrue(seta.contains(in123.getChild(2))); - Assertions.assertTrue(seta.contains(in123.getChild(3))); - } -} diff --git a/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java b/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java index bb6807abeef679..588df5c6a64179 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/rewrite/ExtractCommonFactorsRuleFunctionTest.java @@ -83,7 +83,6 @@ public void testCommonFactors() throws Exception { Assert.assertEquals(1, StringUtils.countMatches(planString, "`tb1`.`k1` = `tb2`.`k1`")); } - @Test public void testWideCommonFactorsWithOrPredicate() throws Exception { String query = "select * from tb1 where tb1.k1 > 1000 or tb1.k1 < 200 or tb1.k1 = 300"; diff --git a/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java b/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java index 9539f65abaa07a..d48a679a6c9317 100644 --- a/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java +++ b/fe/java-udf/src/main/java/org/apache/doris/udf/JdbcExecutor.java @@ -42,6 +42,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; public class JdbcExecutor { @@ -54,6 +55,7 @@ public class JdbcExecutor { // Use HikariDataSource to help us manage the JDBC connections. private HikariDataSource dataSource = null; private List resultColumnTypeNames = null; + private int baseTypeInt = 0; public JdbcExecutor(byte[] thriftParams) throws Exception { TJdbcExecutorCtorParams request = new TJdbcExecutorCtorParams(); @@ -124,6 +126,20 @@ public List getResultColumnTypeNames() throws UdfRuntimeException { } } + public List getArrayColumnData(Object object) throws UdfRuntimeException { + try { + java.sql.Array obj = (java.sql.Array) object; + baseTypeInt = obj.getBaseType(); + return Arrays.asList((Object[]) obj.getArray()); + } catch (SQLException e) { + throw new UdfRuntimeException("JDBC executor getArrayColumnData has error: ", e); + } + } + + public int getBaseTypeInt() { + return baseTypeInt; + } + public void openTrans() throws UdfRuntimeException { try { if (conn != null) { diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto index 3e20ff8345930f..ab0791006fb3bb 100644 --- a/gensrc/proto/olap_file.proto +++ b/gensrc/proto/olap_file.proto @@ -190,6 +190,7 @@ enum IndexType { BITMAP = 0; INVERTED = 1; BLOOMFILTER = 2; + NGRAM_BF = 3; } message TabletIndexPB { diff --git a/gensrc/proto/segment_v2.proto b/gensrc/proto/segment_v2.proto index 7a692860466cc3..629f1a4fc8e08b 100644 --- a/gensrc/proto/segment_v2.proto +++ b/gensrc/proto/segment_v2.proto @@ -265,11 +265,13 @@ message BitmapIndexPB { enum HashStrategyPB { HASH_MURMUR3_X64_64 = 0; + CITY_HASH_64 = 1; } enum BloomFilterAlgorithmPB { BLOCK_BLOOM_FILTER = 0; CLASSIC_BLOOM_FILTER = 1; + NGRAM_BLOOM_FILTER = 2; } message BloomFilterIndexPB { diff --git a/gensrc/script/doris_builtins_functions.py b/gensrc/script/doris_builtins_functions.py index 30af7b6f858c0d..329e306685aba5 100755 --- a/gensrc/script/doris_builtins_functions.py +++ b/gensrc/script/doris_builtins_functions.py @@ -2424,8 +2424,8 @@ [['running_difference'], 'DECIMAL128', ['DECIMAL128'], '', '', '', 'vec', ''], [['running_difference'], 'INT', ['DATE'], '', '', '', 'vec', ''], [['running_difference'], 'INT', ['DATEV2'], '', '', '', 'vec', ''], - [['running_difference'], 'DOUBLE', ['DATETIME'], '', '', '', 'vec', ''], - [['running_difference'], 'DOUBLE', ['DATETIMEV2'], '', '', '', 'vec', ''], + [['running_difference'], 'TIME', ['DATETIME'], '', '', '', 'vec', ''], + [['running_difference'], 'TIMEV2', ['DATETIMEV2'], '', '', '', 'vec', ''], # Longtext function [['substr', 'substring'], 'STRING', ['STRING', 'INT'], diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift index d133b3a27d563e..1db9bd0537e196 100644 --- a/gensrc/thrift/Descriptors.thrift +++ b/gensrc/thrift/Descriptors.thrift @@ -34,6 +34,9 @@ struct TColumn { 10: optional list children_column 11: optional i32 col_unique_id = -1 12: optional bool has_bitmap_index = false + 13: optional bool has_ngram_bf_index = false + 14: optional i32 gram_size + 15: optional i32 gram_bf_size } struct TSlotDescriptor { @@ -120,7 +123,8 @@ enum THdfsCompression { enum TIndexType { BITMAP, INVERTED, - BLOOMFILTER + BLOOMFILTER, + NGRAM_BF } // Mapping from names defined by Avro to the enum. diff --git a/gensrc/thrift/PlanNodes.thrift b/gensrc/thrift/PlanNodes.thrift index a7a21a049954f7..ff97361c6e2dae 100644 --- a/gensrc/thrift/PlanNodes.thrift +++ b/gensrc/thrift/PlanNodes.thrift @@ -274,7 +274,9 @@ struct TIcebergFileDesc { 2: optional i32 content; // When open a delete file, filter the data file path with the 'file_path' property 3: optional list delete_files; + // Deprecated 4: optional Types.TTupleId delete_table_tuple_id; + // Deprecated 5: optional Exprs.TExpr file_select_conjunct; } @@ -406,6 +408,7 @@ struct TJdbcScanNode { 1: optional Types.TTupleId tuple_id 2: optional string table_name 3: optional string query_string + 4: optional Types.TOdbcTableType table_type } diff --git a/regression-test/data/correctness_p0/table_valued_function/test_numbers.out b/regression-test/data/correctness_p0/table_valued_function/test_numbers.out index 9194eba1e6310e..ef65f7eea523ec 100644 --- a/regression-test/data/correctness_p0/table_valued_function/test_numbers.out +++ b/regression-test/data/correctness_p0/table_valued_function/test_numbers.out @@ -806,3 +806,13 @@ true 28 ( 29 ) +-- !subquery_1 -- +0 +1 +2 + +-- !subquery_2 -- +0 0 1 +1 0 1 +2 0 1 + diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q07.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q07.out index 7803ee0bbe7cb7..91086878d8645d 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q07.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q07.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q07 -- -AAAAAAAAAAACAAAA 17.0 13.15 7.70 1.97 -AAAAAAAAAAAEAAAA 99.0 123.44 0.00 44.43 -AAAAAAAAAABBAAAA 11.0 77.31 0.00 38.65 -AAAAAAAAAABEAAAA 35.5 18.90 0.00 4.85 -AAAAAAAAAACAAAAA 61.0 38.63 90.24 16.38 -AAAAAAAAAACCAAAA 10.5 83.46 0.00 30.02 -AAAAAAAAAADBAAAA 44.0 108.36 0.00 13.00 -AAAAAAAAAADCAAAA 54.0 59.29 0.00 34.98 -AAAAAAAAAADEAAAA 93.0 43.57 0.00 38.34 -AAAAAAAAAAEAAAAA 72.0 16.46 0.00 13.33 -AAAAAAAAAAEBAAAA 88.0 29.02 0.00 0.87 -AAAAAAAAAAEDAAAA 91.0 84.37 0.00 9.09 -AAAAAAAAAAFDAAAA 37.0 33.13 0.00 20.20 -AAAAAAAAAAGEAAAA 35.0 56.48 881.45 23.63 -AAAAAAAAAAHDAAAA 33.0 59.05 0.00 48.53 -AAAAAAAAAAICAAAA 68.5 108.73 166.78 69.22 -AAAAAAAAAAIDAAAA 76.0 97.19 0.00 43.73 -AAAAAAAAAAJCAAAA 30.0 47.55 0.00 30.43 -AAAAAAAAAAKBAAAA 59.0 55.08 0.00 17.07 -AAAAAAAAAAMBAAAA 74.0 10.39 0.00 8.62 -AAAAAAAAAAMCAAAA 86.0 24.10 0.41 0.48 -AAAAAAAAAANAAAAA 43.0 80.16 0.00 41.68 -AAAAAAAAAANBAAAA 28.0 112.27 0.00 57.25 -AAAAAAAAAAOAAAAA 46.0 12.63 0.00 4.67 -AAAAAAAAAAPBAAAA 66.0 39.59 969.80 18.60 -AAAAAAAAAAPCAAAA 90.0 68.28 0.00 47.79 -AAAAAAAAABAAAAAA 10.5 71.48 0.00 28.92 -AAAAAAAAABABAAAA 12.5 100.53 2.23 34.80 -AAAAAAAAABADAAAA 100.0 68.67 0.00 50.81 -AAAAAAAAABAEAAAA 49.0 15.79 0.00 11.84 -AAAAAAAAABBCAAAA 52.0 115.10 0.00 24.17 -AAAAAAAAABDEAAAA 92.0 168.96 0.00 23.65 -AAAAAAAAABEAAAAA 33.333333333333336 58.64 99.47 22.16 -AAAAAAAAABECAAAA 43.0 167.74 0.00 88.90 -AAAAAAAAABEDAAAA 74.0 129.10 0.00 108.44 -AAAAAAAAABFBAAAA 36.0 115.18 0.00 109.42 -AAAAAAAAABFCAAAA 51.0 121.98 0.00 17.07 -AAAAAAAAABFEAAAA 65.0 117.88 0.00 107.27 -AAAAAAAAABGBAAAA 52.0 71.54 0.00 30.28 -AAAAAAAAABGDAAAA 67.5 58.86 0.00 35.25 -AAAAAAAAABHAAAAA 71.0 39.38 804.37 8.38 -AAAAAAAAABHCAAAA 48.0 12.67 52.16 4.18 -AAAAAAAAABHDAAAA 55.0 17.78 0.00 5.51 -AAAAAAAAABJAAAAA 32.0 20.11 0.00 15.68 -AAAAAAAAABJBAAAA 21.0 72.33 0.00 11.37 -AAAAAAAAABJDAAAA 43.0 74.92 0.00 8.24 -AAAAAAAAABKAAAAA 67.0 103.07 0.00 34.01 -AAAAAAAAABKCAAAA 43.0 73.93 0.00 48.05 -AAAAAAAAABKDAAAA 84.0 102.95 0.00 42.20 -AAAAAAAAABMAAAAA 58.0 136.34 0.00 35.44 -AAAAAAAAABMDAAAA 80.0 3.06 0.00 1.89 -AAAAAAAAABNAAAAA 96.0 81.95 0.00 64.74 -AAAAAAAAABNCAAAA 42.0 88.83 0.00 20.65 -AAAAAAAAABOBAAAA 18.0 81.49 0.00 58.67 -AAAAAAAAABOCAAAA 31.0 73.87 0.00 59.94 -AAAAAAAAABPBAAAA 48.5 37.83 183.78 11.72 -AAAAAAAAACACAAAA 60.0 104.37 351.56 25.31 -AAAAAAAAACADAAAA 29.0 43.74 0.00 13.99 -AAAAAAAAACBBAAAA 44.5 87.51 0.00 36.14 -AAAAAAAAACBEAAAA 76.0 156.05 0.00 113.91 -AAAAAAAAACCDAAAA 26.0 35.57 0.00 13.01 -AAAAAAAAACCEAAAA 4.0 10.98 0.00 4.94 -AAAAAAAAACDAAAAA 16.0 87.87 36.26 75.56 -AAAAAAAAACDCAAAA 27.0 89.86 0.00 40.43 -AAAAAAAAACEBAAAA 42.0 94.58 0.00 51.26 -AAAAAAAAACFBAAAA 45.0 88.30 0.00 24.26 -AAAAAAAAACGAAAAA 47.0 10.46 0.00 5.64 -AAAAAAAAACGDAAAA 24.0 51.54 0.00 18.83 -AAAAAAAAACHBAAAA 44.0 103.27 0.00 65.06 -AAAAAAAAACHCAAAA 68.5 91.68 0.00 66.16 -AAAAAAAAACIAAAAA 7.0 25.42 0.00 8.64 -AAAAAAAAACIBAAAA 21.0 89.29 915.01 71.43 -AAAAAAAAACIDAAAA 43.0 56.28 56.11 4.50 -AAAAAAAAACLAAAAA 36.0 125.57 0.00 13.81 -AAAAAAAAACLDAAAA 61.333333333333336 114.20 0.00 59.12 -AAAAAAAAACMDAAAA 56.0 79.02 0.00 64.00 -AAAAAAAAACNCAAAA 63.0 54.20 0.00 29.26 -AAAAAAAAACOAAAAA 50.0 27.43 229.21 13.43 -AAAAAAAAACPAAAAA 32.0 147.62 2480.32 87.09 -AAAAAAAAACPCAAAA 80.0 12.60 0.00 0.37 -AAAAAAAAACPDAAAA 87.0 105.93 0.00 9.53 -AAAAAAAAADABAAAA 68.5 35.79 0.00 27.84 -AAAAAAAAADACAAAA 96.0 101.54 0.00 99.50 -AAAAAAAAADAEAAAA 53.0 74.64 0.00 7.63 -AAAAAAAAADBBAAAA 6.0 85.58 234.14 81.30 -AAAAAAAAADBDAAAA 47.0 39.33 62.71 12.09 -AAAAAAAAADBEAAAA 52.0 2.41 0.00 1.06 -AAAAAAAAADCAAAAA 91.0 92.17 0.00 67.28 -AAAAAAAAADCCAAAA 33.0 40.80 0.00 28.56 -AAAAAAAAADDBAAAA 45.0 18.63 0.00 17.69 -AAAAAAAAADDCAAAA 66.0 162.17 1525.90 37.29 -AAAAAAAAADDEAAAA 35.0 78.25 0.00 36.63 -AAAAAAAAADEBAAAA 59.5 110.38 157.96 16.16 -AAAAAAAAADEEAAAA 17.0 54.54 0.00 16.36 -AAAAAAAAADFAAAAA 44.0 133.51 0.00 25.36 -AAAAAAAAADGBAAAA 31.0 107.55 919.82 56.53 -AAAAAAAAADGCAAAA 78.0 119.61 0.00 74.15 -AAAAAAAAADGEAAAA 45.5 99.30 0.00 1.06 -AAAAAAAAADHAAAAA 86.0 81.09 0.00 37.30 -AAAAAAAAADHBAAAA 28.0 68.58 223.79 53.61 +AAAAAAAAAAACAAAA 17.0 13.1500 7.7000 1.9700 +AAAAAAAAAAAEAAAA 99.0 123.4400 0.0000 44.4300 +AAAAAAAAAABBAAAA 11.0 77.3100 0.0000 38.6500 +AAAAAAAAAABEAAAA 35.5 18.9000 0.0000 4.8500 +AAAAAAAAAACAAAAA 61.0 38.6300 90.2450 16.3850 +AAAAAAAAAACCAAAA 10.5 83.4650 0.0000 30.0200 +AAAAAAAAAADBAAAA 44.0 108.3600 0.0000 13.0000 +AAAAAAAAAADCAAAA 54.0 59.2900 0.0000 34.9800 +AAAAAAAAAADEAAAA 93.0 43.5700 0.0000 38.3400 +AAAAAAAAAAEAAAAA 72.0 16.4600 0.0000 13.3300 +AAAAAAAAAAEBAAAA 88.0 29.0200 0.0000 0.8700 +AAAAAAAAAAEDAAAA 91.0 84.3750 0.0000 9.0900 +AAAAAAAAAAFDAAAA 37.0 33.1300 0.0000 20.2000 +AAAAAAAAAAGEAAAA 35.0 56.4800 881.4500 23.6300 +AAAAAAAAAAHDAAAA 33.0 59.0500 0.0000 48.5300 +AAAAAAAAAAICAAAA 68.5 108.7300 166.7800 69.2200 +AAAAAAAAAAIDAAAA 76.0 97.1900 0.0000 43.7300 +AAAAAAAAAAJCAAAA 30.0 47.5500 0.0000 30.4300 +AAAAAAAAAAKBAAAA 59.0 55.0800 0.0000 17.0700 +AAAAAAAAAAMBAAAA 74.0 10.3900 0.0000 8.6200 +AAAAAAAAAAMCAAAA 86.0 24.1000 0.4100 0.4800 +AAAAAAAAAANAAAAA 43.0 80.1600 0.0000 41.6800 +AAAAAAAAAANBAAAA 28.0 112.2700 0.0000 57.2500 +AAAAAAAAAAOAAAAA 46.0 12.6300 0.0000 4.6700 +AAAAAAAAAAPBAAAA 66.0 39.5900 969.8000 18.6000 +AAAAAAAAAAPCAAAA 90.0 68.2800 0.0000 47.7900 +AAAAAAAAABAAAAAA 10.5 71.4800 0.0000 28.9200 +AAAAAAAAABABAAAA 12.5 100.5300 2.2300 34.8075 +AAAAAAAAABADAAAA 100.0 68.6700 0.0000 50.8100 +AAAAAAAAABAEAAAA 49.0 15.7900 0.0000 11.8400 +AAAAAAAAABBCAAAA 52.0 115.1000 0.0000 24.1700 +AAAAAAAAABDEAAAA 92.0 168.9600 0.0000 23.6500 +AAAAAAAAABEAAAAA 33.333333333333336 58.6466 99.4733 22.1666 +AAAAAAAAABECAAAA 43.0 167.7400 0.0000 88.9000 +AAAAAAAAABEDAAAA 74.0 129.1000 0.0000 108.4400 +AAAAAAAAABFBAAAA 36.0 115.1800 0.0000 109.4200 +AAAAAAAAABFCAAAA 51.0 121.9800 0.0000 17.0700 +AAAAAAAAABFEAAAA 65.0 117.8800 0.0000 107.2700 +AAAAAAAAABGBAAAA 52.0 71.5450 0.0000 30.2850 +AAAAAAAAABGDAAAA 67.5 58.8600 0.0000 35.2500 +AAAAAAAAABHAAAAA 71.0 39.3850 804.3750 8.3800 +AAAAAAAAABHCAAAA 48.0 12.6700 52.1600 4.1800 +AAAAAAAAABHDAAAA 55.0 17.7800 0.0000 5.5150 +AAAAAAAAABJAAAAA 32.0 20.1100 0.0000 15.6800 +AAAAAAAAABJBAAAA 21.0 72.3350 0.0000 11.3700 +AAAAAAAAABJDAAAA 43.0 74.9200 0.0000 8.2400 +AAAAAAAAABKAAAAA 67.0 103.0700 0.0000 34.0100 +AAAAAAAAABKCAAAA 43.0 73.9300 0.0000 48.0500 +AAAAAAAAABKDAAAA 84.0 102.9500 0.0000 42.2000 +AAAAAAAAABMAAAAA 58.0 136.3400 0.0000 35.4400 +AAAAAAAAABMDAAAA 80.0 3.0600 0.0000 1.8900 +AAAAAAAAABNAAAAA 96.0 81.9500 0.0000 64.7400 +AAAAAAAAABNCAAAA 42.0 88.8300 0.0000 20.6500 +AAAAAAAAABOBAAAA 18.0 81.4900 0.0000 58.6700 +AAAAAAAAABOCAAAA 31.0 73.8766 0.0000 59.9400 +AAAAAAAAABPBAAAA 48.5 37.8300 183.7800 11.7200 +AAAAAAAAACACAAAA 60.0 104.3750 351.5650 25.3150 +AAAAAAAAACADAAAA 29.0 43.7400 0.0000 13.9900 +AAAAAAAAACBBAAAA 44.5 87.5100 0.0000 36.1400 +AAAAAAAAACBEAAAA 76.0 156.0500 0.0000 113.9100 +AAAAAAAAACCDAAAA 26.0 35.5733 0.0000 13.0133 +AAAAAAAAACCEAAAA 4.0 10.9800 0.0000 4.9400 +AAAAAAAAACDAAAAA 16.0 87.8700 36.2600 75.5600 +AAAAAAAAACDCAAAA 27.0 89.8600 0.0000 40.4300 +AAAAAAAAACEBAAAA 42.0 94.5800 0.0000 51.2600 +AAAAAAAAACFBAAAA 45.0 88.3050 0.0000 24.2600 +AAAAAAAAACGAAAAA 47.0 10.4600 0.0000 5.6400 +AAAAAAAAACGDAAAA 24.0 51.5450 0.0000 18.8350 +AAAAAAAAACHBAAAA 44.0 103.2700 0.0000 65.0600 +AAAAAAAAACHCAAAA 68.5 91.6800 0.0000 66.1650 +AAAAAAAAACIAAAAA 7.0 25.4200 0.0000 8.6400 +AAAAAAAAACIBAAAA 21.0 89.2900 915.0100 71.4300 +AAAAAAAAACIDAAAA 43.0 56.2800 56.1100 4.5000 +AAAAAAAAACLAAAAA 36.0 125.5700 0.0000 13.8100 +AAAAAAAAACLDAAAA 61.333333333333336 114.2066 0.0000 59.1233 +AAAAAAAAACMDAAAA 56.0 79.0200 0.0000 64.0000 +AAAAAAAAACNCAAAA 63.0 54.2000 0.0000 29.2600 +AAAAAAAAACOAAAAA 50.0 27.4300 229.2150 13.4300 +AAAAAAAAACPAAAAA 32.0 147.6200 2480.3200 87.0900 +AAAAAAAAACPCAAAA 80.0 12.6000 0.0000 0.3700 +AAAAAAAAACPDAAAA 87.0 105.9300 0.0000 9.5300 +AAAAAAAAADABAAAA 68.5 35.7950 0.0000 27.8400 +AAAAAAAAADACAAAA 96.0 101.5400 0.0000 99.5000 +AAAAAAAAADAEAAAA 53.0 74.6400 0.0000 7.6300 +AAAAAAAAADBBAAAA 6.0 85.5800 234.1400 81.3000 +AAAAAAAAADBDAAAA 47.0 39.3300 62.7100 12.0900 +AAAAAAAAADBEAAAA 52.0 2.4100 0.0000 1.0600 +AAAAAAAAADCAAAAA 91.0 92.1700 0.0000 67.2800 +AAAAAAAAADCCAAAA 33.0 40.8000 0.0000 28.5600 +AAAAAAAAADDBAAAA 45.0 18.6300 0.0000 17.6900 +AAAAAAAAADDCAAAA 66.0 162.1700 1525.9000 37.2900 +AAAAAAAAADDEAAAA 35.0 78.2566 0.0000 36.6300 +AAAAAAAAADEBAAAA 59.5 110.3800 157.9650 16.1650 +AAAAAAAAADEEAAAA 17.0 54.5400 0.0000 16.3600 +AAAAAAAAADFAAAAA 44.0 133.5100 0.0000 25.3600 +AAAAAAAAADGBAAAA 31.0 107.5500 919.8250 56.5350 +AAAAAAAAADGCAAAA 78.0 119.6100 0.0000 74.1500 +AAAAAAAAADGEAAAA 45.5 99.3050 0.0000 1.0650 +AAAAAAAAADHAAAAA 86.0 81.0900 0.0000 37.3000 +AAAAAAAAADHBAAAA 28.0 68.5800 223.7900 53.6150 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q09.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q09.out index c786eef8d4e444..000b582e2850fc 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q09.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q09.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q09 -- -39.64 115.89 191.63 267.18 341.98 +39.6454 115.8981 191.6347 267.1879 341.9869 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q13.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q13.out index b3461609020831..c65e2338b2ccd4 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q13.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q13.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q13 -- -31.0 2551.86 2365.94 14195.66 +31.0 2551.8633 2365.9433 14195.66 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q18.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q18.out index 464d3ebd15ea37..8bac605917cf74 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q18.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q18.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q18 -- -\N \N \N \N 49.79 101.83 277.25 51.32 -240.15 1957.46 2.97 -AAAAAAAAAABAAAAA \N \N \N 60.00 109.08 5242.27 98.17 -1714.87 1930.00 0.00 -AAAAAAAAAABDAAAA \N \N \N 61.50 102.91 0.00 48.08 -1680.22 1953.50 3.00 -AAAAAAAAAADBAAAA \N \N \N 52.00 35.64 0.00 22.80 -484.12 1949.00 6.00 -AAAAAAAAAADCAAAA \N \N \N 76.00 106.95 0.00 82.35 1048.04 1925.00 5.00 -AAAAAAAAAAJBAAAA \N \N \N 97.00 62.64 621.54 6.89 -3570.34 1935.00 3.00 -AAAAAAAAAAKDAAAA \N \N \N 35.00 46.25 0.00 28.30 57.94 1948.50 5.00 -AAAAAAAAAAMBAAAA \N \N \N 88.00 191.33 0.00 141.58 6673.04 1962.00 0.00 -AAAAAAAAAAODAAAA \N \N \N 96.00 38.24 0.00 27.53 1131.84 1968.00 3.00 -AAAAAAAAABADAAAA \N \N \N 61.00 84.47 0.00 18.58 -3821.65 1968.00 3.00 -AAAAAAAAABCBAAAA \N \N \N 61.00 189.33 4323.59 90.87 -4441.93 1937.00 0.00 -AAAAAAAAABDAAAAA \N \N \N 72.00 175.64 1365.33 21.07 -6171.33 1940.00 2.00 -AAAAAAAAABEAAAAA \N \N \N 19.00 93.97 208.84 36.64 -510.18 1959.00 6.00 -AAAAAAAAABFEAAAA \N \N \N 98.00 28.65 0.00 6.30 -614.46 1935.00 6.00 -AAAAAAAAABJBAAAA \N \N \N 100.00 59.48 0.00 2.97 -5014.00 1980.00 5.00 -AAAAAAAAABMDAAAA \N \N \N 82.00 73.89 0.00 0.00 -2277.96 1943.00 0.00 -AAAAAAAAABPBAAAA \N \N \N 42.00 82.86 0.00 4.14 -1948.38 1940.00 2.00 -AAAAAAAAACAAAAAA \N \N \N 49.00 79.12 0.00 52.21 711.97 1961.00 5.00 -AAAAAAAAACBCAAAA \N \N \N 1.00 77.53 0.00 49.61 -1.40 1982.00 0.00 -AAAAAAAAACCAAAAA \N \N \N 35.00 147.98 2221.76 97.66 -653.41 1960.00 3.00 -AAAAAAAAACLAAAAA \N \N \N 22.00 215.25 0.00 157.13 1709.40 1968.00 3.00 -AAAAAAAAACLDAAAA \N \N \N 27.00 201.78 0.00 143.26 1588.41 1936.00 1.00 -AAAAAAAAACMDAAAA \N \N \N 100.00 63.46 395.16 4.44 -4328.16 1986.00 2.00 -AAAAAAAAADBAAAAA \N \N \N 5.00 15.68 0.00 5.95 -1.25 1949.00 6.00 -AAAAAAAAADBDAAAA \N \N \N 65.50 101.21 26.04 60.55 436.22 1967.50 3.00 -AAAAAAAAADGCAAAA \N \N \N 19.00 11.47 0.00 2.06 -127.30 1928.00 5.00 -AAAAAAAAADHAAAAA \N \N \N 17.00 52.65 0.00 11.05 -160.48 1953.00 6.00 -AAAAAAAAADICAAAA \N \N \N 86.00 35.07 0.00 12.97 -936.54 1980.00 5.00 -AAAAAAAAADODAAAA \N \N \N 83.00 38.50 0.00 5.77 -2098.24 1965.00 1.00 -AAAAAAAAADPCAAAA \N \N \N 59.00 46.11 0.00 37.34 352.23 1979.00 4.00 -AAAAAAAAAEABAAAA \N \N \N 32.00 29.89 0.00 28.39 391.36 1932.00 5.00 -AAAAAAAAAEBDAAAA \N \N \N 71.00 177.30 0.00 113.47 3138.91 1939.00 1.00 -AAAAAAAAAEDEAAAA \N \N \N 37.00 48.67 0.00 9.73 -276.39 1940.00 2.00 -AAAAAAAAAEECAAAA \N \N \N 68.00 196.27 0.00 113.83 2202.52 1956.00 0.00 -AAAAAAAAAEFBAAAA \N \N \N 49.00 184.57 0.00 71.98 -1017.73 1984.00 2.00 -AAAAAAAAAEFCAAAA \N \N \N 32.00 31.97 0.00 18.54 65.92 1932.00 5.00 -AAAAAAAAAEGDAAAA \N \N \N 37.00 169.35 3204.94 93.14 -2507.12 1985.00 1.00 -AAAAAAAAAEJBAAAA \N \N \N 76.00 85.66 0.00 17.13 -4670.96 1985.00 2.00 -AAAAAAAAAENDAAAA \N \N \N 10.00 127.45 0.00 59.90 151.80 1971.00 2.00 -AAAAAAAAAFIBAAAA \N \N \N 69.00 111.06 0.00 101.06 4048.23 1965.00 1.00 -AAAAAAAAAFLBAAAA \N \N \N 33.00 148.07 0.00 29.61 -1349.70 1936.00 4.00 -AAAAAAAAAGBBAAAA \N \N \N 17.00 91.10 0.00 22.77 -361.08 1936.00 1.00 -AAAAAAAAAGCDAAAA \N \N \N 15.00 33.56 0.00 29.53 191.25 1963.00 5.00 -AAAAAAAAAGEEAAAA \N \N \N 99.00 264.45 0.00 37.02 -6067.71 1960.00 6.00 -AAAAAAAAAGGCAAAA \N \N \N 37.00 27.38 0.00 4.65 -485.81 1979.00 4.00 -AAAAAAAAAGHBAAAA \N \N \N 97.00 89.37 0.00 40.21 689.67 1947.00 2.00 -AAAAAAAAAGIAAAAA \N \N \N 30.00 65.71 0.00 11.82 -711.00 1936.00 4.00 -AAAAAAAAAHADAAAA \N \N \N 17.00 209.44 0.00 157.08 1290.30 1943.00 6.00 -AAAAAAAAAHBDAAAA \N \N \N 72.00 153.24 0.00 90.41 1353.60 1941.00 4.00 -AAAAAAAAAHDAAAAA \N \N \N 100.00 149.18 0.00 135.75 8413.00 1977.00 2.00 -AAAAAAAAAHDEAAAA \N \N \N 67.00 37.46 0.00 31.84 1246.20 1956.00 0.00 -AAAAAAAAAHICAAAA \N \N \N 5.00 170.64 0.00 95.55 80.90 1933.00 6.00 -AAAAAAAAAHLBAAAA \N \N \N 60.00 100.14 1970.70 80.11 -2171.10 1965.00 6.00 -AAAAAAAAAIBBAAAA \N \N \N 77.00 2.06 0.00 1.58 37.73 1935.00 6.00 -AAAAAAAAAICBAAAA \N \N \N 59.00 156.86 0.00 37.64 -1144.60 1924.00 2.00 -AAAAAAAAAIDAAAAA \N \N \N 63.00 18.78 0.00 15.02 -214.20 1979.00 5.00 -AAAAAAAAAIEBAAAA \N \N \N 23.00 29.97 0.00 23.37 -37.03 1960.00 0.00 -AAAAAAAAAIECAAAA \N \N \N 5.00 1.35 0.00 1.32 0.70 1973.00 4.00 -AAAAAAAAAIFDAAAA \N \N \N 38.00 158.68 1317.28 36.49 -3243.88 1985.00 1.00 -AAAAAAAAAIIBAAAA \N \N \N 45.00 90.75 0.00 15.42 -2244.15 1967.00 0.00 -AAAAAAAAAIJCAAAA \N \N \N 5.00 90.07 0.00 25.21 -77.75 1990.00 4.00 -AAAAAAAAAJABAAAA \N \N \N 36.00 198.57 0.00 103.25 775.08 1942.00 3.00 -AAAAAAAAAJAEAAAA \N \N \N 56.00 84.85 0.00 6.78 -2990.40 1975.00 4.00 -AAAAAAAAAJCCAAAA \N \N \N 20.00 109.99 0.00 38.49 -859.80 1952.00 4.00 -AAAAAAAAAJGBAAAA \N \N \N 23.00 249.29 0.00 132.12 1068.35 1968.00 2.00 -AAAAAAAAAJJBAAAA \N \N \N 49.00 42.42 0.00 1.69 -1275.96 1964.00 0.00 -AAAAAAAAAJLDAAAA \N \N \N 83.00 76.17 0.00 6.09 -5754.39 1948.00 6.00 -AAAAAAAAAKAAAAAA \N \N \N 51.00 121.17 0.00 78.76 -736.95 1959.00 6.00 -AAAAAAAAAKECAAAA \N \N \N 87.00 101.36 0.00 67.91 1825.26 1986.00 4.00 -AAAAAAAAAKJBAAAA \N \N \N 2.00 235.69 0.00 77.77 -9.86 1962.00 0.00 -AAAAAAAAAKJDAAAA \N \N \N 96.00 254.83 0.00 188.57 9488.64 1946.00 2.00 -AAAAAAAAAKKCAAAA \N \N \N 85.00 253.56 0.00 202.84 9783.50 1967.00 0.00 -AAAAAAAAAKLCAAAA \N \N \N 75.00 5.03 0.00 4.97 198.75 1973.00 0.00 -AAAAAAAAALBCAAAA \N \N \N 3.00 43.18 0.00 5.18 -39.12 1963.00 5.00 -AAAAAAAAALCBAAAA \N \N \N 61.00 80.16 0.00 26.45 -1646.39 1975.00 4.00 -AAAAAAAAALCDAAAA \N \N \N 4.00 129.61 0.00 110.16 149.36 1991.00 0.00 -AAAAAAAAALIAAAAA \N \N \N 55.00 153.18 0.00 137.86 2740.10 1928.00 3.00 -AAAAAAAAALIBAAAA \N \N \N 53.00 170.42 3689.47 161.89 -45.19 1985.00 2.00 -AAAAAAAAALMAAAAA \N \N \N 89.00 59.26 0.00 18.37 -865.08 1959.00 6.00 -AAAAAAAAALMCAAAA \N \N \N 96.00 226.96 0.00 11.34 -6693.12 1934.00 4.00 -AAAAAAAAALMDAAAA \N \N \N 26.00 128.64 0.00 60.46 -125.84 1984.00 2.00 -AAAAAAAAALNCAAAA \N \N \N 77.00 27.89 0.00 9.76 -224.84 1946.00 5.00 -AAAAAAAAALOBAAAA \N \N \N 81.50 70.72 0.00 53.52 118.41 1966.00 1.50 -AAAAAAAAAMBBAAAA \N \N \N 83.00 136.57 0.00 45.06 -4077.79 1957.00 2.00 -AAAAAAAAAMEBAAAA \N \N \N 67.00 9.50 0.00 3.23 -100.50 1945.00 1.00 -AAAAAAAAAMFAAAAA \N \N \N 56.00 215.16 0.00 36.57 -3404.24 1986.00 2.00 -AAAAAAAAAMNDAAAA \N \N \N 70.00 101.27 4284.88 65.82 -4341.58 1932.00 5.00 -AAAAAAAAANBDAAAA \N \N \N 75.00 114.96 1282.93 27.59 -6711.43 1925.00 5.00 -AAAAAAAAANDDAAAA \N \N \N 50.00 222.88 0.00 2.22 -4494.00 1948.00 1.00 -AAAAAAAAANECAAAA \N \N \N 93.00 53.42 0.00 47.54 -54.87 1979.00 5.00 -AAAAAAAAANFEAAAA \N \N \N 25.00 151.77 116.28 65.95 -1264.83 1930.50 2.50 -AAAAAAAAANGDAAAA \N \N \N 60.00 79.60 0.00 44.57 -1028.40 1941.00 1.00 -AAAAAAAAANIBAAAA \N \N \N 72.00 47.92 0.00 39.29 1560.24 1933.00 3.00 -AAAAAAAAAOCAAAAA \N \N \N 30.00 64.98 0.00 44.18 -415.20 1964.00 0.00 -AAAAAAAAAODAAAAA \N \N \N 76.00 66.98 0.00 5.35 -1437.92 1959.00 3.00 -AAAAAAAAAOFDAAAA \N \N \N 87.00 28.71 0.00 27.84 1472.04 1968.00 6.00 -AAAAAAAAAOMCAAAA \N \N \N 8.00 112.64 0.00 36.04 -509.20 1973.00 4.00 -AAAAAAAAAPBEAAAA \N \N \N 22.00 143.89 664.75 50.36 -1397.35 1925.00 0.00 -AAAAAAAAAPEDAAAA \N \N \N 90.00 72.94 0.00 17.50 -3554.10 1928.00 3.00 -AAAAAAAAAPFAAAAA \N \N \N 52.00 117.67 0.00 77.66 1354.60 1977.00 2.00 +\N \N \N \N 49.7951 101.8325 277.2558 51.3221 -240.1596 1957.4677 2.9749 +AAAAAAAAAABAAAAA \N \N \N 60.0000 109.0800 5242.2700 98.1700 -1714.8700 1930.0000 0.0000 +AAAAAAAAAABDAAAA \N \N \N 61.5000 102.9100 0.0000 48.0850 -1680.2250 1953.5000 3.0000 +AAAAAAAAAADBAAAA \N \N \N 52.0000 35.6400 0.0000 22.8000 -484.1200 1949.0000 6.0000 +AAAAAAAAAADCAAAA \N \N \N 76.0000 106.9500 0.0000 82.3500 1048.0400 1925.0000 5.0000 +AAAAAAAAAAJBAAAA \N \N \N 97.0000 62.6400 621.5400 6.8900 -3570.3400 1935.0000 3.0000 +AAAAAAAAAAKDAAAA \N \N \N 35.0000 46.2550 0.0000 28.3000 57.9450 1948.5000 5.0000 +AAAAAAAAAAMBAAAA \N \N \N 88.0000 191.3300 0.0000 141.5800 6673.0400 1962.0000 0.0000 +AAAAAAAAAAODAAAA \N \N \N 96.0000 38.2400 0.0000 27.5300 1131.8400 1968.0000 3.0000 +AAAAAAAAABADAAAA \N \N \N 61.0000 84.4700 0.0000 18.5800 -3821.6500 1968.0000 3.0000 +AAAAAAAAABCBAAAA \N \N \N 61.0000 189.3300 4323.5900 90.8700 -4441.9300 1937.0000 0.0000 +AAAAAAAAABDAAAAA \N \N \N 72.0000 175.6400 1365.3300 21.0700 -6171.3300 1940.0000 2.0000 +AAAAAAAAABEAAAAA \N \N \N 19.0000 93.9700 208.8400 36.6400 -510.1800 1959.0000 6.0000 +AAAAAAAAABFEAAAA \N \N \N 98.0000 28.6500 0.0000 6.3000 -614.4600 1935.0000 6.0000 +AAAAAAAAABJBAAAA \N \N \N 100.0000 59.4800 0.0000 2.9700 -5014.0000 1980.0000 5.0000 +AAAAAAAAABMDAAAA \N \N \N 82.0000 73.8900 0.0000 0.0000 -2277.9600 1943.0000 0.0000 +AAAAAAAAABPBAAAA \N \N \N 42.0000 82.8600 0.0000 4.1400 -1948.3800 1940.0000 2.0000 +AAAAAAAAACAAAAAA \N \N \N 49.0000 79.1200 0.0000 52.2100 711.9700 1961.0000 5.0000 +AAAAAAAAACBCAAAA \N \N \N 1.0000 77.5300 0.0000 49.6100 -1.4000 1982.0000 0.0000 +AAAAAAAAACCAAAAA \N \N \N 35.0000 147.9800 2221.7600 97.6600 -653.4100 1960.0000 3.0000 +AAAAAAAAACLAAAAA \N \N \N 22.0000 215.2500 0.0000 157.1300 1709.4000 1968.0000 3.0000 +AAAAAAAAACLDAAAA \N \N \N 27.0000 201.7800 0.0000 143.2600 1588.4100 1936.0000 1.0000 +AAAAAAAAACMDAAAA \N \N \N 100.0000 63.4600 395.1600 4.4400 -4328.1600 1986.0000 2.0000 +AAAAAAAAADBAAAAA \N \N \N 5.0000 15.6800 0.0000 5.9500 -1.2500 1949.0000 6.0000 +AAAAAAAAADBDAAAA \N \N \N 65.5000 101.2100 26.0450 60.5550 436.2200 1967.5000 3.0000 +AAAAAAAAADGCAAAA \N \N \N 19.0000 11.4700 0.0000 2.0600 -127.3000 1928.0000 5.0000 +AAAAAAAAADHAAAAA \N \N \N 17.0000 52.6500 0.0000 11.0500 -160.4800 1953.0000 6.0000 +AAAAAAAAADICAAAA \N \N \N 86.0000 35.0700 0.0000 12.9700 -936.5400 1980.0000 5.0000 +AAAAAAAAADODAAAA \N \N \N 83.0000 38.5000 0.0000 5.7700 -2098.2400 1965.0000 1.0000 +AAAAAAAAADPCAAAA \N \N \N 59.0000 46.1100 0.0000 37.3400 352.2300 1979.0000 4.0000 +AAAAAAAAAEABAAAA \N \N \N 32.0000 29.8900 0.0000 28.3900 391.3600 1932.0000 5.0000 +AAAAAAAAAEBDAAAA \N \N \N 71.0000 177.3000 0.0000 113.4700 3138.9100 1939.0000 1.0000 +AAAAAAAAAEDEAAAA \N \N \N 37.0000 48.6700 0.0000 9.7300 -276.3900 1940.0000 2.0000 +AAAAAAAAAEECAAAA \N \N \N 68.0000 196.2700 0.0000 113.8300 2202.5200 1956.0000 0.0000 +AAAAAAAAAEFBAAAA \N \N \N 49.0000 184.5700 0.0000 71.9800 -1017.7300 1984.0000 2.0000 +AAAAAAAAAEFCAAAA \N \N \N 32.0000 31.9700 0.0000 18.5400 65.9200 1932.0000 5.0000 +AAAAAAAAAEGDAAAA \N \N \N 37.0000 169.3500 3204.9400 93.1400 -2507.1200 1985.0000 1.0000 +AAAAAAAAAEJBAAAA \N \N \N 76.0000 85.6600 0.0000 17.1300 -4670.9600 1985.0000 2.0000 +AAAAAAAAAENDAAAA \N \N \N 10.0000 127.4500 0.0000 59.9000 151.8000 1971.0000 2.0000 +AAAAAAAAAFIBAAAA \N \N \N 69.0000 111.0600 0.0000 101.0600 4048.2300 1965.0000 1.0000 +AAAAAAAAAFLBAAAA \N \N \N 33.0000 148.0700 0.0000 29.6100 -1349.7000 1936.0000 4.0000 +AAAAAAAAAGBBAAAA \N \N \N 17.0000 91.1000 0.0000 22.7700 -361.0800 1936.0000 1.0000 +AAAAAAAAAGCDAAAA \N \N \N 15.0000 33.5600 0.0000 29.5300 191.2500 1963.0000 5.0000 +AAAAAAAAAGEEAAAA \N \N \N 99.0000 264.4500 0.0000 37.0200 -6067.7100 1960.0000 6.0000 +AAAAAAAAAGGCAAAA \N \N \N 37.0000 27.3800 0.0000 4.6500 -485.8100 1979.0000 4.0000 +AAAAAAAAAGHBAAAA \N \N \N 97.0000 89.3700 0.0000 40.2100 689.6700 1947.0000 2.0000 +AAAAAAAAAGIAAAAA \N \N \N 30.0000 65.7100 0.0000 11.8200 -711.0000 1936.0000 4.0000 +AAAAAAAAAHADAAAA \N \N \N 17.0000 209.4400 0.0000 157.0800 1290.3000 1943.0000 6.0000 +AAAAAAAAAHBDAAAA \N \N \N 72.0000 153.2400 0.0000 90.4100 1353.6000 1941.0000 4.0000 +AAAAAAAAAHDAAAAA \N \N \N 100.0000 149.1800 0.0000 135.7500 8413.0000 1977.0000 2.0000 +AAAAAAAAAHDEAAAA \N \N \N 67.0000 37.4600 0.0000 31.8400 1246.2000 1956.0000 0.0000 +AAAAAAAAAHICAAAA \N \N \N 5.0000 170.6400 0.0000 95.5500 80.9000 1933.0000 6.0000 +AAAAAAAAAHLBAAAA \N \N \N 60.0000 100.1400 1970.7000 80.1100 -2171.1000 1965.0000 6.0000 +AAAAAAAAAIBBAAAA \N \N \N 77.0000 2.0600 0.0000 1.5800 37.7300 1935.0000 6.0000 +AAAAAAAAAICBAAAA \N \N \N 59.0000 156.8600 0.0000 37.6400 -1144.6000 1924.0000 2.0000 +AAAAAAAAAIDAAAAA \N \N \N 63.0000 18.7800 0.0000 15.0200 -214.2000 1979.0000 5.0000 +AAAAAAAAAIEBAAAA \N \N \N 23.0000 29.9700 0.0000 23.3700 -37.0300 1960.0000 0.0000 +AAAAAAAAAIECAAAA \N \N \N 5.0000 1.3500 0.0000 1.3200 0.7000 1973.0000 4.0000 +AAAAAAAAAIFDAAAA \N \N \N 38.0000 158.6800 1317.2800 36.4900 -3243.8800 1985.0000 1.0000 +AAAAAAAAAIIBAAAA \N \N \N 45.0000 90.7500 0.0000 15.4200 -2244.1500 1967.0000 0.0000 +AAAAAAAAAIJCAAAA \N \N \N 5.0000 90.0700 0.0000 25.2100 -77.7500 1990.0000 4.0000 +AAAAAAAAAJABAAAA \N \N \N 36.0000 198.5700 0.0000 103.2500 775.0800 1942.0000 3.0000 +AAAAAAAAAJAEAAAA \N \N \N 56.0000 84.8500 0.0000 6.7800 -2990.4000 1975.0000 4.0000 +AAAAAAAAAJCCAAAA \N \N \N 20.0000 109.9900 0.0000 38.4900 -859.8000 1952.0000 4.0000 +AAAAAAAAAJGBAAAA \N \N \N 23.0000 249.2900 0.0000 132.1200 1068.3500 1968.0000 2.0000 +AAAAAAAAAJJBAAAA \N \N \N 49.0000 42.4200 0.0000 1.6900 -1275.9600 1964.0000 0.0000 +AAAAAAAAAJLDAAAA \N \N \N 83.0000 76.1700 0.0000 6.0900 -5754.3900 1948.0000 6.0000 +AAAAAAAAAKAAAAAA \N \N \N 51.0000 121.1700 0.0000 78.7600 -736.9500 1959.0000 6.0000 +AAAAAAAAAKECAAAA \N \N \N 87.0000 101.3600 0.0000 67.9100 1825.2600 1986.0000 4.0000 +AAAAAAAAAKJBAAAA \N \N \N 2.0000 235.6900 0.0000 77.7700 -9.8600 1962.0000 0.0000 +AAAAAAAAAKJDAAAA \N \N \N 96.0000 254.8300 0.0000 188.5700 9488.6400 1946.0000 2.0000 +AAAAAAAAAKKCAAAA \N \N \N 85.0000 253.5600 0.0000 202.8400 9783.5000 1967.0000 0.0000 +AAAAAAAAAKLCAAAA \N \N \N 75.0000 5.0300 0.0000 4.9700 198.7500 1973.0000 0.0000 +AAAAAAAAALBCAAAA \N \N \N 3.0000 43.1800 0.0000 5.1800 -39.1200 1963.0000 5.0000 +AAAAAAAAALCBAAAA \N \N \N 61.0000 80.1600 0.0000 26.4500 -1646.3900 1975.0000 4.0000 +AAAAAAAAALCDAAAA \N \N \N 4.0000 129.6100 0.0000 110.1600 149.3600 1991.0000 0.0000 +AAAAAAAAALIAAAAA \N \N \N 55.0000 153.1800 0.0000 137.8600 2740.1000 1928.0000 3.0000 +AAAAAAAAALIBAAAA \N \N \N 53.0000 170.4200 3689.4700 161.8900 -45.1900 1985.0000 2.0000 +AAAAAAAAALMAAAAA \N \N \N 89.0000 59.2600 0.0000 18.3700 -865.0800 1959.0000 6.0000 +AAAAAAAAALMCAAAA \N \N \N 96.0000 226.9600 0.0000 11.3400 -6693.1200 1934.0000 4.0000 +AAAAAAAAALMDAAAA \N \N \N 26.0000 128.6400 0.0000 60.4600 -125.8400 1984.0000 2.0000 +AAAAAAAAALNCAAAA \N \N \N 77.0000 27.8900 0.0000 9.7600 -224.8400 1946.0000 5.0000 +AAAAAAAAALOBAAAA \N \N \N 81.5000 70.7250 0.0000 53.5200 118.4100 1966.0000 1.5000 +AAAAAAAAAMBBAAAA \N \N \N 83.0000 136.5700 0.0000 45.0600 -4077.7900 1957.0000 2.0000 +AAAAAAAAAMEBAAAA \N \N \N 67.0000 9.5000 0.0000 3.2300 -100.5000 1945.0000 1.0000 +AAAAAAAAAMFAAAAA \N \N \N 56.0000 215.1600 0.0000 36.5700 -3404.2400 1986.0000 2.0000 +AAAAAAAAAMNDAAAA \N \N \N 70.0000 101.2700 4284.8800 65.8200 -4341.5800 1932.0000 5.0000 +AAAAAAAAANBDAAAA \N \N \N 75.0000 114.9600 1282.9300 27.5900 -6711.4300 1925.0000 5.0000 +AAAAAAAAANDDAAAA \N \N \N 50.0000 222.8800 0.0000 2.2200 -4494.0000 1948.0000 1.0000 +AAAAAAAAANECAAAA \N \N \N 93.0000 53.4200 0.0000 47.5400 -54.8700 1979.0000 5.0000 +AAAAAAAAANFEAAAA \N \N \N 25.0000 151.7750 116.2800 65.9550 -1264.8300 1930.5000 2.5000 +AAAAAAAAANGDAAAA \N \N \N 60.0000 79.6000 0.0000 44.5700 -1028.4000 1941.0000 1.0000 +AAAAAAAAANIBAAAA \N \N \N 72.0000 47.9200 0.0000 39.2900 1560.2400 1933.0000 3.0000 +AAAAAAAAAOCAAAAA \N \N \N 30.0000 64.9800 0.0000 44.1800 -415.2000 1964.0000 0.0000 +AAAAAAAAAODAAAAA \N \N \N 76.0000 66.9800 0.0000 5.3500 -1437.9200 1959.0000 3.0000 +AAAAAAAAAOFDAAAA \N \N \N 87.0000 28.7100 0.0000 27.8400 1472.0400 1968.0000 6.0000 +AAAAAAAAAOMCAAAA \N \N \N 8.0000 112.6400 0.0000 36.0400 -509.2000 1973.0000 4.0000 +AAAAAAAAAPBEAAAA \N \N \N 22.0000 143.8900 664.7500 50.3600 -1397.3500 1925.0000 0.0000 +AAAAAAAAAPEDAAAA \N \N \N 90.0000 72.9400 0.0000 17.5000 -3554.1000 1928.0000 3.0000 +AAAAAAAAAPFAAAAA \N \N \N 52.0000 117.6700 0.0000 77.6600 1354.6000 1977.0000 2.0000 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q26.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q26.out index 9ea9702eb00b4a..38a5b82ba41aa0 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q26.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q26.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q26 -- -AAAAAAAAAAAEAAAA 63.0 30.01 0.00 25.29 -AAAAAAAAAABEAAAA 96.0 75.34 0.00 10.54 -AAAAAAAAAACAAAAA 73.0 199.77 0.00 41.95 -AAAAAAAAAACCAAAA 23.5 26.62 110.97 14.20 -AAAAAAAAAADBAAAA 23.0 131.56 0.00 26.31 -AAAAAAAAAADEAAAA 15.0 283.91 0.00 19.87 -AAAAAAAAAAEAAAAA 71.0 176.71 0.00 142.69 -AAAAAAAAAAEBAAAA 96.0 66.74 1014.39 16.01 -AAAAAAAAAAFCAAAA 85.0 76.81 143.61 42.24 -AAAAAAAAAAGEAAAA 47.0 136.92 0.00 95.27 -AAAAAAAAAAHBAAAA 27.0 105.84 0.00 35.98 -AAAAAAAAAAIDAAAA 78.33333333333333 126.37 0.00 61.94 -AAAAAAAAAAJBAAAA 60.333333333333336 85.59 23.20 15.50 -AAAAAAAAAAKDAAAA 21.0 84.41 0.00 26.85 -AAAAAAAAAALCAAAA 20.0 62.79 0.00 48.97 -AAAAAAAAAALDAAAA 49.0 73.15 0.00 21.00 -AAAAAAAAAAMCAAAA 81.0 229.62 15221.17 202.06 -AAAAAAAAAANAAAAA 42.0 79.99 0.00 76.79 -AAAAAAAAAANDAAAA 94.0 27.92 0.00 1.67 -AAAAAAAAAAOAAAAA 66.0 44.29 25.82 10.05 -AAAAAAAAAAOCAAAA 34.333333333333336 84.49 1133.95 63.43 -AAAAAAAAABABAAAA 45.0 79.82 0.00 67.84 -AAAAAAAAABAEAAAA 1.0 171.54 0.00 49.74 -AAAAAAAAABBAAAAA 8.0 279.08 0.00 55.81 -AAAAAAAAABBCAAAA 56.0 45.97 1286.38 23.44 -AAAAAAAAABBDAAAA 47.0 22.44 0.00 21.99 -AAAAAAAAABCBAAAA 84.0 43.87 0.00 28.51 -AAAAAAAAABEDAAAA 43.0 105.77 668.40 37.01 -AAAAAAAAABFEAAAA 66.0 239.55 0.00 184.45 -AAAAAAAAABJAAAAA 49.0 10.24 0.00 8.08 -AAAAAAAAABKAAAAA 71.0 99.42 0.00 15.90 -AAAAAAAAABLBAAAA 40.0 233.60 0.00 93.44 -AAAAAAAAABOCAAAA 51.0 4.55 0.00 4.14 -AAAAAAAAACCAAAAA 39.0 63.74 22.26 17.78 -AAAAAAAAACDCAAAA 51.0 158.97 1334.07 124.78 -AAAAAAAAACDDAAAA 85.5 75.73 0.00 36.28 -AAAAAAAAACEEAAAA 38.0 78.69 0.00 19.67 -AAAAAAAAACFDAAAA 93.0 59.44 0.00 7.72 -AAAAAAAAACGCAAAA 55.0 103.21 0.00 27.86 -AAAAAAAAACHBAAAA 62.0 180.29 0.00 32.45 -AAAAAAAAACIBAAAA 95.0 214.40 0.00 4.28 -AAAAAAAAACKBAAAA 59.0 92.91 0.00 29.67 -AAAAAAAAACMCAAAA 65.0 119.55 0.00 84.88 -AAAAAAAAACNBAAAA 65.0 169.29 0.00 121.88 -AAAAAAAAACNCAAAA 12.0 64.16 0.00 16.04 -AAAAAAAAACOBAAAA 90.0 50.84 0.00 6.10 -AAAAAAAAACODAAAA 46.0 35.84 0.00 16.27 -AAAAAAAAACPAAAAA 62.0 191.00 823.81 132.19 -AAAAAAAAADABAAAA 31.0 30.66 0.00 2.45 -AAAAAAAAADACAAAA 31.0 174.06 0.00 46.99 -AAAAAAAAADAEAAAA 21.0 65.43 0.00 62.15 -AAAAAAAAADBAAAAA 88.0 102.57 7392.18 92.31 -AAAAAAAAADBDAAAA 67.0 221.22 0.00 79.63 -AAAAAAAAADCAAAAA 67.0 70.16 2248.62 36.48 -AAAAAAAAADCDAAAA 37.0 92.28 0.00 31.66 -AAAAAAAAADDCAAAA 27.0 133.79 0.00 14.71 -AAAAAAAAADEAAAAA 99.0 26.54 0.00 8.75 -AAAAAAAAADFDAAAA 49.0 56.58 0.00 5.65 -AAAAAAAAADGEAAAA 49.0 87.96 0.00 15.83 -AAAAAAAAADHAAAAA 36.0 32.89 849.52 25.65 -AAAAAAAAADIAAAAA 98.0 168.89 0.00 69.24 -AAAAAAAAADIDAAAA 5.0 99.29 0.00 86.44 -AAAAAAAAADJBAAAA 87.0 88.35 7.68 8.83 -AAAAAAAAADJCAAAA 71.0 30.50 0.00 7.01 -AAAAAAAAADKAAAAA 40.5 123.01 0.00 8.12 -AAAAAAAAADKBAAAA 23.0 61.77 0.00 52.50 -AAAAAAAAADLAAAAA 35.0 108.69 0.00 78.25 -AAAAAAAAADMBAAAA 14.0 181.43 0.00 170.54 -AAAAAAAAADNAAAAA 23.0 43.28 0.00 5.62 -AAAAAAAAADNBAAAA 19.0 119.64 0.00 7.17 -AAAAAAAAADOCAAAA 37.5 30.22 0.00 19.35 -AAAAAAAAADODAAAA 66.0 4.61 0.00 2.53 -AAAAAAAAAEADAAAA 63.0 153.04 0.00 148.44 -AAAAAAAAAEAEAAAA 25.0 189.94 0.00 144.35 -AAAAAAAAAEBAAAAA 15.0 96.74 0.00 10.64 -AAAAAAAAAECBAAAA 57.0 31.66 0.00 11.39 -AAAAAAAAAEDBAAAA 90.0 185.31 0.00 18.53 -AAAAAAAAAEFBAAAA 44.0 56.32 0.00 39.49 -AAAAAAAAAEFCAAAA 14.0 136.80 735.43 82.08 -AAAAAAAAAEGBAAAA 93.0 138.20 0.00 134.05 -AAAAAAAAAEGDAAAA 71.0 109.73 332.44 59.20 -AAAAAAAAAEHCAAAA 73.0 216.23 0.00 211.90 -AAAAAAAAAEHDAAAA 28.0 85.42 0.00 38.96 -AAAAAAAAAEJBAAAA 46.0 85.18 0.00 79.21 -AAAAAAAAAEKCAAAA 59.0 69.26 0.00 2.07 -AAAAAAAAAEMDAAAA 3.0 183.78 0.00 134.15 -AAAAAAAAAFAAAAAA 54.0 255.71 0.00 86.94 -AAAAAAAAAFADAAAA 90.0 51.00 0.00 7.65 -AAAAAAAAAFBEAAAA 34.5 105.16 0.00 37.66 -AAAAAAAAAFCDAAAA 81.0 66.52 0.00 54.12 -AAAAAAAAAFDDAAAA 24.0 110.74 0.00 56.09 -AAAAAAAAAFEEAAAA 44.0 78.87 2115.77 71.77 -AAAAAAAAAFFBAAAA 39.5 189.82 0.00 56.22 -AAAAAAAAAFFDAAAA 27.0 73.31 37.25 2.19 -AAAAAAAAAFGCAAAA 64.0 164.06 883.15 150.20 -AAAAAAAAAFHBAAAA 18.0 92.06 0.00 26.69 -AAAAAAAAAFIDAAAA 26.0 165.65 409.99 46.38 -AAAAAAAAAFLBAAAA 12.5 146.01 13.64 118.77 -AAAAAAAAAFMCAAAA 41.0 37.88 0.00 13.63 -AAAAAAAAAFMDAAAA 72.0 97.77 0.00 24.44 +AAAAAAAAAAAEAAAA 63.0 30.0100 0.0000 25.2900 +AAAAAAAAAABEAAAA 96.0 75.3400 0.0000 10.5400 +AAAAAAAAAACAAAAA 73.0 199.7700 0.0000 41.9500 +AAAAAAAAAACCAAAA 23.5 26.6200 110.9700 14.2000 +AAAAAAAAAADBAAAA 23.0 131.5600 0.0000 26.3100 +AAAAAAAAAADEAAAA 15.0 283.9100 0.0000 19.8700 +AAAAAAAAAAEAAAAA 71.0 176.7133 0.0000 142.6933 +AAAAAAAAAAEBAAAA 96.0 66.7400 1014.3900 16.0100 +AAAAAAAAAAFCAAAA 85.0 76.8100 143.6100 42.2400 +AAAAAAAAAAGEAAAA 47.0 136.9250 0.0000 95.2750 +AAAAAAAAAAHBAAAA 27.0 105.8400 0.0000 35.9800 +AAAAAAAAAAIDAAAA 78.33333333333333 126.3700 0.0000 61.9433 +AAAAAAAAAAJBAAAA 60.333333333333336 85.5966 23.2000 15.5000 +AAAAAAAAAAKDAAAA 21.0 84.4150 0.0000 26.8500 +AAAAAAAAAALCAAAA 20.0 62.7900 0.0000 48.9700 +AAAAAAAAAALDAAAA 49.0 73.1550 0.0000 21.0050 +AAAAAAAAAAMCAAAA 81.0 229.6200 15221.1700 202.0600 +AAAAAAAAAANAAAAA 42.0 79.9900 0.0000 76.7900 +AAAAAAAAAANDAAAA 94.0 27.9200 0.0000 1.6700 +AAAAAAAAAAOAAAAA 66.0 44.2950 25.8200 10.0550 +AAAAAAAAAAOCAAAA 34.333333333333336 84.4966 1133.9533 63.4300 +AAAAAAAAABABAAAA 45.0 79.8200 0.0000 67.8400 +AAAAAAAAABAEAAAA 1.0 171.5400 0.0000 49.7400 +AAAAAAAAABBAAAAA 8.0 279.0800 0.0000 55.8100 +AAAAAAAAABBCAAAA 56.0 45.9700 1286.3800 23.4400 +AAAAAAAAABBDAAAA 47.0 22.4400 0.0000 21.9900 +AAAAAAAAABCBAAAA 84.0 43.8700 0.0000 28.5100 +AAAAAAAAABEDAAAA 43.0 105.7700 668.4000 37.0100 +AAAAAAAAABFEAAAA 66.0 239.5500 0.0000 184.4500 +AAAAAAAAABJAAAAA 49.0 10.2400 0.0000 8.0800 +AAAAAAAAABKAAAAA 71.0 99.4200 0.0000 15.9000 +AAAAAAAAABLBAAAA 40.0 233.6000 0.0000 93.4400 +AAAAAAAAABOCAAAA 51.0 4.5500 0.0000 4.1400 +AAAAAAAAACCAAAAA 39.0 63.7450 22.2600 17.7850 +AAAAAAAAACDCAAAA 51.0 158.9750 1334.0700 124.7850 +AAAAAAAAACDDAAAA 85.5 75.7350 0.0000 36.2850 +AAAAAAAAACEEAAAA 38.0 78.6900 0.0000 19.6700 +AAAAAAAAACFDAAAA 93.0 59.4400 0.0000 7.7200 +AAAAAAAAACGCAAAA 55.0 103.2100 0.0000 27.8600 +AAAAAAAAACHBAAAA 62.0 180.2900 0.0000 32.4500 +AAAAAAAAACIBAAAA 95.0 214.4000 0.0000 4.2800 +AAAAAAAAACKBAAAA 59.0 92.9100 0.0000 29.6750 +AAAAAAAAACMCAAAA 65.0 119.5500 0.0000 84.8800 +AAAAAAAAACNBAAAA 65.0 169.2900 0.0000 121.8800 +AAAAAAAAACNCAAAA 12.0 64.1600 0.0000 16.0400 +AAAAAAAAACOBAAAA 90.0 50.8400 0.0000 6.1000 +AAAAAAAAACODAAAA 46.0 35.8400 0.0000 16.2766 +AAAAAAAAACPAAAAA 62.0 191.0000 823.8150 132.1950 +AAAAAAAAADABAAAA 31.0 30.6600 0.0000 2.4500 +AAAAAAAAADACAAAA 31.0 174.0600 0.0000 46.9900 +AAAAAAAAADAEAAAA 21.0 65.4300 0.0000 62.1500 +AAAAAAAAADBAAAAA 88.0 102.5700 7392.1800 92.3100 +AAAAAAAAADBDAAAA 67.0 221.2200 0.0000 79.6300 +AAAAAAAAADCAAAAA 67.0 70.1600 2248.6200 36.4800 +AAAAAAAAADCDAAAA 37.0 92.2800 0.0000 31.6600 +AAAAAAAAADDCAAAA 27.0 133.7900 0.0000 14.7100 +AAAAAAAAADEAAAAA 99.0 26.5400 0.0000 8.7500 +AAAAAAAAADFDAAAA 49.0 56.5800 0.0000 5.6500 +AAAAAAAAADGEAAAA 49.0 87.9600 0.0000 15.8300 +AAAAAAAAADHAAAAA 36.0 32.8900 849.5200 25.6500 +AAAAAAAAADIAAAAA 98.0 168.8900 0.0000 69.2400 +AAAAAAAAADIDAAAA 5.0 99.2950 0.0000 86.4450 +AAAAAAAAADJBAAAA 87.0 88.3500 7.6800 8.8300 +AAAAAAAAADJCAAAA 71.0 30.5000 0.0000 7.0100 +AAAAAAAAADKAAAAA 40.5 123.0100 0.0000 8.1200 +AAAAAAAAADKBAAAA 23.0 61.7700 0.0000 52.5000 +AAAAAAAAADLAAAAA 35.0 108.6900 0.0000 78.2500 +AAAAAAAAADMBAAAA 14.0 181.4300 0.0000 170.5400 +AAAAAAAAADNAAAAA 23.0 43.2800 0.0000 5.6200 +AAAAAAAAADNBAAAA 19.0 119.6400 0.0000 7.1700 +AAAAAAAAADOCAAAA 37.5 30.2250 0.0000 19.3550 +AAAAAAAAADODAAAA 66.0 4.6100 0.0000 2.5300 +AAAAAAAAAEADAAAA 63.0 153.0400 0.0000 148.4400 +AAAAAAAAAEAEAAAA 25.0 189.9400 0.0000 144.3500 +AAAAAAAAAEBAAAAA 15.0 96.7400 0.0000 10.6400 +AAAAAAAAAECBAAAA 57.0 31.6600 0.0000 11.3900 +AAAAAAAAAEDBAAAA 90.0 185.3100 0.0000 18.5300 +AAAAAAAAAEFBAAAA 44.0 56.3200 0.0000 39.4950 +AAAAAAAAAEFCAAAA 14.0 136.8000 735.4300 82.0800 +AAAAAAAAAEGBAAAA 93.0 138.2000 0.0000 134.0500 +AAAAAAAAAEGDAAAA 71.0 109.7300 332.4400 59.2000 +AAAAAAAAAEHCAAAA 73.0 216.2300 0.0000 211.9000 +AAAAAAAAAEHDAAAA 28.0 85.4250 0.0000 38.9650 +AAAAAAAAAEJBAAAA 46.0 85.1800 0.0000 79.2100 +AAAAAAAAAEKCAAAA 59.0 69.2600 0.0000 2.0700 +AAAAAAAAAEMDAAAA 3.0 183.7800 0.0000 134.1500 +AAAAAAAAAFAAAAAA 54.0 255.7100 0.0000 86.9400 +AAAAAAAAAFADAAAA 90.0 51.0000 0.0000 7.6500 +AAAAAAAAAFBEAAAA 34.5 105.1600 0.0000 37.6650 +AAAAAAAAAFCDAAAA 81.0 66.5250 0.0000 54.1250 +AAAAAAAAAFDDAAAA 24.0 110.7450 0.0000 56.0950 +AAAAAAAAAFEEAAAA 44.0 78.8700 2115.7700 71.7700 +AAAAAAAAAFFBAAAA 39.5 189.8250 0.0000 56.2250 +AAAAAAAAAFFDAAAA 27.0 73.3100 37.2500 2.1900 +AAAAAAAAAFGCAAAA 64.0 164.0650 883.1550 150.2000 +AAAAAAAAAFHBAAAA 18.0 92.0600 0.0000 26.6900 +AAAAAAAAAFIDAAAA 26.0 165.6500 409.9900 46.3800 +AAAAAAAAAFLBAAAA 12.5 146.0100 13.6450 118.7750 +AAAAAAAAAFMCAAAA 41.0 37.8800 0.0000 13.6300 +AAAAAAAAAFMDAAAA 72.0 97.7700 0.0000 24.4400 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q27.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q27.out index b3510ee48b2246..7dccc267cb552c 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q27.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q27.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q27 -- -\N \N 1 51.05758807588076 75.65 194.40 38.25 -AAAAAAAAAAABAAAA \N 1 46.0 114.72 0.00 32.12 -AAAAAAAAAAABAAAA TN 0 46.0 114.72 0.00 32.12 -AAAAAAAAAAAEAAAA \N 1 100.0 77.97 0.00 57.69 -AAAAAAAAAAAEAAAA TN 0 100.0 77.97 0.00 57.69 -AAAAAAAAAABAAAAA \N 1 6.0 48.89 13.61 2.44 -AAAAAAAAAABAAAAA TN 0 6.0 48.89 13.61 2.44 -AAAAAAAAAACAAAAA \N 1 62.0 32.21 0.00 5.50 -AAAAAAAAAACAAAAA TN 0 62.0 32.21 0.00 5.50 -AAAAAAAAAACDAAAA \N 1 97.0 161.78 0.00 55.00 -AAAAAAAAAACDAAAA TN 0 97.0 161.78 0.00 55.00 -AAAAAAAAAADBAAAA \N 1 28.0 136.01 575.76 73.44 -AAAAAAAAAADBAAAA TN 0 28.0 136.01 575.76 73.44 -AAAAAAAAAADCAAAA \N 1 64.0 116.14 0.00 108.01 -AAAAAAAAAADCAAAA TN 0 64.0 116.14 0.00 108.01 -AAAAAAAAAAEBAAAA \N 1 9.0 5.43 0.00 5.21 -AAAAAAAAAAEBAAAA TN 0 9.0 5.43 0.00 5.21 -AAAAAAAAAAEDAAAA \N 1 45.5 87.63 0.00 51.84 -AAAAAAAAAAEDAAAA TN 0 45.5 87.63 0.00 51.84 -AAAAAAAAAAGBAAAA \N 1 29.0 101.94 0.00 100.92 -AAAAAAAAAAGBAAAA TN 0 29.0 101.94 0.00 100.92 -AAAAAAAAAAGCAAAA \N 1 97.0 65.27 0.00 21.53 -AAAAAAAAAAGCAAAA TN 0 97.0 65.27 0.00 21.53 -AAAAAAAAAAGEAAAA \N 1 55.0 73.87 0.00 71.00 -AAAAAAAAAAGEAAAA TN 0 55.0 73.87 0.00 71.00 -AAAAAAAAAAHAAAAA \N 1 20.0 134.30 0.00 119.52 -AAAAAAAAAAHAAAAA TN 0 20.0 134.30 0.00 119.52 -AAAAAAAAAAHBAAAA \N 1 97.0 7.40 0.00 6.73 -AAAAAAAAAAHBAAAA TN 0 97.0 7.40 0.00 6.73 -AAAAAAAAAAHDAAAA \N 1 69.0 5.62 0.00 0.33 -AAAAAAAAAAHDAAAA TN 0 69.0 5.62 0.00 0.33 -AAAAAAAAAAIAAAAA \N 1 87.0 106.98 0.00 27.81 -AAAAAAAAAAIAAAAA TN 0 87.0 106.98 0.00 27.81 -AAAAAAAAAAKBAAAA \N 1 84.5 66.17 847.83 57.38 -AAAAAAAAAAKBAAAA TN 0 84.5 66.17 847.83 57.38 -AAAAAAAAAALAAAAA \N 1 6.0 32.28 0.00 7.42 -AAAAAAAAAALAAAAA TN 0 6.0 32.28 0.00 7.42 -AAAAAAAAAALCAAAA \N 1 98.0 34.31 55.30 1.71 -AAAAAAAAAALCAAAA TN 0 98.0 34.31 55.30 1.71 -AAAAAAAAAALDAAAA \N 1 59.0 129.47 713.90 22.00 -AAAAAAAAAALDAAAA TN 0 59.0 129.47 713.90 22.00 -AAAAAAAAAANAAAAA \N 1 74.0 60.87 0.00 13.20 -AAAAAAAAAANAAAAA TN 0 74.0 60.87 0.00 13.20 -AAAAAAAAAANBAAAA \N 1 96.0 130.79 1864.51 129.48 -AAAAAAAAAANBAAAA TN 0 96.0 130.79 1864.51 129.48 -AAAAAAAAAAOAAAAA \N 1 85.0 130.34 0.00 122.51 -AAAAAAAAAAOAAAAA TN 0 85.0 130.34 0.00 122.51 -AAAAAAAAAAOCAAAA \N 1 14.0 64.57 0.00 33.97 -AAAAAAAAAAOCAAAA TN 0 14.0 64.57 0.00 33.97 -AAAAAAAAAAODAAAA \N 1 84.0 30.50 0.00 28.97 -AAAAAAAAAAODAAAA TN 0 84.0 30.50 0.00 28.97 -AAAAAAAAAAPBAAAA \N 1 45.0 118.89 2380.59 84.71 -AAAAAAAAAAPBAAAA TN 0 45.0 118.89 2380.59 84.71 -AAAAAAAAABAAAAAA \N 1 97.0 124.75 0.00 74.85 -AAAAAAAAABAAAAAA TN 0 97.0 124.75 0.00 74.85 -AAAAAAAAABABAAAA \N 1 31.0 29.98 17.09 27.58 -AAAAAAAAABABAAAA TN 0 31.0 29.98 17.09 27.58 -AAAAAAAAABAEAAAA \N 1 34.0 17.21 0.00 13.42 -AAAAAAAAABAEAAAA TN 0 34.0 17.21 0.00 13.42 -AAAAAAAAABCBAAAA \N 1 38.0 131.37 0.00 52.32 -AAAAAAAAABCBAAAA TN 0 38.0 131.37 0.00 52.32 -AAAAAAAAABDAAAAA \N 1 31.5 68.34 0.00 63.27 -AAAAAAAAABDAAAAA TN 0 31.5 68.34 0.00 63.27 -AAAAAAAAABDBAAAA \N 1 56.0 103.85 1624.17 59.19 -AAAAAAAAABDBAAAA TN 0 56.0 103.85 1624.17 59.19 -AAAAAAAAABDDAAAA \N 1 67.33333333333333 119.42 23.18 38.72 -AAAAAAAAABDDAAAA TN 0 67.33333333333333 119.42 23.18 38.72 -AAAAAAAAABDEAAAA \N 1 61.0 85.95 2282.36 44.60 -AAAAAAAAABDEAAAA TN 0 61.0 85.95 2282.36 44.60 -AAAAAAAAABEDAAAA \N 1 61.0 85.14 0.00 50.23 -AAAAAAAAABEDAAAA TN 0 61.0 85.14 0.00 50.23 -AAAAAAAAABFBAAAA \N 1 31.0 23.55 0.00 13.65 -AAAAAAAAABFBAAAA TN 0 31.0 23.55 0.00 13.65 -AAAAAAAAABFCAAAA \N 1 83.0 15.50 0.00 0.00 -AAAAAAAAABFCAAAA TN 0 83.0 15.50 0.00 0.00 -AAAAAAAAABGAAAAA \N 1 64.0 35.08 0.00 3.15 -AAAAAAAAABGAAAAA TN 0 64.0 35.08 0.00 3.15 -AAAAAAAAABGBAAAA \N 1 40.0 25.07 0.00 16.04 -AAAAAAAAABGBAAAA TN 0 40.0 25.07 0.00 16.04 -AAAAAAAAABGEAAAA \N 1 39.5 56.76 14.25 36.00 -AAAAAAAAABGEAAAA TN 0 39.5 56.76 14.25 36.00 -AAAAAAAAABHAAAAA \N 1 93.0 74.80 0.00 21.69 -AAAAAAAAABHAAAAA TN 0 93.0 74.80 0.00 21.69 -AAAAAAAAABHCAAAA \N 1 31.5 79.83 181.38 61.93 -AAAAAAAAABHCAAAA TN 0 31.5 79.83 181.38 61.93 -AAAAAAAAABIBAAAA \N 1 48.0 170.89 0.00 140.12 -AAAAAAAAABIBAAAA TN 0 48.0 170.89 0.00 140.12 -AAAAAAAAABJAAAAA \N 1 46.5 82.32 0.00 44.98 -AAAAAAAAABJAAAAA TN 0 46.5 82.32 0.00 44.98 -AAAAAAAAABJBAAAA \N 1 76.0 12.40 0.00 3.96 -AAAAAAAAABJBAAAA TN 0 76.0 12.40 0.00 3.96 -AAAAAAAAABJDAAAA \N 1 34.0 118.50 0.00 61.20 -AAAAAAAAABJDAAAA TN 0 34.0 118.50 0.00 61.20 -AAAAAAAAABKAAAAA \N 1 65.0 8.77 0.00 5.18 -AAAAAAAAABKAAAAA TN 0 65.0 8.77 0.00 5.18 -AAAAAAAAABKCAAAA \N 1 26.0 51.57 0.00 41.25 -AAAAAAAAABKCAAAA TN 0 26.0 51.57 0.00 41.25 -AAAAAAAAABLBAAAA \N 1 61.5 149.12 0.00 82.54 -AAAAAAAAABLBAAAA TN 0 61.5 149.12 0.00 82.54 -AAAAAAAAABMAAAAA \N 1 14.0 109.97 0.00 10.99 +\N \N 1 51.05758807588076 75.6595 194.4079 38.2563 +AAAAAAAAAAABAAAA \N 1 46.0 114.7200 0.0000 32.1200 +AAAAAAAAAAABAAAA TN 0 46.0 114.7200 0.0000 32.1200 +AAAAAAAAAAAEAAAA \N 1 100.0 77.9700 0.0000 57.6900 +AAAAAAAAAAAEAAAA TN 0 100.0 77.9700 0.0000 57.6900 +AAAAAAAAAABAAAAA \N 1 6.0 48.8900 13.6100 2.4400 +AAAAAAAAAABAAAAA TN 0 6.0 48.8900 13.6100 2.4400 +AAAAAAAAAACAAAAA \N 1 62.0 32.2133 0.0000 5.5066 +AAAAAAAAAACAAAAA TN 0 62.0 32.2133 0.0000 5.5066 +AAAAAAAAAACDAAAA \N 1 97.0 161.7800 0.0000 55.0000 +AAAAAAAAAACDAAAA TN 0 97.0 161.7800 0.0000 55.0000 +AAAAAAAAAADBAAAA \N 1 28.0 136.0100 575.7600 73.4400 +AAAAAAAAAADBAAAA TN 0 28.0 136.0100 575.7600 73.4400 +AAAAAAAAAADCAAAA \N 1 64.0 116.1400 0.0000 108.0100 +AAAAAAAAAADCAAAA TN 0 64.0 116.1400 0.0000 108.0100 +AAAAAAAAAAEBAAAA \N 1 9.0 5.4300 0.0000 5.2100 +AAAAAAAAAAEBAAAA TN 0 9.0 5.4300 0.0000 5.2100 +AAAAAAAAAAEDAAAA \N 1 45.5 87.6350 0.0000 51.8400 +AAAAAAAAAAEDAAAA TN 0 45.5 87.6350 0.0000 51.8400 +AAAAAAAAAAGBAAAA \N 1 29.0 101.9400 0.0000 100.9200 +AAAAAAAAAAGBAAAA TN 0 29.0 101.9400 0.0000 100.9200 +AAAAAAAAAAGCAAAA \N 1 97.0 65.2700 0.0000 21.5300 +AAAAAAAAAAGCAAAA TN 0 97.0 65.2700 0.0000 21.5300 +AAAAAAAAAAGEAAAA \N 1 55.0 73.8750 0.0000 71.0000 +AAAAAAAAAAGEAAAA TN 0 55.0 73.8750 0.0000 71.0000 +AAAAAAAAAAHAAAAA \N 1 20.0 134.3000 0.0000 119.5200 +AAAAAAAAAAHAAAAA TN 0 20.0 134.3000 0.0000 119.5200 +AAAAAAAAAAHBAAAA \N 1 97.0 7.4000 0.0000 6.7300 +AAAAAAAAAAHBAAAA TN 0 97.0 7.4000 0.0000 6.7300 +AAAAAAAAAAHDAAAA \N 1 69.0 5.6200 0.0000 0.3300 +AAAAAAAAAAHDAAAA TN 0 69.0 5.6200 0.0000 0.3300 +AAAAAAAAAAIAAAAA \N 1 87.0 106.9800 0.0000 27.8100 +AAAAAAAAAAIAAAAA TN 0 87.0 106.9800 0.0000 27.8100 +AAAAAAAAAAKBAAAA \N 1 84.5 66.1750 847.8350 57.3800 +AAAAAAAAAAKBAAAA TN 0 84.5 66.1750 847.8350 57.3800 +AAAAAAAAAALAAAAA \N 1 6.0 32.2800 0.0000 7.4200 +AAAAAAAAAALAAAAA TN 0 6.0 32.2800 0.0000 7.4200 +AAAAAAAAAALCAAAA \N 1 98.0 34.3100 55.3000 1.7100 +AAAAAAAAAALCAAAA TN 0 98.0 34.3100 55.3000 1.7100 +AAAAAAAAAALDAAAA \N 1 59.0 129.4700 713.9000 22.0000 +AAAAAAAAAALDAAAA TN 0 59.0 129.4700 713.9000 22.0000 +AAAAAAAAAANAAAAA \N 1 74.0 60.8750 0.0000 13.2000 +AAAAAAAAAANAAAAA TN 0 74.0 60.8750 0.0000 13.2000 +AAAAAAAAAANBAAAA \N 1 96.0 130.7900 1864.5100 129.4800 +AAAAAAAAAANBAAAA TN 0 96.0 130.7900 1864.5100 129.4800 +AAAAAAAAAAOAAAAA \N 1 85.0 130.3400 0.0000 122.5100 +AAAAAAAAAAOAAAAA TN 0 85.0 130.3400 0.0000 122.5100 +AAAAAAAAAAOCAAAA \N 1 14.0 64.5750 0.0000 33.9750 +AAAAAAAAAAOCAAAA TN 0 14.0 64.5750 0.0000 33.9750 +AAAAAAAAAAODAAAA \N 1 84.0 30.5000 0.0000 28.9700 +AAAAAAAAAAODAAAA TN 0 84.0 30.5000 0.0000 28.9700 +AAAAAAAAAAPBAAAA \N 1 45.0 118.8900 2380.5950 84.7150 +AAAAAAAAAAPBAAAA TN 0 45.0 118.8900 2380.5950 84.7150 +AAAAAAAAABAAAAAA \N 1 97.0 124.7500 0.0000 74.8500 +AAAAAAAAABAAAAAA TN 0 97.0 124.7500 0.0000 74.8500 +AAAAAAAAABABAAAA \N 1 31.0 29.9800 17.0900 27.5800 +AAAAAAAAABABAAAA TN 0 31.0 29.9800 17.0900 27.5800 +AAAAAAAAABAEAAAA \N 1 34.0 17.2100 0.0000 13.4200 +AAAAAAAAABAEAAAA TN 0 34.0 17.2100 0.0000 13.4200 +AAAAAAAAABCBAAAA \N 1 38.0 131.3750 0.0000 52.3200 +AAAAAAAAABCBAAAA TN 0 38.0 131.3750 0.0000 52.3200 +AAAAAAAAABDAAAAA \N 1 31.5 68.3450 0.0000 63.2750 +AAAAAAAAABDAAAAA TN 0 31.5 68.3450 0.0000 63.2750 +AAAAAAAAABDBAAAA \N 1 56.0 103.8500 1624.1700 59.1900 +AAAAAAAAABDBAAAA TN 0 56.0 103.8500 1624.1700 59.1900 +AAAAAAAAABDDAAAA \N 1 67.33333333333333 119.4200 23.1866 38.7200 +AAAAAAAAABDDAAAA TN 0 67.33333333333333 119.4200 23.1866 38.7200 +AAAAAAAAABDEAAAA \N 1 61.0 85.9500 2282.3600 44.6050 +AAAAAAAAABDEAAAA TN 0 61.0 85.9500 2282.3600 44.6050 +AAAAAAAAABEDAAAA \N 1 61.0 85.1400 0.0000 50.2300 +AAAAAAAAABEDAAAA TN 0 61.0 85.1400 0.0000 50.2300 +AAAAAAAAABFBAAAA \N 1 31.0 23.5500 0.0000 13.6500 +AAAAAAAAABFBAAAA TN 0 31.0 23.5500 0.0000 13.6500 +AAAAAAAAABFCAAAA \N 1 83.0 15.5000 0.0000 0.0000 +AAAAAAAAABFCAAAA TN 0 83.0 15.5000 0.0000 0.0000 +AAAAAAAAABGAAAAA \N 1 64.0 35.0800 0.0000 3.1500 +AAAAAAAAABGAAAAA TN 0 64.0 35.0800 0.0000 3.1500 +AAAAAAAAABGBAAAA \N 1 40.0 25.0700 0.0000 16.0400 +AAAAAAAAABGBAAAA TN 0 40.0 25.0700 0.0000 16.0400 +AAAAAAAAABGEAAAA \N 1 39.5 56.7650 14.2550 36.0050 +AAAAAAAAABGEAAAA TN 0 39.5 56.7650 14.2550 36.0050 +AAAAAAAAABHAAAAA \N 1 93.0 74.8000 0.0000 21.6900 +AAAAAAAAABHAAAAA TN 0 93.0 74.8000 0.0000 21.6900 +AAAAAAAAABHCAAAA \N 1 31.5 79.8350 181.3800 61.9350 +AAAAAAAAABHCAAAA TN 0 31.5 79.8350 181.3800 61.9350 +AAAAAAAAABIBAAAA \N 1 48.0 170.8900 0.0000 140.1200 +AAAAAAAAABIBAAAA TN 0 48.0 170.8900 0.0000 140.1200 +AAAAAAAAABJAAAAA \N 1 46.5 82.3250 0.0000 44.9850 +AAAAAAAAABJAAAAA TN 0 46.5 82.3250 0.0000 44.9850 +AAAAAAAAABJBAAAA \N 1 76.0 12.4000 0.0000 3.9600 +AAAAAAAAABJBAAAA TN 0 76.0 12.4000 0.0000 3.9600 +AAAAAAAAABJDAAAA \N 1 34.0 118.5050 0.0000 61.2050 +AAAAAAAAABJDAAAA TN 0 34.0 118.5050 0.0000 61.2050 +AAAAAAAAABKAAAAA \N 1 65.0 8.7750 0.0000 5.1800 +AAAAAAAAABKAAAAA TN 0 65.0 8.7750 0.0000 5.1800 +AAAAAAAAABKCAAAA \N 1 26.0 51.5700 0.0000 41.2500 +AAAAAAAAABKCAAAA TN 0 26.0 51.5700 0.0000 41.2500 +AAAAAAAAABLBAAAA \N 1 61.5 149.1200 0.0000 82.5400 +AAAAAAAAABLBAAAA TN 0 61.5 149.1200 0.0000 82.5400 +AAAAAAAAABMAAAAA \N 1 14.0 109.9700 0.0000 10.9900 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q28.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q28.out index b7530ee4cb90a6..30c7dad02db91b 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q28.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q28.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q28 -- -77.71 36142 9210 69.50 35250 6592 134.01 27875 9741 82.55 31422 7678 61.82 36100 8664 39.27 29776 5210 +77.7174 36142 9210 69.5026 35250 6592 134.0115 27875 9741 82.5527 31422 7678 61.8260 36100 8664 39.2795 29776 5210 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_1.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_1.out index f80ff8a681875a..b589730893d0ea 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_1.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_1.out @@ -1,6 +1,6 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q39_1 -- -1 265 1 324.75 1.2438391781531353 1 265 2 329.0 1.0151581328149206 +1 265 1 324.75 1.2438391781531353 1 265 2 329.0 1.0151581328149208 1 363 1 499.5 1.031941572270649 1 363 2 321.0 1.1411766752007977 1 679 1 373.75 1.0955498064867504 1 679 2 417.5 1.042970994259454 1 695 1 450.75 1.0835888283564505 1 695 2 368.75 1.1356494125569416 @@ -9,7 +9,7 @@ 1 827 1 271.75 1.1046890134130438 1 827 2 424.75 1.1653198631238286 1 1041 1 382.5 1.284808399803008 1 1041 2 424.75 1.000577271456812 1 1569 1 212.0 1.630213519639535 1 1569 2 239.25 1.2641513267800557 -1 1623 1 338.25 1.1285483279713715 1 1623 2 261.3333333333333 1.2717809002195564 +1 1623 1 338.25 1.1285483279713713 1 1623 2 261.3333333333333 1.2717809002195564 1 2581 1 448.5 1.060429041250449 1 2581 2 476.25 1.0362984739390064 1 2705 1 246.25 1.012030835795969 1 2705 2 294.6666666666667 1.0742134101583702 1 3131 1 393.75 1.0037613982687346 1 3131 2 480.5 1.0669144981482768 @@ -19,19 +19,19 @@ 1 5627 1 282.75 1.5657032366359889 1 5627 2 297.5 1.2084286841430678 1 7017 1 175.5 1.0427454215644427 1 7017 2 321.3333333333333 1.0183356932936254 1 7317 1 366.3333333333333 1.025466403613547 1 7317 2 378.0 1.2172513189920555 -1 7569 1 430.5 1.0874396852180854 1 7569 2 360.25 1.0470055593145149 -1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.008092263550718 +1 7569 1 430.5 1.0874396852180854 1 7569 2 360.25 1.047005559314515 +1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.0080922635507177 1 8319 1 306.75 1.1615378040478215 1 8319 2 276.0 1.1420996385609428 1 8443 1 327.75 1.256718374192724 1 8443 2 332.5 1.0044167259988928 -1 8583 1 319.5 1.024108893111539 1 8583 2 310.25 1.2358813775861328 +1 8583 1 319.5 1.024108893111539 1 8583 2 310.25 1.2358813775861326 1 8591 1 398.0 1.1478168692042447 1 8591 2 355.75 1.0024472149348966 -1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.2342122780960432 +1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.234212278096043 1 9081 1 367.0 1.0878932141280895 1 9081 2 435.0 1.0330530776324107 1 9357 1 351.6666666666667 1.1902922622025887 1 9357 2 427.0 1.0438583026358363 1 9449 1 406.25 1.0183183104803557 1 9449 2 175.0 1.0544779796296408 1 9713 1 242.5 1.1035044355064203 1 9713 2 393.0 1.208474608738988 1 9809 1 479.0 1.0189602512117633 1 9809 2 317.5 1.0614142074924882 -1 9993 1 417.75 1.009983267243525 1 9993 2 204.5 1.552870745350107 +1 9993 1 417.75 1.0099832672435247 1 9993 2 204.5 1.552870745350107 1 10127 1 239.75 1.0561770587198123 1 10127 2 359.25 1.1857980403742183 1 11159 1 407.25 1.0785507154337637 1 11159 2 250.0 1.334757905639321 1 11277 1 211.25 1.2615858275316627 1 11277 2 330.75 1.0808767951625093 @@ -45,7 +45,7 @@ 1 13191 1 260.25 1.063569632291568 1 13191 2 405.0 1.0197999172180061 1 13561 1 335.25 1.2609616961776389 1 13561 2 240.0 1.0513604502245155 1 13935 1 311.75 1.0399289695412326 1 13935 2 275.0 1.0367527180321774 -1 14687 1 358.0 1.4369356919381713 1 14687 2 187.0 1.549363153147496 +1 14687 1 358.0 1.4369356919381713 1 14687 2 187.0 1.5493631531474956 1 14719 1 209.0 1.0411509639707628 1 14719 2 489.0 1.376616882800804 1 15345 1 148.5 1.5295784035794022 1 15345 2 246.5 1.5087987747231526 1 15427 1 482.75 1.0124238928335043 1 15427 2 333.25 1.2724770126308678 @@ -63,7 +63,7 @@ 2 1991 1 356.0 1.1336790046919885 2 1991 2 273.25 1.3324196418089087 2 2031 1 407.5 1.0209876826110387 2 2031 2 418.75 1.0053388632912839 2 2481 1 319.75 1.116026660755801 2 2481 2 378.3333333333333 1.0597185274084644 -2 2725 1 349.75 1.1148704918064747 2 2725 2 265.6666666666667 1.5462972148471537 +2 2725 1 349.75 1.1148704918064747 2 2725 2 265.6666666666667 1.5462972148471539 2 3073 1 385.0 1.1020845844189129 2 3073 2 231.75 1.0884989063827268 2 3769 1 334.0 1.19542966145639 2 3769 2 335.0 1.049464958250903 2 4085 1 327.75 1.1005413873145125 2 4085 2 281.75 1.0187608064801108 @@ -78,7 +78,7 @@ 2 6767 1 341.0 1.093163984134538 2 6767 2 235.0 1.1399543855818017 2 7411 1 460.0 1.0628293255143475 2 7411 2 297.5 1.000576535072398 2 8489 1 126.75 1.341646295852091 2 8489 2 398.25 1.0041124840252154 -2 8633 1 218.5 1.4645189740171023 2 8633 2 230.25 1.3116963014576621 +2 8633 1 218.5 1.4645189740171023 2 8633 2 230.25 1.311696301457662 2 8807 1 417.25 1.025811293001377 2 8807 2 356.25 1.1079730633089233 2 8883 1 249.25 1.1112271782210548 2 8883 2 189.25 1.010075485139798 2 9253 1 413.3333333333333 1.1606659948102405 2 9253 2 465.0 1.0242445824028785 @@ -92,7 +92,7 @@ 2 12633 1 402.75 1.0071362075740695 2 12633 2 367.0 1.1270535638607155 2 12765 1 308.0 1.1188476882701337 2 12765 2 347.0 1.1571744590236304 2 13077 1 277.0 1.2323360849352152 2 13077 2 223.5 1.139400344912951 -2 13687 1 361.25 1.0107341657610867 2 13687 2 468.25 1.00984291842181 +2 13687 1 361.25 1.0107341657610864 2 13687 2 468.25 1.00984291842181 2 14025 1 371.75 1.0150136083050016 2 14025 2 141.0 1.2543170259746204 2 14117 1 298.5 1.0251238034747268 2 14117 2 220.25 1.4152684465941177 2 14347 1 366.0 1.0327892946261927 2 14347 2 369.75 1.0185739900192863 @@ -101,14 +101,14 @@ 2 15321 1 527.0 1.2102662554654002 2 15321 2 298.75 1.1309098406792113 2 15347 1 243.0 1.22262397963835 2 15347 2 310.75 1.2036584852655927 2 15533 1 223.0 1.096511132968014 2 15533 2 330.0 1.4967488488790472 -2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894105 +2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894102 2 16107 1 376.0 1.0133246306103783 2 16107 2 364.75 1.0688677983776655 2 16749 1 200.0 1.0944709528656604 2 16749 2 438.25 1.0360646618074532 2 17329 1 321.3333333333333 1.3093279467658028 2 17329 2 490.25 1.0756580649722338 2 17417 1 321.75 1.1306764803839018 2 17417 2 534.0 1.0010725216798313 3 1049 1 252.5 1.1090641101125922 3 1049 2 457.25 1.0239841249245367 3 1415 1 247.5 1.1321617788582448 3 1415 2 369.75 1.095467956288316 -3 2199 1 185.75 1.2028125570694115 3 2199 2 300.75 1.0767845064923045 +3 2199 1 185.75 1.2028125570694115 3 2199 2 300.75 1.0767845064923047 3 2403 1 270.75 1.3258705678179297 3 2403 2 384.0 1.0903987183011015 3 2541 1 364.75 1.079213526102894 3 2541 2 550.5 1.0545588871101828 3 2727 1 303.75 1.030164700291085 3 2727 2 219.25 1.3822091831959378 @@ -121,19 +121,19 @@ 3 6691 1 377.0 1.1090737292917523 3 6691 2 380.5 1.0581301250281556 3 6757 1 282.5 1.089500938688411 3 6757 2 345.25 1.2263828747838474 3 6915 1 420.6666666666667 1.0468345634906968 3 6915 2 292.5 1.2506171072716117 -3 7207 1 329.6666666666667 1.5954482160720398 3 7207 2 414.5 1.017919707908937 +3 7207 1 329.6666666666667 1.5954482160720393 3 7207 2 414.5 1.017919707908937 3 7889 1 318.5 1.2879030049985103 3 7889 2 291.3333333333333 1.0042925323922787 3 8559 1 356.25 1.0065193461695627 3 8559 2 393.5 1.0128831652141206 -3 8829 1 364.25 1.0792852260446877 3 8829 2 350.25 1.1133912240741104 +3 8829 1 364.25 1.0792852260446875 3 8829 2 350.25 1.1133912240741104 3 9555 1 377.0 1.1308469328910158 3 9555 2 444.75 1.0171588175042316 3 9623 1 331.3333333333333 1.1551289271934477 3 9623 2 284.6666666666667 1.0303724426257317 -3 9813 1 343.75 1.0516953753508833 3 9813 2 384.6666666666667 1.0815005906604847 +3 9813 1 343.75 1.0516953753508833 3 9813 2 384.6666666666667 1.0815005906604849 3 9881 1 351.5 1.1788820554157222 3 9881 2 287.75 1.0909386089510784 3 10035 1 378.25 1.0216399511791376 3 10035 2 364.25 1.1567922653398062 3 10509 1 420.25 1.0548626901275737 3 10509 2 368.25 1.1820633359473098 3 10547 1 182.33333333333334 1.5325641514869042 3 10547 2 320.25 1.302441844373152 3 10743 1 233.25 1.2793022354241157 3 10743 2 110.25 1.107204634127507 -3 11477 1 264.25 1.0953530000836025 3 11477 2 278.5 1.0327909817070402 +3 11477 1 264.25 1.0953530000836025 3 11477 2 278.5 1.03279098170704 3 11959 1 358.0 1.0684835251792983 3 11959 2 268.5 1.0089856798911991 3 12043 1 169.25 1.033093808880221 3 12043 2 377.25 1.0161962499718764 3 12157 1 326.3333333333333 1.0022318670551493 3 12157 2 396.3333333333333 1.0287818050404884 @@ -147,8 +147,8 @@ 3 16233 1 260.6666666666667 1.120423550056809 3 16233 2 210.5 1.1788143336685517 3 16267 1 456.0 1.00422634651884 3 16267 2 364.3333333333333 1.4818855428309732 3 16605 1 394.25 1.1137413572906036 3 16605 2 296.25 1.2885892655671596 -3 16949 1 155.75 1.1186177285449936 3 16949 2 229.5 1.0289469196724543 -3 17319 1 364.75 1.2709364445674025 3 17319 2 359.25 1.1578751434862422 +3 16949 1 155.75 1.1186177285449939 3 16949 2 229.5 1.0289469196724543 +3 17319 1 364.75 1.2709364445674023 3 17319 2 359.25 1.1578751434862422 4 947 1 247.5 1.6933181813486973 4 947 2 203.33333333333334 1.205433145161931 4 1895 1 354.75 1.2397341541992284 4 1895 2 383.75 1.0893076992144062 4 3429 1 358.5 1.0665593354923446 4 3429 2 346.0 1.251948930065546 @@ -157,39 +157,39 @@ 4 4885 1 151.0 1.3205570350636184 4 4885 2 377.25 1.0489035237886835 4 4915 1 289.25 1.0863929490514617 4 4915 2 368.0 1.069658554605372 4 5043 1 476.0 1.0155964276489484 4 5043 2 244.25 1.356289369084929 -4 5095 1 334.0 1.2258861291353158 4 5095 2 390.25 1.0621788063332438 +4 5095 1 334.0 1.2258861291353158 4 5095 2 390.25 1.0621788063332436 4 5193 1 263.3333333333333 1.250170954501139 4 5193 2 323.0 1.0979616195802828 4 5975 1 434.0 1.0233614450980864 4 5975 2 359.75 1.1979356900084084 4 6251 1 285.0 1.121538025585264 4 6251 2 335.5 1.1602192523957113 4 6389 1 280.75 1.2049236089487845 4 6389 2 259.3333333333333 1.4816550575659289 4 6487 1 452.75 1.0710626602211524 4 6487 2 350.5 1.17164756896522 4 6619 1 430.0 1.0007262551157654 4 6619 2 226.25 1.548557450713079 -4 7191 1 260.75 1.0012666837154776 4 7191 2 195.25 1.5372675520067365 +4 7191 1 260.75 1.0012666837154778 4 7191 2 195.25 1.5372675520067365 4 7427 1 239.5 1.4183567144406795 4 7427 2 373.25 1.0429791976763843 -4 8453 1 314.75 1.0259714909803297 4 8453 2 376.75 1.0099023931660847 +4 8453 1 314.75 1.0259714909803297 4 8453 2 376.75 1.0099023931660849 4 8781 1 518.5 1.100549995019371 4 8781 2 521.0 1.123770469908755 4 9571 1 314.0 1.216857824298178 4 9571 2 309.0 1.089216738940079 4 9587 1 248.0 1.4981887260612339 4 9587 2 248.0 1.0064987840475923 4 10333 1 321.0 1.1486107061789543 4 10333 2 317.0 1.0469226317412668 -4 10969 1 186.66666666666666 1.1044206164135038 4 10969 2 307.0 1.1094764105733856 +4 10969 1 186.66666666666666 1.104420616413504 4 10969 2 307.0 1.1094764105733856 4 10993 1 446.0 1.0092376322965588 4 10993 2 206.66666666666666 1.2355333519949105 4 11571 1 342.5 1.142628399354839 4 11571 2 304.6666666666667 1.0319943224652848 4 11979 1 225.33333333333334 1.4670656155247088 4 11979 2 438.25 1.1389926990347663 4 13409 1 312.3333333333333 1.3427502512651468 4 13409 2 336.25 1.1081978302033695 4 13443 1 417.75 1.0217796082231347 4 13443 2 334.0 1.3076430852966527 4 13567 1 271.5 1.0087621621432743 4 13567 2 370.0 1.4557686063410562 -4 13683 1 318.75 1.0149827729946173 4 13683 2 363.5 1.0781154578332097 -4 14143 1 367.0 1.0441799438931547 4 14143 2 290.0 1.1933060754121456 +4 13683 1 318.75 1.0149827729946173 4 13683 2 363.5 1.0781154578332095 +4 14143 1 367.0 1.0441799438931547 4 14143 2 290.0 1.1933060754121454 4 14401 1 342.75 1.1836559036030756 4 14401 2 344.25 1.2067083116272619 -4 14693 1 447.25 1.0516674911652104 4 14693 2 498.0 1.3517382644369342 +4 14693 1 447.25 1.0516674911652102 4 14693 2 498.0 1.3517382644369342 4 14877 1 414.3333333333333 1.1707723877930458 4 14877 2 282.5 1.5830582944346865 4 15063 1 378.25 1.1128192588166839 4 15063 2 444.0 1.0632777688204158 -4 15275 1 335.5 1.1536382939175556 4 15275 2 292.6666666666667 1.297831368103705 -4 15509 1 296.3333333333333 1.0246740536582173 4 15509 2 317.6666666666667 1.447036456507824 -4 15969 1 423.0 1.0472875497665226 4 15969 2 342.5 1.2511769371808568 -4 16627 1 485.5 1.0151460895716244 4 16627 2 161.25 1.353325272620004 +4 15275 1 335.5 1.1536382939175558 4 15275 2 292.6666666666667 1.297831368103705 +4 15509 1 296.3333333333333 1.0246740536582173 4 15509 2 317.6666666666667 1.4470364565078238 +4 15969 1 423.0 1.0472875497665224 4 15969 2 342.5 1.2511769371808568 +4 16627 1 485.5 1.0151460895716244 4 16627 2 161.25 1.3533252726200042 4 16641 1 521.5 1.1050662064564454 4 16641 2 221.5 1.0308590510025117 -4 16751 1 549.5 1.082214382125362 4 16751 2 223.33333333333334 1.3377897605859546 +4 16751 1 549.5 1.082214382125362 4 16751 2 223.33333333333334 1.3377897605859543 5 75 1 333.0 1.2656318762849212 5 75 2 226.0 1.0358078507992579 5 125 1 441.6666666666667 1.0959714573775443 5 125 2 331.5 1.0081148286008836 5 431 1 159.0 1.1061794752181042 5 431 2 304.0 1.1224225373103636 @@ -200,18 +200,18 @@ 5 2855 1 406.0 1.4037637084639343 5 2855 2 183.25 1.0662249910239627 5 3137 1 271.25 1.575453220592864 5 3137 2 380.0 1.0834203388600319 5 3279 1 299.5 1.053669716363755 5 3279 2 276.75 1.4458878093841827 -5 3467 1 294.0 1.1477294638716873 5 3467 2 349.6666666666667 1.1674223692818806 -5 4463 1 338.0 1.0699320081481432 5 4463 2 273.5 1.2369797321835678 -5 4719 1 340.5 1.057185780180554 5 4719 2 423.6666666666667 1.0255000206713487 +5 3467 1 294.0 1.1477294638716873 5 3467 2 349.6666666666667 1.1674223692818808 +5 4463 1 338.0 1.0699320081481432 5 4463 2 273.5 1.2369797321835676 +5 4719 1 340.5 1.0571857801805542 5 4719 2 423.6666666666667 1.0255000206713487 5 4739 1 281.3333333333333 1.0242971514325028 5 4739 2 383.5 1.0334337390189823 5 4839 1 310.25 1.035903440911969 5 4839 2 232.0 1.2954193820330193 -5 4979 1 359.5 1.1046408074063154 5 4979 2 323.75 1.1704250950730493 -5 5401 1 219.25 1.2773870241916034 5 5401 2 203.0 1.0915675205208268 +5 4979 1 359.5 1.1046408074063157 5 4979 2 323.75 1.1704250950730493 +5 5401 1 219.25 1.2773870241916032 5 5401 2 203.0 1.091567520520827 5 5635 1 370.0 1.0227054644459215 5 5635 2 351.6666666666667 1.3777664464428738 5 5797 1 403.0 1.0234882286709048 5 5797 2 457.5 1.003704010389515 5 5901 1 360.25 1.125963126923387 5 5901 2 376.0 1.0095038425625151 5 6129 1 419.25 1.0169180165631466 5 6129 2 359.5 1.0478889386811094 -5 6213 1 351.6666666666667 1.2056212536733542 5 6213 2 361.5 1.1168408058550758 +5 6213 1 351.6666666666667 1.2056212536733542 5 6213 2 361.5 1.116840805855076 5 6479 1 301.3333333333333 1.2780010449304997 5 6479 2 395.75 1.1779743547973778 5 7333 1 227.0 1.461134600265013 5 7333 2 243.75 1.1789162497808614 5 7923 1 358.0 1.1046770912449826 5 7923 2 342.3333333333333 1.1607781125264067 @@ -223,24 +223,24 @@ 5 10949 1 383.0 1.1125677373995029 5 10949 2 378.25 1.125540609959554 5 11107 1 446.5 1.2653489768601378 5 11107 2 258.5 1.553612564193816 5 11795 1 395.5 1.0104473172545645 5 11795 2 430.75 1.131062588545398 -5 12017 1 347.75 1.1682379397902218 5 12017 2 308.0 1.1593227968413717 +5 12017 1 347.75 1.1682379397902216 5 12017 2 308.0 1.1593227968413717 5 12027 1 456.25 1.0262940073409625 5 12027 2 390.3333333333333 1.1142770095355214 -5 13583 1 430.3333333333333 1.042383929052728 5 13583 2 256.25 1.5410348277289667 +5 13583 1 430.3333333333333 1.042383929052728 5 13583 2 256.25 1.541034827728967 5 13651 1 272.3333333333333 1.169523124191674 5 13651 2 330.5 1.1901873530915061 5 13783 1 419.5 1.0584699696320432 5 13783 2 339.5 1.0680909505443135 5 13859 1 318.0 1.1422239044797105 5 13859 2 380.25 1.0564496237557859 5 14537 1 206.0 1.2283439997338772 5 14537 2 357.75 1.0387982680964687 -5 15309 1 276.3333333333333 1.2987590579253727 5 15309 2 409.0 1.0102406245856923 -5 15883 1 385.3333333333333 1.0124777526338784 5 15883 2 173.25 1.3562238248195935 +5 15309 1 276.3333333333333 1.2987590579253725 5 15309 2 409.0 1.0102406245856923 +5 15883 1 385.3333333333333 1.0124777526338786 5 15883 2 173.25 1.3562238248195932 5 15935 1 293.5 1.0187659410172984 5 15935 2 271.25 1.4000947515083553 5 15949 1 241.5 1.148665986924513 5 15949 2 235.0 1.4072887931753781 5 16037 1 327.25 1.1307617323781536 5 16037 2 412.6666666666667 1.1830200153757018 5 16291 1 380.5 1.0549595028454235 5 16291 2 411.6666666666667 1.034921399084621 -5 16459 1 370.0 1.275649908122718 5 16459 2 265.75 1.2988191692443933 +5 16459 1 370.0 1.275649908122718 5 16459 2 265.75 1.2988191692443931 5 16901 1 305.25 1.1043010533964068 5 16901 2 186.5 1.0231269284283626 5 17199 1 376.5 1.1038969766440296 5 17199 2 374.0 1.0873031171988548 5 17387 1 298.3333333333333 1.3848741714581234 5 17387 2 327.6666666666667 1.3670875783476784 -5 17717 1 283.75 1.1557156567771052 5 17717 2 235.25 1.1416239351288797 +5 17717 1 283.75 1.1557156567771052 5 17717 2 235.25 1.1416239351288795 5 17927 1 217.5 1.3549964301320125 5 17927 2 250.75 1.070921305926391 -5 17943 1 209.75 1.3717071339917377 5 17943 2 428.0 1.1090799349168265 +5 17943 1 209.75 1.3717071339917375 5 17943 2 428.0 1.1090799349168265 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_2.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_2.out index 73ac2e81f0854d..357e4febda210f 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_2.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q39_2.out @@ -2,14 +2,14 @@ -- !pipeline_q39_2 -- 1 1569 1 212.0 1.630213519639535 1 1569 2 239.25 1.2641513267800557 1 5627 1 282.75 1.5657032366359889 1 5627 2 297.5 1.2084286841430678 -1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.008092263550718 -1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.2342122780960432 +1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.0080922635507177 +1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.234212278096043 1 15345 1 148.5 1.5295784035794022 1 15345 2 246.5 1.5087987747231526 2 71 1 221.5 1.563974108334745 2 71 2 309.0 1.4917057895885681 2 6103 1 194.33333333333334 1.5160670179307387 2 6103 2 158.5 1.2743698636165062 2 6489 1 268.0 1.6956372368432266 2 6489 2 389.0 1.4105780519299767 -2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894105 -3 7207 1 329.6666666666667 1.5954482160720398 3 7207 2 414.5 1.017919707908937 +2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894102 +3 7207 1 329.6666666666667 1.5954482160720393 3 7207 2 414.5 1.017919707908937 3 10547 1 182.33333333333334 1.5325641514869042 3 10547 2 320.25 1.302441844373152 3 12867 1 278.25 1.640380012394735 3 12867 2 350.75 1.2006933321742796 4 947 1 247.5 1.6933181813486973 4 947 2 203.33333333333334 1.205433145161931 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q47.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q47.out index f503399dd7729f..89fb417cb51e39 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q47.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q47.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q47 -- -Men importoimporto #1 ese Unknown 1999 3 5492.81 2070.65 3307.78 2784.11 -Music exportischolar #1 eing Unknown 1999 2 5134.23 1740.21 4401.89 2721.61 -Music edu packscholar #1 ese Unknown 1999 4 5463.70 2091.07 3391.39 3095.31 -Music edu packscholar #1 ought Unknown 1999 7 5552.30 2226.34 4081.99 7573.33 -Music edu packscholar #1 ese Unknown 1999 2 5463.70 2268.27 4139.47 3391.39 -Men edu packimporto #1 ought Unknown 1999 7 5176.25 1993.73 3542.54 5764.35 -Children exportiexporti #1 ese Unknown 1999 3 5185.89 2019.69 3479.21 2982.05 -Shoes amalgedu pack #1 ation Unknown 1999 6 5152.09 2077.67 3123.43 2368.73 -Men edu packimporto #1 eing Unknown 1999 3 5501.18 2453.88 2683.70 2615.32 -Children exportiexporti #1 ation Unknown 1999 4 5238.35 2232.03 3221.70 3649.52 -Shoes importoedu pack #1 eing Unknown 1999 5 4698.61 1703.27 2687.15 2757.83 -Music exportischolar #1 bar Unknown 1999 7 5318.14 2346.06 3483.88 7658.62 -Music edu packscholar #1 ation Unknown 1999 2 5622.22 2657.68 4207.03 3543.82 -Children exportiexporti #1 bar Unknown 1999 7 5280.66 2324.79 3003.61 5961.39 -Children importoexporti #1 eing Unknown 1999 2 4650.43 1734.45 2341.19 2720.78 -Shoes importoedu pack #1 ought Unknown 1999 4 4537.63 1623.33 2928.34 1905.23 -Women edu packamalg #1 ation Unknown 1999 4 4507.41 1596.92 2865.38 2665.75 -Men importoimporto #1 ought Unknown 1999 6 5045.75 2152.15 2834.94 2667.92 -Men edu packimporto #1 eing Unknown 1999 4 5501.18 2615.32 2453.88 2874.96 -Shoes exportiedu pack #1 bar Unknown 1999 3 5296.08 2410.44 2685.85 3821.39 -Men importoimporto #1 able Unknown 1999 2 5194.81 2333.43 2765.75 2674.91 -Music amalgscholar #1 ought Unknown 1999 2 4565.60 1727.16 3895.09 2606.58 -Music edu packscholar #1 eing Unknown 1999 5 5539.30 2704.16 3862.34 3960.90 -Shoes importoedu pack #1 ation Unknown 1999 4 4690.57 1855.85 3524.69 3050.34 -Men edu packimporto #1 eing Unknown 1999 2 5501.18 2683.70 4304.21 2453.88 -Women exportiamalg #1 able Unknown 1999 2 4123.60 1306.40 2876.61 2238.71 -Music exportischolar #1 able Unknown 1999 5 5090.10 2281.80 2488.24 3304.75 -Shoes exportiedu pack #1 ought Unknown 1999 2 4755.53 1951.00 3949.06 2767.05 -Men importoimporto #1 ese Unknown 1999 6 5492.81 2691.33 3210.74 3754.33 -Men amalgimporto #1 ation Unknown 1999 2 4909.46 2116.43 3187.20 3356.64 -Men importoimporto #1 ought Unknown 1999 2 5045.75 2253.70 4158.86 3467.09 -Shoes amalgedu pack #1 ation Unknown 1999 7 5152.09 2368.73 2077.67 7543.60 -Men edu packimporto #1 ese Unknown 1999 3 4979.36 2201.00 3110.55 3118.30 -Children exportiexporti #1 ation Unknown 1999 2 5238.35 2462.96 3808.48 3221.70 -Men amalgimporto #1 ation Unknown 1999 4 4909.46 2136.23 3356.64 3046.51 -Children importoexporti #1 able Unknown 1999 7 4586.29 1814.46 2643.58 6423.18 -Men edu packimporto #1 ation Unknown 1999 4 5170.36 2407.58 3086.77 2492.73 -Shoes amalgedu pack #1 ese Unknown 1999 7 4392.18 1630.14 2755.91 6185.73 -Shoes amalgedu pack #1 able Unknown 1999 5 4940.22 2187.55 2894.91 3018.65 -Men edu packimporto #1 ought Unknown 1999 4 5176.25 2424.94 4285.78 3286.20 -Women amalgamalg #1 able Unknown 1999 6 4507.24 1761.81 2891.95 2302.21 -Men importoimporto #1 ation Unknown 1999 3 5410.91 2672.68 3591.65 2988.08 -Men importoimporto #1 ation Unknown 1999 5 5410.91 2677.81 2988.08 2881.34 -Men edu packimporto #1 bar Unknown 1999 4 5632.73 2901.64 3202.87 3447.78 -Children exportiexporti #1 able Unknown 1999 5 4955.24 2230.80 2395.57 3003.89 -Men importoimporto #1 eing Unknown 1999 5 5074.07 2356.88 2833.40 2854.62 -Men edu packimporto #1 bar Unknown 1999 2 5632.73 2916.43 3847.05 3202.87 -Shoes exportiedu pack #1 ese Unknown 1999 3 4865.28 2151.76 3212.91 3768.25 -Men importoimporto #1 ese Unknown 1999 4 5492.81 2784.11 2070.65 3210.74 -Shoes exportiedu pack #1 bar Unknown 1999 7 5296.08 2591.12 3012.98 6254.36 -Shoes exportiedu pack #1 ation Unknown 1999 5 4873.51 2170.98 2302.76 3236.50 -Shoes amalgedu pack #1 able Unknown 1999 2 4940.22 2239.16 3495.29 2563.93 -Children exportiexporti #1 eing Unknown 1999 7 5109.65 2410.24 2916.46 6558.23 -Women importoamalg #1 able Unknown 1999 7 4574.74 1881.03 2345.66 6036.28 -Women amalgamalg #1 ought Unknown 1999 7 4619.70 1926.67 3528.98 5162.15 -Children importoexporti #1 bar Unknown 1999 7 4566.77 1879.57 3400.62 6244.92 -Music edu packscholar #1 ation Unknown 1999 6 5622.22 2943.26 3643.42 3847.77 -Music exportischolar #1 ation Unknown 1999 4 4962.65 2283.77 3210.01 2539.84 -Music exportischolar #1 ation Unknown 1999 2 4962.65 2284.23 3250.69 3210.01 -Men edu packimporto #1 ation Unknown 1999 5 5170.36 2492.73 2407.58 3288.94 -Men edu packimporto #1 able Unknown 1999 3 4989.30 2318.98 2618.89 3315.77 -Music exportischolar #1 bar Unknown 1999 4 5318.14 2651.96 2989.10 3649.76 -Music exportischolar #1 bar Unknown 1999 2 5318.14 2656.31 3419.77 2989.10 -Shoes amalgedu pack #1 bar Unknown 1999 6 4805.40 2149.56 2686.70 3098.25 -Children exportiexporti #1 bar Unknown 1999 4 5280.66 2625.99 3301.62 4331.44 -Music amalgscholar #1 ation Unknown 1999 4 4934.50 2280.93 2322.89 2421.13 -Music edu packscholar #1 able Unknown 1999 7 5335.90 2684.15 3543.33 7540.94 -Shoes importoedu pack #1 eing Unknown 1999 2 4698.61 2058.86 3191.74 2812.15 -Shoes edu packedu pack #1 ought Unknown 1999 5 4745.29 2109.27 3203.82 2737.82 -Shoes importoedu pack #1 ought Unknown 1999 5 4537.63 1905.23 1623.33 3170.58 -Men edu packimporto #1 able Unknown 1999 6 4989.30 2357.82 3363.58 3142.81 -Children exportiexporti #1 able Unknown 1999 2 4955.24 2326.67 2746.99 3097.63 -Men edu packimporto #1 eing Unknown 1999 5 5501.18 2874.96 2615.32 3714.00 -Shoes exportiedu pack #1 ation Unknown 1999 7 4873.51 2256.56 3236.50 6245.37 -Shoes importoedu pack #1 ese Unknown 1999 3 4676.74 2060.29 3273.67 2610.86 -Men amalgimporto #1 ese Unknown 1999 6 4764.59 2150.16 3284.27 3475.17 -Music amalgscholar #1 ation Unknown 1999 3 4934.50 2322.89 3197.76 2280.93 -Shoes exportiedu pack #1 bar Unknown 1999 2 5296.08 2685.85 4235.44 2410.44 -Children importoexporti #1 able Unknown 1999 5 4586.29 1982.77 2837.74 2643.58 -Music exportischolar #1 able Unknown 1999 4 5090.10 2488.24 2966.36 2281.80 -Shoes importoedu pack #1 able Unknown 1999 7 4700.91 2100.12 2533.01 5888.57 -Music edu packscholar #1 bar Unknown 1999 2 5484.78 2903.45 3410.13 3024.86 -Shoes exportiedu pack #1 ation Unknown 1999 3 4873.51 2300.45 2797.30 2302.76 -Shoes exportiedu pack #1 ation Unknown 1999 4 4873.51 2302.76 2300.45 2170.98 -Shoes importoedu pack #1 bar Unknown 1999 3 4794.67 2225.70 2756.97 2413.76 -Music edu packscholar #1 ought Unknown 1999 5 5552.30 2985.49 3241.69 4081.99 -Music edu packscholar #1 eing Unknown 1999 3 5539.30 2973.01 3069.18 3862.34 -Shoes amalgedu pack #1 eing Unknown 1999 7 4706.54 2143.18 2458.07 5967.73 -Children exportiexporti #1 ought Unknown 1999 5 5018.27 2458.03 3467.53 2683.61 -Children exportiexporti #1 able Unknown 1999 4 4955.24 2395.57 3097.63 2230.80 -Children exportiexporti #1 eing Unknown 1999 2 5109.65 2550.30 4039.10 2685.10 -Music exportischolar #1 ought Unknown 1999 4 5079.18 2520.64 3233.50 3079.89 -Women edu packamalg #1 ation Unknown 1999 2 4507.41 1951.42 4166.02 2865.38 -Women amalgamalg #1 ought Unknown 1999 1 4619.70 2065.94 9639.59 2521.70 -Music importoscholar #1 ought Unknown 1999 3 4004.44 1456.84 2438.63 2790.03 -Shoes edu packedu pack #1 eing Unknown 1999 5 4664.86 2122.71 3131.02 2852.96 -Women importoamalg #1 bar Unknown 1999 3 4437.21 1895.27 2678.48 2999.04 -Music exportischolar #1 able Unknown 1999 2 5090.10 2550.48 3702.29 2966.36 -Music edu packscholar #1 able Unknown 1999 1 5335.90 2796.97 13360.68 3413.22 -Children exportiexporti #1 eing Unknown 1999 4 5109.65 2574.12 2685.10 2672.73 +Men importoimporto #1 ese Unknown 1999 3 5492.8175 2070.65 3307.78 2784.11 +Music exportischolar #1 eing Unknown 1999 2 5134.2383 1740.21 4401.89 2721.61 +Music edu packscholar #1 ese Unknown 1999 4 5463.7008 2091.07 3391.39 3095.31 +Music edu packscholar #1 ought Unknown 1999 7 5552.3050 2226.34 4081.99 7573.33 +Music edu packscholar #1 ese Unknown 1999 2 5463.7008 2268.27 4139.47 3391.39 +Men edu packimporto #1 ought Unknown 1999 7 5176.2575 1993.73 3542.54 5764.35 +Children exportiexporti #1 ese Unknown 1999 3 5185.8983 2019.69 3479.21 2982.05 +Shoes amalgedu pack #1 ation Unknown 1999 6 5152.0958 2077.67 3123.43 2368.73 +Men edu packimporto #1 eing Unknown 1999 3 5501.1808 2453.88 2683.70 2615.32 +Children exportiexporti #1 ation Unknown 1999 4 5238.3575 2232.03 3221.70 3649.52 +Shoes importoedu pack #1 eing Unknown 1999 5 4698.6125 1703.27 2687.15 2757.83 +Music exportischolar #1 bar Unknown 1999 7 5318.1466 2346.06 3483.88 7658.62 +Music edu packscholar #1 ation Unknown 1999 2 5622.2275 2657.68 4207.03 3543.82 +Children exportiexporti #1 bar Unknown 1999 7 5280.6625 2324.79 3003.61 5961.39 +Children importoexporti #1 eing Unknown 1999 2 4650.4383 1734.45 2341.19 2720.78 +Shoes importoedu pack #1 ought Unknown 1999 4 4537.6358 1623.33 2928.34 1905.23 +Women edu packamalg #1 ation Unknown 1999 4 4507.4175 1596.92 2865.38 2665.75 +Men importoimporto #1 ought Unknown 1999 6 5045.7583 2152.15 2834.94 2667.92 +Men edu packimporto #1 eing Unknown 1999 4 5501.1808 2615.32 2453.88 2874.96 +Shoes exportiedu pack #1 bar Unknown 1999 3 5296.0891 2410.44 2685.85 3821.39 +Men importoimporto #1 able Unknown 1999 2 5194.8183 2333.43 2765.75 2674.91 +Music amalgscholar #1 ought Unknown 1999 2 4565.6000 1727.16 3895.09 2606.58 +Music edu packscholar #1 eing Unknown 1999 5 5539.3083 2704.16 3862.34 3960.90 +Shoes importoedu pack #1 ation Unknown 1999 4 4690.5775 1855.85 3524.69 3050.34 +Men edu packimporto #1 eing Unknown 1999 2 5501.1808 2683.70 4304.21 2453.88 +Women exportiamalg #1 able Unknown 1999 2 4123.6008 1306.40 2876.61 2238.71 +Music exportischolar #1 able Unknown 1999 5 5090.1050 2281.80 2488.24 3304.75 +Shoes exportiedu pack #1 ought Unknown 1999 2 4755.5358 1951.00 3949.06 2767.05 +Men importoimporto #1 ese Unknown 1999 6 5492.8175 2691.33 3210.74 3754.33 +Men amalgimporto #1 ation Unknown 1999 2 4909.4608 2116.43 3187.20 3356.64 +Men importoimporto #1 ought Unknown 1999 2 5045.7583 2253.70 4158.86 3467.09 +Shoes amalgedu pack #1 ation Unknown 1999 7 5152.0958 2368.73 2077.67 7543.60 +Men edu packimporto #1 ese Unknown 1999 3 4979.3616 2201.00 3110.55 3118.30 +Children exportiexporti #1 ation Unknown 1999 2 5238.3575 2462.96 3808.48 3221.70 +Men amalgimporto #1 ation Unknown 1999 4 4909.4608 2136.23 3356.64 3046.51 +Children importoexporti #1 able Unknown 1999 7 4586.2983 1814.46 2643.58 6423.18 +Men edu packimporto #1 ation Unknown 1999 4 5170.3691 2407.58 3086.77 2492.73 +Shoes amalgedu pack #1 ese Unknown 1999 7 4392.1866 1630.14 2755.91 6185.73 +Shoes amalgedu pack #1 able Unknown 1999 5 4940.2275 2187.55 2894.91 3018.65 +Men edu packimporto #1 ought Unknown 1999 4 5176.2575 2424.94 4285.78 3286.20 +Women amalgamalg #1 able Unknown 1999 6 4507.2400 1761.81 2891.95 2302.21 +Men importoimporto #1 ation Unknown 1999 3 5410.9166 2672.68 3591.65 2988.08 +Men importoimporto #1 ation Unknown 1999 5 5410.9166 2677.81 2988.08 2881.34 +Men edu packimporto #1 bar Unknown 1999 4 5632.7366 2901.64 3202.87 3447.78 +Children exportiexporti #1 able Unknown 1999 5 4955.2416 2230.80 2395.57 3003.89 +Men importoimporto #1 eing Unknown 1999 5 5074.0766 2356.88 2833.40 2854.62 +Men edu packimporto #1 bar Unknown 1999 2 5632.7366 2916.43 3847.05 3202.87 +Shoes exportiedu pack #1 ese Unknown 1999 3 4865.2883 2151.76 3212.91 3768.25 +Men importoimporto #1 ese Unknown 1999 4 5492.8175 2784.11 2070.65 3210.74 +Shoes exportiedu pack #1 bar Unknown 1999 7 5296.0891 2591.12 3012.98 6254.36 +Shoes exportiedu pack #1 ation Unknown 1999 5 4873.5108 2170.98 2302.76 3236.50 +Shoes amalgedu pack #1 able Unknown 1999 2 4940.2275 2239.16 3495.29 2563.93 +Children exportiexporti #1 eing Unknown 1999 7 5109.6541 2410.24 2916.46 6558.23 +Women importoamalg #1 able Unknown 1999 7 4574.7425 1881.03 2345.66 6036.28 +Women amalgamalg #1 ought Unknown 1999 7 4619.7075 1926.67 3528.98 5162.15 +Children importoexporti #1 bar Unknown 1999 7 4566.7758 1879.57 3400.62 6244.92 +Music edu packscholar #1 ation Unknown 1999 6 5622.2275 2943.26 3643.42 3847.77 +Music exportischolar #1 ation Unknown 1999 4 4962.6500 2283.77 3210.01 2539.84 +Music exportischolar #1 ation Unknown 1999 2 4962.6500 2284.23 3250.69 3210.01 +Men edu packimporto #1 ation Unknown 1999 5 5170.3691 2492.73 2407.58 3288.94 +Men edu packimporto #1 able Unknown 1999 3 4989.3016 2318.98 2618.89 3315.77 +Music exportischolar #1 bar Unknown 1999 4 5318.1466 2651.96 2989.10 3649.76 +Music exportischolar #1 bar Unknown 1999 2 5318.1466 2656.31 3419.77 2989.10 +Shoes amalgedu pack #1 bar Unknown 1999 6 4805.4016 2149.56 2686.70 3098.25 +Children exportiexporti #1 bar Unknown 1999 4 5280.6625 2625.99 3301.62 4331.44 +Music amalgscholar #1 ation Unknown 1999 4 4934.5041 2280.93 2322.89 2421.13 +Music edu packscholar #1 able Unknown 1999 7 5335.9083 2684.15 3543.33 7540.94 +Shoes importoedu pack #1 eing Unknown 1999 2 4698.6125 2058.86 3191.74 2812.15 +Shoes edu packedu pack #1 ought Unknown 1999 5 4745.2958 2109.27 3203.82 2737.82 +Shoes importoedu pack #1 ought Unknown 1999 5 4537.6358 1905.23 1623.33 3170.58 +Men edu packimporto #1 able Unknown 1999 6 4989.3016 2357.82 3363.58 3142.81 +Children exportiexporti #1 able Unknown 1999 2 4955.2416 2326.67 2746.99 3097.63 +Men edu packimporto #1 eing Unknown 1999 5 5501.1808 2874.96 2615.32 3714.00 +Shoes exportiedu pack #1 ation Unknown 1999 7 4873.5108 2256.56 3236.50 6245.37 +Shoes importoedu pack #1 ese Unknown 1999 3 4676.7491 2060.29 3273.67 2610.86 +Men amalgimporto #1 ese Unknown 1999 6 4764.5966 2150.16 3284.27 3475.17 +Music amalgscholar #1 ation Unknown 1999 3 4934.5041 2322.89 3197.76 2280.93 +Shoes exportiedu pack #1 bar Unknown 1999 2 5296.0891 2685.85 4235.44 2410.44 +Children importoexporti #1 able Unknown 1999 5 4586.2983 1982.77 2837.74 2643.58 +Music exportischolar #1 able Unknown 1999 4 5090.1050 2488.24 2966.36 2281.80 +Shoes importoedu pack #1 able Unknown 1999 7 4700.9116 2100.12 2533.01 5888.57 +Music edu packscholar #1 bar Unknown 1999 2 5484.7891 2903.45 3410.13 3024.86 +Shoes exportiedu pack #1 ation Unknown 1999 3 4873.5108 2300.45 2797.30 2302.76 +Shoes exportiedu pack #1 ation Unknown 1999 4 4873.5108 2302.76 2300.45 2170.98 +Shoes importoedu pack #1 bar Unknown 1999 3 4794.6791 2225.70 2756.97 2413.76 +Music edu packscholar #1 ought Unknown 1999 5 5552.3050 2985.49 3241.69 4081.99 +Music edu packscholar #1 eing Unknown 1999 3 5539.3083 2973.01 3069.18 3862.34 +Shoes amalgedu pack #1 eing Unknown 1999 7 4706.5441 2143.18 2458.07 5967.73 +Children exportiexporti #1 ought Unknown 1999 5 5018.2791 2458.03 3467.53 2683.61 +Children exportiexporti #1 able Unknown 1999 4 4955.2416 2395.57 3097.63 2230.80 +Children exportiexporti #1 eing Unknown 1999 2 5109.6541 2550.30 4039.10 2685.10 +Music exportischolar #1 ought Unknown 1999 4 5079.1825 2520.64 3233.50 3079.89 +Women edu packamalg #1 ation Unknown 1999 2 4507.4175 1951.42 4166.02 2865.38 +Women amalgamalg #1 ought Unknown 1999 1 4619.7075 2065.94 9639.59 2521.70 +Music importoscholar #1 ought Unknown 1999 3 4004.4483 1456.84 2438.63 2790.03 +Shoes edu packedu pack #1 eing Unknown 1999 5 4664.8616 2122.71 3131.02 2852.96 +Women importoamalg #1 bar Unknown 1999 3 4437.2108 1895.27 2678.48 2999.04 +Music exportischolar #1 able Unknown 1999 2 5090.1050 2550.48 3702.29 2966.36 +Music edu packscholar #1 able Unknown 1999 1 5335.9083 2796.97 13360.68 3413.22 +Children exportiexporti #1 eing Unknown 1999 4 5109.6541 2574.12 2685.10 2672.73 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q53.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q53.out index fb1a250c2a3836..790c962a488815 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q53.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q53.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q53 -- -30 165.67 340.63 -30 247.07 340.63 -30 627.63 340.63 -619 158.76 348.64 -619 210.81 348.64 -619 464.26 348.64 -619 560.73 348.64 -271 79.26 354.33 -271 86.87 354.33 -271 179.61 354.33 -271 1071.58 354.33 -827 82.44 356.59 -827 666.52 356.59 -296 188.61 369.12 -296 265.76 369.12 -296 655.24 369.12 -308 200.28 385.98 -308 214.07 385.98 -308 489.17 385.98 -308 640.41 385.98 -486 178.80 400.53 -486 455.08 400.53 -486 468.01 400.53 -486 500.23 400.53 -554 191.48 407.97 -554 346.80 407.97 -554 660.97 407.97 -208 151.84 410.38 -208 207.02 410.38 -208 533.75 410.38 -208 748.93 410.38 -662 199.83 412.13 -662 300.61 412.13 -662 460.94 412.13 -662 687.16 412.13 -394 264.65 413.40 -394 272.02 413.40 -394 674.12 413.40 -221 183.63 416.08 -221 534.62 416.08 -221 552.44 416.08 -621 232.20 418.11 -621 624.80 418.11 -507 76.98 419.46 -507 505.36 419.46 -507 644.24 419.46 -316 36.25 423.03 -316 158.85 423.03 -316 697.32 423.03 -316 799.72 423.03 -56 110.81 423.09 -56 371.77 423.09 -56 500.77 423.09 -56 709.04 423.09 -517 194.87 426.28 -517 313.41 426.28 -517 482.41 426.28 -517 714.46 426.28 -411 364.09 426.89 -411 519.60 426.89 -247 313.42 427.68 -247 353.08 427.68 -247 628.37 427.68 -652 228.75 434.75 -652 314.98 434.75 -652 365.90 434.75 -652 829.38 434.75 -129 301.69 436.45 -129 325.26 436.45 -129 550.47 436.45 -129 568.39 436.45 -99 164.24 438.66 -99 183.75 438.66 -99 1013.10 438.66 -235 111.64 441.03 -235 179.51 441.03 -235 493.83 441.03 -235 979.14 441.03 -360 143.83 445.41 -360 293.99 445.41 -360 928.51 445.41 -732 106.56 447.06 -732 300.77 447.06 -732 498.49 447.06 -732 882.44 447.06 -190 202.77 451.98 -190 233.10 451.98 -190 358.97 451.98 -190 1013.09 451.98 -147 212.53 455.89 -147 366.10 455.89 -147 553.92 455.89 -147 691.02 455.89 -665 283.25 456.08 -665 357.22 456.08 -665 691.20 456.08 -85 325.28 456.28 -85 350.10 456.28 -85 387.62 456.28 -85 762.12 456.28 +30 165.67 340.6350 +30 247.07 340.6350 +30 627.63 340.6350 +619 158.76 348.6400 +619 210.81 348.6400 +619 464.26 348.6400 +619 560.73 348.6400 +271 79.26 354.3300 +271 86.87 354.3300 +271 179.61 354.3300 +271 1071.58 354.3300 +827 82.44 356.5900 +827 320.05 356.5900 +827 666.52 356.5900 +296 188.61 369.1250 +296 265.76 369.1250 +296 655.24 369.1250 +308 200.28 385.9825 +308 214.07 385.9825 +308 489.17 385.9825 +308 640.41 385.9825 +486 178.80 400.5300 +486 455.08 400.5300 +486 468.01 400.5300 +486 500.23 400.5300 +554 191.48 407.9750 +554 346.80 407.9750 +554 660.97 407.9750 +208 151.84 410.3850 +208 207.02 410.3850 +208 533.75 410.3850 +208 748.93 410.3850 +662 199.83 412.1350 +662 300.61 412.1350 +662 460.94 412.1350 +662 687.16 412.1350 +394 264.65 413.4050 +394 272.02 413.4050 +394 674.12 413.4050 +221 183.63 416.0825 +221 534.62 416.0825 +221 552.44 416.0825 +621 232.20 418.1150 +621 624.80 418.1150 +507 76.98 419.4650 +507 505.36 419.4650 +507 644.24 419.4650 +316 36.25 423.0350 +316 158.85 423.0350 +316 697.32 423.0350 +316 799.72 423.0350 +56 110.81 423.0975 +56 371.77 423.0975 +56 500.77 423.0975 +56 709.04 423.0975 +517 194.87 426.2875 +517 313.41 426.2875 +517 482.41 426.2875 +517 714.46 426.2875 +411 364.09 426.8925 +411 519.60 426.8925 +247 313.42 427.6825 +247 353.08 427.6825 +247 628.37 427.6825 +652 228.75 434.7525 +652 314.98 434.7525 +652 365.90 434.7525 +652 829.38 434.7525 +129 301.69 436.4525 +129 325.26 436.4525 +129 550.47 436.4525 +129 568.39 436.4525 +99 164.24 438.6675 +99 183.75 438.6675 +99 393.58 438.6675 +99 1013.10 438.6675 +235 111.64 441.0300 +235 179.51 441.0300 +235 493.83 441.0300 +235 979.14 441.0300 +360 143.83 445.4150 +360 293.99 445.4150 +360 928.51 445.4150 +732 106.56 447.0650 +732 300.77 447.0650 +732 498.49 447.0650 +732 882.44 447.0650 +190 202.77 451.9825 +190 233.10 451.9825 +190 358.97 451.9825 +190 1013.09 451.9825 +147 212.53 455.8925 +147 366.10 455.8925 +147 553.92 455.8925 +147 691.02 455.8925 +665 283.25 456.0875 +665 357.22 456.0875 +665 691.20 456.0875 +85 325.28 456.2800 +85 350.10 456.2800 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q57.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q57.out index 4e58852f68638d..dd14de3b12c30a 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q57.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q57.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q57 -- -Shoes importoedu pack #1 North Midwest 1999 3 7101.78 2518.33 5264.86 3066.29 -Men edu packimporto #1 NY Metro 1999 4 7659.24 3227.88 4759.01 4664.83 -Music amalgscholar #1 Mid Atlantic 1999 1 6659.49 2291.60 14178.45 4267.08 -Men edu packimporto #1 NY Metro 1999 7 7659.24 3327.90 4566.86 11656.06 -Men importoimporto #1 North Midwest 1999 5 7640.49 3327.30 3534.12 5530.63 -Music edu packscholar #1 Mid Atlantic 1999 1 8223.71 3965.88 14493.32 4943.68 -Women amalgamalg #1 Mid Atlantic 1999 2 7116.32 2872.43 4945.20 2974.14 -Music exportischolar #1 NY Metro 1999 3 7047.80 2832.46 4308.87 3265.21 -Children importoexporti #1 NY Metro 1999 4 6809.59 2648.85 5318.02 4111.73 -Children importoexporti #1 Mid Atlantic 1999 5 6832.82 2687.17 3971.76 4235.84 -Music edu packscholar #1 North Midwest 1999 1 8078.69 3934.06 17002.72 4244.46 -Women amalgamalg #1 Mid Atlantic 1999 3 7116.32 2974.14 2872.43 4329.06 -Music edu packscholar #1 Mid Atlantic 1999 4 8223.71 4091.54 5753.94 4797.32 -Men importoimporto #1 NY Metro 1999 2 7530.99 3406.53 5839.59 6125.77 -Men edu packimporto #1 North Midwest 1999 3 7852.62 3737.23 4465.92 3831.92 -Shoes edu packedu pack #1 North Midwest 1999 5 6583.30 2474.01 3684.23 4335.58 -Men importoimporto #1 North Midwest 1999 4 7640.49 3534.12 4291.30 3327.30 -Children amalgexporti #1 NY Metro 1999 7 6518.75 2430.77 3203.23 7867.12 -Music amalgscholar #1 North Midwest 1999 5 6876.88 2816.26 4637.07 3528.80 -Shoes importoedu pack #1 North Midwest 1999 4 7101.78 3066.29 2518.33 5005.85 -Shoes edu packedu pack #1 NY Metro 1999 2 6421.79 2394.57 3149.35 4472.43 -Music edu packscholar #1 NY Metro 1999 7 7966.57 3944.74 5030.35 10791.61 -Men edu packimporto #1 North Midwest 1999 4 7852.62 3831.92 3737.23 4353.90 -Shoes importoedu pack #1 Mid Atlantic 1999 3 6959.93 2951.09 4142.26 3271.07 -Men amalgimporto #1 NY Metro 1999 7 7082.12 3075.18 5231.88 8953.66 -Shoes amalgedu pack #1 NY Metro 1999 7 6904.68 2902.26 4942.02 8793.71 -Men importoimporto #1 Mid Atlantic 1999 1 7357.06 3356.15 11222.19 3770.17 -Children exportiexporti #1 NY Metro 1999 7 7698.34 3714.25 4686.40 9752.38 -Children exportiexporti #1 North Midwest 1999 3 7530.37 3586.50 3960.74 3916.86 -Children amalgexporti #1 NY Metro 1999 4 6518.75 2587.68 4177.93 3342.60 -Music edu packscholar #1 North Midwest 1999 5 8078.69 4148.83 5184.39 5483.81 -Children exportiexporti #1 Mid Atlantic 1999 3 7245.28 3350.65 3876.83 5869.66 -Children exportiexporti #1 North Midwest 1999 1 7530.37 3645.95 13367.51 3960.74 -Shoes exportiedu pack #1 Mid Atlantic 1999 2 6885.32 3013.95 4139.82 4328.03 -Children importoexporti #1 North Midwest 1999 7 6690.09 2827.63 3965.68 7733.16 -Music edu packscholar #1 North Midwest 1999 2 8078.69 4244.46 3934.06 4448.50 -Men edu packimporto #1 Mid Atlantic 1999 1 7912.53 4082.68 14333.30 4383.51 -Children exportiexporti #1 NY Metro 1999 3 7698.34 3883.01 4723.97 4590.03 -Music exportischolar #1 Mid Atlantic 1999 2 7243.99 3430.04 3662.97 3617.09 -Music exportischolar #1 NY Metro 1999 1 7047.80 3237.56 15805.49 4308.87 -Music exportischolar #1 NY Metro 1999 4 7047.80 3265.21 2832.46 3885.17 -Music exportischolar #1 North Midwest 1999 2 7593.92 3821.24 4748.20 4271.45 -Men edu packimporto #1 Mid Atlantic 1999 4 7912.53 4144.67 4954.05 5070.06 -Music amalgscholar #1 NY Metro 1999 4 6926.06 3165.20 4688.23 4286.05 -Shoes amalgedu pack #1 Mid Atlantic 1999 3 6642.08 2928.82 3648.57 3892.32 -Music edu packscholar #1 NY Metro 1999 3 7966.57 4269.89 4384.51 4452.73 -Men amalgimporto #1 NY Metro 1999 2 7082.12 3392.25 4549.47 3653.84 -Shoes importoedu pack #1 Mid Atlantic 1999 4 6959.93 3271.07 2951.09 4231.88 -Music amalgscholar #1 North Midwest 1999 3 6876.88 3190.36 3536.29 4637.07 -Women importoamalg #1 Mid Atlantic 1999 1 6479.29 2804.94 13543.31 3515.21 -Shoes amalgedu pack #1 North Midwest 1999 6 6829.95 3178.20 4120.60 5910.98 -Men amalgimporto #1 NY Metro 1999 4 7082.12 3450.11 3653.84 5965.16 -Women edu packamalg #1 NY Metro 1999 4 6608.48 2976.95 3489.35 3812.22 -Music edu packscholar #1 North Midwest 1999 3 8078.69 4448.50 4244.46 5184.39 -Music amalgscholar #1 Mid Atlantic 1999 7 6659.49 3031.62 4214.81 9493.69 -Music exportischolar #1 Mid Atlantic 1999 3 7243.99 3617.09 3430.04 3871.67 -Men importoimporto #1 NY Metro 1999 7 7530.99 3913.80 4405.46 7859.96 -Children exportiexporti #1 North Midwest 1999 4 7530.37 3916.86 3586.50 4747.06 -Children importoexporti #1 NY Metro 1999 2 6809.59 3200.10 4421.85 5318.02 -Men importoimporto #1 Mid Atlantic 1999 2 7357.06 3770.17 3356.15 5114.32 -Children amalgexporti #1 North Midwest 1999 2 6557.57 2975.00 3418.40 5079.56 -Music edu packscholar #1 NY Metro 1999 2 7966.57 4384.51 5279.09 4269.89 -Music exportischolar #1 Mid Atlantic 1999 1 7243.99 3662.97 14285.88 3430.04 -Children exportiexporti #1 North Midwest 1999 2 7530.37 3960.74 3645.95 3586.50 -Men amalgimporto #1 Mid Atlantic 1999 1 6611.33 3066.19 11053.20 3203.24 -Women edu packamalg #1 Mid Atlantic 1999 4 6061.21 2522.22 2674.89 3975.90 -Shoes exportiedu pack #1 North Midwest 1999 4 7045.16 3509.17 5252.01 3987.99 -Men edu packimporto #1 North Midwest 1999 1 7852.62 4318.23 16397.10 4465.92 -Men edu packimporto #1 Mid Atlantic 1999 2 7912.53 4383.51 4082.68 4954.05 -Music edu packscholar #1 NY Metro 1999 4 7966.57 4452.73 4269.89 5476.13 -Children importoexporti #1 Mid Atlantic 1999 1 6832.82 3330.21 13097.88 3496.46 -Men edu packimporto #1 North Midwest 1999 5 7852.62 4353.90 3831.92 5689.03 -Women exportiamalg #1 Mid Atlantic 1999 2 6013.08 2536.08 3406.41 3718.65 -Music exportischolar #1 North Midwest 1999 4 7593.92 4121.47 4271.45 5234.85 -Music amalgscholar #1 North Midwest 1999 1 6876.88 3406.89 13714.11 3536.29 -Men importoimporto #1 NY Metro 1999 4 7530.99 4062.17 6125.77 4715.58 -Men exportiimporto #1 North Midwest 1999 5 5797.38 2330.52 2965.11 2842.02 -Children edu packexporti #1 Mid Atlantic 1999 3 6100.64 2633.95 3676.43 3130.51 -Men amalgimporto #1 North Midwest 1999 1 6713.82 3268.58 13596.45 4098.03 -Women exportiamalg #1 NY Metro 1999 4 6031.04 2588.60 3554.29 3915.46 -Men amalgimporto #1 NY Metro 1999 3 7082.12 3653.84 3392.25 3450.11 -Music edu packscholar #1 Mid Atlantic 1999 5 8223.71 4797.32 4091.54 5028.71 -Children exportiexporti #1 North Midwest 1999 6 7530.37 4104.53 4747.06 4586.73 -Women importoamalg #1 NY Metro 1999 4 6352.68 2928.62 3718.55 3387.14 -Men edu packimporto #1 NY Metro 1999 2 7659.24 4246.37 4489.63 4759.01 -Shoes edu packedu pack #1 Mid Atlantic 1999 3 6578.78 3166.49 4213.93 4376.74 -Shoes amalgedu pack #1 North Midwest 1999 4 6829.95 3417.69 3722.75 4120.60 -Women exportiamalg #1 North Midwest 1999 3 6171.54 2760.78 3853.84 3125.47 -Men amalgimporto #1 Mid Atlantic 1999 2 6611.33 3203.24 3066.19 4613.61 -Men edu packimporto #1 North Midwest 1999 2 7852.62 4465.92 4318.23 3737.23 -Women edu packamalg #1 Mid Atlantic 1999 3 6061.21 2674.89 3376.95 2522.22 -Music exportischolar #1 NY Metro 1999 6 7047.80 3667.60 3885.17 5088.70 -Children importoexporti #1 North Midwest 1999 3 6690.09 3310.89 3486.35 5014.28 -Music exportischolar #1 Mid Atlantic 1999 4 7243.99 3871.67 3617.09 4628.08 -Men importoimporto #1 North Midwest 1999 2 7640.49 4270.44 4931.98 4291.30 -Children exportiexporti #1 Mid Atlantic 1999 2 7245.28 3876.83 4799.92 3350.65 -Shoes exportiedu pack #1 North Midwest 1999 7 7045.16 3684.37 4372.20 8403.23 -Men importoimporto #1 North Midwest 1999 3 7640.49 4291.30 4270.44 3534.12 -Men amalgimporto #1 Mid Atlantic 1999 4 6611.33 3262.24 4613.61 4531.38 -Music amalgscholar #1 North Midwest 1999 6 6876.88 3528.80 2816.26 4750.85 +Shoes importoedu pack #1 North Midwest 1999 3 7101.7800 2518.33 5264.86 3066.29 +Men edu packimporto #1 NY Metro 1999 4 7659.2416 3227.88 4759.01 4664.83 +Music amalgscholar #1 Mid Atlantic 1999 1 6659.4933 2291.60 14178.45 4267.08 +Men edu packimporto #1 NY Metro 1999 7 7659.2416 3327.90 4566.86 11656.06 +Men importoimporto #1 North Midwest 1999 5 7640.4916 3327.30 3534.12 5530.63 +Music edu packscholar #1 Mid Atlantic 1999 1 8223.7191 3965.88 14493.32 4943.68 +Women amalgamalg #1 Mid Atlantic 1999 2 7116.3283 2872.43 4945.20 2974.14 +Music exportischolar #1 NY Metro 1999 3 7047.8033 2832.46 4308.87 3265.21 +Children importoexporti #1 NY Metro 1999 4 6809.5958 2648.85 5318.02 4111.73 +Children importoexporti #1 Mid Atlantic 1999 5 6832.8216 2687.17 3971.76 4235.84 +Music edu packscholar #1 North Midwest 1999 1 8078.6900 3934.06 17002.72 4244.46 +Women amalgamalg #1 Mid Atlantic 1999 3 7116.3283 2974.14 2872.43 4329.06 +Music edu packscholar #1 Mid Atlantic 1999 4 8223.7191 4091.54 5753.94 4797.32 +Men importoimporto #1 NY Metro 1999 2 7530.9975 3406.53 5839.59 6125.77 +Men edu packimporto #1 North Midwest 1999 3 7852.6275 3737.23 4465.92 3831.92 +Shoes edu packedu pack #1 North Midwest 1999 5 6583.3050 2474.01 3684.23 4335.58 +Men importoimporto #1 North Midwest 1999 4 7640.4916 3534.12 4291.30 3327.30 +Children amalgexporti #1 NY Metro 1999 7 6518.7508 2430.77 3203.23 7867.12 +Music amalgscholar #1 North Midwest 1999 5 6876.8808 2816.26 4637.07 3528.80 +Shoes importoedu pack #1 North Midwest 1999 4 7101.7800 3066.29 2518.33 5005.85 +Shoes edu packedu pack #1 NY Metro 1999 2 6421.7925 2394.57 3149.35 4472.43 +Music edu packscholar #1 NY Metro 1999 7 7966.5791 3944.74 5030.35 10791.61 +Men edu packimporto #1 North Midwest 1999 4 7852.6275 3831.92 3737.23 4353.90 +Shoes importoedu pack #1 Mid Atlantic 1999 3 6959.9341 2951.09 4142.26 3271.07 +Men amalgimporto #1 NY Metro 1999 7 7082.1291 3075.18 5231.88 8953.66 +Shoes amalgedu pack #1 NY Metro 1999 7 6904.6891 2902.26 4942.02 8793.71 +Men importoimporto #1 Mid Atlantic 1999 1 7357.0608 3356.15 11222.19 3770.17 +Children exportiexporti #1 NY Metro 1999 7 7698.3408 3714.25 4686.40 9752.38 +Children exportiexporti #1 North Midwest 1999 3 7530.3750 3586.50 3960.74 3916.86 +Children amalgexporti #1 NY Metro 1999 4 6518.7508 2587.68 4177.93 3342.60 +Music edu packscholar #1 North Midwest 1999 5 8078.6900 4148.83 5184.39 5483.81 +Children exportiexporti #1 Mid Atlantic 1999 3 7245.2850 3350.65 3876.83 5869.66 +Children exportiexporti #1 North Midwest 1999 1 7530.3750 3645.95 13367.51 3960.74 +Shoes exportiedu pack #1 Mid Atlantic 1999 2 6885.3208 3013.95 4139.82 4328.03 +Children importoexporti #1 North Midwest 1999 7 6690.0916 2827.63 3965.68 7733.16 +Music edu packscholar #1 North Midwest 1999 2 8078.6900 4244.46 3934.06 4448.50 +Men edu packimporto #1 Mid Atlantic 1999 1 7912.5375 4082.68 14333.30 4383.51 +Children exportiexporti #1 NY Metro 1999 3 7698.3408 3883.01 4723.97 4590.03 +Music exportischolar #1 Mid Atlantic 1999 2 7243.9941 3430.04 3662.97 3617.09 +Music exportischolar #1 NY Metro 1999 1 7047.8033 3237.56 15805.49 4308.87 +Music exportischolar #1 NY Metro 1999 4 7047.8033 3265.21 2832.46 3885.17 +Music exportischolar #1 North Midwest 1999 2 7593.9291 3821.24 4748.20 4271.45 +Men edu packimporto #1 Mid Atlantic 1999 4 7912.5375 4144.67 4954.05 5070.06 +Music amalgscholar #1 NY Metro 1999 4 6926.0608 3165.20 4688.23 4286.05 +Shoes amalgedu pack #1 Mid Atlantic 1999 3 6642.0858 2928.82 3648.57 3892.32 +Music edu packscholar #1 NY Metro 1999 3 7966.5791 4269.89 4384.51 4452.73 +Men amalgimporto #1 NY Metro 1999 2 7082.1291 3392.25 4549.47 3653.84 +Shoes importoedu pack #1 Mid Atlantic 1999 4 6959.9341 3271.07 2951.09 4231.88 +Music amalgscholar #1 North Midwest 1999 3 6876.8808 3190.36 3536.29 4637.07 +Women importoamalg #1 Mid Atlantic 1999 1 6479.2983 2804.94 13543.31 3515.21 +Shoes amalgedu pack #1 North Midwest 1999 6 6829.9566 3178.20 4120.60 5910.98 +Men amalgimporto #1 NY Metro 1999 4 7082.1291 3450.11 3653.84 5965.16 +Women edu packamalg #1 NY Metro 1999 4 6608.4858 2976.95 3489.35 3812.22 +Music edu packscholar #1 North Midwest 1999 3 8078.6900 4448.50 4244.46 5184.39 +Music amalgscholar #1 Mid Atlantic 1999 7 6659.4933 3031.62 4214.81 9493.69 +Music exportischolar #1 Mid Atlantic 1999 3 7243.9941 3617.09 3430.04 3871.67 +Men importoimporto #1 NY Metro 1999 7 7530.9975 3913.80 4405.46 7859.96 +Children exportiexporti #1 North Midwest 1999 4 7530.3750 3916.86 3586.50 4747.06 +Children importoexporti #1 NY Metro 1999 2 6809.5958 3200.10 4421.85 5318.02 +Men importoimporto #1 Mid Atlantic 1999 2 7357.0608 3770.17 3356.15 5114.32 +Children amalgexporti #1 North Midwest 1999 2 6557.5775 2975.00 3418.40 5079.56 +Music edu packscholar #1 NY Metro 1999 2 7966.5791 4384.51 5279.09 4269.89 +Music exportischolar #1 Mid Atlantic 1999 1 7243.9941 3662.97 14285.88 3430.04 +Children exportiexporti #1 North Midwest 1999 2 7530.3750 3960.74 3645.95 3586.50 +Men amalgimporto #1 Mid Atlantic 1999 1 6611.3358 3066.19 11053.20 3203.24 +Women edu packamalg #1 Mid Atlantic 1999 4 6061.2108 2522.22 2674.89 3975.90 +Shoes exportiedu pack #1 North Midwest 1999 4 7045.1641 3509.17 5252.01 3987.99 +Men edu packimporto #1 North Midwest 1999 1 7852.6275 4318.23 16397.10 4465.92 +Men edu packimporto #1 Mid Atlantic 1999 2 7912.5375 4383.51 4082.68 4954.05 +Music edu packscholar #1 NY Metro 1999 4 7966.5791 4452.73 4269.89 5476.13 +Children importoexporti #1 Mid Atlantic 1999 1 6832.8216 3330.21 13097.88 3496.46 +Men edu packimporto #1 North Midwest 1999 5 7852.6275 4353.90 3831.92 5689.03 +Women exportiamalg #1 Mid Atlantic 1999 2 6013.0883 2536.08 3406.41 3718.65 +Music exportischolar #1 North Midwest 1999 4 7593.9291 4121.47 4271.45 5234.85 +Music amalgscholar #1 North Midwest 1999 1 6876.8808 3406.89 13714.11 3536.29 +Men importoimporto #1 NY Metro 1999 4 7530.9975 4062.17 6125.77 4715.58 +Men exportiimporto #1 North Midwest 1999 5 5797.3825 2330.52 2965.11 2842.02 +Children edu packexporti #1 Mid Atlantic 1999 3 6100.6433 2633.95 3676.43 3130.51 +Men amalgimporto #1 North Midwest 1999 1 6713.8200 3268.58 13596.45 4098.03 +Women exportiamalg #1 NY Metro 1999 4 6031.0425 2588.60 3554.29 3915.46 +Men amalgimporto #1 NY Metro 1999 3 7082.1291 3653.84 3392.25 3450.11 +Music edu packscholar #1 Mid Atlantic 1999 5 8223.7191 4797.32 4091.54 5028.71 +Children exportiexporti #1 North Midwest 1999 6 7530.3750 4104.53 4747.06 4586.73 +Women importoamalg #1 NY Metro 1999 4 6352.6825 2928.62 3718.55 3387.14 +Men edu packimporto #1 NY Metro 1999 2 7659.2416 4246.37 4489.63 4759.01 +Shoes edu packedu pack #1 Mid Atlantic 1999 3 6578.7858 3166.49 4213.93 4376.74 +Shoes amalgedu pack #1 North Midwest 1999 4 6829.9566 3417.69 3722.75 4120.60 +Women exportiamalg #1 North Midwest 1999 3 6171.5441 2760.78 3853.84 3125.47 +Men amalgimporto #1 Mid Atlantic 1999 2 6611.3358 3203.24 3066.19 4613.61 +Men edu packimporto #1 North Midwest 1999 2 7852.6275 4465.92 4318.23 3737.23 +Women edu packamalg #1 Mid Atlantic 1999 3 6061.2108 2674.89 3376.95 2522.22 +Music exportischolar #1 NY Metro 1999 6 7047.8033 3667.60 3885.17 5088.70 +Children importoexporti #1 North Midwest 1999 3 6690.0916 3310.89 3486.35 5014.28 +Music exportischolar #1 Mid Atlantic 1999 4 7243.9941 3871.67 3617.09 4628.08 +Men importoimporto #1 North Midwest 1999 2 7640.4916 4270.44 4931.98 4291.30 +Children exportiexporti #1 Mid Atlantic 1999 2 7245.2850 3876.83 4799.92 3350.65 +Shoes exportiedu pack #1 North Midwest 1999 7 7045.1641 3684.37 4372.20 8403.23 +Men importoimporto #1 North Midwest 1999 3 7640.4916 4291.30 4270.44 3534.12 +Men amalgimporto #1 Mid Atlantic 1999 4 6611.3358 3262.24 4613.61 4531.38 +Music amalgscholar #1 North Midwest 1999 6 6876.8808 3528.80 2816.26 4750.85 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q63.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q63.out index 0d58f5c79482bc..3d9d6da38ae57f 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q63.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q63.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q63 -- -1 189.04 531.91 -1 203.73 531.91 -1 355.17 531.91 -1 359.53 531.91 -1 365.84 531.91 -1 373.26 531.91 -1 430.03 531.91 -1 698.60 531.91 -1 909.18 531.91 -1 995.02 531.91 -1 998.95 531.91 -2 34.79 625.03 -2 143.64 625.03 -2 253.85 625.03 -2 359.05 625.03 -2 445.59 625.03 -2 499.99 625.03 -2 538.36 625.03 -2 780.07 625.03 -2 1487.82 625.03 -2 1660.48 625.03 -3 270.10 988.29 -3 367.94 988.29 -3 491.20 988.29 -3 529.42 988.29 -3 629.34 988.29 -3 757.70 988.29 -3 1161.47 988.29 -3 1234.30 988.29 -3 1251.01 988.29 -3 1522.49 988.29 -3 2624.04 988.29 -5 353.24 1169.48 -5 581.28 1169.48 -5 694.79 1169.48 -5 696.66 1169.48 -5 740.99 1169.48 -5 890.86 1169.48 -5 955.61 1169.48 -5 1359.61 1169.48 -5 1712.35 1169.48 -5 1794.66 1169.48 -5 2080.16 1169.48 -5 2173.58 1169.48 -6 644.61 1772.99 -6 851.23 1772.99 -6 868.62 1772.99 -6 1056.06 1772.99 -6 1150.40 1772.99 -6 1196.50 1772.99 -6 1551.15 1772.99 -6 2576.64 1772.99 -6 2875.54 1772.99 -6 3299.70 1772.99 -6 3309.13 1772.99 -7 638.30 1499.65 -7 663.54 1499.65 -7 779.65 1499.65 -7 800.25 1499.65 -7 811.54 1499.65 -7 987.78 1499.65 -7 1046.24 1499.65 -7 1667.92 1499.65 -7 2750.32 1499.65 -7 2970.80 1499.65 -7 3524.00 1499.65 -8 803.53 1618.95 -8 819.18 1618.95 -8 933.76 1618.95 -8 944.19 1618.95 -8 1019.24 1618.95 -8 1159.06 1618.95 -8 1290.94 1618.95 -8 2168.17 1618.95 -8 2264.18 1618.95 -8 3033.41 1618.95 -8 3213.77 1618.95 -9 315.31 1509.97 -9 559.82 1509.97 -9 728.72 1509.97 -9 784.15 1509.97 -9 923.36 1509.97 -9 933.68 1509.97 -9 1239.49 1509.97 -9 1848.85 1509.97 -9 2172.04 1509.97 -9 2178.07 1509.97 -9 3165.98 1509.97 -9 3270.26 1509.97 -10 314.30 1125.25 -10 365.57 1125.25 -10 591.30 1125.25 -10 760.81 1125.25 -10 776.91 1125.25 -10 959.65 1125.25 -10 975.25 1125.25 -10 1294.20 1125.25 -10 1342.05 1125.25 -10 1914.64 1125.25 -10 3105.53 1125.25 +1 189.04 531.9191 +1 203.73 531.9191 +1 355.17 531.9191 +1 359.53 531.9191 +1 365.84 531.9191 +1 373.26 531.9191 +1 430.03 531.9191 +1 698.60 531.9191 +1 909.18 531.9191 +1 995.02 531.9191 +1 998.95 531.9191 +2 34.79 625.0316 +2 143.64 625.0316 +2 253.85 625.0316 +2 359.05 625.0316 +2 445.59 625.0316 +2 499.99 625.0316 +2 538.36 625.0316 +2 780.07 625.0316 +2 1487.82 625.0316 +2 1660.48 625.0316 +3 270.10 988.2933 +3 367.94 988.2933 +3 491.20 988.2933 +3 529.42 988.2933 +3 629.34 988.2933 +3 757.70 988.2933 +3 1161.47 988.2933 +3 1234.30 988.2933 +3 1251.01 988.2933 +3 1522.49 988.2933 +3 2624.04 988.2933 +5 353.24 1169.4825 +5 581.28 1169.4825 +5 694.79 1169.4825 +5 696.66 1169.4825 +5 740.99 1169.4825 +5 890.86 1169.4825 +5 955.61 1169.4825 +5 1359.61 1169.4825 +5 1712.35 1169.4825 +5 1794.66 1169.4825 +5 2080.16 1169.4825 +5 2173.58 1169.4825 +6 644.61 1772.9983 +6 851.23 1772.9983 +6 868.62 1772.9983 +6 1056.06 1772.9983 +6 1150.40 1772.9983 +6 1196.50 1772.9983 +6 1551.15 1772.9983 +6 2576.64 1772.9983 +6 2875.54 1772.9983 +6 3299.70 1772.9983 +6 3309.13 1772.9983 +7 638.30 1499.6575 +7 663.54 1499.6575 +7 779.65 1499.6575 +7 800.25 1499.6575 +7 811.54 1499.6575 +7 987.78 1499.6575 +7 1046.24 1499.6575 +7 1667.92 1499.6575 +7 2750.32 1499.6575 +7 2970.80 1499.6575 +7 3524.00 1499.6575 +8 803.53 1618.9541 +8 819.18 1618.9541 +8 933.76 1618.9541 +8 944.19 1618.9541 +8 1019.24 1618.9541 +8 1159.06 1618.9541 +8 1290.94 1618.9541 +8 2168.17 1618.9541 +8 2264.18 1618.9541 +8 3033.41 1618.9541 +8 3213.77 1618.9541 +9 315.31 1509.9775 +9 559.82 1509.9775 +9 728.72 1509.9775 +9 784.15 1509.9775 +9 923.36 1509.9775 +9 933.68 1509.9775 +9 1239.49 1509.9775 +9 1848.85 1509.9775 +9 2172.04 1509.9775 +9 2178.07 1509.9775 +9 3165.98 1509.9775 +9 3270.26 1509.9775 +10 314.30 1125.2591 +10 365.57 1125.2591 +10 591.30 1125.2591 +10 760.81 1125.2591 +10 776.91 1125.2591 +10 959.65 1125.2591 +10 975.25 1125.2591 +10 1294.20 1125.2591 +10 1342.05 1125.2591 +10 1914.64 1125.2591 +10 3105.53 1125.2591 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q75.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q75.out index 479df981a6a1ba..1ae070ba66e697 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q75.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q75.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q75 -- -2001 2002 9011004 11 9 730 6136 3927 -2209 -64592.86000000016 -2001 2002 9004008 4 9 454 6130 4012 -2118 -137401.99000000008 -2001 2002 9006010 6 9 373 6584 4510 -2074 -56824.26999999993 -2001 2002 9003002 3 9 331 6314 4249 -2065 -162310.8699999999 -2001 2002 9016002 16 9 761 6098 4109 -1989 -75674.22999999995 -2001 2002 2001001 7 9 85 5689 3750 -1939 -79485.07000000007 -2001 2002 9011010 11 9 254 6635 4698 -1937 -108841.58999999991 -2001 2002 9003002 3 9 1000 6152 4220 -1932 -51341.52000000005 -2001 2002 9009010 1 9 311 6980 5065 -1915 -166624.1000000001 -2001 2002 9003004 3 9 25 6382 4612 -1770 -109080.79999999978 +2001 2002 9011004 11 9 730 6136 3927 -2209 -64592.85999999996 +2001 2002 9004008 4 9 454 6130 4012 -2118 -137401.99 +2001 2002 9006010 6 9 373 6584 4510 -2074 -56824.27000000005 +2001 2002 9003002 3 9 331 6314 4249 -2065 -162310.86999999988 +2001 2002 9016002 16 9 761 6098 4109 -1989 -75674.22999999992 +2001 2002 2001001 7 9 85 5689 3750 -1939 -79485.07 +2001 2002 9011010 11 9 254 6635 4698 -1937 -108841.59000000003 +2001 2002 9003002 3 9 1000 6152 4220 -1932 -51341.52000000002 +2001 2002 9009010 1 9 311 6980 5065 -1915 -166624.09999999998 +2001 2002 9003004 3 9 25 6382 4612 -1770 -109080.80000000005 2001 2002 9008008 8 9 322 5391 3664 -1727 -58283.909999999974 -2001 2002 3004001 1 9 89 6307 4616 -1691 -105539.09999999995 -2001 2002 9014004 12 9 423 6427 4742 -1685 -66528.45000000007 -2001 2002 1001001 5 9 172 5642 3998 -1644 -65808.5199999999 -2001 2002 8007009 9 9 322 5493 3906 -1587 -31458.780000000144 -2001 2002 9015002 15 9 303 5722 4211 -1511 -81847.94999999995 -2001 2002 8015003 4 9 289 6413 4905 -1508 -140884.2300000003 +2001 2002 3004001 1 9 89 6307 4616 -1691 -105539.1 +2001 2002 9014004 12 9 423 6427 4742 -1685 -66528.44999999995 +2001 2002 1001001 5 9 172 5642 3998 -1644 -65808.52000000005 +2001 2002 8007009 9 9 322 5493 3906 -1587 -31458.780000000028 +2001 2002 9015002 15 9 303 5722 4211 -1511 -81847.95000000001 +2001 2002 8015003 4 9 289 6413 4905 -1508 -140884.23000000004 2001 2002 9002008 2 9 202 5758 4287 -1471 -27415.179999999993 -2001 2002 9004002 4 9 55 5596 4196 -1400 -277.9199999998964 -2001 2002 9010002 10 9 432 5153 3767 -1386 -56643.310000000085 -2001 2002 9015003 15 9 278 5120 3745 -1375 -61503.40000000014 -2001 2002 5001001 10 9 136 5271 3918 -1353 -52691.740000000165 -2001 2002 9007002 7 9 207 6416 5088 -1328 -28312.29000000024 -2001 2002 9016004 8 9 114 5560 4263 -1297 -65169.90000000005 +2001 2002 9004002 4 9 55 5596 4196 -1400 -277.9199999999837 +2001 2002 9010002 10 9 432 5153 3767 -1386 -56643.30999999997 +2001 2002 9015003 15 9 278 5120 3745 -1375 -61503.40000000002 +2001 2002 5001001 10 9 136 5271 3918 -1353 -52691.73999999996 +2001 2002 9007002 7 9 207 6416 5088 -1328 -28312.290000000008 +2001 2002 9016004 8 9 114 5560 4263 -1297 -65169.899999999994 2001 2002 9007004 7 9 968 5625 4330 -1295 -86120.30000000005 -2001 2002 9008008 8 9 535 6155 4861 -1294 -66647.47000000018 -2001 2002 3003001 1 9 175 6170 4892 -1278 -72260.63999999987 -2001 2002 9010004 3 9 948 5640 4387 -1253 -34985.50999999992 -2001 2002 9012008 12 9 249 5254 4002 -1252 -15484.880000000034 -2001 2002 9015008 15 9 281 5558 4315 -1243 10022.909999999916 -2001 2002 9006004 6 9 620 4822 3594 -1228 -19309.879999999946 -2001 2002 9010008 10 9 171 6500 5279 -1221 -73654.2299999999 -2001 2002 9004008 4 9 256 5366 4164 -1202 -93628.45999999985 +2001 2002 9008008 8 9 535 6155 4861 -1294 -66647.46999999997 +2001 2002 3003001 1 9 175 6170 4892 -1278 -72260.64000000004 +2001 2002 9010004 3 9 948 5640 4387 -1253 -34985.50999999998 +2001 2002 9012008 12 9 249 5254 4002 -1252 -15484.879999999946 +2001 2002 9015008 15 9 281 5558 4315 -1243 10022.909999999974 +2001 2002 9006004 6 9 620 4822 3594 -1228 -19309.879999999976 +2001 2002 9010008 10 9 171 6500 5279 -1221 -73654.22999999998 +2001 2002 9004008 4 9 256 5366 4164 -1202 -93628.46000000002 2001 2002 9008008 8 9 82 6042 4852 -1190 -78558.04999999999 -2001 2002 9014010 2 9 727 6579 5396 -1183 -45368.94000000015 -2001 2002 10002014 1 9 12 5662 4515 -1147 -47170.699999999866 -2001 2002 9005002 5 9 105 5650 4508 -1142 -75927.61000000019 -2001 2002 1001001 1 9 183 5538 4417 -1121 -34086.49000000011 -2001 2002 8015005 11 9 898 5677 4557 -1120 -49916.13000000009 -2001 2002 9016010 16 9 662 5306 4197 -1109 -29664.549999999872 -2001 2002 2001001 1 9 151 6309 5200 -1109 -13881.980000000069 -2001 2002 7007001 12 9 221 6250 5147 -1103 8445.219999999943 -2001 2002 9010008 10 9 106 5739 4637 -1102 -39967.25999999995 -2001 2002 5001001 6 9 201 5714 4615 -1099 -2073.6100000001024 -2001 2002 9002004 2 9 578 5976 4881 -1095 -26222.700000000128 -2001 2002 9013010 12 9 28 5672 4579 -1093 -61365.10000000009 -2001 2002 9003002 3 9 238 5784 4694 -1090 -52094.93000000005 -2001 2002 9012010 12 9 4 6214 5128 -1086 -41244.90000000002 -2001 2002 4003001 6 9 356 5890 4815 -1075 -19594.680000000022 -2001 2002 9009002 9 9 633 5839 4786 -1053 -40163.89999999991 -2001 2002 9006010 6 9 100 5322 4271 -1051 -65656.4900000001 -2001 2002 9003002 3 9 130 5708 4658 -1050 -121435.05000000005 +2001 2002 9014010 2 9 727 6579 5396 -1183 -45368.94000000003 +2001 2002 10002014 1 9 12 5662 4515 -1147 -47170.69999999995 +2001 2002 9005002 5 9 105 5650 4508 -1142 -75927.6100000001 +2001 2002 1001001 1 9 183 5538 4417 -1121 -34086.49000000002 +2001 2002 8015005 11 9 898 5677 4557 -1120 -49916.130000000005 +2001 2002 9016010 16 9 662 5306 4197 -1109 -29664.54999999999 +2001 2002 2001001 1 9 151 6309 5200 -1109 -13881.979999999981 +2001 2002 7007001 12 9 221 6250 5147 -1103 8445.219999999972 +2001 2002 9010008 10 9 106 5739 4637 -1102 -39967.25999999998 +2001 2002 5001001 6 9 201 5714 4615 -1099 -2073.6100000000442 +2001 2002 9002004 2 9 578 5976 4881 -1095 -26222.70000000001 +2001 2002 9013010 12 9 28 5672 4579 -1093 -61365.100000000006 +2001 2002 9003002 3 9 238 5784 4694 -1090 -52094.93000000002 +2001 2002 9012010 12 9 4 6214 5128 -1086 -41244.90000000005 +2001 2002 4003001 6 9 356 5890 4815 -1075 -19594.679999999993 +2001 2002 9009002 9 9 633 5839 4786 -1053 -40163.899999999994 +2001 2002 9006010 6 9 100 5322 4271 -1051 -65656.48999999999 +2001 2002 9003002 3 9 130 5708 4658 -1050 -121435.05000000008 2001 2002 9011004 3 9 115 5101 4064 -1037 -38404.06999999998 -2001 2002 9006008 6 9 156 5824 4793 -1031 -16295.149999999965 -2001 2002 4004001 10 9 105 5560 4533 -1027 -29705.360000000015 -2001 2002 9009008 9 9 3 5731 4718 -1013 -62660.4800000001 -2001 2002 10005001 5 9 65 5890 4879 -1011 -57577.01000000004 -2001 2002 9007008 7 9 122 6085 5077 -1008 -108804.85999999993 -2001 2002 9001008 1 9 258 5714 4706 -1008 -73311.06999999975 -2001 2002 9003008 3 9 382 5145 4143 -1002 -23005.48000000007 -2001 2002 2001001 1 9 177 5711 4718 -993 -45422.40000000002 -2001 2002 8002001 13 9 268 5521 4545 -976 -50681.48999999996 +2001 2002 9006008 6 9 156 5824 4793 -1031 -16295.149999999994 +2001 2002 4004001 10 9 105 5560 4533 -1027 -29705.359999999986 +2001 2002 9009008 9 9 3 5731 4718 -1013 -62660.48000000007 +2001 2002 10005001 5 9 65 5890 4879 -1011 -57577.01000000001 +2001 2002 9007008 7 9 122 6085 5077 -1008 -108804.86000000002 +2001 2002 9001008 1 9 258 5714 4706 -1008 -73311.07 +2001 2002 9003008 3 9 382 5145 4143 -1002 -23005.47999999998 +2001 2002 2001001 1 9 177 5711 4718 -993 -45422.399999999994 +2001 2002 8002001 13 9 268 5521 4545 -976 -50681.48999999999 2001 2002 9010008 10 9 9 5549 4578 -971 45104.79000000001 -2001 2002 5002001 2 9 230 5856 4887 -969 -25537.869999999937 +2001 2002 5002001 2 9 230 5856 4887 -969 -25537.869999999966 2001 2002 10015001 1 9 399 6188 5225 -963 -76365.39000000001 -2001 2002 9010004 10 9 110 5035 4082 -953 -81282.11999999997 -2001 2002 9013010 3 9 235 5771 4821 -950 -81516.66999999993 -2001 2002 9003004 3 9 311 5414 4467 -947 -19498.98000000007 -2001 2002 9007008 7 9 766 5412 4470 -942 -43150.760000000155 -2001 2002 3003001 9 9 210 5703 4761 -942 -22794.72000000003 -2001 2002 9010008 10 9 621 5897 4955 -942 -1466.749999999971 -2001 2002 4001001 15 9 42 5385 4444 -941 -77081.26999999993 -2001 2002 9012010 12 9 268 5363 4425 -938 -13775.609999999811 -2001 2002 4002001 2 9 891 6168 5233 -935 -54473.39999999982 -2001 2002 10011013 11 9 123 6141 5207 -934 -77290.63000000006 -2001 2002 9005002 5 9 379 5673 4742 -931 -66550.24000000014 -2001 2002 9005002 5 9 35 6085 5166 -919 -23898.750000000087 -2001 2002 9014008 14 9 904 5637 4725 -912 -54696.64000000007 -2001 2002 9010002 10 9 351 5553 4668 -885 -58399.98999999993 -2001 2002 9002008 2 9 603 5399 4518 -881 -8944.74000000002 -2001 2002 9005002 5 9 226 6438 5559 -879 -78309.56000000014 -2001 2002 9016008 16 9 134 5482 4617 -865 -93343.25000000006 -2001 2002 7004007 2 9 248 5385 4527 -858 -59997.87000000008 -2001 2002 9002002 2 9 556 5690 4832 -858 2965.4700000000303 -2001 2002 6012003 9 9 48 5468 4620 -848 17912.879999999917 -2001 2002 9013010 13 9 288 5473 4631 -842 22917.87999999986 -2001 2002 9009008 9 9 958 5837 5002 -835 -63092.61999999994 -2001 2002 9015008 15 9 384 5348 4519 -829 -29937.399999999965 +2001 2002 9010004 10 9 110 5035 4082 -953 -81282.12 +2001 2002 9013010 3 9 235 5771 4821 -950 -81516.66999999995 +2001 2002 9003004 3 9 311 5414 4467 -947 -19498.97999999998 +2001 2002 9007008 7 9 766 5412 4470 -942 -43150.76000000004 +2001 2002 3003001 9 9 210 5703 4761 -942 -22794.719999999972 +2001 2002 9010008 10 9 621 5897 4955 -942 -1466.7500000000582 +2001 2002 4001001 15 9 42 5385 4444 -941 -77081.26999999999 +2001 2002 9012010 12 9 268 5363 4425 -938 -13775.609999999986 +2001 2002 4002001 2 9 891 6168 5233 -935 -54473.399999999965 +2001 2002 10011013 11 9 123 6141 5207 -934 -77290.63 +2001 2002 9005002 5 9 379 5673 4742 -931 -66550.2400000001 +2001 2002 9005002 5 9 35 6085 5166 -919 -23898.74999999997 +2001 2002 9014008 14 9 904 5637 4725 -912 -54696.64000000004 +2001 2002 9010002 10 9 351 5553 4668 -885 -58399.98999999999 +2001 2002 9002008 2 9 603 5399 4518 -881 -8944.73999999999 +2001 2002 9005002 5 9 226 6438 5559 -879 -78309.56 +2001 2002 9016008 16 9 134 5482 4617 -865 -93343.24999999994 +2001 2002 7004007 2 9 248 5385 4527 -858 -59997.869999999995 +2001 2002 9002002 2 9 556 5690 4832 -858 2965.4700000000594 +2001 2002 6012003 9 9 48 5468 4620 -848 17912.879999999976 +2001 2002 9013010 13 9 288 5473 4631 -842 22917.880000000063 +2001 2002 9009008 9 9 958 5837 5002 -835 -63092.619999999995 +2001 2002 9015008 15 9 384 5348 4519 -829 -29937.399999999994 2001 2002 1003001 3 9 242 5504 4697 -807 -10853.559999999998 -2001 2002 9011002 11 9 372 5085 4279 -806 -78551.74999999997 -2001 2002 9015002 15 9 224 5915 5112 -803 -46136.84999999992 -2001 2002 9015002 15 9 531 5831 5029 -802 -10846.840000000113 -2001 2002 2004001 16 9 443 5269 4475 -794 -28869.679999999847 -2001 2002 9003010 3 9 269 6297 5505 -792 -53827.19000000006 -2001 2002 9007002 7 9 306 5398 4608 -790 -67953.64000000001 -2001 2002 9012004 12 9 808 5796 5006 -790 -43025.36000000007 -2001 2002 6015001 15 9 543 5041 4252 -789 3631.400000000198 -2001 2002 9004012 4 9 621 5974 5186 -788 52156.560000000114 +2001 2002 9011002 11 9 372 5085 4279 -806 -78551.75 +2001 2002 9015002 15 9 224 5915 5112 -803 -46136.84999999998 +2001 2002 9015002 15 9 531 5831 5029 -802 -10846.839999999938 +2001 2002 2004001 16 9 443 5269 4475 -794 -28869.680000000022 +2001 2002 9003010 3 9 269 6297 5505 -792 -53827.189999999944 +2001 2002 9007002 7 9 306 5398 4608 -790 -67953.63999999996 +2001 2002 9012004 12 9 808 5796 5006 -790 -43025.360000000044 +2001 2002 6015001 15 9 543 5041 4252 -789 3631.399999999965 +2001 2002 9004012 4 9 621 5974 5186 -788 52156.560000000056 2001 2002 9010008 10 9 284 5382 4597 -785 22162.919999999984 -2001 2002 9011002 11 9 42 5750 4968 -782 -87125.33000000005 +2001 2002 9011002 11 9 42 5750 4968 -782 -87125.33000000002 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q85.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q85.out index 92077d88a4fd09..981d826ed55fcb 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q85.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q85.out @@ -1,9 +1,9 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q85 -- -Gift exchange 76.0 464.36 8.62 -Not the product that 70.0 876.67 46.67 -Parts missing 7.0 129.42 38.65 -reason 23 47.0 734.61 6.17 -reason 25 5.0 48.94 53.14 -reason 28 8.0 306.20 37.06 +Gift exchange 76.0 464.3600 8.6200 +Not the product that 70.0 876.6700 46.6700 +Parts missing 7.0 129.4200 38.6500 +reason 23 47.0 734.6100 6.1700 +reason 25 5.0 48.9400 53.1450 +reason 28 8.0 306.2000 37.0600 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q89.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q89.out index c15c3dd8f75994..3d572f5e631784 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q89.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/pipeline_q89.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q89 -- -Men shirts importoimporto #1 ese Unknown 3 2070.65 5492.81 -Men shirts importoimporto #1 ought Unknown 6 2152.15 5045.75 -Men shirts importoimporto #1 able Unknown 2 2333.43 5194.81 -Men shirts importoimporto #1 ese Unknown 6 2691.33 5492.81 -Men shirts importoimporto #1 ought Unknown 2 2253.70 5045.75 -Women dresses amalgamalg #1 able Unknown 6 1761.81 4507.24 -Men shirts importoimporto #1 ation Unknown 3 2672.68 5410.91 -Men shirts importoimporto #1 ation Unknown 5 2677.81 5410.91 -Men shirts importoimporto #1 eing Unknown 5 2356.88 5074.07 -Men shirts importoimporto #1 ese Unknown 4 2784.11 5492.81 -Women dresses amalgamalg #1 ought Unknown 7 1926.67 4619.70 -Women dresses amalgamalg #1 ought Unknown 1 2065.94 4619.70 -Men shirts importoimporto #1 ation Unknown 6 2881.34 5410.91 -Men shirts importoimporto #1 able Unknown 3 2674.91 5194.81 -Women dresses amalgamalg #1 ation Unknown 2 2192.31 4690.89 -Men shirts importoimporto #1 bar Unknown 5 2475.90 4973.50 -Women dresses amalgamalg #1 ese Unknown 2 2146.52 4642.99 -Men shirts importoimporto #1 eing Unknown 2 2588.02 5074.07 -Women dresses amalgamalg #1 bar Unknown 7 2428.75 4914.11 -Women dresses amalgamalg #1 bar Unknown 3 2451.51 4914.11 -Men shirts importoimporto #1 ation Unknown 7 2951.67 5410.91 -Men shirts importoimporto #1 able Unknown 1 2765.75 5194.81 -Women dresses amalgamalg #1 able Unknown 2 2082.54 4507.24 -Men shirts importoimporto #1 ation Unknown 4 2988.08 5410.91 -Men shirts importoimporto #1 ought Unknown 7 2667.92 5045.75 -Women dresses amalgamalg #1 bar Unknown 4 2549.27 4914.11 -Women dresses amalgamalg #1 ese Unknown 7 2307.00 4642.99 -Women dresses amalgamalg #1 eing Unknown 4 2204.15 4528.82 -Men shirts importoimporto #1 able Unknown 7 2880.34 5194.81 -Men shirts importoimporto #1 ese Unknown 5 3210.74 5492.81 -Women dresses amalgamalg #1 ation Unknown 4 2418.39 4690.89 -Men shirts importoimporto #1 eing Unknown 4 2833.40 5074.07 -Women dresses amalgamalg #1 bar Unknown 2 2692.79 4914.11 -Men shirts importoimporto #1 eing Unknown 6 2854.62 5074.07 -Women dresses amalgamalg #1 eing Unknown 6 2314.71 4528.82 -Men shirts importoimporto #1 ought Unknown 5 2834.94 5045.75 -Women dresses amalgamalg #1 ation Unknown 5 2480.25 4690.89 -Women dresses amalgamalg #1 able Unknown 7 2302.21 4507.24 -Women dresses amalgamalg #1 ation Unknown 6 2501.15 4690.89 -Men shirts importoimporto #1 ese Unknown 2 3307.78 5492.81 -Men shirts importoimporto #1 able Unknown 5 3016.43 5194.81 -Men shirts importoimporto #1 able Unknown 4 3040.23 5194.81 -Women dresses amalgamalg #1 eing Unknown 5 2420.31 4528.82 -Women dresses amalgamalg #1 ese Unknown 5 2535.80 4642.99 -Women dresses amalgamalg #1 ought Unknown 2 2521.70 4619.70 -Men shirts importoimporto #1 bar Unknown 3 2877.96 4973.50 -Women dresses amalgamalg #1 ese Unknown 3 2577.15 4642.99 -Women dresses amalgamalg #1 ation Unknown 7 2637.27 4690.89 -Men shirts importoimporto #1 ation Unknown 1 3380.16 5410.91 -Women dresses amalgamalg #1 eing Unknown 7 2524.32 4528.82 -Men shirts importoimporto #1 bar Unknown 4 2986.70 4973.50 -Women dresses amalgamalg #1 ought Unknown 4 2648.80 4619.70 -Men shirts importoimporto #1 bar Unknown 7 3026.41 4973.50 -Women dresses amalgamalg #1 ation Unknown 3 2751.11 4690.89 -Men shirts importoimporto #1 bar Unknown 2 3073.45 4973.50 -Men shirts importoimporto #1 eing Unknown 3 3179.96 5074.07 -Women dresses amalgamalg #1 ation Unknown 1 2797.07 4690.89 -Women dresses amalgamalg #1 able Unknown 1 2621.05 4507.24 -Women dresses amalgamalg #1 ese Unknown 4 2808.36 4642.99 -Women dresses amalgamalg #2 bar Unknown 6 680.47 2506.96 -Men shirts importoimporto #1 ation Unknown 2 3591.65 5410.91 -Women dresses amalgamalg #1 able Unknown 3 2706.15 4507.24 -Women dresses amalgamalg #2 eing Unknown 2 773.08 2569.34 -Men shirts importoimporto #1 bar Unknown 6 3199.08 4973.50 -Men shirts importoimporto #1 ese Unknown 7 3754.33 5492.81 -Women dresses amalgamalg #1 bar Unknown 5 3190.77 4914.11 -Women dresses amalgamalg #1 eing Unknown 2 2841.88 4528.82 -Men shirts importoimporto #1 able Unknown 6 3538.25 5194.81 -Women dresses amalgamalg #1 ese Unknown 6 3006.94 4642.99 -Women dresses amalgamalg #1 bar Unknown 1 3284.93 4914.11 -Women dresses amalgamalg #2 bar Unknown 5 878.42 2506.96 -Women dresses amalgamalg #1 able Unknown 5 2891.95 4507.24 -Men shirts importoimporto #1 eing Unknown 7 3465.77 5074.07 -Women dresses amalgamalg #2 eing Unknown 3 964.29 2569.34 -Women dresses amalgamalg #1 bar Unknown 6 3324.49 4914.11 -Men shirts importoimporto #1 ought Unknown 3 3467.09 5045.75 -Women dresses amalgamalg #1 ought Unknown 5 3049.25 4619.70 -Women dresses amalgamalg #1 eing Unknown 3 2978.07 4528.82 -Men shirts importoimporto #1 ought Unknown 4 3544.97 5045.75 -Men shirts importoimporto #1 bar Unknown 1 3490.62 4973.50 -Men shirts importoimporto #2 able Unknown 2 628.63 2095.47 -Men shirts importoimporto #1 eing Unknown 1 3628.21 5074.07 -Women dresses amalgamalg #1 able Unknown 4 3082.17 4507.24 -Men shirts importoimporto #2 eing Unknown 5 765.86 2137.65 -Women dresses amalgamalg #2 ation Unknown 4 1064.70 2431.22 -Women dresses amalgamalg #2 ought Unknown 3 991.89 2355.44 -Women dresses amalgamalg #2 eing Unknown 5 1211.13 2569.34 -Women dresses amalgamalg #2 ation Unknown 7 1078.41 2431.22 -Men shirts importoimporto #2 ation Unknown 4 807.67 2141.06 -Women dresses amalgamalg #2 ation Unknown 2 1102.89 2431.22 -Women dresses amalgamalg #2 eing Unknown 6 1247.86 2569.34 -Women dresses amalgamalg #2 able Unknown 4 1020.39 2337.27 -Men shirts importoimporto #2 able Unknown 7 780.91 2095.47 -Women dresses amalgamalg #2 ese Unknown 2 904.34 2200.82 -Women dresses amalgamalg #2 ought Unknown 7 1061.87 2355.44 -Women dresses amalgamalg #2 able Unknown 3 1054.94 2337.27 -Men shirts importoimporto #2 ought Unknown 6 633.96 1908.05 -Men shirts importoimporto #2 ese Unknown 6 853.37 2113.57 -Women dresses amalgamalg #2 able Unknown 5 1084.94 2337.27 -Women dresses amalgamalg #2 eing Unknown 4 1317.08 2569.34 +Men shirts importoimporto #1 ese Unknown 3 2070.65 5492.8175 +Men shirts importoimporto #1 ought Unknown 6 2152.15 5045.7583 +Men shirts importoimporto #1 able Unknown 2 2333.43 5194.8183 +Men shirts importoimporto #1 ese Unknown 6 2691.33 5492.8175 +Men shirts importoimporto #1 ought Unknown 2 2253.70 5045.7583 +Women dresses amalgamalg #1 able Unknown 6 1761.81 4507.2400 +Men shirts importoimporto #1 ation Unknown 3 2672.68 5410.9166 +Men shirts importoimporto #1 ation Unknown 5 2677.81 5410.9166 +Men shirts importoimporto #1 eing Unknown 5 2356.88 5074.0766 +Men shirts importoimporto #1 ese Unknown 4 2784.11 5492.8175 +Women dresses amalgamalg #1 ought Unknown 7 1926.67 4619.7075 +Women dresses amalgamalg #1 ought Unknown 1 2065.94 4619.7075 +Men shirts importoimporto #1 ation Unknown 6 2881.34 5410.9166 +Men shirts importoimporto #1 able Unknown 3 2674.91 5194.8183 +Women dresses amalgamalg #1 ation Unknown 2 2192.31 4690.8900 +Men shirts importoimporto #1 bar Unknown 5 2475.90 4973.5091 +Women dresses amalgamalg #1 ese Unknown 2 2146.52 4642.9908 +Men shirts importoimporto #1 eing Unknown 2 2588.02 5074.0766 +Women dresses amalgamalg #1 bar Unknown 7 2428.75 4914.1183 +Women dresses amalgamalg #1 bar Unknown 3 2451.51 4914.1183 +Men shirts importoimporto #1 ation Unknown 7 2951.67 5410.9166 +Men shirts importoimporto #1 able Unknown 1 2765.75 5194.8183 +Women dresses amalgamalg #1 able Unknown 2 2082.54 4507.2400 +Men shirts importoimporto #1 ation Unknown 4 2988.08 5410.9166 +Men shirts importoimporto #1 ought Unknown 7 2667.92 5045.7583 +Women dresses amalgamalg #1 bar Unknown 4 2549.27 4914.1183 +Women dresses amalgamalg #1 ese Unknown 7 2307.00 4642.9908 +Women dresses amalgamalg #1 eing Unknown 4 2204.15 4528.8225 +Men shirts importoimporto #1 able Unknown 7 2880.34 5194.8183 +Men shirts importoimporto #1 ese Unknown 5 3210.74 5492.8175 +Women dresses amalgamalg #1 ation Unknown 4 2418.39 4690.8900 +Men shirts importoimporto #1 eing Unknown 4 2833.40 5074.0766 +Women dresses amalgamalg #1 bar Unknown 2 2692.79 4914.1183 +Men shirts importoimporto #1 eing Unknown 6 2854.62 5074.0766 +Women dresses amalgamalg #1 eing Unknown 6 2314.71 4528.8225 +Men shirts importoimporto #1 ought Unknown 5 2834.94 5045.7583 +Women dresses amalgamalg #1 ation Unknown 5 2480.25 4690.8900 +Women dresses amalgamalg #1 able Unknown 7 2302.21 4507.2400 +Women dresses amalgamalg #1 ation Unknown 6 2501.15 4690.8900 +Men shirts importoimporto #1 ese Unknown 2 3307.78 5492.8175 +Men shirts importoimporto #1 able Unknown 5 3016.43 5194.8183 +Men shirts importoimporto #1 able Unknown 4 3040.23 5194.8183 +Women dresses amalgamalg #1 eing Unknown 5 2420.31 4528.8225 +Women dresses amalgamalg #1 ese Unknown 5 2535.80 4642.9908 +Women dresses amalgamalg #1 ought Unknown 2 2521.70 4619.7075 +Men shirts importoimporto #1 bar Unknown 3 2877.96 4973.5091 +Women dresses amalgamalg #1 ese Unknown 3 2577.15 4642.9908 +Women dresses amalgamalg #1 ation Unknown 7 2637.27 4690.8900 +Men shirts importoimporto #1 ation Unknown 1 3380.16 5410.9166 +Women dresses amalgamalg #1 eing Unknown 7 2524.32 4528.8225 +Men shirts importoimporto #1 bar Unknown 4 2986.70 4973.5091 +Women dresses amalgamalg #1 ought Unknown 4 2648.80 4619.7075 +Men shirts importoimporto #1 bar Unknown 7 3026.41 4973.5091 +Women dresses amalgamalg #1 ation Unknown 3 2751.11 4690.8900 +Men shirts importoimporto #1 bar Unknown 2 3073.45 4973.5091 +Men shirts importoimporto #1 eing Unknown 3 3179.96 5074.0766 +Women dresses amalgamalg #1 ation Unknown 1 2797.07 4690.8900 +Women dresses amalgamalg #1 able Unknown 1 2621.05 4507.2400 +Women dresses amalgamalg #1 ese Unknown 4 2808.36 4642.9908 +Women dresses amalgamalg #2 bar Unknown 6 680.47 2506.9633 +Men shirts importoimporto #1 ation Unknown 2 3591.65 5410.9166 +Women dresses amalgamalg #1 able Unknown 3 2706.15 4507.2400 +Women dresses amalgamalg #2 eing Unknown 2 773.08 2569.3466 +Men shirts importoimporto #1 bar Unknown 6 3199.08 4973.5091 +Men shirts importoimporto #1 ese Unknown 7 3754.33 5492.8175 +Women dresses amalgamalg #1 bar Unknown 5 3190.77 4914.1183 +Women dresses amalgamalg #1 eing Unknown 2 2841.88 4528.8225 +Men shirts importoimporto #1 able Unknown 6 3538.25 5194.8183 +Women dresses amalgamalg #1 ese Unknown 6 3006.94 4642.9908 +Women dresses amalgamalg #1 bar Unknown 1 3284.93 4914.1183 +Women dresses amalgamalg #2 bar Unknown 5 878.42 2506.9633 +Women dresses amalgamalg #1 able Unknown 5 2891.95 4507.2400 +Men shirts importoimporto #1 eing Unknown 7 3465.77 5074.0766 +Women dresses amalgamalg #2 eing Unknown 3 964.29 2569.3466 +Women dresses amalgamalg #1 bar Unknown 6 3324.49 4914.1183 +Men shirts importoimporto #1 ought Unknown 3 3467.09 5045.7583 +Women dresses amalgamalg #1 ought Unknown 5 3049.25 4619.7075 +Women dresses amalgamalg #1 eing Unknown 3 2978.07 4528.8225 +Men shirts importoimporto #1 ought Unknown 4 3544.97 5045.7583 +Men shirts importoimporto #1 bar Unknown 1 3490.62 4973.5091 +Men shirts importoimporto #2 able Unknown 2 628.63 2095.4708 +Men shirts importoimporto #1 eing Unknown 1 3628.21 5074.0766 +Women dresses amalgamalg #1 able Unknown 4 3082.17 4507.2400 +Men shirts importoimporto #2 eing Unknown 5 765.86 2137.6566 +Women dresses amalgamalg #2 ation Unknown 4 1064.70 2431.2266 +Women dresses amalgamalg #2 ought Unknown 3 991.89 2355.4416 +Women dresses amalgamalg #2 eing Unknown 5 1211.13 2569.3466 +Women dresses amalgamalg #2 ation Unknown 7 1078.41 2431.2266 +Men shirts importoimporto #2 ation Unknown 4 807.67 2141.0600 +Women dresses amalgamalg #2 ation Unknown 2 1102.89 2431.2266 +Women dresses amalgamalg #2 eing Unknown 6 1247.86 2569.3466 +Women dresses amalgamalg #2 able Unknown 4 1020.39 2337.2783 +Men shirts importoimporto #2 able Unknown 7 780.91 2095.4708 +Women dresses amalgamalg #2 ese Unknown 2 904.34 2200.8208 +Women dresses amalgamalg #2 ought Unknown 7 1061.87 2355.4416 +Women dresses amalgamalg #2 able Unknown 3 1054.94 2337.2783 +Men shirts importoimporto #2 ought Unknown 6 633.96 1908.0566 +Men shirts importoimporto #2 ese Unknown 6 853.37 2113.5733 +Women dresses amalgamalg #2 able Unknown 5 1084.94 2337.2783 +Women dresses amalgamalg #2 eing Unknown 4 1317.08 2569.3466 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q07.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q07.out index 7fb83d59312997..96bef16757ba73 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q07.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q07.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q07 -- -AAAAAAAAAAACAAAA 17.0 13.15 7.70 1.97 -AAAAAAAAAAAEAAAA 99.0 123.44 0.00 44.43 -AAAAAAAAAABBAAAA 11.0 77.31 0.00 38.65 -AAAAAAAAAABEAAAA 35.5 18.90 0.00 4.85 -AAAAAAAAAACAAAAA 61.0 38.63 90.24 16.38 -AAAAAAAAAACCAAAA 10.5 83.46 0.00 30.02 -AAAAAAAAAADBAAAA 44.0 108.36 0.00 13.00 -AAAAAAAAAADCAAAA 54.0 59.29 0.00 34.98 -AAAAAAAAAADEAAAA 93.0 43.57 0.00 38.34 -AAAAAAAAAAEAAAAA 72.0 16.46 0.00 13.33 -AAAAAAAAAAEBAAAA 88.0 29.02 0.00 0.87 -AAAAAAAAAAEDAAAA 91.0 84.37 0.00 9.09 -AAAAAAAAAAFDAAAA 37.0 33.13 0.00 20.20 -AAAAAAAAAAGEAAAA 35.0 56.48 881.45 23.63 -AAAAAAAAAAHDAAAA 33.0 59.05 0.00 48.53 -AAAAAAAAAAICAAAA 68.5 108.73 166.78 69.22 -AAAAAAAAAAIDAAAA 76.0 97.19 0.00 43.73 -AAAAAAAAAAJCAAAA 30.0 47.55 0.00 30.43 -AAAAAAAAAAKBAAAA 59.0 55.08 0.00 17.07 -AAAAAAAAAAMBAAAA 74.0 10.39 0.00 8.62 -AAAAAAAAAAMCAAAA 86.0 24.10 0.41 0.48 -AAAAAAAAAANAAAAA 43.0 80.16 0.00 41.68 -AAAAAAAAAANBAAAA 28.0 112.27 0.00 57.25 -AAAAAAAAAAOAAAAA 46.0 12.63 0.00 4.67 -AAAAAAAAAAPBAAAA 66.0 39.59 969.80 18.60 -AAAAAAAAAAPCAAAA 90.0 68.28 0.00 47.79 -AAAAAAAAABAAAAAA 10.5 71.48 0.00 28.92 -AAAAAAAAABABAAAA 12.5 100.53 2.23 34.80 -AAAAAAAAABADAAAA 100.0 68.67 0.00 50.81 -AAAAAAAAABAEAAAA 49.0 15.79 0.00 11.84 -AAAAAAAAABBCAAAA 52.0 115.10 0.00 24.17 -AAAAAAAAABDEAAAA 92.0 168.96 0.00 23.65 -AAAAAAAAABEAAAAA 33.333333333333336 58.64 99.47 22.16 -AAAAAAAAABECAAAA 43.0 167.74 0.00 88.90 -AAAAAAAAABEDAAAA 74.0 129.10 0.00 108.44 -AAAAAAAAABFBAAAA 36.0 115.18 0.00 109.42 -AAAAAAAAABFCAAAA 51.0 121.98 0.00 17.07 -AAAAAAAAABFEAAAA 65.0 117.88 0.00 107.27 -AAAAAAAAABGBAAAA 52.0 71.54 0.00 30.28 -AAAAAAAAABGDAAAA 67.5 58.86 0.00 35.25 -AAAAAAAAABHAAAAA 71.0 39.38 804.37 8.38 -AAAAAAAAABHCAAAA 48.0 12.67 52.16 4.18 -AAAAAAAAABHDAAAA 55.0 17.78 0.00 5.51 -AAAAAAAAABJAAAAA 32.0 20.11 0.00 15.68 -AAAAAAAAABJBAAAA 21.0 72.33 0.00 11.37 -AAAAAAAAABJDAAAA 43.0 74.92 0.00 8.24 -AAAAAAAAABKAAAAA 67.0 103.07 0.00 34.01 -AAAAAAAAABKCAAAA 43.0 73.93 0.00 48.05 -AAAAAAAAABKDAAAA 84.0 102.95 0.00 42.20 -AAAAAAAAABMAAAAA 58.0 136.34 0.00 35.44 -AAAAAAAAABMDAAAA 80.0 3.06 0.00 1.89 -AAAAAAAAABNAAAAA 96.0 81.95 0.00 64.74 -AAAAAAAAABNCAAAA 42.0 88.83 0.00 20.65 -AAAAAAAAABOBAAAA 18.0 81.49 0.00 58.67 -AAAAAAAAABOCAAAA 31.0 73.87 0.00 59.94 -AAAAAAAAABPBAAAA 48.5 37.83 183.78 11.72 -AAAAAAAAACACAAAA 60.0 104.37 351.56 25.31 -AAAAAAAAACADAAAA 29.0 43.74 0.00 13.99 -AAAAAAAAACBBAAAA 44.5 87.51 0.00 36.14 -AAAAAAAAACBEAAAA 76.0 156.05 0.00 113.91 -AAAAAAAAACCDAAAA 26.0 35.57 0.00 13.01 -AAAAAAAAACCEAAAA 4.0 10.98 0.00 4.94 -AAAAAAAAACDAAAAA 16.0 87.87 36.26 75.56 -AAAAAAAAACDCAAAA 27.0 89.86 0.00 40.43 -AAAAAAAAACEBAAAA 42.0 94.58 0.00 51.26 -AAAAAAAAACFBAAAA 45.0 88.30 0.00 24.26 -AAAAAAAAACGAAAAA 47.0 10.46 0.00 5.64 -AAAAAAAAACGDAAAA 24.0 51.54 0.00 18.83 -AAAAAAAAACHBAAAA 44.0 103.27 0.00 65.06 -AAAAAAAAACHCAAAA 68.5 91.68 0.00 66.16 -AAAAAAAAACIAAAAA 7.0 25.42 0.00 8.64 -AAAAAAAAACIBAAAA 21.0 89.29 915.01 71.43 -AAAAAAAAACIDAAAA 43.0 56.28 56.11 4.50 -AAAAAAAAACLAAAAA 36.0 125.57 0.00 13.81 -AAAAAAAAACLDAAAA 61.333333333333336 114.20 0.00 59.12 -AAAAAAAAACMDAAAA 56.0 79.02 0.00 64.00 -AAAAAAAAACNCAAAA 63.0 54.20 0.00 29.26 -AAAAAAAAACOAAAAA 50.0 27.43 229.21 13.43 -AAAAAAAAACPAAAAA 32.0 147.62 2480.32 87.09 -AAAAAAAAACPCAAAA 80.0 12.60 0.00 0.37 -AAAAAAAAACPDAAAA 87.0 105.93 0.00 9.53 -AAAAAAAAADABAAAA 68.5 35.79 0.00 27.84 -AAAAAAAAADACAAAA 96.0 101.54 0.00 99.50 -AAAAAAAAADAEAAAA 53.0 74.64 0.00 7.63 -AAAAAAAAADBBAAAA 6.0 85.58 234.14 81.30 -AAAAAAAAADBDAAAA 47.0 39.33 62.71 12.09 -AAAAAAAAADBEAAAA 52.0 2.41 0.00 1.06 -AAAAAAAAADCAAAAA 91.0 92.17 0.00 67.28 -AAAAAAAAADCCAAAA 33.0 40.80 0.00 28.56 -AAAAAAAAADDBAAAA 45.0 18.63 0.00 17.69 -AAAAAAAAADDCAAAA 66.0 162.17 1525.90 37.29 -AAAAAAAAADDEAAAA 35.0 78.25 0.00 36.63 -AAAAAAAAADEBAAAA 59.5 110.38 157.96 16.16 -AAAAAAAAADEEAAAA 17.0 54.54 0.00 16.36 -AAAAAAAAADFAAAAA 44.0 133.51 0.00 25.36 -AAAAAAAAADGBAAAA 31.0 107.55 919.82 56.53 -AAAAAAAAADGCAAAA 78.0 119.61 0.00 74.15 -AAAAAAAAADGEAAAA 45.5 99.30 0.00 1.06 -AAAAAAAAADHAAAAA 86.0 81.09 0.00 37.30 -AAAAAAAAADHBAAAA 28.0 68.58 223.79 53.61 +AAAAAAAAAAACAAAA 17.0 13.1500 7.7000 1.9700 +AAAAAAAAAAAEAAAA 99.0 123.4400 0.0000 44.4300 +AAAAAAAAAABBAAAA 11.0 77.3100 0.0000 38.6500 +AAAAAAAAAABEAAAA 35.5 18.9000 0.0000 4.8500 +AAAAAAAAAACAAAAA 61.0 38.6300 90.2450 16.3850 +AAAAAAAAAACCAAAA 10.5 83.4650 0.0000 30.0200 +AAAAAAAAAADBAAAA 44.0 108.3600 0.0000 13.0000 +AAAAAAAAAADCAAAA 54.0 59.2900 0.0000 34.9800 +AAAAAAAAAADEAAAA 93.0 43.5700 0.0000 38.3400 +AAAAAAAAAAEAAAAA 72.0 16.4600 0.0000 13.3300 +AAAAAAAAAAEBAAAA 88.0 29.0200 0.0000 0.8700 +AAAAAAAAAAEDAAAA 91.0 84.3750 0.0000 9.0900 +AAAAAAAAAAFDAAAA 37.0 33.1300 0.0000 20.2000 +AAAAAAAAAAGEAAAA 35.0 56.4800 881.4500 23.6300 +AAAAAAAAAAHDAAAA 33.0 59.0500 0.0000 48.5300 +AAAAAAAAAAICAAAA 68.5 108.7300 166.7800 69.2200 +AAAAAAAAAAIDAAAA 76.0 97.1900 0.0000 43.7300 +AAAAAAAAAAJCAAAA 30.0 47.5500 0.0000 30.4300 +AAAAAAAAAAKBAAAA 59.0 55.0800 0.0000 17.0700 +AAAAAAAAAAMBAAAA 74.0 10.3900 0.0000 8.6200 +AAAAAAAAAAMCAAAA 86.0 24.1000 0.4100 0.4800 +AAAAAAAAAANAAAAA 43.0 80.1600 0.0000 41.6800 +AAAAAAAAAANBAAAA 28.0 112.2700 0.0000 57.2500 +AAAAAAAAAAOAAAAA 46.0 12.6300 0.0000 4.6700 +AAAAAAAAAAPBAAAA 66.0 39.5900 969.8000 18.6000 +AAAAAAAAAAPCAAAA 90.0 68.2800 0.0000 47.7900 +AAAAAAAAABAAAAAA 10.5 71.4800 0.0000 28.9200 +AAAAAAAAABABAAAA 12.5 100.5300 2.2300 34.8075 +AAAAAAAAABADAAAA 100.0 68.6700 0.0000 50.8100 +AAAAAAAAABAEAAAA 49.0 15.7900 0.0000 11.8400 +AAAAAAAAABBCAAAA 52.0 115.1000 0.0000 24.1700 +AAAAAAAAABDEAAAA 92.0 168.9600 0.0000 23.6500 +AAAAAAAAABEAAAAA 33.333333333333336 58.6466 99.4733 22.1666 +AAAAAAAAABECAAAA 43.0 167.7400 0.0000 88.9000 +AAAAAAAAABEDAAAA 74.0 129.1000 0.0000 108.4400 +AAAAAAAAABFBAAAA 36.0 115.1800 0.0000 109.4200 +AAAAAAAAABFCAAAA 51.0 121.9800 0.0000 17.0700 +AAAAAAAAABFEAAAA 65.0 117.8800 0.0000 107.2700 +AAAAAAAAABGBAAAA 52.0 71.5450 0.0000 30.2850 +AAAAAAAAABGDAAAA 67.5 58.8600 0.0000 35.2500 +AAAAAAAAABHAAAAA 71.0 39.3850 804.3750 8.3800 +AAAAAAAAABHCAAAA 48.0 12.6700 52.1600 4.1800 +AAAAAAAAABHDAAAA 55.0 17.7800 0.0000 5.5150 +AAAAAAAAABJAAAAA 32.0 20.1100 0.0000 15.6800 +AAAAAAAAABJBAAAA 21.0 72.3350 0.0000 11.3700 +AAAAAAAAABJDAAAA 43.0 74.9200 0.0000 8.2400 +AAAAAAAAABKAAAAA 67.0 103.0700 0.0000 34.0100 +AAAAAAAAABKCAAAA 43.0 73.9300 0.0000 48.0500 +AAAAAAAAABKDAAAA 84.0 102.9500 0.0000 42.2000 +AAAAAAAAABMAAAAA 58.0 136.3400 0.0000 35.4400 +AAAAAAAAABMDAAAA 80.0 3.0600 0.0000 1.8900 +AAAAAAAAABNAAAAA 96.0 81.9500 0.0000 64.7400 +AAAAAAAAABNCAAAA 42.0 88.8300 0.0000 20.6500 +AAAAAAAAABOBAAAA 18.0 81.4900 0.0000 58.6700 +AAAAAAAAABOCAAAA 31.0 73.8766 0.0000 59.9400 +AAAAAAAAABPBAAAA 48.5 37.8300 183.7800 11.7200 +AAAAAAAAACACAAAA 60.0 104.3750 351.5650 25.3150 +AAAAAAAAACADAAAA 29.0 43.7400 0.0000 13.9900 +AAAAAAAAACBBAAAA 44.5 87.5100 0.0000 36.1400 +AAAAAAAAACBEAAAA 76.0 156.0500 0.0000 113.9100 +AAAAAAAAACCDAAAA 26.0 35.5733 0.0000 13.0133 +AAAAAAAAACCEAAAA 4.0 10.9800 0.0000 4.9400 +AAAAAAAAACDAAAAA 16.0 87.8700 36.2600 75.5600 +AAAAAAAAACDCAAAA 27.0 89.8600 0.0000 40.4300 +AAAAAAAAACEBAAAA 42.0 94.5800 0.0000 51.2600 +AAAAAAAAACFBAAAA 45.0 88.3050 0.0000 24.2600 +AAAAAAAAACGAAAAA 47.0 10.4600 0.0000 5.6400 +AAAAAAAAACGDAAAA 24.0 51.5450 0.0000 18.8350 +AAAAAAAAACHBAAAA 44.0 103.2700 0.0000 65.0600 +AAAAAAAAACHCAAAA 68.5 91.6800 0.0000 66.1650 +AAAAAAAAACIAAAAA 7.0 25.4200 0.0000 8.6400 +AAAAAAAAACIBAAAA 21.0 89.2900 915.0100 71.4300 +AAAAAAAAACIDAAAA 43.0 56.2800 56.1100 4.5000 +AAAAAAAAACLAAAAA 36.0 125.5700 0.0000 13.8100 +AAAAAAAAACLDAAAA 61.333333333333336 114.2066 0.0000 59.1233 +AAAAAAAAACMDAAAA 56.0 79.0200 0.0000 64.0000 +AAAAAAAAACNCAAAA 63.0 54.2000 0.0000 29.2600 +AAAAAAAAACOAAAAA 50.0 27.4300 229.2150 13.4300 +AAAAAAAAACPAAAAA 32.0 147.6200 2480.3200 87.0900 +AAAAAAAAACPCAAAA 80.0 12.6000 0.0000 0.3700 +AAAAAAAAACPDAAAA 87.0 105.9300 0.0000 9.5300 +AAAAAAAAADABAAAA 68.5 35.7950 0.0000 27.8400 +AAAAAAAAADACAAAA 96.0 101.5400 0.0000 99.5000 +AAAAAAAAADAEAAAA 53.0 74.6400 0.0000 7.6300 +AAAAAAAAADBBAAAA 6.0 85.5800 234.1400 81.3000 +AAAAAAAAADBDAAAA 47.0 39.3300 62.7100 12.0900 +AAAAAAAAADBEAAAA 52.0 2.4100 0.0000 1.0600 +AAAAAAAAADCAAAAA 91.0 92.1700 0.0000 67.2800 +AAAAAAAAADCCAAAA 33.0 40.8000 0.0000 28.5600 +AAAAAAAAADDBAAAA 45.0 18.6300 0.0000 17.6900 +AAAAAAAAADDCAAAA 66.0 162.1700 1525.9000 37.2900 +AAAAAAAAADDEAAAA 35.0 78.2566 0.0000 36.6300 +AAAAAAAAADEBAAAA 59.5 110.3800 157.9650 16.1650 +AAAAAAAAADEEAAAA 17.0 54.5400 0.0000 16.3600 +AAAAAAAAADFAAAAA 44.0 133.5100 0.0000 25.3600 +AAAAAAAAADGBAAAA 31.0 107.5500 919.8250 56.5350 +AAAAAAAAADGCAAAA 78.0 119.6100 0.0000 74.1500 +AAAAAAAAADGEAAAA 45.5 99.3050 0.0000 1.0650 +AAAAAAAAADHAAAAA 86.0 81.0900 0.0000 37.3000 +AAAAAAAAADHBAAAA 28.0 68.5800 223.7900 53.6150 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q09.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q09.out index 0a8f33b55a6843..1fe9de0c0be136 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q09.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q09.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q09 -- -39.64 115.89 191.63 267.18 341.98 +39.6454 115.8981 191.6347 267.1879 341.9869 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q13.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q13.out index 33b3ffac928240..9db3f58c52c524 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q13.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q13.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q13 -- -31.0 2551.86 2365.94 14195.66 +31.0 2551.8633 2365.9433 14195.66 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q18.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q18.out index 1955a591df956d..cf6d8b8c4d017a 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q18.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q18.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q18 -- -\N \N \N \N 49.79 101.83 277.25 51.32 -240.15 1957.46 2.97 -AAAAAAAAAABAAAAA \N \N \N 60.00 109.08 5242.27 98.17 -1714.87 1930.00 0.00 -AAAAAAAAAABDAAAA \N \N \N 61.50 102.91 0.00 48.08 -1680.22 1953.50 3.00 -AAAAAAAAAADBAAAA \N \N \N 52.00 35.64 0.00 22.80 -484.12 1949.00 6.00 -AAAAAAAAAADCAAAA \N \N \N 76.00 106.95 0.00 82.35 1048.04 1925.00 5.00 -AAAAAAAAAAJBAAAA \N \N \N 97.00 62.64 621.54 6.89 -3570.34 1935.00 3.00 -AAAAAAAAAAKDAAAA \N \N \N 35.00 46.25 0.00 28.30 57.94 1948.50 5.00 -AAAAAAAAAAMBAAAA \N \N \N 88.00 191.33 0.00 141.58 6673.04 1962.00 0.00 -AAAAAAAAAAODAAAA \N \N \N 96.00 38.24 0.00 27.53 1131.84 1968.00 3.00 -AAAAAAAAABADAAAA \N \N \N 61.00 84.47 0.00 18.58 -3821.65 1968.00 3.00 -AAAAAAAAABCBAAAA \N \N \N 61.00 189.33 4323.59 90.87 -4441.93 1937.00 0.00 -AAAAAAAAABDAAAAA \N \N \N 72.00 175.64 1365.33 21.07 -6171.33 1940.00 2.00 -AAAAAAAAABEAAAAA \N \N \N 19.00 93.97 208.84 36.64 -510.18 1959.00 6.00 -AAAAAAAAABFEAAAA \N \N \N 98.00 28.65 0.00 6.30 -614.46 1935.00 6.00 -AAAAAAAAABJBAAAA \N \N \N 100.00 59.48 0.00 2.97 -5014.00 1980.00 5.00 -AAAAAAAAABMDAAAA \N \N \N 82.00 73.89 0.00 0.00 -2277.96 1943.00 0.00 -AAAAAAAAABPBAAAA \N \N \N 42.00 82.86 0.00 4.14 -1948.38 1940.00 2.00 -AAAAAAAAACAAAAAA \N \N \N 49.00 79.12 0.00 52.21 711.97 1961.00 5.00 -AAAAAAAAACBCAAAA \N \N \N 1.00 77.53 0.00 49.61 -1.40 1982.00 0.00 -AAAAAAAAACCAAAAA \N \N \N 35.00 147.98 2221.76 97.66 -653.41 1960.00 3.00 -AAAAAAAAACLAAAAA \N \N \N 22.00 215.25 0.00 157.13 1709.40 1968.00 3.00 -AAAAAAAAACLDAAAA \N \N \N 27.00 201.78 0.00 143.26 1588.41 1936.00 1.00 -AAAAAAAAACMDAAAA \N \N \N 100.00 63.46 395.16 4.44 -4328.16 1986.00 2.00 -AAAAAAAAADBAAAAA \N \N \N 5.00 15.68 0.00 5.95 -1.25 1949.00 6.00 -AAAAAAAAADBDAAAA \N \N \N 65.50 101.21 26.04 60.55 436.22 1967.50 3.00 -AAAAAAAAADGCAAAA \N \N \N 19.00 11.47 0.00 2.06 -127.30 1928.00 5.00 -AAAAAAAAADHAAAAA \N \N \N 17.00 52.65 0.00 11.05 -160.48 1953.00 6.00 -AAAAAAAAADICAAAA \N \N \N 86.00 35.07 0.00 12.97 -936.54 1980.00 5.00 -AAAAAAAAADODAAAA \N \N \N 83.00 38.50 0.00 5.77 -2098.24 1965.00 1.00 -AAAAAAAAADPCAAAA \N \N \N 59.00 46.11 0.00 37.34 352.23 1979.00 4.00 -AAAAAAAAAEABAAAA \N \N \N 32.00 29.89 0.00 28.39 391.36 1932.00 5.00 -AAAAAAAAAEBDAAAA \N \N \N 71.00 177.30 0.00 113.47 3138.91 1939.00 1.00 -AAAAAAAAAEDEAAAA \N \N \N 37.00 48.67 0.00 9.73 -276.39 1940.00 2.00 -AAAAAAAAAEECAAAA \N \N \N 68.00 196.27 0.00 113.83 2202.52 1956.00 0.00 -AAAAAAAAAEFBAAAA \N \N \N 49.00 184.57 0.00 71.98 -1017.73 1984.00 2.00 -AAAAAAAAAEFCAAAA \N \N \N 32.00 31.97 0.00 18.54 65.92 1932.00 5.00 -AAAAAAAAAEGDAAAA \N \N \N 37.00 169.35 3204.94 93.14 -2507.12 1985.00 1.00 -AAAAAAAAAEJBAAAA \N \N \N 76.00 85.66 0.00 17.13 -4670.96 1985.00 2.00 -AAAAAAAAAENDAAAA \N \N \N 10.00 127.45 0.00 59.90 151.80 1971.00 2.00 -AAAAAAAAAFIBAAAA \N \N \N 69.00 111.06 0.00 101.06 4048.23 1965.00 1.00 -AAAAAAAAAFLBAAAA \N \N \N 33.00 148.07 0.00 29.61 -1349.70 1936.00 4.00 -AAAAAAAAAGBBAAAA \N \N \N 17.00 91.10 0.00 22.77 -361.08 1936.00 1.00 -AAAAAAAAAGCDAAAA \N \N \N 15.00 33.56 0.00 29.53 191.25 1963.00 5.00 -AAAAAAAAAGEEAAAA \N \N \N 99.00 264.45 0.00 37.02 -6067.71 1960.00 6.00 -AAAAAAAAAGGCAAAA \N \N \N 37.00 27.38 0.00 4.65 -485.81 1979.00 4.00 -AAAAAAAAAGHBAAAA \N \N \N 97.00 89.37 0.00 40.21 689.67 1947.00 2.00 -AAAAAAAAAGIAAAAA \N \N \N 30.00 65.71 0.00 11.82 -711.00 1936.00 4.00 -AAAAAAAAAHADAAAA \N \N \N 17.00 209.44 0.00 157.08 1290.30 1943.00 6.00 -AAAAAAAAAHBDAAAA \N \N \N 72.00 153.24 0.00 90.41 1353.60 1941.00 4.00 -AAAAAAAAAHDAAAAA \N \N \N 100.00 149.18 0.00 135.75 8413.00 1977.00 2.00 -AAAAAAAAAHDEAAAA \N \N \N 67.00 37.46 0.00 31.84 1246.20 1956.00 0.00 -AAAAAAAAAHICAAAA \N \N \N 5.00 170.64 0.00 95.55 80.90 1933.00 6.00 -AAAAAAAAAHLBAAAA \N \N \N 60.00 100.14 1970.70 80.11 -2171.10 1965.00 6.00 -AAAAAAAAAIBBAAAA \N \N \N 77.00 2.06 0.00 1.58 37.73 1935.00 6.00 -AAAAAAAAAICBAAAA \N \N \N 59.00 156.86 0.00 37.64 -1144.60 1924.00 2.00 -AAAAAAAAAIDAAAAA \N \N \N 63.00 18.78 0.00 15.02 -214.20 1979.00 5.00 -AAAAAAAAAIEBAAAA \N \N \N 23.00 29.97 0.00 23.37 -37.03 1960.00 0.00 -AAAAAAAAAIECAAAA \N \N \N 5.00 1.35 0.00 1.32 0.70 1973.00 4.00 -AAAAAAAAAIFDAAAA \N \N \N 38.00 158.68 1317.28 36.49 -3243.88 1985.00 1.00 -AAAAAAAAAIIBAAAA \N \N \N 45.00 90.75 0.00 15.42 -2244.15 1967.00 0.00 -AAAAAAAAAIJCAAAA \N \N \N 5.00 90.07 0.00 25.21 -77.75 1990.00 4.00 -AAAAAAAAAJABAAAA \N \N \N 36.00 198.57 0.00 103.25 775.08 1942.00 3.00 -AAAAAAAAAJAEAAAA \N \N \N 56.00 84.85 0.00 6.78 -2990.40 1975.00 4.00 -AAAAAAAAAJCCAAAA \N \N \N 20.00 109.99 0.00 38.49 -859.80 1952.00 4.00 -AAAAAAAAAJGBAAAA \N \N \N 23.00 249.29 0.00 132.12 1068.35 1968.00 2.00 -AAAAAAAAAJJBAAAA \N \N \N 49.00 42.42 0.00 1.69 -1275.96 1964.00 0.00 -AAAAAAAAAJLDAAAA \N \N \N 83.00 76.17 0.00 6.09 -5754.39 1948.00 6.00 -AAAAAAAAAKAAAAAA \N \N \N 51.00 121.17 0.00 78.76 -736.95 1959.00 6.00 -AAAAAAAAAKECAAAA \N \N \N 87.00 101.36 0.00 67.91 1825.26 1986.00 4.00 -AAAAAAAAAKJBAAAA \N \N \N 2.00 235.69 0.00 77.77 -9.86 1962.00 0.00 -AAAAAAAAAKJDAAAA \N \N \N 96.00 254.83 0.00 188.57 9488.64 1946.00 2.00 -AAAAAAAAAKKCAAAA \N \N \N 85.00 253.56 0.00 202.84 9783.50 1967.00 0.00 -AAAAAAAAAKLCAAAA \N \N \N 75.00 5.03 0.00 4.97 198.75 1973.00 0.00 -AAAAAAAAALBCAAAA \N \N \N 3.00 43.18 0.00 5.18 -39.12 1963.00 5.00 -AAAAAAAAALCBAAAA \N \N \N 61.00 80.16 0.00 26.45 -1646.39 1975.00 4.00 -AAAAAAAAALCDAAAA \N \N \N 4.00 129.61 0.00 110.16 149.36 1991.00 0.00 -AAAAAAAAALIAAAAA \N \N \N 55.00 153.18 0.00 137.86 2740.10 1928.00 3.00 -AAAAAAAAALIBAAAA \N \N \N 53.00 170.42 3689.47 161.89 -45.19 1985.00 2.00 -AAAAAAAAALMAAAAA \N \N \N 89.00 59.26 0.00 18.37 -865.08 1959.00 6.00 -AAAAAAAAALMCAAAA \N \N \N 96.00 226.96 0.00 11.34 -6693.12 1934.00 4.00 -AAAAAAAAALMDAAAA \N \N \N 26.00 128.64 0.00 60.46 -125.84 1984.00 2.00 -AAAAAAAAALNCAAAA \N \N \N 77.00 27.89 0.00 9.76 -224.84 1946.00 5.00 -AAAAAAAAALOBAAAA \N \N \N 81.50 70.72 0.00 53.52 118.41 1966.00 1.50 -AAAAAAAAAMBBAAAA \N \N \N 83.00 136.57 0.00 45.06 -4077.79 1957.00 2.00 -AAAAAAAAAMEBAAAA \N \N \N 67.00 9.50 0.00 3.23 -100.50 1945.00 1.00 -AAAAAAAAAMFAAAAA \N \N \N 56.00 215.16 0.00 36.57 -3404.24 1986.00 2.00 -AAAAAAAAAMNDAAAA \N \N \N 70.00 101.27 4284.88 65.82 -4341.58 1932.00 5.00 -AAAAAAAAANBDAAAA \N \N \N 75.00 114.96 1282.93 27.59 -6711.43 1925.00 5.00 -AAAAAAAAANDDAAAA \N \N \N 50.00 222.88 0.00 2.22 -4494.00 1948.00 1.00 -AAAAAAAAANECAAAA \N \N \N 93.00 53.42 0.00 47.54 -54.87 1979.00 5.00 -AAAAAAAAANFEAAAA \N \N \N 25.00 151.77 116.28 65.95 -1264.83 1930.50 2.50 -AAAAAAAAANGDAAAA \N \N \N 60.00 79.60 0.00 44.57 -1028.40 1941.00 1.00 -AAAAAAAAANIBAAAA \N \N \N 72.00 47.92 0.00 39.29 1560.24 1933.00 3.00 -AAAAAAAAAOCAAAAA \N \N \N 30.00 64.98 0.00 44.18 -415.20 1964.00 0.00 -AAAAAAAAAODAAAAA \N \N \N 76.00 66.98 0.00 5.35 -1437.92 1959.00 3.00 -AAAAAAAAAOFDAAAA \N \N \N 87.00 28.71 0.00 27.84 1472.04 1968.00 6.00 -AAAAAAAAAOMCAAAA \N \N \N 8.00 112.64 0.00 36.04 -509.20 1973.00 4.00 -AAAAAAAAAPBEAAAA \N \N \N 22.00 143.89 664.75 50.36 -1397.35 1925.00 0.00 -AAAAAAAAAPEDAAAA \N \N \N 90.00 72.94 0.00 17.50 -3554.10 1928.00 3.00 -AAAAAAAAAPFAAAAA \N \N \N 52.00 117.67 0.00 77.66 1354.60 1977.00 2.00 +\N \N \N \N 49.7951 101.8325 277.2558 51.3221 -240.1596 1957.4677 2.9749 +AAAAAAAAAABAAAAA \N \N \N 60.0000 109.0800 5242.2700 98.1700 -1714.8700 1930.0000 0.0000 +AAAAAAAAAABDAAAA \N \N \N 61.5000 102.9100 0.0000 48.0850 -1680.2250 1953.5000 3.0000 +AAAAAAAAAADBAAAA \N \N \N 52.0000 35.6400 0.0000 22.8000 -484.1200 1949.0000 6.0000 +AAAAAAAAAADCAAAA \N \N \N 76.0000 106.9500 0.0000 82.3500 1048.0400 1925.0000 5.0000 +AAAAAAAAAAJBAAAA \N \N \N 97.0000 62.6400 621.5400 6.8900 -3570.3400 1935.0000 3.0000 +AAAAAAAAAAKDAAAA \N \N \N 35.0000 46.2550 0.0000 28.3000 57.9450 1948.5000 5.0000 +AAAAAAAAAAMBAAAA \N \N \N 88.0000 191.3300 0.0000 141.5800 6673.0400 1962.0000 0.0000 +AAAAAAAAAAODAAAA \N \N \N 96.0000 38.2400 0.0000 27.5300 1131.8400 1968.0000 3.0000 +AAAAAAAAABADAAAA \N \N \N 61.0000 84.4700 0.0000 18.5800 -3821.6500 1968.0000 3.0000 +AAAAAAAAABCBAAAA \N \N \N 61.0000 189.3300 4323.5900 90.8700 -4441.9300 1937.0000 0.0000 +AAAAAAAAABDAAAAA \N \N \N 72.0000 175.6400 1365.3300 21.0700 -6171.3300 1940.0000 2.0000 +AAAAAAAAABEAAAAA \N \N \N 19.0000 93.9700 208.8400 36.6400 -510.1800 1959.0000 6.0000 +AAAAAAAAABFEAAAA \N \N \N 98.0000 28.6500 0.0000 6.3000 -614.4600 1935.0000 6.0000 +AAAAAAAAABJBAAAA \N \N \N 100.0000 59.4800 0.0000 2.9700 -5014.0000 1980.0000 5.0000 +AAAAAAAAABMDAAAA \N \N \N 82.0000 73.8900 0.0000 0.0000 -2277.9600 1943.0000 0.0000 +AAAAAAAAABPBAAAA \N \N \N 42.0000 82.8600 0.0000 4.1400 -1948.3800 1940.0000 2.0000 +AAAAAAAAACAAAAAA \N \N \N 49.0000 79.1200 0.0000 52.2100 711.9700 1961.0000 5.0000 +AAAAAAAAACBCAAAA \N \N \N 1.0000 77.5300 0.0000 49.6100 -1.4000 1982.0000 0.0000 +AAAAAAAAACCAAAAA \N \N \N 35.0000 147.9800 2221.7600 97.6600 -653.4100 1960.0000 3.0000 +AAAAAAAAACLAAAAA \N \N \N 22.0000 215.2500 0.0000 157.1300 1709.4000 1968.0000 3.0000 +AAAAAAAAACLDAAAA \N \N \N 27.0000 201.7800 0.0000 143.2600 1588.4100 1936.0000 1.0000 +AAAAAAAAACMDAAAA \N \N \N 100.0000 63.4600 395.1600 4.4400 -4328.1600 1986.0000 2.0000 +AAAAAAAAADBAAAAA \N \N \N 5.0000 15.6800 0.0000 5.9500 -1.2500 1949.0000 6.0000 +AAAAAAAAADBDAAAA \N \N \N 65.5000 101.2100 26.0450 60.5550 436.2200 1967.5000 3.0000 +AAAAAAAAADGCAAAA \N \N \N 19.0000 11.4700 0.0000 2.0600 -127.3000 1928.0000 5.0000 +AAAAAAAAADHAAAAA \N \N \N 17.0000 52.6500 0.0000 11.0500 -160.4800 1953.0000 6.0000 +AAAAAAAAADICAAAA \N \N \N 86.0000 35.0700 0.0000 12.9700 -936.5400 1980.0000 5.0000 +AAAAAAAAADODAAAA \N \N \N 83.0000 38.5000 0.0000 5.7700 -2098.2400 1965.0000 1.0000 +AAAAAAAAADPCAAAA \N \N \N 59.0000 46.1100 0.0000 37.3400 352.2300 1979.0000 4.0000 +AAAAAAAAAEABAAAA \N \N \N 32.0000 29.8900 0.0000 28.3900 391.3600 1932.0000 5.0000 +AAAAAAAAAEBDAAAA \N \N \N 71.0000 177.3000 0.0000 113.4700 3138.9100 1939.0000 1.0000 +AAAAAAAAAEDEAAAA \N \N \N 37.0000 48.6700 0.0000 9.7300 -276.3900 1940.0000 2.0000 +AAAAAAAAAEECAAAA \N \N \N 68.0000 196.2700 0.0000 113.8300 2202.5200 1956.0000 0.0000 +AAAAAAAAAEFBAAAA \N \N \N 49.0000 184.5700 0.0000 71.9800 -1017.7300 1984.0000 2.0000 +AAAAAAAAAEFCAAAA \N \N \N 32.0000 31.9700 0.0000 18.5400 65.9200 1932.0000 5.0000 +AAAAAAAAAEGDAAAA \N \N \N 37.0000 169.3500 3204.9400 93.1400 -2507.1200 1985.0000 1.0000 +AAAAAAAAAEJBAAAA \N \N \N 76.0000 85.6600 0.0000 17.1300 -4670.9600 1985.0000 2.0000 +AAAAAAAAAENDAAAA \N \N \N 10.0000 127.4500 0.0000 59.9000 151.8000 1971.0000 2.0000 +AAAAAAAAAFIBAAAA \N \N \N 69.0000 111.0600 0.0000 101.0600 4048.2300 1965.0000 1.0000 +AAAAAAAAAFLBAAAA \N \N \N 33.0000 148.0700 0.0000 29.6100 -1349.7000 1936.0000 4.0000 +AAAAAAAAAGBBAAAA \N \N \N 17.0000 91.1000 0.0000 22.7700 -361.0800 1936.0000 1.0000 +AAAAAAAAAGCDAAAA \N \N \N 15.0000 33.5600 0.0000 29.5300 191.2500 1963.0000 5.0000 +AAAAAAAAAGEEAAAA \N \N \N 99.0000 264.4500 0.0000 37.0200 -6067.7100 1960.0000 6.0000 +AAAAAAAAAGGCAAAA \N \N \N 37.0000 27.3800 0.0000 4.6500 -485.8100 1979.0000 4.0000 +AAAAAAAAAGHBAAAA \N \N \N 97.0000 89.3700 0.0000 40.2100 689.6700 1947.0000 2.0000 +AAAAAAAAAGIAAAAA \N \N \N 30.0000 65.7100 0.0000 11.8200 -711.0000 1936.0000 4.0000 +AAAAAAAAAHADAAAA \N \N \N 17.0000 209.4400 0.0000 157.0800 1290.3000 1943.0000 6.0000 +AAAAAAAAAHBDAAAA \N \N \N 72.0000 153.2400 0.0000 90.4100 1353.6000 1941.0000 4.0000 +AAAAAAAAAHDAAAAA \N \N \N 100.0000 149.1800 0.0000 135.7500 8413.0000 1977.0000 2.0000 +AAAAAAAAAHDEAAAA \N \N \N 67.0000 37.4600 0.0000 31.8400 1246.2000 1956.0000 0.0000 +AAAAAAAAAHICAAAA \N \N \N 5.0000 170.6400 0.0000 95.5500 80.9000 1933.0000 6.0000 +AAAAAAAAAHLBAAAA \N \N \N 60.0000 100.1400 1970.7000 80.1100 -2171.1000 1965.0000 6.0000 +AAAAAAAAAIBBAAAA \N \N \N 77.0000 2.0600 0.0000 1.5800 37.7300 1935.0000 6.0000 +AAAAAAAAAICBAAAA \N \N \N 59.0000 156.8600 0.0000 37.6400 -1144.6000 1924.0000 2.0000 +AAAAAAAAAIDAAAAA \N \N \N 63.0000 18.7800 0.0000 15.0200 -214.2000 1979.0000 5.0000 +AAAAAAAAAIEBAAAA \N \N \N 23.0000 29.9700 0.0000 23.3700 -37.0300 1960.0000 0.0000 +AAAAAAAAAIECAAAA \N \N \N 5.0000 1.3500 0.0000 1.3200 0.7000 1973.0000 4.0000 +AAAAAAAAAIFDAAAA \N \N \N 38.0000 158.6800 1317.2800 36.4900 -3243.8800 1985.0000 1.0000 +AAAAAAAAAIIBAAAA \N \N \N 45.0000 90.7500 0.0000 15.4200 -2244.1500 1967.0000 0.0000 +AAAAAAAAAIJCAAAA \N \N \N 5.0000 90.0700 0.0000 25.2100 -77.7500 1990.0000 4.0000 +AAAAAAAAAJABAAAA \N \N \N 36.0000 198.5700 0.0000 103.2500 775.0800 1942.0000 3.0000 +AAAAAAAAAJAEAAAA \N \N \N 56.0000 84.8500 0.0000 6.7800 -2990.4000 1975.0000 4.0000 +AAAAAAAAAJCCAAAA \N \N \N 20.0000 109.9900 0.0000 38.4900 -859.8000 1952.0000 4.0000 +AAAAAAAAAJGBAAAA \N \N \N 23.0000 249.2900 0.0000 132.1200 1068.3500 1968.0000 2.0000 +AAAAAAAAAJJBAAAA \N \N \N 49.0000 42.4200 0.0000 1.6900 -1275.9600 1964.0000 0.0000 +AAAAAAAAAJLDAAAA \N \N \N 83.0000 76.1700 0.0000 6.0900 -5754.3900 1948.0000 6.0000 +AAAAAAAAAKAAAAAA \N \N \N 51.0000 121.1700 0.0000 78.7600 -736.9500 1959.0000 6.0000 +AAAAAAAAAKECAAAA \N \N \N 87.0000 101.3600 0.0000 67.9100 1825.2600 1986.0000 4.0000 +AAAAAAAAAKJBAAAA \N \N \N 2.0000 235.6900 0.0000 77.7700 -9.8600 1962.0000 0.0000 +AAAAAAAAAKJDAAAA \N \N \N 96.0000 254.8300 0.0000 188.5700 9488.6400 1946.0000 2.0000 +AAAAAAAAAKKCAAAA \N \N \N 85.0000 253.5600 0.0000 202.8400 9783.5000 1967.0000 0.0000 +AAAAAAAAAKLCAAAA \N \N \N 75.0000 5.0300 0.0000 4.9700 198.7500 1973.0000 0.0000 +AAAAAAAAALBCAAAA \N \N \N 3.0000 43.1800 0.0000 5.1800 -39.1200 1963.0000 5.0000 +AAAAAAAAALCBAAAA \N \N \N 61.0000 80.1600 0.0000 26.4500 -1646.3900 1975.0000 4.0000 +AAAAAAAAALCDAAAA \N \N \N 4.0000 129.6100 0.0000 110.1600 149.3600 1991.0000 0.0000 +AAAAAAAAALIAAAAA \N \N \N 55.0000 153.1800 0.0000 137.8600 2740.1000 1928.0000 3.0000 +AAAAAAAAALIBAAAA \N \N \N 53.0000 170.4200 3689.4700 161.8900 -45.1900 1985.0000 2.0000 +AAAAAAAAALMAAAAA \N \N \N 89.0000 59.2600 0.0000 18.3700 -865.0800 1959.0000 6.0000 +AAAAAAAAALMCAAAA \N \N \N 96.0000 226.9600 0.0000 11.3400 -6693.1200 1934.0000 4.0000 +AAAAAAAAALMDAAAA \N \N \N 26.0000 128.6400 0.0000 60.4600 -125.8400 1984.0000 2.0000 +AAAAAAAAALNCAAAA \N \N \N 77.0000 27.8900 0.0000 9.7600 -224.8400 1946.0000 5.0000 +AAAAAAAAALOBAAAA \N \N \N 81.5000 70.7250 0.0000 53.5200 118.4100 1966.0000 1.5000 +AAAAAAAAAMBBAAAA \N \N \N 83.0000 136.5700 0.0000 45.0600 -4077.7900 1957.0000 2.0000 +AAAAAAAAAMEBAAAA \N \N \N 67.0000 9.5000 0.0000 3.2300 -100.5000 1945.0000 1.0000 +AAAAAAAAAMFAAAAA \N \N \N 56.0000 215.1600 0.0000 36.5700 -3404.2400 1986.0000 2.0000 +AAAAAAAAAMNDAAAA \N \N \N 70.0000 101.2700 4284.8800 65.8200 -4341.5800 1932.0000 5.0000 +AAAAAAAAANBDAAAA \N \N \N 75.0000 114.9600 1282.9300 27.5900 -6711.4300 1925.0000 5.0000 +AAAAAAAAANDDAAAA \N \N \N 50.0000 222.8800 0.0000 2.2200 -4494.0000 1948.0000 1.0000 +AAAAAAAAANECAAAA \N \N \N 93.0000 53.4200 0.0000 47.5400 -54.8700 1979.0000 5.0000 +AAAAAAAAANFEAAAA \N \N \N 25.0000 151.7750 116.2800 65.9550 -1264.8300 1930.5000 2.5000 +AAAAAAAAANGDAAAA \N \N \N 60.0000 79.6000 0.0000 44.5700 -1028.4000 1941.0000 1.0000 +AAAAAAAAANIBAAAA \N \N \N 72.0000 47.9200 0.0000 39.2900 1560.2400 1933.0000 3.0000 +AAAAAAAAAOCAAAAA \N \N \N 30.0000 64.9800 0.0000 44.1800 -415.2000 1964.0000 0.0000 +AAAAAAAAAODAAAAA \N \N \N 76.0000 66.9800 0.0000 5.3500 -1437.9200 1959.0000 3.0000 +AAAAAAAAAOFDAAAA \N \N \N 87.0000 28.7100 0.0000 27.8400 1472.0400 1968.0000 6.0000 +AAAAAAAAAOMCAAAA \N \N \N 8.0000 112.6400 0.0000 36.0400 -509.2000 1973.0000 4.0000 +AAAAAAAAAPBEAAAA \N \N \N 22.0000 143.8900 664.7500 50.3600 -1397.3500 1925.0000 0.0000 +AAAAAAAAAPEDAAAA \N \N \N 90.0000 72.9400 0.0000 17.5000 -3554.1000 1928.0000 3.0000 +AAAAAAAAAPFAAAAA \N \N \N 52.0000 117.6700 0.0000 77.6600 1354.6000 1977.0000 2.0000 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q26.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q26.out index c0214f3d943310..24761edcb3e6f5 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q26.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q26.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q26 -- -AAAAAAAAAAAEAAAA 63.0 30.01 0.00 25.29 -AAAAAAAAAABEAAAA 96.0 75.34 0.00 10.54 -AAAAAAAAAACAAAAA 73.0 199.77 0.00 41.95 -AAAAAAAAAACCAAAA 23.5 26.62 110.97 14.20 -AAAAAAAAAADBAAAA 23.0 131.56 0.00 26.31 -AAAAAAAAAADEAAAA 15.0 283.91 0.00 19.87 -AAAAAAAAAAEAAAAA 71.0 176.71 0.00 142.69 -AAAAAAAAAAEBAAAA 96.0 66.74 1014.39 16.01 -AAAAAAAAAAFCAAAA 85.0 76.81 143.61 42.24 -AAAAAAAAAAGEAAAA 47.0 136.92 0.00 95.27 -AAAAAAAAAAHBAAAA 27.0 105.84 0.00 35.98 -AAAAAAAAAAIDAAAA 78.33333333333333 126.37 0.00 61.94 -AAAAAAAAAAJBAAAA 60.333333333333336 85.59 23.20 15.50 -AAAAAAAAAAKDAAAA 21.0 84.41 0.00 26.85 -AAAAAAAAAALCAAAA 20.0 62.79 0.00 48.97 -AAAAAAAAAALDAAAA 49.0 73.15 0.00 21.00 -AAAAAAAAAAMCAAAA 81.0 229.62 15221.17 202.06 -AAAAAAAAAANAAAAA 42.0 79.99 0.00 76.79 -AAAAAAAAAANDAAAA 94.0 27.92 0.00 1.67 -AAAAAAAAAAOAAAAA 66.0 44.29 25.82 10.05 -AAAAAAAAAAOCAAAA 34.333333333333336 84.49 1133.95 63.43 -AAAAAAAAABABAAAA 45.0 79.82 0.00 67.84 -AAAAAAAAABAEAAAA 1.0 171.54 0.00 49.74 -AAAAAAAAABBAAAAA 8.0 279.08 0.00 55.81 -AAAAAAAAABBCAAAA 56.0 45.97 1286.38 23.44 -AAAAAAAAABBDAAAA 47.0 22.44 0.00 21.99 -AAAAAAAAABCBAAAA 84.0 43.87 0.00 28.51 -AAAAAAAAABEDAAAA 43.0 105.77 668.40 37.01 -AAAAAAAAABFEAAAA 66.0 239.55 0.00 184.45 -AAAAAAAAABJAAAAA 49.0 10.24 0.00 8.08 -AAAAAAAAABKAAAAA 71.0 99.42 0.00 15.90 -AAAAAAAAABLBAAAA 40.0 233.60 0.00 93.44 -AAAAAAAAABOCAAAA 51.0 4.55 0.00 4.14 -AAAAAAAAACCAAAAA 39.0 63.74 22.26 17.78 -AAAAAAAAACDCAAAA 51.0 158.97 1334.07 124.78 -AAAAAAAAACDDAAAA 85.5 75.73 0.00 36.28 -AAAAAAAAACEEAAAA 38.0 78.69 0.00 19.67 -AAAAAAAAACFDAAAA 93.0 59.44 0.00 7.72 -AAAAAAAAACGCAAAA 55.0 103.21 0.00 27.86 -AAAAAAAAACHBAAAA 62.0 180.29 0.00 32.45 -AAAAAAAAACIBAAAA 95.0 214.40 0.00 4.28 -AAAAAAAAACKBAAAA 59.0 92.91 0.00 29.67 -AAAAAAAAACMCAAAA 65.0 119.55 0.00 84.88 -AAAAAAAAACNBAAAA 65.0 169.29 0.00 121.88 -AAAAAAAAACNCAAAA 12.0 64.16 0.00 16.04 -AAAAAAAAACOBAAAA 90.0 50.84 0.00 6.10 -AAAAAAAAACODAAAA 46.0 35.84 0.00 16.27 -AAAAAAAAACPAAAAA 62.0 191.00 823.81 132.19 -AAAAAAAAADABAAAA 31.0 30.66 0.00 2.45 -AAAAAAAAADACAAAA 31.0 174.06 0.00 46.99 -AAAAAAAAADAEAAAA 21.0 65.43 0.00 62.15 -AAAAAAAAADBAAAAA 88.0 102.57 7392.18 92.31 -AAAAAAAAADBDAAAA 67.0 221.22 0.00 79.63 -AAAAAAAAADCAAAAA 67.0 70.16 2248.62 36.48 -AAAAAAAAADCDAAAA 37.0 92.28 0.00 31.66 -AAAAAAAAADDCAAAA 27.0 133.79 0.00 14.71 -AAAAAAAAADEAAAAA 99.0 26.54 0.00 8.75 -AAAAAAAAADFDAAAA 49.0 56.58 0.00 5.65 -AAAAAAAAADGEAAAA 49.0 87.96 0.00 15.83 -AAAAAAAAADHAAAAA 36.0 32.89 849.52 25.65 -AAAAAAAAADIAAAAA 98.0 168.89 0.00 69.24 -AAAAAAAAADIDAAAA 5.0 99.29 0.00 86.44 -AAAAAAAAADJBAAAA 87.0 88.35 7.68 8.83 -AAAAAAAAADJCAAAA 71.0 30.50 0.00 7.01 -AAAAAAAAADKAAAAA 40.5 123.01 0.00 8.12 -AAAAAAAAADKBAAAA 23.0 61.77 0.00 52.50 -AAAAAAAAADLAAAAA 35.0 108.69 0.00 78.25 -AAAAAAAAADMBAAAA 14.0 181.43 0.00 170.54 -AAAAAAAAADNAAAAA 23.0 43.28 0.00 5.62 -AAAAAAAAADNBAAAA 19.0 119.64 0.00 7.17 -AAAAAAAAADOCAAAA 37.5 30.22 0.00 19.35 -AAAAAAAAADODAAAA 66.0 4.61 0.00 2.53 -AAAAAAAAAEADAAAA 63.0 153.04 0.00 148.44 -AAAAAAAAAEAEAAAA 25.0 189.94 0.00 144.35 -AAAAAAAAAEBAAAAA 15.0 96.74 0.00 10.64 -AAAAAAAAAECBAAAA 57.0 31.66 0.00 11.39 -AAAAAAAAAEDBAAAA 90.0 185.31 0.00 18.53 -AAAAAAAAAEFBAAAA 44.0 56.32 0.00 39.49 -AAAAAAAAAEFCAAAA 14.0 136.80 735.43 82.08 -AAAAAAAAAEGBAAAA 93.0 138.20 0.00 134.05 -AAAAAAAAAEGDAAAA 71.0 109.73 332.44 59.20 -AAAAAAAAAEHCAAAA 73.0 216.23 0.00 211.90 -AAAAAAAAAEHDAAAA 28.0 85.42 0.00 38.96 -AAAAAAAAAEJBAAAA 46.0 85.18 0.00 79.21 -AAAAAAAAAEKCAAAA 59.0 69.26 0.00 2.07 -AAAAAAAAAEMDAAAA 3.0 183.78 0.00 134.15 -AAAAAAAAAFAAAAAA 54.0 255.71 0.00 86.94 -AAAAAAAAAFADAAAA 90.0 51.00 0.00 7.65 -AAAAAAAAAFBEAAAA 34.5 105.16 0.00 37.66 -AAAAAAAAAFCDAAAA 81.0 66.52 0.00 54.12 -AAAAAAAAAFDDAAAA 24.0 110.74 0.00 56.09 -AAAAAAAAAFEEAAAA 44.0 78.87 2115.77 71.77 -AAAAAAAAAFFBAAAA 39.5 189.82 0.00 56.22 -AAAAAAAAAFFDAAAA 27.0 73.31 37.25 2.19 -AAAAAAAAAFGCAAAA 64.0 164.06 883.15 150.20 -AAAAAAAAAFHBAAAA 18.0 92.06 0.00 26.69 -AAAAAAAAAFIDAAAA 26.0 165.65 409.99 46.38 -AAAAAAAAAFLBAAAA 12.5 146.01 13.64 118.77 -AAAAAAAAAFMCAAAA 41.0 37.88 0.00 13.63 -AAAAAAAAAFMDAAAA 72.0 97.77 0.00 24.44 +AAAAAAAAAAAEAAAA 63.0 30.0100 0.0000 25.2900 +AAAAAAAAAABEAAAA 96.0 75.3400 0.0000 10.5400 +AAAAAAAAAACAAAAA 73.0 199.7700 0.0000 41.9500 +AAAAAAAAAACCAAAA 23.5 26.6200 110.9700 14.2000 +AAAAAAAAAADBAAAA 23.0 131.5600 0.0000 26.3100 +AAAAAAAAAADEAAAA 15.0 283.9100 0.0000 19.8700 +AAAAAAAAAAEAAAAA 71.0 176.7133 0.0000 142.6933 +AAAAAAAAAAEBAAAA 96.0 66.7400 1014.3900 16.0100 +AAAAAAAAAAFCAAAA 85.0 76.8100 143.6100 42.2400 +AAAAAAAAAAGEAAAA 47.0 136.9250 0.0000 95.2750 +AAAAAAAAAAHBAAAA 27.0 105.8400 0.0000 35.9800 +AAAAAAAAAAIDAAAA 78.33333333333333 126.3700 0.0000 61.9433 +AAAAAAAAAAJBAAAA 60.333333333333336 85.5966 23.2000 15.5000 +AAAAAAAAAAKDAAAA 21.0 84.4150 0.0000 26.8500 +AAAAAAAAAALCAAAA 20.0 62.7900 0.0000 48.9700 +AAAAAAAAAALDAAAA 49.0 73.1550 0.0000 21.0050 +AAAAAAAAAAMCAAAA 81.0 229.6200 15221.1700 202.0600 +AAAAAAAAAANAAAAA 42.0 79.9900 0.0000 76.7900 +AAAAAAAAAANDAAAA 94.0 27.9200 0.0000 1.6700 +AAAAAAAAAAOAAAAA 66.0 44.2950 25.8200 10.0550 +AAAAAAAAAAOCAAAA 34.333333333333336 84.4966 1133.9533 63.4300 +AAAAAAAAABABAAAA 45.0 79.8200 0.0000 67.8400 +AAAAAAAAABAEAAAA 1.0 171.5400 0.0000 49.7400 +AAAAAAAAABBAAAAA 8.0 279.0800 0.0000 55.8100 +AAAAAAAAABBCAAAA 56.0 45.9700 1286.3800 23.4400 +AAAAAAAAABBDAAAA 47.0 22.4400 0.0000 21.9900 +AAAAAAAAABCBAAAA 84.0 43.8700 0.0000 28.5100 +AAAAAAAAABEDAAAA 43.0 105.7700 668.4000 37.0100 +AAAAAAAAABFEAAAA 66.0 239.5500 0.0000 184.4500 +AAAAAAAAABJAAAAA 49.0 10.2400 0.0000 8.0800 +AAAAAAAAABKAAAAA 71.0 99.4200 0.0000 15.9000 +AAAAAAAAABLBAAAA 40.0 233.6000 0.0000 93.4400 +AAAAAAAAABOCAAAA 51.0 4.5500 0.0000 4.1400 +AAAAAAAAACCAAAAA 39.0 63.7450 22.2600 17.7850 +AAAAAAAAACDCAAAA 51.0 158.9750 1334.0700 124.7850 +AAAAAAAAACDDAAAA 85.5 75.7350 0.0000 36.2850 +AAAAAAAAACEEAAAA 38.0 78.6900 0.0000 19.6700 +AAAAAAAAACFDAAAA 93.0 59.4400 0.0000 7.7200 +AAAAAAAAACGCAAAA 55.0 103.2100 0.0000 27.8600 +AAAAAAAAACHBAAAA 62.0 180.2900 0.0000 32.4500 +AAAAAAAAACIBAAAA 95.0 214.4000 0.0000 4.2800 +AAAAAAAAACKBAAAA 59.0 92.9100 0.0000 29.6750 +AAAAAAAAACMCAAAA 65.0 119.5500 0.0000 84.8800 +AAAAAAAAACNBAAAA 65.0 169.2900 0.0000 121.8800 +AAAAAAAAACNCAAAA 12.0 64.1600 0.0000 16.0400 +AAAAAAAAACOBAAAA 90.0 50.8400 0.0000 6.1000 +AAAAAAAAACODAAAA 46.0 35.8400 0.0000 16.2766 +AAAAAAAAACPAAAAA 62.0 191.0000 823.8150 132.1950 +AAAAAAAAADABAAAA 31.0 30.6600 0.0000 2.4500 +AAAAAAAAADACAAAA 31.0 174.0600 0.0000 46.9900 +AAAAAAAAADAEAAAA 21.0 65.4300 0.0000 62.1500 +AAAAAAAAADBAAAAA 88.0 102.5700 7392.1800 92.3100 +AAAAAAAAADBDAAAA 67.0 221.2200 0.0000 79.6300 +AAAAAAAAADCAAAAA 67.0 70.1600 2248.6200 36.4800 +AAAAAAAAADCDAAAA 37.0 92.2800 0.0000 31.6600 +AAAAAAAAADDCAAAA 27.0 133.7900 0.0000 14.7100 +AAAAAAAAADEAAAAA 99.0 26.5400 0.0000 8.7500 +AAAAAAAAADFDAAAA 49.0 56.5800 0.0000 5.6500 +AAAAAAAAADGEAAAA 49.0 87.9600 0.0000 15.8300 +AAAAAAAAADHAAAAA 36.0 32.8900 849.5200 25.6500 +AAAAAAAAADIAAAAA 98.0 168.8900 0.0000 69.2400 +AAAAAAAAADIDAAAA 5.0 99.2950 0.0000 86.4450 +AAAAAAAAADJBAAAA 87.0 88.3500 7.6800 8.8300 +AAAAAAAAADJCAAAA 71.0 30.5000 0.0000 7.0100 +AAAAAAAAADKAAAAA 40.5 123.0100 0.0000 8.1200 +AAAAAAAAADKBAAAA 23.0 61.7700 0.0000 52.5000 +AAAAAAAAADLAAAAA 35.0 108.6900 0.0000 78.2500 +AAAAAAAAADMBAAAA 14.0 181.4300 0.0000 170.5400 +AAAAAAAAADNAAAAA 23.0 43.2800 0.0000 5.6200 +AAAAAAAAADNBAAAA 19.0 119.6400 0.0000 7.1700 +AAAAAAAAADOCAAAA 37.5 30.2250 0.0000 19.3550 +AAAAAAAAADODAAAA 66.0 4.6100 0.0000 2.5300 +AAAAAAAAAEADAAAA 63.0 153.0400 0.0000 148.4400 +AAAAAAAAAEAEAAAA 25.0 189.9400 0.0000 144.3500 +AAAAAAAAAEBAAAAA 15.0 96.7400 0.0000 10.6400 +AAAAAAAAAECBAAAA 57.0 31.6600 0.0000 11.3900 +AAAAAAAAAEDBAAAA 90.0 185.3100 0.0000 18.5300 +AAAAAAAAAEFBAAAA 44.0 56.3200 0.0000 39.4950 +AAAAAAAAAEFCAAAA 14.0 136.8000 735.4300 82.0800 +AAAAAAAAAEGBAAAA 93.0 138.2000 0.0000 134.0500 +AAAAAAAAAEGDAAAA 71.0 109.7300 332.4400 59.2000 +AAAAAAAAAEHCAAAA 73.0 216.2300 0.0000 211.9000 +AAAAAAAAAEHDAAAA 28.0 85.4250 0.0000 38.9650 +AAAAAAAAAEJBAAAA 46.0 85.1800 0.0000 79.2100 +AAAAAAAAAEKCAAAA 59.0 69.2600 0.0000 2.0700 +AAAAAAAAAEMDAAAA 3.0 183.7800 0.0000 134.1500 +AAAAAAAAAFAAAAAA 54.0 255.7100 0.0000 86.9400 +AAAAAAAAAFADAAAA 90.0 51.0000 0.0000 7.6500 +AAAAAAAAAFBEAAAA 34.5 105.1600 0.0000 37.6650 +AAAAAAAAAFCDAAAA 81.0 66.5250 0.0000 54.1250 +AAAAAAAAAFDDAAAA 24.0 110.7450 0.0000 56.0950 +AAAAAAAAAFEEAAAA 44.0 78.8700 2115.7700 71.7700 +AAAAAAAAAFFBAAAA 39.5 189.8250 0.0000 56.2250 +AAAAAAAAAFFDAAAA 27.0 73.3100 37.2500 2.1900 +AAAAAAAAAFGCAAAA 64.0 164.0650 883.1550 150.2000 +AAAAAAAAAFHBAAAA 18.0 92.0600 0.0000 26.6900 +AAAAAAAAAFIDAAAA 26.0 165.6500 409.9900 46.3800 +AAAAAAAAAFLBAAAA 12.5 146.0100 13.6450 118.7750 +AAAAAAAAAFMCAAAA 41.0 37.8800 0.0000 13.6300 +AAAAAAAAAFMDAAAA 72.0 97.7700 0.0000 24.4400 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q27.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q27.out index b345ded8d48965..ed0c8ad012bab2 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q27.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q27.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q27 -- -\N \N 1 51.05758807588076 75.65 194.40 38.25 -AAAAAAAAAAABAAAA \N 1 46.0 114.72 0.00 32.12 -AAAAAAAAAAABAAAA TN 0 46.0 114.72 0.00 32.12 -AAAAAAAAAAAEAAAA \N 1 100.0 77.97 0.00 57.69 -AAAAAAAAAAAEAAAA TN 0 100.0 77.97 0.00 57.69 -AAAAAAAAAABAAAAA \N 1 6.0 48.89 13.61 2.44 -AAAAAAAAAABAAAAA TN 0 6.0 48.89 13.61 2.44 -AAAAAAAAAACAAAAA \N 1 62.0 32.21 0.00 5.50 -AAAAAAAAAACAAAAA TN 0 62.0 32.21 0.00 5.50 -AAAAAAAAAACDAAAA \N 1 97.0 161.78 0.00 55.00 -AAAAAAAAAACDAAAA TN 0 97.0 161.78 0.00 55.00 -AAAAAAAAAADBAAAA \N 1 28.0 136.01 575.76 73.44 -AAAAAAAAAADBAAAA TN 0 28.0 136.01 575.76 73.44 -AAAAAAAAAADCAAAA \N 1 64.0 116.14 0.00 108.01 -AAAAAAAAAADCAAAA TN 0 64.0 116.14 0.00 108.01 -AAAAAAAAAAEBAAAA \N 1 9.0 5.43 0.00 5.21 -AAAAAAAAAAEBAAAA TN 0 9.0 5.43 0.00 5.21 -AAAAAAAAAAEDAAAA \N 1 45.5 87.63 0.00 51.84 -AAAAAAAAAAEDAAAA TN 0 45.5 87.63 0.00 51.84 -AAAAAAAAAAGBAAAA \N 1 29.0 101.94 0.00 100.92 -AAAAAAAAAAGBAAAA TN 0 29.0 101.94 0.00 100.92 -AAAAAAAAAAGCAAAA \N 1 97.0 65.27 0.00 21.53 -AAAAAAAAAAGCAAAA TN 0 97.0 65.27 0.00 21.53 -AAAAAAAAAAGEAAAA \N 1 55.0 73.87 0.00 71.00 -AAAAAAAAAAGEAAAA TN 0 55.0 73.87 0.00 71.00 -AAAAAAAAAAHAAAAA \N 1 20.0 134.30 0.00 119.52 -AAAAAAAAAAHAAAAA TN 0 20.0 134.30 0.00 119.52 -AAAAAAAAAAHBAAAA \N 1 97.0 7.40 0.00 6.73 -AAAAAAAAAAHBAAAA TN 0 97.0 7.40 0.00 6.73 -AAAAAAAAAAHDAAAA \N 1 69.0 5.62 0.00 0.33 -AAAAAAAAAAHDAAAA TN 0 69.0 5.62 0.00 0.33 -AAAAAAAAAAIAAAAA \N 1 87.0 106.98 0.00 27.81 -AAAAAAAAAAIAAAAA TN 0 87.0 106.98 0.00 27.81 -AAAAAAAAAAKBAAAA \N 1 84.5 66.17 847.83 57.38 -AAAAAAAAAAKBAAAA TN 0 84.5 66.17 847.83 57.38 -AAAAAAAAAALAAAAA \N 1 6.0 32.28 0.00 7.42 -AAAAAAAAAALAAAAA TN 0 6.0 32.28 0.00 7.42 -AAAAAAAAAALCAAAA \N 1 98.0 34.31 55.30 1.71 -AAAAAAAAAALCAAAA TN 0 98.0 34.31 55.30 1.71 -AAAAAAAAAALDAAAA \N 1 59.0 129.47 713.90 22.00 -AAAAAAAAAALDAAAA TN 0 59.0 129.47 713.90 22.00 -AAAAAAAAAANAAAAA \N 1 74.0 60.87 0.00 13.20 -AAAAAAAAAANAAAAA TN 0 74.0 60.87 0.00 13.20 -AAAAAAAAAANBAAAA \N 1 96.0 130.79 1864.51 129.48 -AAAAAAAAAANBAAAA TN 0 96.0 130.79 1864.51 129.48 -AAAAAAAAAAOAAAAA \N 1 85.0 130.34 0.00 122.51 -AAAAAAAAAAOAAAAA TN 0 85.0 130.34 0.00 122.51 -AAAAAAAAAAOCAAAA \N 1 14.0 64.57 0.00 33.97 -AAAAAAAAAAOCAAAA TN 0 14.0 64.57 0.00 33.97 -AAAAAAAAAAODAAAA \N 1 84.0 30.50 0.00 28.97 -AAAAAAAAAAODAAAA TN 0 84.0 30.50 0.00 28.97 -AAAAAAAAAAPBAAAA \N 1 45.0 118.89 2380.59 84.71 -AAAAAAAAAAPBAAAA TN 0 45.0 118.89 2380.59 84.71 -AAAAAAAAABAAAAAA \N 1 97.0 124.75 0.00 74.85 -AAAAAAAAABAAAAAA TN 0 97.0 124.75 0.00 74.85 -AAAAAAAAABABAAAA \N 1 31.0 29.98 17.09 27.58 -AAAAAAAAABABAAAA TN 0 31.0 29.98 17.09 27.58 -AAAAAAAAABAEAAAA \N 1 34.0 17.21 0.00 13.42 -AAAAAAAAABAEAAAA TN 0 34.0 17.21 0.00 13.42 -AAAAAAAAABCBAAAA \N 1 38.0 131.37 0.00 52.32 -AAAAAAAAABCBAAAA TN 0 38.0 131.37 0.00 52.32 -AAAAAAAAABDAAAAA \N 1 31.5 68.34 0.00 63.27 -AAAAAAAAABDAAAAA TN 0 31.5 68.34 0.00 63.27 -AAAAAAAAABDBAAAA \N 1 56.0 103.85 1624.17 59.19 -AAAAAAAAABDBAAAA TN 0 56.0 103.85 1624.17 59.19 -AAAAAAAAABDDAAAA \N 1 67.33333333333333 119.42 23.18 38.72 -AAAAAAAAABDDAAAA TN 0 67.33333333333333 119.42 23.18 38.72 -AAAAAAAAABDEAAAA \N 1 61.0 85.95 2282.36 44.60 -AAAAAAAAABDEAAAA TN 0 61.0 85.95 2282.36 44.60 -AAAAAAAAABEDAAAA \N 1 61.0 85.14 0.00 50.23 -AAAAAAAAABEDAAAA TN 0 61.0 85.14 0.00 50.23 -AAAAAAAAABFBAAAA \N 1 31.0 23.55 0.00 13.65 -AAAAAAAAABFBAAAA TN 0 31.0 23.55 0.00 13.65 -AAAAAAAAABFCAAAA \N 1 83.0 15.50 0.00 0.00 -AAAAAAAAABFCAAAA TN 0 83.0 15.50 0.00 0.00 -AAAAAAAAABGAAAAA \N 1 64.0 35.08 0.00 3.15 -AAAAAAAAABGAAAAA TN 0 64.0 35.08 0.00 3.15 -AAAAAAAAABGBAAAA \N 1 40.0 25.07 0.00 16.04 -AAAAAAAAABGBAAAA TN 0 40.0 25.07 0.00 16.04 -AAAAAAAAABGEAAAA \N 1 39.5 56.76 14.25 36.00 -AAAAAAAAABGEAAAA TN 0 39.5 56.76 14.25 36.00 -AAAAAAAAABHAAAAA \N 1 93.0 74.80 0.00 21.69 -AAAAAAAAABHAAAAA TN 0 93.0 74.80 0.00 21.69 -AAAAAAAAABHCAAAA \N 1 31.5 79.83 181.38 61.93 -AAAAAAAAABHCAAAA TN 0 31.5 79.83 181.38 61.93 -AAAAAAAAABIBAAAA \N 1 48.0 170.89 0.00 140.12 -AAAAAAAAABIBAAAA TN 0 48.0 170.89 0.00 140.12 -AAAAAAAAABJAAAAA \N 1 46.5 82.32 0.00 44.98 -AAAAAAAAABJAAAAA TN 0 46.5 82.32 0.00 44.98 -AAAAAAAAABJBAAAA \N 1 76.0 12.40 0.00 3.96 -AAAAAAAAABJBAAAA TN 0 76.0 12.40 0.00 3.96 -AAAAAAAAABJDAAAA \N 1 34.0 118.50 0.00 61.20 -AAAAAAAAABJDAAAA TN 0 34.0 118.50 0.00 61.20 -AAAAAAAAABKAAAAA \N 1 65.0 8.77 0.00 5.18 -AAAAAAAAABKAAAAA TN 0 65.0 8.77 0.00 5.18 -AAAAAAAAABKCAAAA \N 1 26.0 51.57 0.00 41.25 -AAAAAAAAABKCAAAA TN 0 26.0 51.57 0.00 41.25 -AAAAAAAAABLBAAAA \N 1 61.5 149.12 0.00 82.54 -AAAAAAAAABLBAAAA TN 0 61.5 149.12 0.00 82.54 -AAAAAAAAABMAAAAA \N 1 14.0 109.97 0.00 10.99 +\N \N 1 51.05758807588076 75.6595 194.4079 38.2563 +AAAAAAAAAAABAAAA \N 1 46.0 114.7200 0.0000 32.1200 +AAAAAAAAAAABAAAA TN 0 46.0 114.7200 0.0000 32.1200 +AAAAAAAAAAAEAAAA \N 1 100.0 77.9700 0.0000 57.6900 +AAAAAAAAAAAEAAAA TN 0 100.0 77.9700 0.0000 57.6900 +AAAAAAAAAABAAAAA \N 1 6.0 48.8900 13.6100 2.4400 +AAAAAAAAAABAAAAA TN 0 6.0 48.8900 13.6100 2.4400 +AAAAAAAAAACAAAAA \N 1 62.0 32.2133 0.0000 5.5066 +AAAAAAAAAACAAAAA TN 0 62.0 32.2133 0.0000 5.5066 +AAAAAAAAAACDAAAA \N 1 97.0 161.7800 0.0000 55.0000 +AAAAAAAAAACDAAAA TN 0 97.0 161.7800 0.0000 55.0000 +AAAAAAAAAADBAAAA \N 1 28.0 136.0100 575.7600 73.4400 +AAAAAAAAAADBAAAA TN 0 28.0 136.0100 575.7600 73.4400 +AAAAAAAAAADCAAAA \N 1 64.0 116.1400 0.0000 108.0100 +AAAAAAAAAADCAAAA TN 0 64.0 116.1400 0.0000 108.0100 +AAAAAAAAAAEBAAAA \N 1 9.0 5.4300 0.0000 5.2100 +AAAAAAAAAAEBAAAA TN 0 9.0 5.4300 0.0000 5.2100 +AAAAAAAAAAEDAAAA \N 1 45.5 87.6350 0.0000 51.8400 +AAAAAAAAAAEDAAAA TN 0 45.5 87.6350 0.0000 51.8400 +AAAAAAAAAAGBAAAA \N 1 29.0 101.9400 0.0000 100.9200 +AAAAAAAAAAGBAAAA TN 0 29.0 101.9400 0.0000 100.9200 +AAAAAAAAAAGCAAAA \N 1 97.0 65.2700 0.0000 21.5300 +AAAAAAAAAAGCAAAA TN 0 97.0 65.2700 0.0000 21.5300 +AAAAAAAAAAGEAAAA \N 1 55.0 73.8750 0.0000 71.0000 +AAAAAAAAAAGEAAAA TN 0 55.0 73.8750 0.0000 71.0000 +AAAAAAAAAAHAAAAA \N 1 20.0 134.3000 0.0000 119.5200 +AAAAAAAAAAHAAAAA TN 0 20.0 134.3000 0.0000 119.5200 +AAAAAAAAAAHBAAAA \N 1 97.0 7.4000 0.0000 6.7300 +AAAAAAAAAAHBAAAA TN 0 97.0 7.4000 0.0000 6.7300 +AAAAAAAAAAHDAAAA \N 1 69.0 5.6200 0.0000 0.3300 +AAAAAAAAAAHDAAAA TN 0 69.0 5.6200 0.0000 0.3300 +AAAAAAAAAAIAAAAA \N 1 87.0 106.9800 0.0000 27.8100 +AAAAAAAAAAIAAAAA TN 0 87.0 106.9800 0.0000 27.8100 +AAAAAAAAAAKBAAAA \N 1 84.5 66.1750 847.8350 57.3800 +AAAAAAAAAAKBAAAA TN 0 84.5 66.1750 847.8350 57.3800 +AAAAAAAAAALAAAAA \N 1 6.0 32.2800 0.0000 7.4200 +AAAAAAAAAALAAAAA TN 0 6.0 32.2800 0.0000 7.4200 +AAAAAAAAAALCAAAA \N 1 98.0 34.3100 55.3000 1.7100 +AAAAAAAAAALCAAAA TN 0 98.0 34.3100 55.3000 1.7100 +AAAAAAAAAALDAAAA \N 1 59.0 129.4700 713.9000 22.0000 +AAAAAAAAAALDAAAA TN 0 59.0 129.4700 713.9000 22.0000 +AAAAAAAAAANAAAAA \N 1 74.0 60.8750 0.0000 13.2000 +AAAAAAAAAANAAAAA TN 0 74.0 60.8750 0.0000 13.2000 +AAAAAAAAAANBAAAA \N 1 96.0 130.7900 1864.5100 129.4800 +AAAAAAAAAANBAAAA TN 0 96.0 130.7900 1864.5100 129.4800 +AAAAAAAAAAOAAAAA \N 1 85.0 130.3400 0.0000 122.5100 +AAAAAAAAAAOAAAAA TN 0 85.0 130.3400 0.0000 122.5100 +AAAAAAAAAAOCAAAA \N 1 14.0 64.5750 0.0000 33.9750 +AAAAAAAAAAOCAAAA TN 0 14.0 64.5750 0.0000 33.9750 +AAAAAAAAAAODAAAA \N 1 84.0 30.5000 0.0000 28.9700 +AAAAAAAAAAODAAAA TN 0 84.0 30.5000 0.0000 28.9700 +AAAAAAAAAAPBAAAA \N 1 45.0 118.8900 2380.5950 84.7150 +AAAAAAAAAAPBAAAA TN 0 45.0 118.8900 2380.5950 84.7150 +AAAAAAAAABAAAAAA \N 1 97.0 124.7500 0.0000 74.8500 +AAAAAAAAABAAAAAA TN 0 97.0 124.7500 0.0000 74.8500 +AAAAAAAAABABAAAA \N 1 31.0 29.9800 17.0900 27.5800 +AAAAAAAAABABAAAA TN 0 31.0 29.9800 17.0900 27.5800 +AAAAAAAAABAEAAAA \N 1 34.0 17.2100 0.0000 13.4200 +AAAAAAAAABAEAAAA TN 0 34.0 17.2100 0.0000 13.4200 +AAAAAAAAABCBAAAA \N 1 38.0 131.3750 0.0000 52.3200 +AAAAAAAAABCBAAAA TN 0 38.0 131.3750 0.0000 52.3200 +AAAAAAAAABDAAAAA \N 1 31.5 68.3450 0.0000 63.2750 +AAAAAAAAABDAAAAA TN 0 31.5 68.3450 0.0000 63.2750 +AAAAAAAAABDBAAAA \N 1 56.0 103.8500 1624.1700 59.1900 +AAAAAAAAABDBAAAA TN 0 56.0 103.8500 1624.1700 59.1900 +AAAAAAAAABDDAAAA \N 1 67.33333333333333 119.4200 23.1866 38.7200 +AAAAAAAAABDDAAAA TN 0 67.33333333333333 119.4200 23.1866 38.7200 +AAAAAAAAABDEAAAA \N 1 61.0 85.9500 2282.3600 44.6050 +AAAAAAAAABDEAAAA TN 0 61.0 85.9500 2282.3600 44.6050 +AAAAAAAAABEDAAAA \N 1 61.0 85.1400 0.0000 50.2300 +AAAAAAAAABEDAAAA TN 0 61.0 85.1400 0.0000 50.2300 +AAAAAAAAABFBAAAA \N 1 31.0 23.5500 0.0000 13.6500 +AAAAAAAAABFBAAAA TN 0 31.0 23.5500 0.0000 13.6500 +AAAAAAAAABFCAAAA \N 1 83.0 15.5000 0.0000 0.0000 +AAAAAAAAABFCAAAA TN 0 83.0 15.5000 0.0000 0.0000 +AAAAAAAAABGAAAAA \N 1 64.0 35.0800 0.0000 3.1500 +AAAAAAAAABGAAAAA TN 0 64.0 35.0800 0.0000 3.1500 +AAAAAAAAABGBAAAA \N 1 40.0 25.0700 0.0000 16.0400 +AAAAAAAAABGBAAAA TN 0 40.0 25.0700 0.0000 16.0400 +AAAAAAAAABGEAAAA \N 1 39.5 56.7650 14.2550 36.0050 +AAAAAAAAABGEAAAA TN 0 39.5 56.7650 14.2550 36.0050 +AAAAAAAAABHAAAAA \N 1 93.0 74.8000 0.0000 21.6900 +AAAAAAAAABHAAAAA TN 0 93.0 74.8000 0.0000 21.6900 +AAAAAAAAABHCAAAA \N 1 31.5 79.8350 181.3800 61.9350 +AAAAAAAAABHCAAAA TN 0 31.5 79.8350 181.3800 61.9350 +AAAAAAAAABIBAAAA \N 1 48.0 170.8900 0.0000 140.1200 +AAAAAAAAABIBAAAA TN 0 48.0 170.8900 0.0000 140.1200 +AAAAAAAAABJAAAAA \N 1 46.5 82.3250 0.0000 44.9850 +AAAAAAAAABJAAAAA TN 0 46.5 82.3250 0.0000 44.9850 +AAAAAAAAABJBAAAA \N 1 76.0 12.4000 0.0000 3.9600 +AAAAAAAAABJBAAAA TN 0 76.0 12.4000 0.0000 3.9600 +AAAAAAAAABJDAAAA \N 1 34.0 118.5050 0.0000 61.2050 +AAAAAAAAABJDAAAA TN 0 34.0 118.5050 0.0000 61.2050 +AAAAAAAAABKAAAAA \N 1 65.0 8.7750 0.0000 5.1800 +AAAAAAAAABKAAAAA TN 0 65.0 8.7750 0.0000 5.1800 +AAAAAAAAABKCAAAA \N 1 26.0 51.5700 0.0000 41.2500 +AAAAAAAAABKCAAAA TN 0 26.0 51.5700 0.0000 41.2500 +AAAAAAAAABLBAAAA \N 1 61.5 149.1200 0.0000 82.5400 +AAAAAAAAABLBAAAA TN 0 61.5 149.1200 0.0000 82.5400 +AAAAAAAAABMAAAAA \N 1 14.0 109.9700 0.0000 10.9900 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q28.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q28.out index 8efe34c15795bd..fb2fd47f91cc02 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q28.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q28.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q28 -- -77.71 36142 9210 69.50 35250 6592 134.01 27875 9741 82.55 31422 7678 61.82 36100 8664 39.27 29776 5210 +77.7174 36142 9210 69.5026 35250 6592 134.0115 27875 9741 82.5527 31422 7678 61.8260 36100 8664 39.2795 29776 5210 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_1.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_1.out index f41d3c55f792b7..ad2cd92bb991ed 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_1.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_1.out @@ -1,6 +1,6 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q39_1 -- -1 265 1 324.75 1.2438391781531353 1 265 2 329.0 1.0151581328149206 +1 265 1 324.75 1.2438391781531353 1 265 2 329.0 1.0151581328149208 1 363 1 499.5 1.031941572270649 1 363 2 321.0 1.1411766752007977 1 679 1 373.75 1.0955498064867504 1 679 2 417.5 1.042970994259454 1 695 1 450.75 1.0835888283564505 1 695 2 368.75 1.1356494125569416 @@ -9,7 +9,7 @@ 1 827 1 271.75 1.1046890134130438 1 827 2 424.75 1.1653198631238286 1 1041 1 382.5 1.284808399803008 1 1041 2 424.75 1.000577271456812 1 1569 1 212.0 1.630213519639535 1 1569 2 239.25 1.2641513267800557 -1 1623 1 338.25 1.1285483279713715 1 1623 2 261.3333333333333 1.2717809002195564 +1 1623 1 338.25 1.1285483279713713 1 1623 2 261.3333333333333 1.2717809002195564 1 2581 1 448.5 1.060429041250449 1 2581 2 476.25 1.0362984739390064 1 2705 1 246.25 1.012030835795969 1 2705 2 294.6666666666667 1.0742134101583702 1 3131 1 393.75 1.0037613982687346 1 3131 2 480.5 1.0669144981482768 @@ -19,19 +19,19 @@ 1 5627 1 282.75 1.5657032366359889 1 5627 2 297.5 1.2084286841430678 1 7017 1 175.5 1.0427454215644427 1 7017 2 321.3333333333333 1.0183356932936254 1 7317 1 366.3333333333333 1.025466403613547 1 7317 2 378.0 1.2172513189920555 -1 7569 1 430.5 1.0874396852180854 1 7569 2 360.25 1.0470055593145149 -1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.008092263550718 +1 7569 1 430.5 1.0874396852180854 1 7569 2 360.25 1.047005559314515 +1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.0080922635507177 1 8319 1 306.75 1.1615378040478215 1 8319 2 276.0 1.1420996385609428 1 8443 1 327.75 1.256718374192724 1 8443 2 332.5 1.0044167259988928 -1 8583 1 319.5 1.024108893111539 1 8583 2 310.25 1.2358813775861328 +1 8583 1 319.5 1.024108893111539 1 8583 2 310.25 1.2358813775861326 1 8591 1 398.0 1.1478168692042447 1 8591 2 355.75 1.0024472149348966 -1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.2342122780960432 +1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.234212278096043 1 9081 1 367.0 1.0878932141280895 1 9081 2 435.0 1.0330530776324107 1 9357 1 351.6666666666667 1.1902922622025887 1 9357 2 427.0 1.0438583026358363 1 9449 1 406.25 1.0183183104803557 1 9449 2 175.0 1.0544779796296408 1 9713 1 242.5 1.1035044355064203 1 9713 2 393.0 1.208474608738988 1 9809 1 479.0 1.0189602512117633 1 9809 2 317.5 1.0614142074924882 -1 9993 1 417.75 1.009983267243525 1 9993 2 204.5 1.552870745350107 +1 9993 1 417.75 1.0099832672435247 1 9993 2 204.5 1.552870745350107 1 10127 1 239.75 1.0561770587198123 1 10127 2 359.25 1.1857980403742183 1 11159 1 407.25 1.0785507154337637 1 11159 2 250.0 1.334757905639321 1 11277 1 211.25 1.2615858275316627 1 11277 2 330.75 1.0808767951625093 @@ -45,7 +45,7 @@ 1 13191 1 260.25 1.063569632291568 1 13191 2 405.0 1.0197999172180061 1 13561 1 335.25 1.2609616961776389 1 13561 2 240.0 1.0513604502245155 1 13935 1 311.75 1.0399289695412326 1 13935 2 275.0 1.0367527180321774 -1 14687 1 358.0 1.4369356919381713 1 14687 2 187.0 1.549363153147496 +1 14687 1 358.0 1.4369356919381713 1 14687 2 187.0 1.5493631531474956 1 14719 1 209.0 1.0411509639707628 1 14719 2 489.0 1.376616882800804 1 15345 1 148.5 1.5295784035794022 1 15345 2 246.5 1.5087987747231526 1 15427 1 482.75 1.0124238928335043 1 15427 2 333.25 1.2724770126308678 @@ -63,7 +63,7 @@ 2 1991 1 356.0 1.1336790046919885 2 1991 2 273.25 1.3324196418089087 2 2031 1 407.5 1.0209876826110387 2 2031 2 418.75 1.0053388632912839 2 2481 1 319.75 1.116026660755801 2 2481 2 378.3333333333333 1.0597185274084644 -2 2725 1 349.75 1.1148704918064747 2 2725 2 265.6666666666667 1.5462972148471537 +2 2725 1 349.75 1.1148704918064747 2 2725 2 265.6666666666667 1.5462972148471539 2 3073 1 385.0 1.1020845844189129 2 3073 2 231.75 1.0884989063827268 2 3769 1 334.0 1.19542966145639 2 3769 2 335.0 1.049464958250903 2 4085 1 327.75 1.1005413873145125 2 4085 2 281.75 1.0187608064801108 @@ -78,7 +78,7 @@ 2 6767 1 341.0 1.093163984134538 2 6767 2 235.0 1.1399543855818017 2 7411 1 460.0 1.0628293255143475 2 7411 2 297.5 1.000576535072398 2 8489 1 126.75 1.341646295852091 2 8489 2 398.25 1.0041124840252154 -2 8633 1 218.5 1.4645189740171023 2 8633 2 230.25 1.3116963014576621 +2 8633 1 218.5 1.4645189740171023 2 8633 2 230.25 1.311696301457662 2 8807 1 417.25 1.025811293001377 2 8807 2 356.25 1.1079730633089233 2 8883 1 249.25 1.1112271782210548 2 8883 2 189.25 1.010075485139798 2 9253 1 413.3333333333333 1.1606659948102405 2 9253 2 465.0 1.0242445824028785 @@ -92,7 +92,7 @@ 2 12633 1 402.75 1.0071362075740695 2 12633 2 367.0 1.1270535638607155 2 12765 1 308.0 1.1188476882701337 2 12765 2 347.0 1.1571744590236304 2 13077 1 277.0 1.2323360849352152 2 13077 2 223.5 1.139400344912951 -2 13687 1 361.25 1.0107341657610867 2 13687 2 468.25 1.00984291842181 +2 13687 1 361.25 1.0107341657610864 2 13687 2 468.25 1.00984291842181 2 14025 1 371.75 1.0150136083050016 2 14025 2 141.0 1.2543170259746204 2 14117 1 298.5 1.0251238034747268 2 14117 2 220.25 1.4152684465941177 2 14347 1 366.0 1.0327892946261927 2 14347 2 369.75 1.0185739900192863 @@ -101,14 +101,14 @@ 2 15321 1 527.0 1.2102662554654002 2 15321 2 298.75 1.1309098406792113 2 15347 1 243.0 1.22262397963835 2 15347 2 310.75 1.2036584852655927 2 15533 1 223.0 1.096511132968014 2 15533 2 330.0 1.4967488488790472 -2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894105 +2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894102 2 16107 1 376.0 1.0133246306103783 2 16107 2 364.75 1.0688677983776655 2 16749 1 200.0 1.0944709528656604 2 16749 2 438.25 1.0360646618074532 2 17329 1 321.3333333333333 1.3093279467658028 2 17329 2 490.25 1.0756580649722338 2 17417 1 321.75 1.1306764803839018 2 17417 2 534.0 1.0010725216798313 3 1049 1 252.5 1.1090641101125922 3 1049 2 457.25 1.0239841249245367 3 1415 1 247.5 1.1321617788582448 3 1415 2 369.75 1.095467956288316 -3 2199 1 185.75 1.2028125570694115 3 2199 2 300.75 1.0767845064923045 +3 2199 1 185.75 1.2028125570694115 3 2199 2 300.75 1.0767845064923047 3 2403 1 270.75 1.3258705678179297 3 2403 2 384.0 1.0903987183011015 3 2541 1 364.75 1.079213526102894 3 2541 2 550.5 1.0545588871101828 3 2727 1 303.75 1.030164700291085 3 2727 2 219.25 1.3822091831959378 @@ -121,19 +121,19 @@ 3 6691 1 377.0 1.1090737292917523 3 6691 2 380.5 1.0581301250281556 3 6757 1 282.5 1.089500938688411 3 6757 2 345.25 1.2263828747838474 3 6915 1 420.6666666666667 1.0468345634906968 3 6915 2 292.5 1.2506171072716117 -3 7207 1 329.6666666666667 1.5954482160720398 3 7207 2 414.5 1.017919707908937 +3 7207 1 329.6666666666667 1.5954482160720393 3 7207 2 414.5 1.017919707908937 3 7889 1 318.5 1.2879030049985103 3 7889 2 291.3333333333333 1.0042925323922787 3 8559 1 356.25 1.0065193461695627 3 8559 2 393.5 1.0128831652141206 -3 8829 1 364.25 1.0792852260446877 3 8829 2 350.25 1.1133912240741104 +3 8829 1 364.25 1.0792852260446875 3 8829 2 350.25 1.1133912240741104 3 9555 1 377.0 1.1308469328910158 3 9555 2 444.75 1.0171588175042316 3 9623 1 331.3333333333333 1.1551289271934477 3 9623 2 284.6666666666667 1.0303724426257317 -3 9813 1 343.75 1.0516953753508833 3 9813 2 384.6666666666667 1.0815005906604847 +3 9813 1 343.75 1.0516953753508833 3 9813 2 384.6666666666667 1.0815005906604849 3 9881 1 351.5 1.1788820554157222 3 9881 2 287.75 1.0909386089510784 3 10035 1 378.25 1.0216399511791376 3 10035 2 364.25 1.1567922653398062 3 10509 1 420.25 1.0548626901275737 3 10509 2 368.25 1.1820633359473098 3 10547 1 182.33333333333334 1.5325641514869042 3 10547 2 320.25 1.302441844373152 3 10743 1 233.25 1.2793022354241157 3 10743 2 110.25 1.107204634127507 -3 11477 1 264.25 1.0953530000836025 3 11477 2 278.5 1.0327909817070402 +3 11477 1 264.25 1.0953530000836025 3 11477 2 278.5 1.03279098170704 3 11959 1 358.0 1.0684835251792983 3 11959 2 268.5 1.0089856798911991 3 12043 1 169.25 1.033093808880221 3 12043 2 377.25 1.0161962499718764 3 12157 1 326.3333333333333 1.0022318670551493 3 12157 2 396.3333333333333 1.0287818050404884 @@ -147,8 +147,8 @@ 3 16233 1 260.6666666666667 1.120423550056809 3 16233 2 210.5 1.1788143336685517 3 16267 1 456.0 1.00422634651884 3 16267 2 364.3333333333333 1.4818855428309732 3 16605 1 394.25 1.1137413572906036 3 16605 2 296.25 1.2885892655671596 -3 16949 1 155.75 1.1186177285449936 3 16949 2 229.5 1.0289469196724543 -3 17319 1 364.75 1.2709364445674025 3 17319 2 359.25 1.1578751434862422 +3 16949 1 155.75 1.1186177285449939 3 16949 2 229.5 1.0289469196724543 +3 17319 1 364.75 1.2709364445674023 3 17319 2 359.25 1.1578751434862422 4 947 1 247.5 1.6933181813486973 4 947 2 203.33333333333334 1.205433145161931 4 1895 1 354.75 1.2397341541992284 4 1895 2 383.75 1.0893076992144062 4 3429 1 358.5 1.0665593354923446 4 3429 2 346.0 1.251948930065546 @@ -157,39 +157,39 @@ 4 4885 1 151.0 1.3205570350636184 4 4885 2 377.25 1.0489035237886835 4 4915 1 289.25 1.0863929490514617 4 4915 2 368.0 1.069658554605372 4 5043 1 476.0 1.0155964276489484 4 5043 2 244.25 1.356289369084929 -4 5095 1 334.0 1.2258861291353158 4 5095 2 390.25 1.0621788063332438 +4 5095 1 334.0 1.2258861291353158 4 5095 2 390.25 1.0621788063332436 4 5193 1 263.3333333333333 1.250170954501139 4 5193 2 323.0 1.0979616195802828 4 5975 1 434.0 1.0233614450980864 4 5975 2 359.75 1.1979356900084084 4 6251 1 285.0 1.121538025585264 4 6251 2 335.5 1.1602192523957113 4 6389 1 280.75 1.2049236089487845 4 6389 2 259.3333333333333 1.4816550575659289 4 6487 1 452.75 1.0710626602211524 4 6487 2 350.5 1.17164756896522 4 6619 1 430.0 1.0007262551157654 4 6619 2 226.25 1.548557450713079 -4 7191 1 260.75 1.0012666837154776 4 7191 2 195.25 1.5372675520067365 +4 7191 1 260.75 1.0012666837154778 4 7191 2 195.25 1.5372675520067365 4 7427 1 239.5 1.4183567144406795 4 7427 2 373.25 1.0429791976763843 -4 8453 1 314.75 1.0259714909803297 4 8453 2 376.75 1.0099023931660847 +4 8453 1 314.75 1.0259714909803297 4 8453 2 376.75 1.0099023931660849 4 8781 1 518.5 1.100549995019371 4 8781 2 521.0 1.123770469908755 4 9571 1 314.0 1.216857824298178 4 9571 2 309.0 1.089216738940079 4 9587 1 248.0 1.4981887260612339 4 9587 2 248.0 1.0064987840475923 4 10333 1 321.0 1.1486107061789543 4 10333 2 317.0 1.0469226317412668 -4 10969 1 186.66666666666666 1.1044206164135038 4 10969 2 307.0 1.1094764105733856 +4 10969 1 186.66666666666666 1.104420616413504 4 10969 2 307.0 1.1094764105733856 4 10993 1 446.0 1.0092376322965588 4 10993 2 206.66666666666666 1.2355333519949105 4 11571 1 342.5 1.142628399354839 4 11571 2 304.6666666666667 1.0319943224652848 4 11979 1 225.33333333333334 1.4670656155247088 4 11979 2 438.25 1.1389926990347663 4 13409 1 312.3333333333333 1.3427502512651468 4 13409 2 336.25 1.1081978302033695 4 13443 1 417.75 1.0217796082231347 4 13443 2 334.0 1.3076430852966527 4 13567 1 271.5 1.0087621621432743 4 13567 2 370.0 1.4557686063410562 -4 13683 1 318.75 1.0149827729946173 4 13683 2 363.5 1.0781154578332097 -4 14143 1 367.0 1.0441799438931547 4 14143 2 290.0 1.1933060754121456 +4 13683 1 318.75 1.0149827729946173 4 13683 2 363.5 1.0781154578332095 +4 14143 1 367.0 1.0441799438931547 4 14143 2 290.0 1.1933060754121454 4 14401 1 342.75 1.1836559036030756 4 14401 2 344.25 1.2067083116272619 -4 14693 1 447.25 1.0516674911652104 4 14693 2 498.0 1.3517382644369342 +4 14693 1 447.25 1.0516674911652102 4 14693 2 498.0 1.3517382644369342 4 14877 1 414.3333333333333 1.1707723877930458 4 14877 2 282.5 1.5830582944346865 4 15063 1 378.25 1.1128192588166839 4 15063 2 444.0 1.0632777688204158 -4 15275 1 335.5 1.1536382939175556 4 15275 2 292.6666666666667 1.297831368103705 -4 15509 1 296.3333333333333 1.0246740536582173 4 15509 2 317.6666666666667 1.447036456507824 -4 15969 1 423.0 1.0472875497665226 4 15969 2 342.5 1.2511769371808568 -4 16627 1 485.5 1.0151460895716244 4 16627 2 161.25 1.353325272620004 +4 15275 1 335.5 1.1536382939175558 4 15275 2 292.6666666666667 1.297831368103705 +4 15509 1 296.3333333333333 1.0246740536582173 4 15509 2 317.6666666666667 1.4470364565078238 +4 15969 1 423.0 1.0472875497665224 4 15969 2 342.5 1.2511769371808568 +4 16627 1 485.5 1.0151460895716244 4 16627 2 161.25 1.3533252726200042 4 16641 1 521.5 1.1050662064564454 4 16641 2 221.5 1.0308590510025117 -4 16751 1 549.5 1.082214382125362 4 16751 2 223.33333333333334 1.3377897605859546 +4 16751 1 549.5 1.082214382125362 4 16751 2 223.33333333333334 1.3377897605859543 5 75 1 333.0 1.2656318762849212 5 75 2 226.0 1.0358078507992579 5 125 1 441.6666666666667 1.0959714573775443 5 125 2 331.5 1.0081148286008836 5 431 1 159.0 1.1061794752181042 5 431 2 304.0 1.1224225373103636 @@ -200,18 +200,18 @@ 5 2855 1 406.0 1.4037637084639343 5 2855 2 183.25 1.0662249910239627 5 3137 1 271.25 1.575453220592864 5 3137 2 380.0 1.0834203388600319 5 3279 1 299.5 1.053669716363755 5 3279 2 276.75 1.4458878093841827 -5 3467 1 294.0 1.1477294638716873 5 3467 2 349.6666666666667 1.1674223692818806 -5 4463 1 338.0 1.0699320081481432 5 4463 2 273.5 1.2369797321835678 -5 4719 1 340.5 1.057185780180554 5 4719 2 423.6666666666667 1.0255000206713487 +5 3467 1 294.0 1.1477294638716873 5 3467 2 349.6666666666667 1.1674223692818808 +5 4463 1 338.0 1.0699320081481432 5 4463 2 273.5 1.2369797321835676 +5 4719 1 340.5 1.0571857801805542 5 4719 2 423.6666666666667 1.0255000206713487 5 4739 1 281.3333333333333 1.0242971514325028 5 4739 2 383.5 1.0334337390189823 5 4839 1 310.25 1.035903440911969 5 4839 2 232.0 1.2954193820330193 -5 4979 1 359.5 1.1046408074063154 5 4979 2 323.75 1.1704250950730493 -5 5401 1 219.25 1.2773870241916034 5 5401 2 203.0 1.0915675205208268 +5 4979 1 359.5 1.1046408074063157 5 4979 2 323.75 1.1704250950730493 +5 5401 1 219.25 1.2773870241916032 5 5401 2 203.0 1.091567520520827 5 5635 1 370.0 1.0227054644459215 5 5635 2 351.6666666666667 1.3777664464428738 5 5797 1 403.0 1.0234882286709048 5 5797 2 457.5 1.003704010389515 5 5901 1 360.25 1.125963126923387 5 5901 2 376.0 1.0095038425625151 5 6129 1 419.25 1.0169180165631466 5 6129 2 359.5 1.0478889386811094 -5 6213 1 351.6666666666667 1.2056212536733542 5 6213 2 361.5 1.1168408058550758 +5 6213 1 351.6666666666667 1.2056212536733542 5 6213 2 361.5 1.116840805855076 5 6479 1 301.3333333333333 1.2780010449304997 5 6479 2 395.75 1.1779743547973778 5 7333 1 227.0 1.461134600265013 5 7333 2 243.75 1.1789162497808614 5 7923 1 358.0 1.1046770912449826 5 7923 2 342.3333333333333 1.1607781125264067 @@ -223,24 +223,24 @@ 5 10949 1 383.0 1.1125677373995029 5 10949 2 378.25 1.125540609959554 5 11107 1 446.5 1.2653489768601378 5 11107 2 258.5 1.553612564193816 5 11795 1 395.5 1.0104473172545645 5 11795 2 430.75 1.131062588545398 -5 12017 1 347.75 1.1682379397902218 5 12017 2 308.0 1.1593227968413717 +5 12017 1 347.75 1.1682379397902216 5 12017 2 308.0 1.1593227968413717 5 12027 1 456.25 1.0262940073409625 5 12027 2 390.3333333333333 1.1142770095355214 -5 13583 1 430.3333333333333 1.042383929052728 5 13583 2 256.25 1.5410348277289667 +5 13583 1 430.3333333333333 1.042383929052728 5 13583 2 256.25 1.541034827728967 5 13651 1 272.3333333333333 1.169523124191674 5 13651 2 330.5 1.1901873530915061 5 13783 1 419.5 1.0584699696320432 5 13783 2 339.5 1.0680909505443135 5 13859 1 318.0 1.1422239044797105 5 13859 2 380.25 1.0564496237557859 5 14537 1 206.0 1.2283439997338772 5 14537 2 357.75 1.0387982680964687 -5 15309 1 276.3333333333333 1.2987590579253727 5 15309 2 409.0 1.0102406245856923 -5 15883 1 385.3333333333333 1.0124777526338784 5 15883 2 173.25 1.3562238248195935 +5 15309 1 276.3333333333333 1.2987590579253725 5 15309 2 409.0 1.0102406245856923 +5 15883 1 385.3333333333333 1.0124777526338786 5 15883 2 173.25 1.3562238248195932 5 15935 1 293.5 1.0187659410172984 5 15935 2 271.25 1.4000947515083553 5 15949 1 241.5 1.148665986924513 5 15949 2 235.0 1.4072887931753781 5 16037 1 327.25 1.1307617323781536 5 16037 2 412.6666666666667 1.1830200153757018 5 16291 1 380.5 1.0549595028454235 5 16291 2 411.6666666666667 1.034921399084621 -5 16459 1 370.0 1.275649908122718 5 16459 2 265.75 1.2988191692443933 +5 16459 1 370.0 1.275649908122718 5 16459 2 265.75 1.2988191692443931 5 16901 1 305.25 1.1043010533964068 5 16901 2 186.5 1.0231269284283626 5 17199 1 376.5 1.1038969766440296 5 17199 2 374.0 1.0873031171988548 5 17387 1 298.3333333333333 1.3848741714581234 5 17387 2 327.6666666666667 1.3670875783476784 -5 17717 1 283.75 1.1557156567771052 5 17717 2 235.25 1.1416239351288797 +5 17717 1 283.75 1.1557156567771052 5 17717 2 235.25 1.1416239351288795 5 17927 1 217.5 1.3549964301320125 5 17927 2 250.75 1.070921305926391 -5 17943 1 209.75 1.3717071339917377 5 17943 2 428.0 1.1090799349168265 +5 17943 1 209.75 1.3717071339917375 5 17943 2 428.0 1.1090799349168265 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_2.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_2.out index 4c07dc136285db..264cee21ca8d4a 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_2.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q39_2.out @@ -2,14 +2,14 @@ -- !q39_2 -- 1 1569 1 212.0 1.630213519639535 1 1569 2 239.25 1.2641513267800557 1 5627 1 282.75 1.5657032366359889 1 5627 2 297.5 1.2084286841430678 -1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.008092263550718 -1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.2342122780960432 +1 7999 1 166.25 1.7924231710846223 1 7999 2 375.3333333333333 1.0080922635507177 +1 8611 1 300.5 1.519154518414795 1 8611 2 243.75 1.234212278096043 1 15345 1 148.5 1.5295784035794022 1 15345 2 246.5 1.5087987747231526 2 71 1 221.5 1.563974108334745 2 71 2 309.0 1.4917057895885681 2 6103 1 194.33333333333334 1.5160670179307387 2 6103 2 158.5 1.2743698636165062 2 6489 1 268.0 1.6956372368432266 2 6489 2 389.0 1.4105780519299767 -2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894105 -3 7207 1 329.6666666666667 1.5954482160720398 3 7207 2 414.5 1.017919707908937 +2 15839 1 353.0 1.5063684437542906 2 15839 2 255.5 1.2362393182894102 +3 7207 1 329.6666666666667 1.5954482160720393 3 7207 2 414.5 1.017919707908937 3 10547 1 182.33333333333334 1.5325641514869042 3 10547 2 320.25 1.302441844373152 3 12867 1 278.25 1.640380012394735 3 12867 2 350.75 1.2006933321742796 4 947 1 247.5 1.6933181813486973 4 947 2 203.33333333333334 1.205433145161931 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q47.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q47.out index 7df1ccb5836b11..2f2de434f0eeca 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q47.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q47.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q47 -- -Men importoimporto #1 ese Unknown 1999 3 5492.81 2070.65 3307.78 2784.11 -Music exportischolar #1 eing Unknown 1999 2 5134.23 1740.21 4401.89 2721.61 -Music edu packscholar #1 ese Unknown 1999 4 5463.70 2091.07 3391.39 3095.31 -Music edu packscholar #1 ought Unknown 1999 7 5552.30 2226.34 4081.99 7573.33 -Music edu packscholar #1 ese Unknown 1999 2 5463.70 2268.27 4139.47 3391.39 -Men edu packimporto #1 ought Unknown 1999 7 5176.25 1993.73 3542.54 5764.35 -Children exportiexporti #1 ese Unknown 1999 3 5185.89 2019.69 3479.21 2982.05 -Shoes amalgedu pack #1 ation Unknown 1999 6 5152.09 2077.67 3123.43 2368.73 -Men edu packimporto #1 eing Unknown 1999 3 5501.18 2453.88 2683.70 2615.32 -Children exportiexporti #1 ation Unknown 1999 4 5238.35 2232.03 3221.70 3649.52 -Shoes importoedu pack #1 eing Unknown 1999 5 4698.61 1703.27 2687.15 2757.83 -Music exportischolar #1 bar Unknown 1999 7 5318.14 2346.06 3483.88 7658.62 -Music edu packscholar #1 ation Unknown 1999 2 5622.22 2657.68 4207.03 3543.82 -Children exportiexporti #1 bar Unknown 1999 7 5280.66 2324.79 3003.61 5961.39 -Children importoexporti #1 eing Unknown 1999 2 4650.43 1734.45 2341.19 2720.78 -Shoes importoedu pack #1 ought Unknown 1999 4 4537.63 1623.33 2928.34 1905.23 -Women edu packamalg #1 ation Unknown 1999 4 4507.41 1596.92 2865.38 2665.75 -Men importoimporto #1 ought Unknown 1999 6 5045.75 2152.15 2834.94 2667.92 -Men edu packimporto #1 eing Unknown 1999 4 5501.18 2615.32 2453.88 2874.96 -Shoes exportiedu pack #1 bar Unknown 1999 3 5296.08 2410.44 2685.85 3821.39 -Men importoimporto #1 able Unknown 1999 2 5194.81 2333.43 2765.75 2674.91 -Music amalgscholar #1 ought Unknown 1999 2 4565.60 1727.16 3895.09 2606.58 -Music edu packscholar #1 eing Unknown 1999 5 5539.30 2704.16 3862.34 3960.90 -Shoes importoedu pack #1 ation Unknown 1999 4 4690.57 1855.85 3524.69 3050.34 -Men edu packimporto #1 eing Unknown 1999 2 5501.18 2683.70 4304.21 2453.88 -Women exportiamalg #1 able Unknown 1999 2 4123.60 1306.40 2876.61 2238.71 -Music exportischolar #1 able Unknown 1999 5 5090.10 2281.80 2488.24 3304.75 -Shoes exportiedu pack #1 ought Unknown 1999 2 4755.53 1951.00 3949.06 2767.05 -Men importoimporto #1 ese Unknown 1999 6 5492.81 2691.33 3210.74 3754.33 -Men amalgimporto #1 ation Unknown 1999 2 4909.46 2116.43 3187.20 3356.64 -Men importoimporto #1 ought Unknown 1999 2 5045.75 2253.70 4158.86 3467.09 -Shoes amalgedu pack #1 ation Unknown 1999 7 5152.09 2368.73 2077.67 7543.60 -Men edu packimporto #1 ese Unknown 1999 3 4979.36 2201.00 3110.55 3118.30 -Children exportiexporti #1 ation Unknown 1999 2 5238.35 2462.96 3808.48 3221.70 -Men amalgimporto #1 ation Unknown 1999 4 4909.46 2136.23 3356.64 3046.51 -Children importoexporti #1 able Unknown 1999 7 4586.29 1814.46 2643.58 6423.18 -Men edu packimporto #1 ation Unknown 1999 4 5170.36 2407.58 3086.77 2492.73 -Shoes amalgedu pack #1 ese Unknown 1999 7 4392.18 1630.14 2755.91 6185.73 -Shoes amalgedu pack #1 able Unknown 1999 5 4940.22 2187.55 2894.91 3018.65 -Men edu packimporto #1 ought Unknown 1999 4 5176.25 2424.94 4285.78 3286.20 -Women amalgamalg #1 able Unknown 1999 6 4507.24 1761.81 2891.95 2302.21 -Men importoimporto #1 ation Unknown 1999 3 5410.91 2672.68 3591.65 2988.08 -Men importoimporto #1 ation Unknown 1999 5 5410.91 2677.81 2988.08 2881.34 -Men edu packimporto #1 bar Unknown 1999 4 5632.73 2901.64 3202.87 3447.78 -Children exportiexporti #1 able Unknown 1999 5 4955.24 2230.80 2395.57 3003.89 -Men importoimporto #1 eing Unknown 1999 5 5074.07 2356.88 2833.40 2854.62 -Men edu packimporto #1 bar Unknown 1999 2 5632.73 2916.43 3847.05 3202.87 -Shoes exportiedu pack #1 ese Unknown 1999 3 4865.28 2151.76 3212.91 3768.25 -Men importoimporto #1 ese Unknown 1999 4 5492.81 2784.11 2070.65 3210.74 -Shoes exportiedu pack #1 bar Unknown 1999 7 5296.08 2591.12 3012.98 6254.36 -Shoes exportiedu pack #1 ation Unknown 1999 5 4873.51 2170.98 2302.76 3236.50 -Shoes amalgedu pack #1 able Unknown 1999 2 4940.22 2239.16 3495.29 2563.93 -Children exportiexporti #1 eing Unknown 1999 7 5109.65 2410.24 2916.46 6558.23 -Women importoamalg #1 able Unknown 1999 7 4574.74 1881.03 2345.66 6036.28 -Women amalgamalg #1 ought Unknown 1999 7 4619.70 1926.67 3528.98 5162.15 -Children importoexporti #1 bar Unknown 1999 7 4566.77 1879.57 3400.62 6244.92 -Music edu packscholar #1 ation Unknown 1999 6 5622.22 2943.26 3643.42 3847.77 -Music exportischolar #1 ation Unknown 1999 4 4962.65 2283.77 3210.01 2539.84 -Music exportischolar #1 ation Unknown 1999 2 4962.65 2284.23 3250.69 3210.01 -Men edu packimporto #1 ation Unknown 1999 5 5170.36 2492.73 2407.58 3288.94 -Men edu packimporto #1 able Unknown 1999 3 4989.30 2318.98 2618.89 3315.77 -Music exportischolar #1 bar Unknown 1999 4 5318.14 2651.96 2989.10 3649.76 -Music exportischolar #1 bar Unknown 1999 2 5318.14 2656.31 3419.77 2989.10 -Shoes amalgedu pack #1 bar Unknown 1999 6 4805.40 2149.56 2686.70 3098.25 -Children exportiexporti #1 bar Unknown 1999 4 5280.66 2625.99 3301.62 4331.44 -Music amalgscholar #1 ation Unknown 1999 4 4934.50 2280.93 2322.89 2421.13 -Music edu packscholar #1 able Unknown 1999 7 5335.90 2684.15 3543.33 7540.94 -Shoes importoedu pack #1 eing Unknown 1999 2 4698.61 2058.86 3191.74 2812.15 -Shoes edu packedu pack #1 ought Unknown 1999 5 4745.29 2109.27 3203.82 2737.82 -Shoes importoedu pack #1 ought Unknown 1999 5 4537.63 1905.23 1623.33 3170.58 -Men edu packimporto #1 able Unknown 1999 6 4989.30 2357.82 3363.58 3142.81 -Children exportiexporti #1 able Unknown 1999 2 4955.24 2326.67 2746.99 3097.63 -Men edu packimporto #1 eing Unknown 1999 5 5501.18 2874.96 2615.32 3714.00 -Shoes exportiedu pack #1 ation Unknown 1999 7 4873.51 2256.56 3236.50 6245.37 -Shoes importoedu pack #1 ese Unknown 1999 3 4676.74 2060.29 3273.67 2610.86 -Men amalgimporto #1 ese Unknown 1999 6 4764.59 2150.16 3284.27 3475.17 -Music amalgscholar #1 ation Unknown 1999 3 4934.50 2322.89 3197.76 2280.93 -Shoes exportiedu pack #1 bar Unknown 1999 2 5296.08 2685.85 4235.44 2410.44 -Children importoexporti #1 able Unknown 1999 5 4586.29 1982.77 2837.74 2643.58 -Music exportischolar #1 able Unknown 1999 4 5090.10 2488.24 2966.36 2281.80 -Shoes importoedu pack #1 able Unknown 1999 7 4700.91 2100.12 2533.01 5888.57 -Music edu packscholar #1 bar Unknown 1999 2 5484.78 2903.45 3410.13 3024.86 -Shoes exportiedu pack #1 ation Unknown 1999 3 4873.51 2300.45 2797.30 2302.76 -Shoes exportiedu pack #1 ation Unknown 1999 4 4873.51 2302.76 2300.45 2170.98 -Shoes importoedu pack #1 bar Unknown 1999 3 4794.67 2225.70 2756.97 2413.76 -Music edu packscholar #1 ought Unknown 1999 5 5552.30 2985.49 3241.69 4081.99 -Music edu packscholar #1 eing Unknown 1999 3 5539.30 2973.01 3069.18 3862.34 -Shoes amalgedu pack #1 eing Unknown 1999 7 4706.54 2143.18 2458.07 5967.73 -Children exportiexporti #1 ought Unknown 1999 5 5018.27 2458.03 3467.53 2683.61 -Children exportiexporti #1 able Unknown 1999 4 4955.24 2395.57 3097.63 2230.80 -Children exportiexporti #1 eing Unknown 1999 2 5109.65 2550.30 4039.10 2685.10 -Music exportischolar #1 ought Unknown 1999 4 5079.18 2520.64 3233.50 3079.89 -Women edu packamalg #1 ation Unknown 1999 2 4507.41 1951.42 4166.02 2865.38 -Women amalgamalg #1 ought Unknown 1999 1 4619.70 2065.94 9639.59 2521.70 -Music importoscholar #1 ought Unknown 1999 3 4004.44 1456.84 2438.63 2790.03 -Shoes edu packedu pack #1 eing Unknown 1999 5 4664.86 2122.71 3131.02 2852.96 -Women importoamalg #1 bar Unknown 1999 3 4437.21 1895.27 2678.48 2999.04 -Music exportischolar #1 able Unknown 1999 2 5090.10 2550.48 3702.29 2966.36 -Music edu packscholar #1 able Unknown 1999 1 5335.90 2796.97 13360.68 3413.22 -Children exportiexporti #1 eing Unknown 1999 4 5109.65 2574.12 2685.10 2672.73 +Men importoimporto #1 ese Unknown 1999 3 5492.8175 2070.65 3307.78 2784.11 +Music exportischolar #1 eing Unknown 1999 2 5134.2383 1740.21 4401.89 2721.61 +Music edu packscholar #1 ese Unknown 1999 4 5463.7008 2091.07 3391.39 3095.31 +Music edu packscholar #1 ought Unknown 1999 7 5552.3050 2226.34 4081.99 7573.33 +Music edu packscholar #1 ese Unknown 1999 2 5463.7008 2268.27 4139.47 3391.39 +Men edu packimporto #1 ought Unknown 1999 7 5176.2575 1993.73 3542.54 5764.35 +Children exportiexporti #1 ese Unknown 1999 3 5185.8983 2019.69 3479.21 2982.05 +Shoes amalgedu pack #1 ation Unknown 1999 6 5152.0958 2077.67 3123.43 2368.73 +Men edu packimporto #1 eing Unknown 1999 3 5501.1808 2453.88 2683.70 2615.32 +Children exportiexporti #1 ation Unknown 1999 4 5238.3575 2232.03 3221.70 3649.52 +Shoes importoedu pack #1 eing Unknown 1999 5 4698.6125 1703.27 2687.15 2757.83 +Music exportischolar #1 bar Unknown 1999 7 5318.1466 2346.06 3483.88 7658.62 +Music edu packscholar #1 ation Unknown 1999 2 5622.2275 2657.68 4207.03 3543.82 +Children exportiexporti #1 bar Unknown 1999 7 5280.6625 2324.79 3003.61 5961.39 +Children importoexporti #1 eing Unknown 1999 2 4650.4383 1734.45 2341.19 2720.78 +Shoes importoedu pack #1 ought Unknown 1999 4 4537.6358 1623.33 2928.34 1905.23 +Women edu packamalg #1 ation Unknown 1999 4 4507.4175 1596.92 2865.38 2665.75 +Men importoimporto #1 ought Unknown 1999 6 5045.7583 2152.15 2834.94 2667.92 +Men edu packimporto #1 eing Unknown 1999 4 5501.1808 2615.32 2453.88 2874.96 +Shoes exportiedu pack #1 bar Unknown 1999 3 5296.0891 2410.44 2685.85 3821.39 +Men importoimporto #1 able Unknown 1999 2 5194.8183 2333.43 2765.75 2674.91 +Music amalgscholar #1 ought Unknown 1999 2 4565.6000 1727.16 3895.09 2606.58 +Music edu packscholar #1 eing Unknown 1999 5 5539.3083 2704.16 3862.34 3960.90 +Shoes importoedu pack #1 ation Unknown 1999 4 4690.5775 1855.85 3524.69 3050.34 +Men edu packimporto #1 eing Unknown 1999 2 5501.1808 2683.70 4304.21 2453.88 +Women exportiamalg #1 able Unknown 1999 2 4123.6008 1306.40 2876.61 2238.71 +Music exportischolar #1 able Unknown 1999 5 5090.1050 2281.80 2488.24 3304.75 +Shoes exportiedu pack #1 ought Unknown 1999 2 4755.5358 1951.00 3949.06 2767.05 +Men importoimporto #1 ese Unknown 1999 6 5492.8175 2691.33 3210.74 3754.33 +Men amalgimporto #1 ation Unknown 1999 2 4909.4608 2116.43 3187.20 3356.64 +Men importoimporto #1 ought Unknown 1999 2 5045.7583 2253.70 4158.86 3467.09 +Shoes amalgedu pack #1 ation Unknown 1999 7 5152.0958 2368.73 2077.67 7543.60 +Men edu packimporto #1 ese Unknown 1999 3 4979.3616 2201.00 3110.55 3118.30 +Children exportiexporti #1 ation Unknown 1999 2 5238.3575 2462.96 3808.48 3221.70 +Men amalgimporto #1 ation Unknown 1999 4 4909.4608 2136.23 3356.64 3046.51 +Children importoexporti #1 able Unknown 1999 7 4586.2983 1814.46 2643.58 6423.18 +Men edu packimporto #1 ation Unknown 1999 4 5170.3691 2407.58 3086.77 2492.73 +Shoes amalgedu pack #1 ese Unknown 1999 7 4392.1866 1630.14 2755.91 6185.73 +Shoes amalgedu pack #1 able Unknown 1999 5 4940.2275 2187.55 2894.91 3018.65 +Men edu packimporto #1 ought Unknown 1999 4 5176.2575 2424.94 4285.78 3286.20 +Women amalgamalg #1 able Unknown 1999 6 4507.2400 1761.81 2891.95 2302.21 +Men importoimporto #1 ation Unknown 1999 3 5410.9166 2672.68 3591.65 2988.08 +Men importoimporto #1 ation Unknown 1999 5 5410.9166 2677.81 2988.08 2881.34 +Men edu packimporto #1 bar Unknown 1999 4 5632.7366 2901.64 3202.87 3447.78 +Children exportiexporti #1 able Unknown 1999 5 4955.2416 2230.80 2395.57 3003.89 +Men importoimporto #1 eing Unknown 1999 5 5074.0766 2356.88 2833.40 2854.62 +Men edu packimporto #1 bar Unknown 1999 2 5632.7366 2916.43 3847.05 3202.87 +Shoes exportiedu pack #1 ese Unknown 1999 3 4865.2883 2151.76 3212.91 3768.25 +Men importoimporto #1 ese Unknown 1999 4 5492.8175 2784.11 2070.65 3210.74 +Shoes exportiedu pack #1 bar Unknown 1999 7 5296.0891 2591.12 3012.98 6254.36 +Shoes exportiedu pack #1 ation Unknown 1999 5 4873.5108 2170.98 2302.76 3236.50 +Shoes amalgedu pack #1 able Unknown 1999 2 4940.2275 2239.16 3495.29 2563.93 +Children exportiexporti #1 eing Unknown 1999 7 5109.6541 2410.24 2916.46 6558.23 +Women importoamalg #1 able Unknown 1999 7 4574.7425 1881.03 2345.66 6036.28 +Women amalgamalg #1 ought Unknown 1999 7 4619.7075 1926.67 3528.98 5162.15 +Children importoexporti #1 bar Unknown 1999 7 4566.7758 1879.57 3400.62 6244.92 +Music edu packscholar #1 ation Unknown 1999 6 5622.2275 2943.26 3643.42 3847.77 +Music exportischolar #1 ation Unknown 1999 4 4962.6500 2283.77 3210.01 2539.84 +Music exportischolar #1 ation Unknown 1999 2 4962.6500 2284.23 3250.69 3210.01 +Men edu packimporto #1 ation Unknown 1999 5 5170.3691 2492.73 2407.58 3288.94 +Men edu packimporto #1 able Unknown 1999 3 4989.3016 2318.98 2618.89 3315.77 +Music exportischolar #1 bar Unknown 1999 4 5318.1466 2651.96 2989.10 3649.76 +Music exportischolar #1 bar Unknown 1999 2 5318.1466 2656.31 3419.77 2989.10 +Shoes amalgedu pack #1 bar Unknown 1999 6 4805.4016 2149.56 2686.70 3098.25 +Children exportiexporti #1 bar Unknown 1999 4 5280.6625 2625.99 3301.62 4331.44 +Music amalgscholar #1 ation Unknown 1999 4 4934.5041 2280.93 2322.89 2421.13 +Music edu packscholar #1 able Unknown 1999 7 5335.9083 2684.15 3543.33 7540.94 +Shoes importoedu pack #1 eing Unknown 1999 2 4698.6125 2058.86 3191.74 2812.15 +Shoes edu packedu pack #1 ought Unknown 1999 5 4745.2958 2109.27 3203.82 2737.82 +Shoes importoedu pack #1 ought Unknown 1999 5 4537.6358 1905.23 1623.33 3170.58 +Men edu packimporto #1 able Unknown 1999 6 4989.3016 2357.82 3363.58 3142.81 +Children exportiexporti #1 able Unknown 1999 2 4955.2416 2326.67 2746.99 3097.63 +Men edu packimporto #1 eing Unknown 1999 5 5501.1808 2874.96 2615.32 3714.00 +Shoes exportiedu pack #1 ation Unknown 1999 7 4873.5108 2256.56 3236.50 6245.37 +Shoes importoedu pack #1 ese Unknown 1999 3 4676.7491 2060.29 3273.67 2610.86 +Men amalgimporto #1 ese Unknown 1999 6 4764.5966 2150.16 3284.27 3475.17 +Music amalgscholar #1 ation Unknown 1999 3 4934.5041 2322.89 3197.76 2280.93 +Shoes exportiedu pack #1 bar Unknown 1999 2 5296.0891 2685.85 4235.44 2410.44 +Children importoexporti #1 able Unknown 1999 5 4586.2983 1982.77 2837.74 2643.58 +Music exportischolar #1 able Unknown 1999 4 5090.1050 2488.24 2966.36 2281.80 +Shoes importoedu pack #1 able Unknown 1999 7 4700.9116 2100.12 2533.01 5888.57 +Music edu packscholar #1 bar Unknown 1999 2 5484.7891 2903.45 3410.13 3024.86 +Shoes exportiedu pack #1 ation Unknown 1999 3 4873.5108 2300.45 2797.30 2302.76 +Shoes exportiedu pack #1 ation Unknown 1999 4 4873.5108 2302.76 2300.45 2170.98 +Shoes importoedu pack #1 bar Unknown 1999 3 4794.6791 2225.70 2756.97 2413.76 +Music edu packscholar #1 ought Unknown 1999 5 5552.3050 2985.49 3241.69 4081.99 +Music edu packscholar #1 eing Unknown 1999 3 5539.3083 2973.01 3069.18 3862.34 +Shoes amalgedu pack #1 eing Unknown 1999 7 4706.5441 2143.18 2458.07 5967.73 +Children exportiexporti #1 ought Unknown 1999 5 5018.2791 2458.03 3467.53 2683.61 +Children exportiexporti #1 able Unknown 1999 4 4955.2416 2395.57 3097.63 2230.80 +Children exportiexporti #1 eing Unknown 1999 2 5109.6541 2550.30 4039.10 2685.10 +Music exportischolar #1 ought Unknown 1999 4 5079.1825 2520.64 3233.50 3079.89 +Women edu packamalg #1 ation Unknown 1999 2 4507.4175 1951.42 4166.02 2865.38 +Women amalgamalg #1 ought Unknown 1999 1 4619.7075 2065.94 9639.59 2521.70 +Music importoscholar #1 ought Unknown 1999 3 4004.4483 1456.84 2438.63 2790.03 +Shoes edu packedu pack #1 eing Unknown 1999 5 4664.8616 2122.71 3131.02 2852.96 +Women importoamalg #1 bar Unknown 1999 3 4437.2108 1895.27 2678.48 2999.04 +Music exportischolar #1 able Unknown 1999 2 5090.1050 2550.48 3702.29 2966.36 +Music edu packscholar #1 able Unknown 1999 1 5335.9083 2796.97 13360.68 3413.22 +Children exportiexporti #1 eing Unknown 1999 4 5109.6541 2574.12 2685.10 2672.73 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q53.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q53.out index c3e4e5bdcd1ee5..a17b9890060655 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q53.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q53.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q53 -- -30 165.67 340.63 -30 247.07 340.63 -30 627.63 340.63 -619 158.76 348.64 -619 210.81 348.64 -619 464.26 348.64 -619 560.73 348.64 -271 79.26 354.33 -271 86.87 354.33 -271 179.61 354.33 -271 1071.58 354.33 -827 82.44 356.59 -827 666.52 356.59 -296 188.61 369.12 -296 265.76 369.12 -296 655.24 369.12 -308 200.28 385.98 -308 214.07 385.98 -308 489.17 385.98 -308 640.41 385.98 -486 178.80 400.53 -486 455.08 400.53 -486 468.01 400.53 -486 500.23 400.53 -554 191.48 407.97 -554 346.80 407.97 -554 660.97 407.97 -208 151.84 410.38 -208 207.02 410.38 -208 533.75 410.38 -208 748.93 410.38 -662 199.83 412.13 -662 300.61 412.13 -662 460.94 412.13 -662 687.16 412.13 -394 264.65 413.40 -394 272.02 413.40 -394 674.12 413.40 -221 183.63 416.08 -221 534.62 416.08 -221 552.44 416.08 -621 232.20 418.11 -621 624.80 418.11 -507 76.98 419.46 -507 505.36 419.46 -507 644.24 419.46 -316 36.25 423.03 -316 158.85 423.03 -316 697.32 423.03 -316 799.72 423.03 -56 110.81 423.09 -56 371.77 423.09 -56 500.77 423.09 -56 709.04 423.09 -517 194.87 426.28 -517 313.41 426.28 -517 482.41 426.28 -517 714.46 426.28 -411 364.09 426.89 -411 519.60 426.89 -247 313.42 427.68 -247 353.08 427.68 -247 628.37 427.68 -652 228.75 434.75 -652 314.98 434.75 -652 365.90 434.75 -652 829.38 434.75 -129 301.69 436.45 -129 325.26 436.45 -129 550.47 436.45 -129 568.39 436.45 -99 164.24 438.66 -99 183.75 438.66 -99 1013.10 438.66 -235 111.64 441.03 -235 179.51 441.03 -235 493.83 441.03 -235 979.14 441.03 -360 143.83 445.41 -360 293.99 445.41 -360 928.51 445.41 -732 106.56 447.06 -732 300.77 447.06 -732 498.49 447.06 -732 882.44 447.06 -190 202.77 451.98 -190 233.10 451.98 -190 358.97 451.98 -190 1013.09 451.98 -147 212.53 455.89 -147 366.10 455.89 -147 553.92 455.89 -147 691.02 455.89 -665 283.25 456.08 -665 357.22 456.08 -665 691.20 456.08 -85 325.28 456.28 -85 350.10 456.28 -85 387.62 456.28 -85 762.12 456.28 +30 165.67 340.6350 +30 247.07 340.6350 +30 627.63 340.6350 +619 158.76 348.6400 +619 210.81 348.6400 +619 464.26 348.6400 +619 560.73 348.6400 +271 79.26 354.3300 +271 86.87 354.3300 +271 179.61 354.3300 +271 1071.58 354.3300 +827 82.44 356.5900 +827 320.05 356.5900 +827 666.52 356.5900 +296 188.61 369.1250 +296 265.76 369.1250 +296 655.24 369.1250 +308 200.28 385.9825 +308 214.07 385.9825 +308 489.17 385.9825 +308 640.41 385.9825 +486 178.80 400.5300 +486 455.08 400.5300 +486 468.01 400.5300 +486 500.23 400.5300 +554 191.48 407.9750 +554 346.80 407.9750 +554 660.97 407.9750 +208 151.84 410.3850 +208 207.02 410.3850 +208 533.75 410.3850 +208 748.93 410.3850 +662 199.83 412.1350 +662 300.61 412.1350 +662 460.94 412.1350 +662 687.16 412.1350 +394 264.65 413.4050 +394 272.02 413.4050 +394 674.12 413.4050 +221 183.63 416.0825 +221 534.62 416.0825 +221 552.44 416.0825 +621 232.20 418.1150 +621 624.80 418.1150 +507 76.98 419.4650 +507 505.36 419.4650 +507 644.24 419.4650 +316 36.25 423.0350 +316 158.85 423.0350 +316 697.32 423.0350 +316 799.72 423.0350 +56 110.81 423.0975 +56 371.77 423.0975 +56 500.77 423.0975 +56 709.04 423.0975 +517 194.87 426.2875 +517 313.41 426.2875 +517 482.41 426.2875 +517 714.46 426.2875 +411 364.09 426.8925 +411 519.60 426.8925 +247 313.42 427.6825 +247 353.08 427.6825 +247 628.37 427.6825 +652 228.75 434.7525 +652 314.98 434.7525 +652 365.90 434.7525 +652 829.38 434.7525 +129 301.69 436.4525 +129 325.26 436.4525 +129 550.47 436.4525 +129 568.39 436.4525 +99 164.24 438.6675 +99 183.75 438.6675 +99 393.58 438.6675 +99 1013.10 438.6675 +235 111.64 441.0300 +235 179.51 441.0300 +235 493.83 441.0300 +235 979.14 441.0300 +360 143.83 445.4150 +360 293.99 445.4150 +360 928.51 445.4150 +732 106.56 447.0650 +732 300.77 447.0650 +732 498.49 447.0650 +732 882.44 447.0650 +190 202.77 451.9825 +190 233.10 451.9825 +190 358.97 451.9825 +190 1013.09 451.9825 +147 212.53 455.8925 +147 366.10 455.8925 +147 553.92 455.8925 +147 691.02 455.8925 +665 283.25 456.0875 +665 357.22 456.0875 +665 691.20 456.0875 +85 325.28 456.2800 +85 350.10 456.2800 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q57.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q57.out index c88aa19a14a54f..f75ea388db16d7 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q57.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q57.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q57 -- -Shoes importoedu pack #1 North Midwest 1999 3 7101.78 2518.33 5264.86 3066.29 -Men edu packimporto #1 NY Metro 1999 4 7659.24 3227.88 4759.01 4664.83 -Music amalgscholar #1 Mid Atlantic 1999 1 6659.49 2291.60 14178.45 4267.08 -Men edu packimporto #1 NY Metro 1999 7 7659.24 3327.90 4566.86 11656.06 -Men importoimporto #1 North Midwest 1999 5 7640.49 3327.30 3534.12 5530.63 -Music edu packscholar #1 Mid Atlantic 1999 1 8223.71 3965.88 14493.32 4943.68 -Women amalgamalg #1 Mid Atlantic 1999 2 7116.32 2872.43 4945.20 2974.14 -Music exportischolar #1 NY Metro 1999 3 7047.80 2832.46 4308.87 3265.21 -Children importoexporti #1 NY Metro 1999 4 6809.59 2648.85 5318.02 4111.73 -Children importoexporti #1 Mid Atlantic 1999 5 6832.82 2687.17 3971.76 4235.84 -Music edu packscholar #1 North Midwest 1999 1 8078.69 3934.06 17002.72 4244.46 -Women amalgamalg #1 Mid Atlantic 1999 3 7116.32 2974.14 2872.43 4329.06 -Music edu packscholar #1 Mid Atlantic 1999 4 8223.71 4091.54 5753.94 4797.32 -Men importoimporto #1 NY Metro 1999 2 7530.99 3406.53 5839.59 6125.77 -Men edu packimporto #1 North Midwest 1999 3 7852.62 3737.23 4465.92 3831.92 -Shoes edu packedu pack #1 North Midwest 1999 5 6583.30 2474.01 3684.23 4335.58 -Men importoimporto #1 North Midwest 1999 4 7640.49 3534.12 4291.30 3327.30 -Children amalgexporti #1 NY Metro 1999 7 6518.75 2430.77 3203.23 7867.12 -Music amalgscholar #1 North Midwest 1999 5 6876.88 2816.26 4637.07 3528.80 -Shoes importoedu pack #1 North Midwest 1999 4 7101.78 3066.29 2518.33 5005.85 -Shoes edu packedu pack #1 NY Metro 1999 2 6421.79 2394.57 3149.35 4472.43 -Music edu packscholar #1 NY Metro 1999 7 7966.57 3944.74 5030.35 10791.61 -Men edu packimporto #1 North Midwest 1999 4 7852.62 3831.92 3737.23 4353.90 -Shoes importoedu pack #1 Mid Atlantic 1999 3 6959.93 2951.09 4142.26 3271.07 -Men amalgimporto #1 NY Metro 1999 7 7082.12 3075.18 5231.88 8953.66 -Shoes amalgedu pack #1 NY Metro 1999 7 6904.68 2902.26 4942.02 8793.71 -Men importoimporto #1 Mid Atlantic 1999 1 7357.06 3356.15 11222.19 3770.17 -Children exportiexporti #1 NY Metro 1999 7 7698.34 3714.25 4686.40 9752.38 -Children exportiexporti #1 North Midwest 1999 3 7530.37 3586.50 3960.74 3916.86 -Children amalgexporti #1 NY Metro 1999 4 6518.75 2587.68 4177.93 3342.60 -Music edu packscholar #1 North Midwest 1999 5 8078.69 4148.83 5184.39 5483.81 -Children exportiexporti #1 Mid Atlantic 1999 3 7245.28 3350.65 3876.83 5869.66 -Children exportiexporti #1 North Midwest 1999 1 7530.37 3645.95 13367.51 3960.74 -Shoes exportiedu pack #1 Mid Atlantic 1999 2 6885.32 3013.95 4139.82 4328.03 -Children importoexporti #1 North Midwest 1999 7 6690.09 2827.63 3965.68 7733.16 -Music edu packscholar #1 North Midwest 1999 2 8078.69 4244.46 3934.06 4448.50 -Men edu packimporto #1 Mid Atlantic 1999 1 7912.53 4082.68 14333.30 4383.51 -Children exportiexporti #1 NY Metro 1999 3 7698.34 3883.01 4723.97 4590.03 -Music exportischolar #1 Mid Atlantic 1999 2 7243.99 3430.04 3662.97 3617.09 -Music exportischolar #1 NY Metro 1999 1 7047.80 3237.56 15805.49 4308.87 -Music exportischolar #1 NY Metro 1999 4 7047.80 3265.21 2832.46 3885.17 -Music exportischolar #1 North Midwest 1999 2 7593.92 3821.24 4748.20 4271.45 -Men edu packimporto #1 Mid Atlantic 1999 4 7912.53 4144.67 4954.05 5070.06 -Music amalgscholar #1 NY Metro 1999 4 6926.06 3165.20 4688.23 4286.05 -Shoes amalgedu pack #1 Mid Atlantic 1999 3 6642.08 2928.82 3648.57 3892.32 -Music edu packscholar #1 NY Metro 1999 3 7966.57 4269.89 4384.51 4452.73 -Men amalgimporto #1 NY Metro 1999 2 7082.12 3392.25 4549.47 3653.84 -Shoes importoedu pack #1 Mid Atlantic 1999 4 6959.93 3271.07 2951.09 4231.88 -Music amalgscholar #1 North Midwest 1999 3 6876.88 3190.36 3536.29 4637.07 -Women importoamalg #1 Mid Atlantic 1999 1 6479.29 2804.94 13543.31 3515.21 -Shoes amalgedu pack #1 North Midwest 1999 6 6829.95 3178.20 4120.60 5910.98 -Men amalgimporto #1 NY Metro 1999 4 7082.12 3450.11 3653.84 5965.16 -Women edu packamalg #1 NY Metro 1999 4 6608.48 2976.95 3489.35 3812.22 -Music edu packscholar #1 North Midwest 1999 3 8078.69 4448.50 4244.46 5184.39 -Music amalgscholar #1 Mid Atlantic 1999 7 6659.49 3031.62 4214.81 9493.69 -Music exportischolar #1 Mid Atlantic 1999 3 7243.99 3617.09 3430.04 3871.67 -Men importoimporto #1 NY Metro 1999 7 7530.99 3913.80 4405.46 7859.96 -Children exportiexporti #1 North Midwest 1999 4 7530.37 3916.86 3586.50 4747.06 -Children importoexporti #1 NY Metro 1999 2 6809.59 3200.10 4421.85 5318.02 -Men importoimporto #1 Mid Atlantic 1999 2 7357.06 3770.17 3356.15 5114.32 -Children amalgexporti #1 North Midwest 1999 2 6557.57 2975.00 3418.40 5079.56 -Music edu packscholar #1 NY Metro 1999 2 7966.57 4384.51 5279.09 4269.89 -Music exportischolar #1 Mid Atlantic 1999 1 7243.99 3662.97 14285.88 3430.04 -Children exportiexporti #1 North Midwest 1999 2 7530.37 3960.74 3645.95 3586.50 -Men amalgimporto #1 Mid Atlantic 1999 1 6611.33 3066.19 11053.20 3203.24 -Women edu packamalg #1 Mid Atlantic 1999 4 6061.21 2522.22 2674.89 3975.90 -Shoes exportiedu pack #1 North Midwest 1999 4 7045.16 3509.17 5252.01 3987.99 -Men edu packimporto #1 North Midwest 1999 1 7852.62 4318.23 16397.10 4465.92 -Men edu packimporto #1 Mid Atlantic 1999 2 7912.53 4383.51 4082.68 4954.05 -Music edu packscholar #1 NY Metro 1999 4 7966.57 4452.73 4269.89 5476.13 -Children importoexporti #1 Mid Atlantic 1999 1 6832.82 3330.21 13097.88 3496.46 -Men edu packimporto #1 North Midwest 1999 5 7852.62 4353.90 3831.92 5689.03 -Women exportiamalg #1 Mid Atlantic 1999 2 6013.08 2536.08 3406.41 3718.65 -Music exportischolar #1 North Midwest 1999 4 7593.92 4121.47 4271.45 5234.85 -Music amalgscholar #1 North Midwest 1999 1 6876.88 3406.89 13714.11 3536.29 -Men importoimporto #1 NY Metro 1999 4 7530.99 4062.17 6125.77 4715.58 -Men exportiimporto #1 North Midwest 1999 5 5797.38 2330.52 2965.11 2842.02 -Children edu packexporti #1 Mid Atlantic 1999 3 6100.64 2633.95 3676.43 3130.51 -Men amalgimporto #1 North Midwest 1999 1 6713.82 3268.58 13596.45 4098.03 -Women exportiamalg #1 NY Metro 1999 4 6031.04 2588.60 3554.29 3915.46 -Men amalgimporto #1 NY Metro 1999 3 7082.12 3653.84 3392.25 3450.11 -Music edu packscholar #1 Mid Atlantic 1999 5 8223.71 4797.32 4091.54 5028.71 -Children exportiexporti #1 North Midwest 1999 6 7530.37 4104.53 4747.06 4586.73 -Women importoamalg #1 NY Metro 1999 4 6352.68 2928.62 3718.55 3387.14 -Men edu packimporto #1 NY Metro 1999 2 7659.24 4246.37 4489.63 4759.01 -Shoes edu packedu pack #1 Mid Atlantic 1999 3 6578.78 3166.49 4213.93 4376.74 -Shoes amalgedu pack #1 North Midwest 1999 4 6829.95 3417.69 3722.75 4120.60 -Women exportiamalg #1 North Midwest 1999 3 6171.54 2760.78 3853.84 3125.47 -Men amalgimporto #1 Mid Atlantic 1999 2 6611.33 3203.24 3066.19 4613.61 -Men edu packimporto #1 North Midwest 1999 2 7852.62 4465.92 4318.23 3737.23 -Women edu packamalg #1 Mid Atlantic 1999 3 6061.21 2674.89 3376.95 2522.22 -Music exportischolar #1 NY Metro 1999 6 7047.80 3667.60 3885.17 5088.70 -Children importoexporti #1 North Midwest 1999 3 6690.09 3310.89 3486.35 5014.28 -Music exportischolar #1 Mid Atlantic 1999 4 7243.99 3871.67 3617.09 4628.08 -Men importoimporto #1 North Midwest 1999 2 7640.49 4270.44 4931.98 4291.30 -Children exportiexporti #1 Mid Atlantic 1999 2 7245.28 3876.83 4799.92 3350.65 -Shoes exportiedu pack #1 North Midwest 1999 7 7045.16 3684.37 4372.20 8403.23 -Men importoimporto #1 North Midwest 1999 3 7640.49 4291.30 4270.44 3534.12 -Men amalgimporto #1 Mid Atlantic 1999 4 6611.33 3262.24 4613.61 4531.38 -Music amalgscholar #1 North Midwest 1999 6 6876.88 3528.80 2816.26 4750.85 +Shoes importoedu pack #1 North Midwest 1999 3 7101.7800 2518.33 5264.86 3066.29 +Men edu packimporto #1 NY Metro 1999 4 7659.2416 3227.88 4759.01 4664.83 +Music amalgscholar #1 Mid Atlantic 1999 1 6659.4933 2291.60 14178.45 4267.08 +Men edu packimporto #1 NY Metro 1999 7 7659.2416 3327.90 4566.86 11656.06 +Men importoimporto #1 North Midwest 1999 5 7640.4916 3327.30 3534.12 5530.63 +Music edu packscholar #1 Mid Atlantic 1999 1 8223.7191 3965.88 14493.32 4943.68 +Women amalgamalg #1 Mid Atlantic 1999 2 7116.3283 2872.43 4945.20 2974.14 +Music exportischolar #1 NY Metro 1999 3 7047.8033 2832.46 4308.87 3265.21 +Children importoexporti #1 NY Metro 1999 4 6809.5958 2648.85 5318.02 4111.73 +Children importoexporti #1 Mid Atlantic 1999 5 6832.8216 2687.17 3971.76 4235.84 +Music edu packscholar #1 North Midwest 1999 1 8078.6900 3934.06 17002.72 4244.46 +Women amalgamalg #1 Mid Atlantic 1999 3 7116.3283 2974.14 2872.43 4329.06 +Music edu packscholar #1 Mid Atlantic 1999 4 8223.7191 4091.54 5753.94 4797.32 +Men importoimporto #1 NY Metro 1999 2 7530.9975 3406.53 5839.59 6125.77 +Men edu packimporto #1 North Midwest 1999 3 7852.6275 3737.23 4465.92 3831.92 +Shoes edu packedu pack #1 North Midwest 1999 5 6583.3050 2474.01 3684.23 4335.58 +Men importoimporto #1 North Midwest 1999 4 7640.4916 3534.12 4291.30 3327.30 +Children amalgexporti #1 NY Metro 1999 7 6518.7508 2430.77 3203.23 7867.12 +Music amalgscholar #1 North Midwest 1999 5 6876.8808 2816.26 4637.07 3528.80 +Shoes importoedu pack #1 North Midwest 1999 4 7101.7800 3066.29 2518.33 5005.85 +Shoes edu packedu pack #1 NY Metro 1999 2 6421.7925 2394.57 3149.35 4472.43 +Music edu packscholar #1 NY Metro 1999 7 7966.5791 3944.74 5030.35 10791.61 +Men edu packimporto #1 North Midwest 1999 4 7852.6275 3831.92 3737.23 4353.90 +Shoes importoedu pack #1 Mid Atlantic 1999 3 6959.9341 2951.09 4142.26 3271.07 +Men amalgimporto #1 NY Metro 1999 7 7082.1291 3075.18 5231.88 8953.66 +Shoes amalgedu pack #1 NY Metro 1999 7 6904.6891 2902.26 4942.02 8793.71 +Men importoimporto #1 Mid Atlantic 1999 1 7357.0608 3356.15 11222.19 3770.17 +Children exportiexporti #1 NY Metro 1999 7 7698.3408 3714.25 4686.40 9752.38 +Children exportiexporti #1 North Midwest 1999 3 7530.3750 3586.50 3960.74 3916.86 +Children amalgexporti #1 NY Metro 1999 4 6518.7508 2587.68 4177.93 3342.60 +Music edu packscholar #1 North Midwest 1999 5 8078.6900 4148.83 5184.39 5483.81 +Children exportiexporti #1 Mid Atlantic 1999 3 7245.2850 3350.65 3876.83 5869.66 +Children exportiexporti #1 North Midwest 1999 1 7530.3750 3645.95 13367.51 3960.74 +Shoes exportiedu pack #1 Mid Atlantic 1999 2 6885.3208 3013.95 4139.82 4328.03 +Children importoexporti #1 North Midwest 1999 7 6690.0916 2827.63 3965.68 7733.16 +Music edu packscholar #1 North Midwest 1999 2 8078.6900 4244.46 3934.06 4448.50 +Men edu packimporto #1 Mid Atlantic 1999 1 7912.5375 4082.68 14333.30 4383.51 +Children exportiexporti #1 NY Metro 1999 3 7698.3408 3883.01 4723.97 4590.03 +Music exportischolar #1 Mid Atlantic 1999 2 7243.9941 3430.04 3662.97 3617.09 +Music exportischolar #1 NY Metro 1999 1 7047.8033 3237.56 15805.49 4308.87 +Music exportischolar #1 NY Metro 1999 4 7047.8033 3265.21 2832.46 3885.17 +Music exportischolar #1 North Midwest 1999 2 7593.9291 3821.24 4748.20 4271.45 +Men edu packimporto #1 Mid Atlantic 1999 4 7912.5375 4144.67 4954.05 5070.06 +Music amalgscholar #1 NY Metro 1999 4 6926.0608 3165.20 4688.23 4286.05 +Shoes amalgedu pack #1 Mid Atlantic 1999 3 6642.0858 2928.82 3648.57 3892.32 +Music edu packscholar #1 NY Metro 1999 3 7966.5791 4269.89 4384.51 4452.73 +Men amalgimporto #1 NY Metro 1999 2 7082.1291 3392.25 4549.47 3653.84 +Shoes importoedu pack #1 Mid Atlantic 1999 4 6959.9341 3271.07 2951.09 4231.88 +Music amalgscholar #1 North Midwest 1999 3 6876.8808 3190.36 3536.29 4637.07 +Women importoamalg #1 Mid Atlantic 1999 1 6479.2983 2804.94 13543.31 3515.21 +Shoes amalgedu pack #1 North Midwest 1999 6 6829.9566 3178.20 4120.60 5910.98 +Men amalgimporto #1 NY Metro 1999 4 7082.1291 3450.11 3653.84 5965.16 +Women edu packamalg #1 NY Metro 1999 4 6608.4858 2976.95 3489.35 3812.22 +Music edu packscholar #1 North Midwest 1999 3 8078.6900 4448.50 4244.46 5184.39 +Music amalgscholar #1 Mid Atlantic 1999 7 6659.4933 3031.62 4214.81 9493.69 +Music exportischolar #1 Mid Atlantic 1999 3 7243.9941 3617.09 3430.04 3871.67 +Men importoimporto #1 NY Metro 1999 7 7530.9975 3913.80 4405.46 7859.96 +Children exportiexporti #1 North Midwest 1999 4 7530.3750 3916.86 3586.50 4747.06 +Children importoexporti #1 NY Metro 1999 2 6809.5958 3200.10 4421.85 5318.02 +Men importoimporto #1 Mid Atlantic 1999 2 7357.0608 3770.17 3356.15 5114.32 +Children amalgexporti #1 North Midwest 1999 2 6557.5775 2975.00 3418.40 5079.56 +Music edu packscholar #1 NY Metro 1999 2 7966.5791 4384.51 5279.09 4269.89 +Music exportischolar #1 Mid Atlantic 1999 1 7243.9941 3662.97 14285.88 3430.04 +Children exportiexporti #1 North Midwest 1999 2 7530.3750 3960.74 3645.95 3586.50 +Men amalgimporto #1 Mid Atlantic 1999 1 6611.3358 3066.19 11053.20 3203.24 +Women edu packamalg #1 Mid Atlantic 1999 4 6061.2108 2522.22 2674.89 3975.90 +Shoes exportiedu pack #1 North Midwest 1999 4 7045.1641 3509.17 5252.01 3987.99 +Men edu packimporto #1 North Midwest 1999 1 7852.6275 4318.23 16397.10 4465.92 +Men edu packimporto #1 Mid Atlantic 1999 2 7912.5375 4383.51 4082.68 4954.05 +Music edu packscholar #1 NY Metro 1999 4 7966.5791 4452.73 4269.89 5476.13 +Children importoexporti #1 Mid Atlantic 1999 1 6832.8216 3330.21 13097.88 3496.46 +Men edu packimporto #1 North Midwest 1999 5 7852.6275 4353.90 3831.92 5689.03 +Women exportiamalg #1 Mid Atlantic 1999 2 6013.0883 2536.08 3406.41 3718.65 +Music exportischolar #1 North Midwest 1999 4 7593.9291 4121.47 4271.45 5234.85 +Music amalgscholar #1 North Midwest 1999 1 6876.8808 3406.89 13714.11 3536.29 +Men importoimporto #1 NY Metro 1999 4 7530.9975 4062.17 6125.77 4715.58 +Men exportiimporto #1 North Midwest 1999 5 5797.3825 2330.52 2965.11 2842.02 +Children edu packexporti #1 Mid Atlantic 1999 3 6100.6433 2633.95 3676.43 3130.51 +Men amalgimporto #1 North Midwest 1999 1 6713.8200 3268.58 13596.45 4098.03 +Women exportiamalg #1 NY Metro 1999 4 6031.0425 2588.60 3554.29 3915.46 +Men amalgimporto #1 NY Metro 1999 3 7082.1291 3653.84 3392.25 3450.11 +Music edu packscholar #1 Mid Atlantic 1999 5 8223.7191 4797.32 4091.54 5028.71 +Children exportiexporti #1 North Midwest 1999 6 7530.3750 4104.53 4747.06 4586.73 +Women importoamalg #1 NY Metro 1999 4 6352.6825 2928.62 3718.55 3387.14 +Men edu packimporto #1 NY Metro 1999 2 7659.2416 4246.37 4489.63 4759.01 +Shoes edu packedu pack #1 Mid Atlantic 1999 3 6578.7858 3166.49 4213.93 4376.74 +Shoes amalgedu pack #1 North Midwest 1999 4 6829.9566 3417.69 3722.75 4120.60 +Women exportiamalg #1 North Midwest 1999 3 6171.5441 2760.78 3853.84 3125.47 +Men amalgimporto #1 Mid Atlantic 1999 2 6611.3358 3203.24 3066.19 4613.61 +Men edu packimporto #1 North Midwest 1999 2 7852.6275 4465.92 4318.23 3737.23 +Women edu packamalg #1 Mid Atlantic 1999 3 6061.2108 2674.89 3376.95 2522.22 +Music exportischolar #1 NY Metro 1999 6 7047.8033 3667.60 3885.17 5088.70 +Children importoexporti #1 North Midwest 1999 3 6690.0916 3310.89 3486.35 5014.28 +Music exportischolar #1 Mid Atlantic 1999 4 7243.9941 3871.67 3617.09 4628.08 +Men importoimporto #1 North Midwest 1999 2 7640.4916 4270.44 4931.98 4291.30 +Children exportiexporti #1 Mid Atlantic 1999 2 7245.2850 3876.83 4799.92 3350.65 +Shoes exportiedu pack #1 North Midwest 1999 7 7045.1641 3684.37 4372.20 8403.23 +Men importoimporto #1 North Midwest 1999 3 7640.4916 4291.30 4270.44 3534.12 +Men amalgimporto #1 Mid Atlantic 1999 4 6611.3358 3262.24 4613.61 4531.38 +Music amalgscholar #1 North Midwest 1999 6 6876.8808 3528.80 2816.26 4750.85 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q63.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q63.out index d9fa1b704555f2..cf62ab754534b9 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q63.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q63.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q63 -- -1 189.04 531.91 -1 203.73 531.91 -1 355.17 531.91 -1 359.53 531.91 -1 365.84 531.91 -1 373.26 531.91 -1 430.03 531.91 -1 698.60 531.91 -1 909.18 531.91 -1 995.02 531.91 -1 998.95 531.91 -2 34.79 625.03 -2 143.64 625.03 -2 253.85 625.03 -2 359.05 625.03 -2 445.59 625.03 -2 499.99 625.03 -2 538.36 625.03 -2 780.07 625.03 -2 1487.82 625.03 -2 1660.48 625.03 -3 270.10 988.29 -3 367.94 988.29 -3 491.20 988.29 -3 529.42 988.29 -3 629.34 988.29 -3 757.70 988.29 -3 1161.47 988.29 -3 1234.30 988.29 -3 1251.01 988.29 -3 1522.49 988.29 -3 2624.04 988.29 -5 353.24 1169.48 -5 581.28 1169.48 -5 694.79 1169.48 -5 696.66 1169.48 -5 740.99 1169.48 -5 890.86 1169.48 -5 955.61 1169.48 -5 1359.61 1169.48 -5 1712.35 1169.48 -5 1794.66 1169.48 -5 2080.16 1169.48 -5 2173.58 1169.48 -6 644.61 1772.99 -6 851.23 1772.99 -6 868.62 1772.99 -6 1056.06 1772.99 -6 1150.40 1772.99 -6 1196.50 1772.99 -6 1551.15 1772.99 -6 2576.64 1772.99 -6 2875.54 1772.99 -6 3299.70 1772.99 -6 3309.13 1772.99 -7 638.30 1499.65 -7 663.54 1499.65 -7 779.65 1499.65 -7 800.25 1499.65 -7 811.54 1499.65 -7 987.78 1499.65 -7 1046.24 1499.65 -7 1667.92 1499.65 -7 2750.32 1499.65 -7 2970.80 1499.65 -7 3524.00 1499.65 -8 803.53 1618.95 -8 819.18 1618.95 -8 933.76 1618.95 -8 944.19 1618.95 -8 1019.24 1618.95 -8 1159.06 1618.95 -8 1290.94 1618.95 -8 2168.17 1618.95 -8 2264.18 1618.95 -8 3033.41 1618.95 -8 3213.77 1618.95 -9 315.31 1509.97 -9 559.82 1509.97 -9 728.72 1509.97 -9 784.15 1509.97 -9 923.36 1509.97 -9 933.68 1509.97 -9 1239.49 1509.97 -9 1848.85 1509.97 -9 2172.04 1509.97 -9 2178.07 1509.97 -9 3165.98 1509.97 -9 3270.26 1509.97 -10 314.30 1125.25 -10 365.57 1125.25 -10 591.30 1125.25 -10 760.81 1125.25 -10 776.91 1125.25 -10 959.65 1125.25 -10 975.25 1125.25 -10 1294.20 1125.25 -10 1342.05 1125.25 -10 1914.64 1125.25 -10 3105.53 1125.25 +1 189.04 531.9191 +1 203.73 531.9191 +1 355.17 531.9191 +1 359.53 531.9191 +1 365.84 531.9191 +1 373.26 531.9191 +1 430.03 531.9191 +1 698.60 531.9191 +1 909.18 531.9191 +1 995.02 531.9191 +1 998.95 531.9191 +2 34.79 625.0316 +2 143.64 625.0316 +2 253.85 625.0316 +2 359.05 625.0316 +2 445.59 625.0316 +2 499.99 625.0316 +2 538.36 625.0316 +2 780.07 625.0316 +2 1487.82 625.0316 +2 1660.48 625.0316 +3 270.10 988.2933 +3 367.94 988.2933 +3 491.20 988.2933 +3 529.42 988.2933 +3 629.34 988.2933 +3 757.70 988.2933 +3 1161.47 988.2933 +3 1234.30 988.2933 +3 1251.01 988.2933 +3 1522.49 988.2933 +3 2624.04 988.2933 +5 353.24 1169.4825 +5 581.28 1169.4825 +5 694.79 1169.4825 +5 696.66 1169.4825 +5 740.99 1169.4825 +5 890.86 1169.4825 +5 955.61 1169.4825 +5 1359.61 1169.4825 +5 1712.35 1169.4825 +5 1794.66 1169.4825 +5 2080.16 1169.4825 +5 2173.58 1169.4825 +6 644.61 1772.9983 +6 851.23 1772.9983 +6 868.62 1772.9983 +6 1056.06 1772.9983 +6 1150.40 1772.9983 +6 1196.50 1772.9983 +6 1551.15 1772.9983 +6 2576.64 1772.9983 +6 2875.54 1772.9983 +6 3299.70 1772.9983 +6 3309.13 1772.9983 +7 638.30 1499.6575 +7 663.54 1499.6575 +7 779.65 1499.6575 +7 800.25 1499.6575 +7 811.54 1499.6575 +7 987.78 1499.6575 +7 1046.24 1499.6575 +7 1667.92 1499.6575 +7 2750.32 1499.6575 +7 2970.80 1499.6575 +7 3524.00 1499.6575 +8 803.53 1618.9541 +8 819.18 1618.9541 +8 933.76 1618.9541 +8 944.19 1618.9541 +8 1019.24 1618.9541 +8 1159.06 1618.9541 +8 1290.94 1618.9541 +8 2168.17 1618.9541 +8 2264.18 1618.9541 +8 3033.41 1618.9541 +8 3213.77 1618.9541 +9 315.31 1509.9775 +9 559.82 1509.9775 +9 728.72 1509.9775 +9 784.15 1509.9775 +9 923.36 1509.9775 +9 933.68 1509.9775 +9 1239.49 1509.9775 +9 1848.85 1509.9775 +9 2172.04 1509.9775 +9 2178.07 1509.9775 +9 3165.98 1509.9775 +9 3270.26 1509.9775 +10 314.30 1125.2591 +10 365.57 1125.2591 +10 591.30 1125.2591 +10 760.81 1125.2591 +10 776.91 1125.2591 +10 959.65 1125.2591 +10 975.25 1125.2591 +10 1294.20 1125.2591 +10 1342.05 1125.2591 +10 1914.64 1125.2591 +10 3105.53 1125.2591 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q75.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q75.out index 4e80b1cc9f9023..667ee26390cc3f 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q75.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q75.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q75 -- -2001 2002 9011004 11 9 730 6136 3927 -2209 -64592.86000000016 -2001 2002 9004008 4 9 454 6130 4012 -2118 -137401.99000000008 -2001 2002 9006010 6 9 373 6584 4510 -2074 -56824.26999999999 -2001 2002 9003002 3 9 331 6314 4249 -2065 -162310.8699999999 -2001 2002 9016002 16 9 761 6098 4109 -1989 -75674.23000000007 -2001 2002 2001001 7 9 85 5689 3750 -1939 -79485.06999999986 -2001 2002 9011010 11 9 254 6635 4698 -1937 -108841.58999999991 -2001 2002 9003002 3 9 1000 6152 4220 -1932 -51341.51999999993 -2001 2002 9009010 1 9 311 6980 5065 -1915 -166624.10000000006 -2001 2002 9003004 3 9 25 6382 4612 -1770 -109080.79999999993 -2001 2002 9008008 8 9 322 5391 3664 -1727 -58283.91 -2001 2002 3004001 1 9 89 6307 4616 -1691 -105539.09999999983 -2001 2002 9014004 12 9 423 6427 4742 -1685 -66528.45000000004 -2001 2002 1001001 5 9 172 5642 3998 -1644 -65808.52000000008 -2001 2002 8007009 9 9 322 5493 3906 -1587 -31458.78 -2001 2002 9015002 15 9 303 5722 4211 -1511 -81847.95000000004 -2001 2002 8015003 4 9 289 6413 4905 -1508 -140884.23000000019 -2001 2002 9002008 2 9 202 5758 4287 -1471 -27415.179999999993 -2001 2002 9004002 4 9 55 5596 4196 -1400 -277.9199999998964 -2001 2002 9010002 10 9 432 5153 3767 -1386 -56643.31000000003 -2001 2002 9015003 15 9 278 5120 3745 -1375 -61503.40000000005 -2001 2002 5001001 10 9 136 5271 3918 -1353 -52691.74000000005 -2001 2002 9007002 7 9 207 6416 5088 -1328 -28312.29000000024 -2001 2002 9016004 8 9 114 5560 4263 -1297 -65169.899999999994 -2001 2002 9007004 7 9 968 5625 4330 -1295 -86120.29999999987 -2001 2002 9008008 8 9 535 6155 4861 -1294 -66647.47000000015 -2001 2002 3003001 1 9 175 6170 4892 -1278 -72260.63999999984 -2001 2002 9010004 3 9 948 5640 4387 -1253 -34985.50999999989 +2001 2002 9011004 11 9 730 6136 3927 -2209 -64592.85999999996 +2001 2002 9004008 4 9 454 6130 4012 -2118 -137401.99000000005 +2001 2002 9006010 6 9 373 6584 4510 -2074 -56824.26999999993 +2001 2002 9003002 3 9 331 6314 4249 -2065 -162310.86999999994 +2001 2002 9016002 16 9 761 6098 4109 -1989 -75674.22999999992 +2001 2002 2001001 7 9 85 5689 3750 -1939 -79485.06999999995 +2001 2002 9011010 11 9 254 6635 4698 -1937 -108841.58999999997 +2001 2002 9003002 3 9 1000 6152 4220 -1932 -51341.52000000002 +2001 2002 9009010 1 9 311 6980 5065 -1915 -166624.09999999998 +2001 2002 9003004 3 9 25 6382 4612 -1770 -109080.79999999987 +2001 2002 9008008 8 9 322 5391 3664 -1727 -58283.91000000003 +2001 2002 3004001 1 9 89 6307 4616 -1691 -105539.1000000001 +2001 2002 9014004 12 9 423 6427 4742 -1685 -66528.44999999992 +2001 2002 1001001 5 9 172 5642 3998 -1644 -65808.52000000005 +2001 2002 8007009 9 9 322 5493 3906 -1587 -31458.77999999997 +2001 2002 9015002 15 9 303 5722 4211 -1511 -81847.95000000001 +2001 2002 8015003 4 9 289 6413 4905 -1508 -140884.23000000004 +2001 2002 9002008 2 9 202 5758 4287 -1471 -27415.18000000008 +2001 2002 9004002 4 9 55 5596 4196 -1400 -277.9199999999837 +2001 2002 9010002 10 9 432 5153 3767 -1386 -56643.31 +2001 2002 9015003 15 9 278 5120 3745 -1375 -61503.399999999965 +2001 2002 5001001 10 9 136 5271 3918 -1353 -52691.73999999996 +2001 2002 9007002 7 9 207 6416 5088 -1328 -28312.290000000037 +2001 2002 9016004 8 9 114 5560 4263 -1297 -65169.899999999965 +2001 2002 9007004 7 9 968 5625 4330 -1295 -86120.30000000005 +2001 2002 9008008 8 9 535 6155 4861 -1294 -66647.46999999991 +2001 2002 3003001 1 9 175 6170 4892 -1278 -72260.64000000001 +2001 2002 9010004 3 9 948 5640 4387 -1253 -34985.50999999998 2001 2002 9012008 12 9 249 5254 4002 -1252 -15484.879999999946 -2001 2002 9015008 15 9 281 5558 4315 -1243 10022.91000000012 -2001 2002 9006004 6 9 620 4822 3594 -1228 -19309.880000000063 -2001 2002 9010008 10 9 171 6500 5279 -1221 -73654.23000000004 -2001 2002 9004008 4 9 256 5366 4164 -1202 -93628.45999999985 -2001 2002 9008008 8 9 82 6042 4852 -1190 -78558.0499999999 -2001 2002 9014010 2 9 727 6579 5396 -1183 -45368.939999999915 -2001 2002 10002014 1 9 12 5662 4515 -1147 -47170.70000000016 -2001 2002 9005002 5 9 105 5650 4508 -1142 -75927.60999999996 -2001 2002 1001001 1 9 183 5538 4417 -1121 -34086.49000000002 -2001 2002 8015005 11 9 898 5677 4557 -1120 -49916.130000000034 -2001 2002 9016010 16 9 662 5306 4197 -1109 -29664.54999999999 -2001 2002 2001001 1 9 151 6309 5200 -1109 -13881.979999999894 -2001 2002 7007001 12 9 221 6250 5147 -1103 8445.219999999914 -2001 2002 9010008 10 9 106 5739 4637 -1102 -39967.26000000004 +2001 2002 9015008 15 9 281 5558 4315 -1243 10022.909999999974 +2001 2002 9006004 6 9 620 4822 3594 -1228 -19309.880000000005 +2001 2002 9010008 10 9 171 6500 5279 -1221 -73654.23000000001 +2001 2002 9004008 4 9 256 5366 4164 -1202 -93628.45999999996 +2001 2002 9008008 8 9 82 6042 4852 -1190 -78558.05000000005 +2001 2002 9014010 2 9 727 6579 5396 -1183 -45368.94 +2001 2002 10002014 1 9 12 5662 4515 -1147 -47170.69999999998 +2001 2002 9005002 5 9 105 5650 4508 -1142 -75927.61000000013 +2001 2002 1001001 1 9 183 5538 4417 -1121 -34086.48999999999 +2001 2002 8015005 11 9 898 5677 4557 -1120 -49916.129999999976 +2001 2002 9016010 16 9 662 5306 4197 -1109 -29664.550000000017 +2001 2002 2001001 1 9 151 6309 5200 -1109 -13881.98000000001 +2001 2002 7007001 12 9 221 6250 5147 -1103 8445.219999999972 +2001 2002 9010008 10 9 106 5739 4637 -1102 -39967.25999999998 2001 2002 5001001 6 9 201 5714 4615 -1099 -2073.6100000000442 -2001 2002 9002004 2 9 578 5976 4881 -1095 -26222.7000000001 -2001 2002 9013010 12 9 28 5672 4579 -1093 -61365.09999999989 -2001 2002 9003002 3 9 238 5784 4694 -1090 -52094.92999999979 -2001 2002 9012010 12 9 4 6214 5128 -1086 -41244.90000000014 -2001 2002 4003001 6 9 356 5890 4815 -1075 -19594.679999999964 -2001 2002 9009002 9 9 633 5839 4786 -1053 -40163.90000000002 -2001 2002 9006010 6 9 100 5322 4271 -1051 -65656.49000000005 +2001 2002 9002004 2 9 578 5976 4881 -1095 -26222.699999999924 +2001 2002 9013010 12 9 28 5672 4579 -1093 -61365.100000000006 +2001 2002 9003002 3 9 238 5784 4694 -1090 -52094.93000000005 +2001 2002 9012010 12 9 4 6214 5128 -1086 -41244.899999999994 +2001 2002 4003001 6 9 356 5890 4815 -1075 -19594.680000000022 +2001 2002 9009002 9 9 633 5839 4786 -1053 -40163.899999999965 +2001 2002 9006010 6 9 100 5322 4271 -1051 -65656.48999999999 2001 2002 9003002 3 9 130 5708 4658 -1050 -121435.04999999999 -2001 2002 9011004 3 9 115 5101 4064 -1037 -38404.06999999989 -2001 2002 9006008 6 9 156 5824 4793 -1031 -16295.150000000081 -2001 2002 4004001 10 9 105 5560 4533 -1027 -29705.360000000044 -2001 2002 9009008 9 9 3 5731 4718 -1013 -62660.47999999992 -2001 2002 10005001 5 9 65 5890 4879 -1011 -57577.01000000007 -2001 2002 9007008 7 9 122 6085 5077 -1008 -108804.85999999996 -2001 2002 9001008 1 9 258 5714 4706 -1008 -73311.06999999995 +2001 2002 9011004 3 9 115 5101 4064 -1037 -38404.06999999998 +2001 2002 9006008 6 9 156 5824 4793 -1031 -16295.149999999994 +2001 2002 4004001 10 9 105 5560 4533 -1027 -29705.360000000015 +2001 2002 9009008 9 9 3 5731 4718 -1013 -62660.48000000004 +2001 2002 10005001 5 9 65 5890 4879 -1011 -57577.01000000004 +2001 2002 9007008 7 9 122 6085 5077 -1008 -108804.85999999999 +2001 2002 9001008 1 9 258 5714 4706 -1008 -73311.06999999998 2001 2002 9003008 3 9 382 5145 4143 -1002 -23005.47999999998 2001 2002 2001001 1 9 177 5711 4718 -993 -45422.40000000002 -2001 2002 8002001 13 9 268 5521 4545 -976 -50681.489999999845 -2001 2002 9010008 10 9 9 5549 4578 -971 45104.78999999992 -2001 2002 5002001 2 9 230 5856 4887 -969 -25537.870000000083 -2001 2002 10015001 1 9 399 6188 5225 -963 -76365.38999999998 -2001 2002 9010004 10 9 110 5035 4082 -953 -81282.11999999976 -2001 2002 9013010 3 9 235 5771 4821 -950 -81516.67000000004 +2001 2002 8002001 13 9 268 5521 4545 -976 -50681.48999999999 +2001 2002 9010008 10 9 9 5549 4578 -971 45104.78999999998 +2001 2002 5002001 2 9 230 5856 4887 -969 -25537.869999999966 +2001 2002 10015001 1 9 399 6188 5225 -963 -76365.39000000001 +2001 2002 9010004 10 9 110 5035 4082 -953 -81282.12 +2001 2002 9013010 3 9 235 5771 4821 -950 -81516.66999999998 2001 2002 9003004 3 9 311 5414 4467 -947 -19498.97999999998 -2001 2002 9007008 7 9 766 5412 4470 -942 -43150.75999999995 -2001 2002 3003001 9 9 210 5703 4761 -942 -22794.72000000006 +2001 2002 9007008 7 9 766 5412 4470 -942 -43150.76000000007 +2001 2002 3003001 9 9 210 5703 4761 -942 -22794.72 2001 2002 9010008 10 9 621 5897 4955 -942 -1466.7500000000873 -2001 2002 4001001 15 9 42 5385 4444 -941 -77081.27000000008 -2001 2002 9012010 12 9 268 5363 4425 -938 -13775.609999999928 -2001 2002 4002001 2 9 891 6168 5233 -935 -54473.399999999965 -2001 2002 10011013 11 9 123 6141 5207 -934 -77290.63000000003 -2001 2002 9005002 5 9 379 5673 4742 -931 -66550.23999999999 -2001 2002 9005002 5 9 35 6085 5166 -919 -23898.750000000204 -2001 2002 9014008 14 9 904 5637 4725 -912 -54696.64000000007 -2001 2002 9010002 10 9 351 5553 4668 -885 -58399.99000000002 -2001 2002 9002008 2 9 603 5399 4518 -881 -8944.740000000107 -2001 2002 9005002 5 9 226 6438 5559 -879 -78309.56000000032 -2001 2002 9016008 16 9 134 5482 4617 -865 -93343.25000000009 -2001 2002 7004007 2 9 248 5385 4527 -858 -59997.870000000024 +2001 2002 4001001 15 9 42 5385 4444 -941 -77081.26999999996 +2001 2002 9012010 12 9 268 5363 4425 -938 -13775.610000000015 +2001 2002 4002001 2 9 891 6168 5233 -935 -54473.40000000002 +2001 2002 10011013 11 9 123 6141 5207 -934 -77290.63 +2001 2002 9005002 5 9 379 5673 4742 -931 -66550.24000000002 +2001 2002 9005002 5 9 35 6085 5166 -919 -23898.75 +2001 2002 9014008 14 9 904 5637 4725 -912 -54696.640000000014 +2001 2002 9010002 10 9 351 5553 4668 -885 -58399.98999999993 +2001 2002 9002008 2 9 603 5399 4518 -881 -8944.739999999932 +2001 2002 9005002 5 9 226 6438 5559 -879 -78309.55999999994 +2001 2002 9016008 16 9 134 5482 4617 -865 -93343.24999999997 +2001 2002 7004007 2 9 248 5385 4527 -858 -59997.869999999995 2001 2002 9002002 2 9 556 5690 4832 -858 2965.469999999972 -2001 2002 6012003 9 9 48 5468 4620 -848 17912.880000000063 -2001 2002 9013010 13 9 288 5473 4631 -842 22917.879999999946 -2001 2002 9009008 9 9 958 5837 5002 -835 -63092.61999999988 -2001 2002 9015008 15 9 384 5348 4519 -829 -29937.399999999965 -2001 2002 1003001 3 9 242 5504 4697 -807 -10853.560000000056 -2001 2002 9011002 11 9 372 5085 4279 -806 -78551.75000000003 -2001 2002 9015002 15 9 224 5915 5112 -803 -46136.850000000035 +2001 2002 6012003 9 9 48 5468 4620 -848 17912.880000000034 +2001 2002 9013010 13 9 288 5473 4631 -842 22917.880000000005 +2001 2002 9009008 9 9 958 5837 5002 -835 -63092.619999999995 +2001 2002 9015008 15 9 384 5348 4519 -829 -29937.399999999994 +2001 2002 1003001 3 9 242 5504 4697 -807 -10853.559999999998 +2001 2002 9011002 11 9 372 5085 4279 -806 -78551.74999999997 +2001 2002 9015002 15 9 224 5915 5112 -803 -46136.84999999995 2001 2002 9015002 15 9 531 5831 5029 -802 -10846.840000000026 -2001 2002 2004001 16 9 443 5269 4475 -794 -28869.67999999982 -2001 2002 9003010 3 9 269 6297 5505 -792 -53827.19000000018 -2001 2002 9007002 7 9 306 5398 4608 -790 -67953.64000000013 -2001 2002 9012004 12 9 808 5796 5006 -790 -43025.36000000007 -2001 2002 6015001 15 9 543 5041 4252 -789 3631.4000000000524 +2001 2002 2004001 16 9 443 5269 4475 -794 -28869.679999999964 +2001 2002 9003010 3 9 269 6297 5505 -792 -53827.19 +2001 2002 9007002 7 9 306 5398 4608 -790 -67953.63999999998 +2001 2002 9012004 12 9 808 5796 5006 -790 -43025.359999999986 +2001 2002 6015001 15 9 543 5041 4252 -789 3631.399999999994 2001 2002 9004012 4 9 621 5974 5186 -788 52156.56 -2001 2002 9010008 10 9 284 5382 4597 -785 22162.920000000042 -2001 2002 9011002 11 9 42 5750 4968 -782 -87125.32999999996 +2001 2002 9010008 10 9 284 5382 4597 -785 22162.919999999955 +2001 2002 9011002 11 9 42 5750 4968 -782 -87125.33000000002 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q85.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q85.out index b89a0bfddcf739..f3cc88d1a35819 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q85.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q85.out @@ -1,9 +1,9 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q85 -- -Gift exchange 76.0 464.36 8.62 -Not the product that 70.0 876.67 46.67 -Parts missing 7.0 129.42 38.65 -reason 23 47.0 734.61 6.17 -reason 25 5.0 48.94 53.14 -reason 28 8.0 306.20 37.06 +Gift exchange 76.0 464.3600 8.6200 +Not the product that 70.0 876.6700 46.6700 +Parts missing 7.0 129.4200 38.6500 +reason 23 47.0 734.6100 6.1700 +reason 25 5.0 48.9400 53.1450 +reason 28 8.0 306.2000 37.0600 diff --git a/regression-test/data/datev2/tpcds_sf1_p1/sql/q89.out b/regression-test/data/datev2/tpcds_sf1_p1/sql/q89.out index 9935165fe98b1c..fab8ef69dc3044 100644 --- a/regression-test/data/datev2/tpcds_sf1_p1/sql/q89.out +++ b/regression-test/data/datev2/tpcds_sf1_p1/sql/q89.out @@ -1,103 +1,103 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q89 -- -Men shirts importoimporto #1 ese Unknown 3 2070.65 5492.81 -Men shirts importoimporto #1 ought Unknown 6 2152.15 5045.75 -Men shirts importoimporto #1 able Unknown 2 2333.43 5194.81 -Men shirts importoimporto #1 ese Unknown 6 2691.33 5492.81 -Men shirts importoimporto #1 ought Unknown 2 2253.70 5045.75 -Women dresses amalgamalg #1 able Unknown 6 1761.81 4507.24 -Men shirts importoimporto #1 ation Unknown 3 2672.68 5410.91 -Men shirts importoimporto #1 ation Unknown 5 2677.81 5410.91 -Men shirts importoimporto #1 eing Unknown 5 2356.88 5074.07 -Men shirts importoimporto #1 ese Unknown 4 2784.11 5492.81 -Women dresses amalgamalg #1 ought Unknown 7 1926.67 4619.70 -Women dresses amalgamalg #1 ought Unknown 1 2065.94 4619.70 -Men shirts importoimporto #1 ation Unknown 6 2881.34 5410.91 -Men shirts importoimporto #1 able Unknown 3 2674.91 5194.81 -Women dresses amalgamalg #1 ation Unknown 2 2192.31 4690.89 -Men shirts importoimporto #1 bar Unknown 5 2475.90 4973.50 -Women dresses amalgamalg #1 ese Unknown 2 2146.52 4642.99 -Men shirts importoimporto #1 eing Unknown 2 2588.02 5074.07 -Women dresses amalgamalg #1 bar Unknown 7 2428.75 4914.11 -Women dresses amalgamalg #1 bar Unknown 3 2451.51 4914.11 -Men shirts importoimporto #1 ation Unknown 7 2951.67 5410.91 -Men shirts importoimporto #1 able Unknown 1 2765.75 5194.81 -Women dresses amalgamalg #1 able Unknown 2 2082.54 4507.24 -Men shirts importoimporto #1 ation Unknown 4 2988.08 5410.91 -Men shirts importoimporto #1 ought Unknown 7 2667.92 5045.75 -Women dresses amalgamalg #1 bar Unknown 4 2549.27 4914.11 -Women dresses amalgamalg #1 ese Unknown 7 2307.00 4642.99 -Women dresses amalgamalg #1 eing Unknown 4 2204.15 4528.82 -Men shirts importoimporto #1 able Unknown 7 2880.34 5194.81 -Men shirts importoimporto #1 ese Unknown 5 3210.74 5492.81 -Women dresses amalgamalg #1 ation Unknown 4 2418.39 4690.89 -Men shirts importoimporto #1 eing Unknown 4 2833.40 5074.07 -Women dresses amalgamalg #1 bar Unknown 2 2692.79 4914.11 -Men shirts importoimporto #1 eing Unknown 6 2854.62 5074.07 -Women dresses amalgamalg #1 eing Unknown 6 2314.71 4528.82 -Men shirts importoimporto #1 ought Unknown 5 2834.94 5045.75 -Women dresses amalgamalg #1 ation Unknown 5 2480.25 4690.89 -Women dresses amalgamalg #1 able Unknown 7 2302.21 4507.24 -Women dresses amalgamalg #1 ation Unknown 6 2501.15 4690.89 -Men shirts importoimporto #1 ese Unknown 2 3307.78 5492.81 -Men shirts importoimporto #1 able Unknown 5 3016.43 5194.81 -Men shirts importoimporto #1 able Unknown 4 3040.23 5194.81 -Women dresses amalgamalg #1 eing Unknown 5 2420.31 4528.82 -Women dresses amalgamalg #1 ese Unknown 5 2535.80 4642.99 -Women dresses amalgamalg #1 ought Unknown 2 2521.70 4619.70 -Men shirts importoimporto #1 bar Unknown 3 2877.96 4973.50 -Women dresses amalgamalg #1 ese Unknown 3 2577.15 4642.99 -Women dresses amalgamalg #1 ation Unknown 7 2637.27 4690.89 -Men shirts importoimporto #1 ation Unknown 1 3380.16 5410.91 -Women dresses amalgamalg #1 eing Unknown 7 2524.32 4528.82 -Men shirts importoimporto #1 bar Unknown 4 2986.70 4973.50 -Women dresses amalgamalg #1 ought Unknown 4 2648.80 4619.70 -Men shirts importoimporto #1 bar Unknown 7 3026.41 4973.50 -Women dresses amalgamalg #1 ation Unknown 3 2751.11 4690.89 -Men shirts importoimporto #1 bar Unknown 2 3073.45 4973.50 -Men shirts importoimporto #1 eing Unknown 3 3179.96 5074.07 -Women dresses amalgamalg #1 ation Unknown 1 2797.07 4690.89 -Women dresses amalgamalg #1 able Unknown 1 2621.05 4507.24 -Women dresses amalgamalg #1 ese Unknown 4 2808.36 4642.99 -Women dresses amalgamalg #2 bar Unknown 6 680.47 2506.96 -Men shirts importoimporto #1 ation Unknown 2 3591.65 5410.91 -Women dresses amalgamalg #1 able Unknown 3 2706.15 4507.24 -Women dresses amalgamalg #2 eing Unknown 2 773.08 2569.34 -Men shirts importoimporto #1 bar Unknown 6 3199.08 4973.50 -Men shirts importoimporto #1 ese Unknown 7 3754.33 5492.81 -Women dresses amalgamalg #1 bar Unknown 5 3190.77 4914.11 -Women dresses amalgamalg #1 eing Unknown 2 2841.88 4528.82 -Men shirts importoimporto #1 able Unknown 6 3538.25 5194.81 -Women dresses amalgamalg #1 ese Unknown 6 3006.94 4642.99 -Women dresses amalgamalg #1 bar Unknown 1 3284.93 4914.11 -Women dresses amalgamalg #2 bar Unknown 5 878.42 2506.96 -Women dresses amalgamalg #1 able Unknown 5 2891.95 4507.24 -Men shirts importoimporto #1 eing Unknown 7 3465.77 5074.07 -Women dresses amalgamalg #2 eing Unknown 3 964.29 2569.34 -Women dresses amalgamalg #1 bar Unknown 6 3324.49 4914.11 -Men shirts importoimporto #1 ought Unknown 3 3467.09 5045.75 -Women dresses amalgamalg #1 ought Unknown 5 3049.25 4619.70 -Women dresses amalgamalg #1 eing Unknown 3 2978.07 4528.82 -Men shirts importoimporto #1 ought Unknown 4 3544.97 5045.75 -Men shirts importoimporto #1 bar Unknown 1 3490.62 4973.50 -Men shirts importoimporto #2 able Unknown 2 628.63 2095.47 -Men shirts importoimporto #1 eing Unknown 1 3628.21 5074.07 -Women dresses amalgamalg #1 able Unknown 4 3082.17 4507.24 -Men shirts importoimporto #2 eing Unknown 5 765.86 2137.65 -Women dresses amalgamalg #2 ation Unknown 4 1064.70 2431.22 -Women dresses amalgamalg #2 ought Unknown 3 991.89 2355.44 -Women dresses amalgamalg #2 eing Unknown 5 1211.13 2569.34 -Women dresses amalgamalg #2 ation Unknown 7 1078.41 2431.22 -Men shirts importoimporto #2 ation Unknown 4 807.67 2141.06 -Women dresses amalgamalg #2 ation Unknown 2 1102.89 2431.22 -Women dresses amalgamalg #2 eing Unknown 6 1247.86 2569.34 -Women dresses amalgamalg #2 able Unknown 4 1020.39 2337.27 -Men shirts importoimporto #2 able Unknown 7 780.91 2095.47 -Women dresses amalgamalg #2 ese Unknown 2 904.34 2200.82 -Women dresses amalgamalg #2 ought Unknown 7 1061.87 2355.44 -Women dresses amalgamalg #2 able Unknown 3 1054.94 2337.27 -Men shirts importoimporto #2 ought Unknown 6 633.96 1908.05 -Men shirts importoimporto #2 ese Unknown 6 853.37 2113.57 -Women dresses amalgamalg #2 able Unknown 5 1084.94 2337.27 -Women dresses amalgamalg #2 eing Unknown 4 1317.08 2569.34 +Men shirts importoimporto #1 ese Unknown 3 2070.65 5492.8175 +Men shirts importoimporto #1 ought Unknown 6 2152.15 5045.7583 +Men shirts importoimporto #1 able Unknown 2 2333.43 5194.8183 +Men shirts importoimporto #1 ese Unknown 6 2691.33 5492.8175 +Men shirts importoimporto #1 ought Unknown 2 2253.70 5045.7583 +Women dresses amalgamalg #1 able Unknown 6 1761.81 4507.2400 +Men shirts importoimporto #1 ation Unknown 3 2672.68 5410.9166 +Men shirts importoimporto #1 ation Unknown 5 2677.81 5410.9166 +Men shirts importoimporto #1 eing Unknown 5 2356.88 5074.0766 +Men shirts importoimporto #1 ese Unknown 4 2784.11 5492.8175 +Women dresses amalgamalg #1 ought Unknown 7 1926.67 4619.7075 +Women dresses amalgamalg #1 ought Unknown 1 2065.94 4619.7075 +Men shirts importoimporto #1 ation Unknown 6 2881.34 5410.9166 +Men shirts importoimporto #1 able Unknown 3 2674.91 5194.8183 +Women dresses amalgamalg #1 ation Unknown 2 2192.31 4690.8900 +Men shirts importoimporto #1 bar Unknown 5 2475.90 4973.5091 +Women dresses amalgamalg #1 ese Unknown 2 2146.52 4642.9908 +Men shirts importoimporto #1 eing Unknown 2 2588.02 5074.0766 +Women dresses amalgamalg #1 bar Unknown 7 2428.75 4914.1183 +Women dresses amalgamalg #1 bar Unknown 3 2451.51 4914.1183 +Men shirts importoimporto #1 ation Unknown 7 2951.67 5410.9166 +Men shirts importoimporto #1 able Unknown 1 2765.75 5194.8183 +Women dresses amalgamalg #1 able Unknown 2 2082.54 4507.2400 +Men shirts importoimporto #1 ation Unknown 4 2988.08 5410.9166 +Men shirts importoimporto #1 ought Unknown 7 2667.92 5045.7583 +Women dresses amalgamalg #1 bar Unknown 4 2549.27 4914.1183 +Women dresses amalgamalg #1 ese Unknown 7 2307.00 4642.9908 +Women dresses amalgamalg #1 eing Unknown 4 2204.15 4528.8225 +Men shirts importoimporto #1 able Unknown 7 2880.34 5194.8183 +Men shirts importoimporto #1 ese Unknown 5 3210.74 5492.8175 +Women dresses amalgamalg #1 ation Unknown 4 2418.39 4690.8900 +Men shirts importoimporto #1 eing Unknown 4 2833.40 5074.0766 +Women dresses amalgamalg #1 bar Unknown 2 2692.79 4914.1183 +Men shirts importoimporto #1 eing Unknown 6 2854.62 5074.0766 +Women dresses amalgamalg #1 eing Unknown 6 2314.71 4528.8225 +Men shirts importoimporto #1 ought Unknown 5 2834.94 5045.7583 +Women dresses amalgamalg #1 ation Unknown 5 2480.25 4690.8900 +Women dresses amalgamalg #1 able Unknown 7 2302.21 4507.2400 +Women dresses amalgamalg #1 ation Unknown 6 2501.15 4690.8900 +Men shirts importoimporto #1 ese Unknown 2 3307.78 5492.8175 +Men shirts importoimporto #1 able Unknown 5 3016.43 5194.8183 +Men shirts importoimporto #1 able Unknown 4 3040.23 5194.8183 +Women dresses amalgamalg #1 eing Unknown 5 2420.31 4528.8225 +Women dresses amalgamalg #1 ese Unknown 5 2535.80 4642.9908 +Women dresses amalgamalg #1 ought Unknown 2 2521.70 4619.7075 +Men shirts importoimporto #1 bar Unknown 3 2877.96 4973.5091 +Women dresses amalgamalg #1 ese Unknown 3 2577.15 4642.9908 +Women dresses amalgamalg #1 ation Unknown 7 2637.27 4690.8900 +Men shirts importoimporto #1 ation Unknown 1 3380.16 5410.9166 +Women dresses amalgamalg #1 eing Unknown 7 2524.32 4528.8225 +Men shirts importoimporto #1 bar Unknown 4 2986.70 4973.5091 +Women dresses amalgamalg #1 ought Unknown 4 2648.80 4619.7075 +Men shirts importoimporto #1 bar Unknown 7 3026.41 4973.5091 +Women dresses amalgamalg #1 ation Unknown 3 2751.11 4690.8900 +Men shirts importoimporto #1 bar Unknown 2 3073.45 4973.5091 +Men shirts importoimporto #1 eing Unknown 3 3179.96 5074.0766 +Women dresses amalgamalg #1 ation Unknown 1 2797.07 4690.8900 +Women dresses amalgamalg #1 able Unknown 1 2621.05 4507.2400 +Women dresses amalgamalg #1 ese Unknown 4 2808.36 4642.9908 +Women dresses amalgamalg #2 bar Unknown 6 680.47 2506.9633 +Men shirts importoimporto #1 ation Unknown 2 3591.65 5410.9166 +Women dresses amalgamalg #1 able Unknown 3 2706.15 4507.2400 +Women dresses amalgamalg #2 eing Unknown 2 773.08 2569.3466 +Men shirts importoimporto #1 bar Unknown 6 3199.08 4973.5091 +Men shirts importoimporto #1 ese Unknown 7 3754.33 5492.8175 +Women dresses amalgamalg #1 bar Unknown 5 3190.77 4914.1183 +Women dresses amalgamalg #1 eing Unknown 2 2841.88 4528.8225 +Men shirts importoimporto #1 able Unknown 6 3538.25 5194.8183 +Women dresses amalgamalg #1 ese Unknown 6 3006.94 4642.9908 +Women dresses amalgamalg #1 bar Unknown 1 3284.93 4914.1183 +Women dresses amalgamalg #2 bar Unknown 5 878.42 2506.9633 +Women dresses amalgamalg #1 able Unknown 5 2891.95 4507.2400 +Men shirts importoimporto #1 eing Unknown 7 3465.77 5074.0766 +Women dresses amalgamalg #2 eing Unknown 3 964.29 2569.3466 +Women dresses amalgamalg #1 bar Unknown 6 3324.49 4914.1183 +Men shirts importoimporto #1 ought Unknown 3 3467.09 5045.7583 +Women dresses amalgamalg #1 ought Unknown 5 3049.25 4619.7075 +Women dresses amalgamalg #1 eing Unknown 3 2978.07 4528.8225 +Men shirts importoimporto #1 ought Unknown 4 3544.97 5045.7583 +Men shirts importoimporto #1 bar Unknown 1 3490.62 4973.5091 +Men shirts importoimporto #2 able Unknown 2 628.63 2095.4708 +Men shirts importoimporto #1 eing Unknown 1 3628.21 5074.0766 +Women dresses amalgamalg #1 able Unknown 4 3082.17 4507.2400 +Men shirts importoimporto #2 eing Unknown 5 765.86 2137.6566 +Women dresses amalgamalg #2 ation Unknown 4 1064.70 2431.2266 +Women dresses amalgamalg #2 ought Unknown 3 991.89 2355.4416 +Women dresses amalgamalg #2 eing Unknown 5 1211.13 2569.3466 +Women dresses amalgamalg #2 ation Unknown 7 1078.41 2431.2266 +Men shirts importoimporto #2 ation Unknown 4 807.67 2141.0600 +Women dresses amalgamalg #2 ation Unknown 2 1102.89 2431.2266 +Women dresses amalgamalg #2 eing Unknown 6 1247.86 2569.3466 +Women dresses amalgamalg #2 able Unknown 4 1020.39 2337.2783 +Men shirts importoimporto #2 able Unknown 7 780.91 2095.4708 +Women dresses amalgamalg #2 ese Unknown 2 904.34 2200.8208 +Women dresses amalgamalg #2 ought Unknown 7 1061.87 2355.4416 +Women dresses amalgamalg #2 able Unknown 3 1054.94 2337.2783 +Men shirts importoimporto #2 ought Unknown 6 633.96 1908.0566 +Men shirts importoimporto #2 ese Unknown 6 853.37 2113.5733 +Women dresses amalgamalg #2 able Unknown 5 1084.94 2337.2783 +Women dresses amalgamalg #2 eing Unknown 4 1317.08 2569.3466 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q01.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q01.out index 661f5714fcfef6..a4910f4b2a5c9c 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q01.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q01.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q01 -- -A F 37734107 56586554400.73 53758257134.87 55909065222.827692 25.522005853 38273.129734622 0.049985296 1478493 -N F 991417 1487504710.38 1413082168.0541 1469649223.194375 25.516471921 38284.467760848 0.050093427 38854 -N O 74476040 111701729697.74 106118230307.6056 110367043872.49701 25.50222677 38249.117988908 0.049996586 2920374 -R F 37719753 56568041380.9 53741292684.604 55889619119.831932 25.505793613 38250.8546261 0.050009406 1478870 +A F 37734107.000000000 56586554400.730000000 53758257134.870000000 55909065222.827692000 25.522005853 38273.129734622 0.049985296 1478493 +N F 991417.000000000 1487504710.380000000 1413082168.054100000 1469649223.194375000 25.516471921 38284.467760848 0.050093427 38854 +N O 74476040.000000000 111701729697.740000000 106118230307.605600000 110367043872.497010000 25.502226770 38249.117988908 0.049996586 2920374 +R F 37719753.000000000 56568041380.900000000 53741292684.604000000 55889619119.831932000 25.505793613 38250.854626100 0.050009406 1478870 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q02.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q02.out index 6a9cdccf69c2bf..a615d9c6f62581 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q02.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q02.out @@ -12,8 +12,8 @@ 9847.57 Supplier#000006345 FRANCE 86344 Manufacturer#1 VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag 16-886-766-7945 ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu 9847.57 Supplier#000006345 FRANCE 173827 Manufacturer#2 VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag 16-886-766-7945 ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu 9836.93 Supplier#000007342 RUSSIA 4841 Manufacturer#4 JOlK7C1,7xrEZSSOw 32-399-414-5385 blithely carefully bold theodolites. fur -9817.1 Supplier#000002352 RUSSIA 124815 Manufacturer#2 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex -9817.1 Supplier#000002352 RUSSIA 152351 Manufacturer#3 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex +9817.10 Supplier#000002352 RUSSIA 124815 Manufacturer#2 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex +9817.10 Supplier#000002352 RUSSIA 152351 Manufacturer#3 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex 9739.86 Supplier#000003384 FRANCE 138357 Manufacturer#2 o,Z3v4POifevE k9U1b 6J1ucX,I 16-494-913-5925 s after the furiously bold packages sleep fluffily idly final requests: quickly final 9721.95 Supplier#000008757 UNITED KINGDOM 156241 Manufacturer#3 Atg6GnM4dT2 33-821-407-2995 eep furiously sauternes; quickl 9681.33 Supplier#000008406 RUSSIA 78405 Manufacturer#1 ,qUuXcftUl 32-139-873-8571 haggle slyly regular excuses. quic @@ -23,7 +23,7 @@ 9612.94 Supplier#000003228 ROMANIA 120715 Manufacturer#2 KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB 29-325-784-8187 warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t 9612.94 Supplier#000003228 ROMANIA 198189 Manufacturer#4 KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB 29-325-784-8187 warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t 9571.83 Supplier#000004305 ROMANIA 179270 Manufacturer#2 qNHZ7WmCzygwMPRDO9Ps 29-973-481-1831 kly carefully express asymptotes. furiou -9558.1 Supplier#000003532 UNITED KINGDOM 88515 Manufacturer#4 EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp 33-152-301-2164 foxes. quickly even excuses use. slyly special foxes nag bl +9558.10 Supplier#000003532 UNITED KINGDOM 88515 Manufacturer#4 EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp 33-152-301-2164 foxes. quickly even excuses use. slyly special foxes nag bl 9492.79 Supplier#000005975 GERMANY 25974 Manufacturer#5 S6mIiCTx82z7lV 17-992-579-4839 arefully pending accounts. blithely regular excuses boost carefully carefully ironic p 9461.05 Supplier#000002536 UNITED KINGDOM 20033 Manufacturer#1 8mmGbyzaU 7ZS2wJumTibypncu9pNkDc4FYA 33-556-973-5522 . slyly regular deposits wake slyly. furiously regular warthogs are. 9453.01 Supplier#000000802 ROMANIA 175767 Manufacturer#1 ,6HYXb4uaHITmtMBj4Ak57Pd 29-342-882-6463 gular frets. permanently special multipliers believe blithely alongs @@ -34,16 +34,16 @@ 9312.97 Supplier#000007807 RUSSIA 90279 Manufacturer#5 oGYMPCk9XHGB2PBfKRnHA 32-673-872-5854 ecial packages among the pending, even requests use regula 9312.97 Supplier#000007807 RUSSIA 100276 Manufacturer#5 oGYMPCk9XHGB2PBfKRnHA 32-673-872-5854 ecial packages among the pending, even requests use regula 9280.27 Supplier#000007194 ROMANIA 47193 Manufacturer#3 zhRUQkBSrFYxIAXTfInj vyGRQjeK 29-318-454-2133 o beans haggle after the furiously unusual deposits. carefully silent dolphins cajole carefully -9274.8 Supplier#000008854 RUSSIA 76346 Manufacturer#3 1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa 32-524-148-5221 y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the +9274.80 Supplier#000008854 RUSSIA 76346 Manufacturer#3 1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa 32-524-148-5221 y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the 9249.35 Supplier#000003973 FRANCE 26466 Manufacturer#1 d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4 16-722-866-1658 uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q 9249.35 Supplier#000003973 FRANCE 33972 Manufacturer#1 d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4 16-722-866-1658 uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q -9208.7 Supplier#000007769 ROMANIA 40256 Manufacturer#5 rsimdze 5o9P Ht7xS 29-964-424-9649 lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold +9208.70 Supplier#000007769 ROMANIA 40256 Manufacturer#5 rsimdze 5o9P Ht7xS 29-964-424-9649 lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold 9201.47 Supplier#000009690 UNITED KINGDOM 67183 Manufacturer#5 CB BnUTlmi5zdeEl7R7 33-121-267-9529 e even, even foxes. blithely ironic packages cajole regular packages. slyly final ide -9192.1 Supplier#000000115 UNITED KINGDOM 85098 Manufacturer#3 nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV 33-597-248-1220 es across the carefully express accounts boost caref +9192.10 Supplier#000000115 UNITED KINGDOM 85098 Manufacturer#3 nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV 33-597-248-1220 es across the carefully express accounts boost caref 9189.98 Supplier#000001226 GERMANY 21225 Manufacturer#4 qsLCqSvLyZfuXIpjz 17-725-903-1381 deposits. blithely bold excuses about the slyly bold forges wake 9128.97 Supplier#000004311 RUSSIA 146768 Manufacturer#5 I8IjnXd7NSJRs594RxsRR0 32-155-440-7120 refully. blithely unusual asymptotes haggle 9104.83 Supplier#000008520 GERMANY 150974 Manufacturer#4 RqRVDgD0ER J9 b41vR2,3 17-728-804-1793 ly about the blithely ironic depths. slyly final theodolites among the fluffily bold ideas print -9101 Supplier#000005791 ROMANIA 128254 Manufacturer#5 zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG 29-549-251-5384 ts. notornis detect blithely above the carefully bold requests. blithely even package +9101.00 Supplier#000005791 ROMANIA 128254 Manufacturer#5 zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG 29-549-251-5384 ts. notornis detect blithely above the carefully bold requests. blithely even package 9094.57 Supplier#000004582 RUSSIA 39575 Manufacturer#1 WB0XkCSG3r,mnQ n,h9VIxjjr9ARHFvKgMDf 32-587-577-1351 jole. regular accounts sleep blithely frets. final pinto beans play furiously past the 8996.87 Supplier#000004702 FRANCE 102191 Manufacturer#5 8XVcQK23akp 16-811-269-8946 ickly final packages along the express plat 8996.14 Supplier#000009814 ROMANIA 139813 Manufacturer#2 af0O5pg83lPU4IDVmEylXZVqYZQzSDlYLAmR 29-995-571-8781 dependencies boost quickly across the furiously pending requests! unusual dolphins play sl @@ -68,11 +68,11 @@ 8553.82 Supplier#000003979 ROMANIA 143978 Manufacturer#4 BfmVhCAnCMY3jzpjUMy4CNWs9 HzpdQR7INJU 29-124-646-4897 ic requests wake against the blithely unusual accounts. fluffily r 8517.23 Supplier#000009529 RUSSIA 37025 Manufacturer#5 e44R8o7JAIS9iMcr 32-565-297-8775 ove the even courts. furiously special platelets 8517.23 Supplier#000009529 RUSSIA 59528 Manufacturer#2 e44R8o7JAIS9iMcr 32-565-297-8775 ove the even courts. furiously special platelets -8503.7 Supplier#000006830 RUSSIA 44325 Manufacturer#4 BC4WFCYRUZyaIgchU 4S 32-147-878-5069 pades cajole. furious packages among the carefully express excuses boost furiously across th +8503.70 Supplier#000006830 RUSSIA 44325 Manufacturer#4 BC4WFCYRUZyaIgchU 4S 32-147-878-5069 pades cajole. furious packages among the carefully express excuses boost furiously across th 8457.09 Supplier#000009456 UNITED KINGDOM 19455 Manufacturer#1 7SBhZs8gP1cJjT0Qf433YBk 33-858-440-4349 cing requests along the furiously unusual deposits promise among the furiously unus -8441.4 Supplier#000003817 FRANCE 141302 Manufacturer#2 hU3fz3xL78 16-339-356-5115 ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag +8441.40 Supplier#000003817 FRANCE 141302 Manufacturer#2 hU3fz3xL78 16-339-356-5115 ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag 8432.89 Supplier#000003990 RUSSIA 191470 Manufacturer#1 wehBBp1RQbfxAYDASS75MsywmsKHRVdkrvNe6m 32-839-509-9301 ep furiously. packages should have to haggle slyly across the deposits. furiously regu -8431.4 Supplier#000002675 ROMANIA 5174 Manufacturer#1 HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w 29-474-643-1443 ithely express pinto beans. blithely even foxes haggle. furiously regular theodol +8431.40 Supplier#000002675 ROMANIA 5174 Manufacturer#1 HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w 29-474-643-1443 ithely express pinto beans. blithely even foxes haggle. furiously regular theodol 8407.04 Supplier#000005406 RUSSIA 162889 Manufacturer#4 j7 gYF5RW8DC5UrjKC 32-626-152-4621 r the blithely regular packages. slyly ironic theodoli 8386.08 Supplier#000008518 FRANCE 36014 Manufacturer#3 2jqzqqAVe9crMVGP,n9nTsQXulNLTUYoJjEDcqWV 16-618-780-7481 blithely bold pains are carefully platelets. finally regular pinto beans sleep carefully special 8376.52 Supplier#000005306 UNITED KINGDOM 190267 Manufacturer#5 9t8Y8 QqSIsoADPt6NLdk,TP5zyRx41oBUlgoGc9 33-632-514-7931 ly final accounts sleep special, regular requests. furiously regular @@ -87,7 +87,7 @@ 8046.07 Supplier#000008780 FRANCE 191222 Manufacturer#3 AczzuE0UK9osj ,Lx0Jmh 16-473-215-6395 onic platelets cajole after the regular instructions. permanently bold excuses 8042.09 Supplier#000003245 RUSSIA 135705 Manufacturer#4 Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y 32-836-132-8872 osits. packages cajole slyly. furiously regular deposits cajole slyly. q 8042.09 Supplier#000003245 RUSSIA 150729 Manufacturer#1 Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y 32-836-132-8872 osits. packages cajole slyly. furiously regular deposits cajole slyly. q -7992.4 Supplier#000006108 FRANCE 118574 Manufacturer#1 8tBydnTDwUqfBfFV4l3 16-974-998-8937 ironic ideas? fluffily even instructions wake. blithel +7992.40 Supplier#000006108 FRANCE 118574 Manufacturer#1 8tBydnTDwUqfBfFV4l3 16-974-998-8937 ironic ideas? fluffily even instructions wake. blithel 7980.65 Supplier#000001288 FRANCE 13784 Manufacturer#4 zE,7HgVPrCn 16-646-464-8247 ully bold courts. escapades nag slyly. furiously fluffy theodo 7950.37 Supplier#000008101 GERMANY 33094 Manufacturer#5 kkYvL6IuvojJgTNG IKkaXQDYgx8ILohj 17-627-663-8014 arefully unusual requests x-ray above the quickly final deposits. 7937.93 Supplier#000009012 ROMANIA 83995 Manufacturer#2 iUiTziH,Ek3i4lwSgunXMgrcTzwdb 29-250-925-9690 to the blithely ironic deposits nag sly @@ -96,7 +96,7 @@ 7912.91 Supplier#000004211 GERMANY 184210 Manufacturer#4 2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG 17-266-947-7315 ay furiously regular platelets. cou 7894.56 Supplier#000007981 GERMANY 85472 Manufacturer#4 NSJ96vMROAbeXP 17-963-404-3760 ic platelets affix after the furiously 7887.08 Supplier#000009792 GERMANY 164759 Manufacturer#3 Y28ITVeYriT3kIGdV2K8fSZ V2UqT5H1Otz 17-988-938-4296 ckly around the carefully fluffy theodolites. slyly ironic pack -7871.5 Supplier#000007206 RUSSIA 104695 Manufacturer#1 3w fNCnrVmvJjE95sgWZzvW 32-432-452-7731 ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg +7871.50 Supplier#000007206 RUSSIA 104695 Manufacturer#1 3w fNCnrVmvJjE95sgWZzvW 32-432-452-7731 ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg 7852.45 Supplier#000005864 RUSSIA 8363 Manufacturer#4 WCNfBPZeSXh3h,c 32-454-883-3821 usly unusual pinto beans. brave ideas sleep carefully quickly ironi 7850.66 Supplier#000001518 UNITED KINGDOM 86501 Manufacturer#1 ONda3YJiHKJOC 33-730-383-3892 ifts haggle fluffily pending pai 7843.52 Supplier#000006683 FRANCE 11680 Manufacturer#4 2Z0JGkiv01Y00oCFwUGfviIbhzCdy 16-464-517-8943 express, final pinto beans x-ray slyly asymptotes. unusual, unusual diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q03.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q03.out index ab8d6c9fb1b90b..95aeb3d8c3f023 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q03.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q03.out @@ -1,13 +1,13 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q03 -- -2456423 406181.0111 1995-03-05 0 -3459808 405838.6989 1995-03-04 0 -492164 390324.061 1995-02-19 0 -1188320 384537.9359 1995-03-09 0 -2435712 378673.0558 1995-02-26 0 -4878020 378376.7952 1995-03-12 0 -5521732 375153.9215 1995-03-13 0 -2628192 373133.3094 1995-02-22 0 -993600 371407.4595 1995-03-05 0 -2300070 367371.1452 1995-03-13 0 +2456423 406181.011100000 1995-03-05 0 +3459808 405838.698900000 1995-03-04 0 +492164 390324.061000000 1995-02-19 0 +1188320 384537.935900000 1995-03-09 0 +2435712 378673.055800000 1995-02-26 0 +4878020 378376.795200000 1995-03-12 0 +5521732 375153.921500000 1995-03-13 0 +2628192 373133.309400000 1995-02-22 0 +993600 371407.459500000 1995-03-05 0 +2300070 367371.145200000 1995-03-13 0 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q05.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q05.out index ab2f35acdc0f80..d2b392da441e1a 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q05.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q05.out @@ -1,8 +1,8 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q05 -- -INDONESIA 55502041.1697 -VIETNAM 55295086.9967 -CHINA 53724494.2566 -INDIA 52035512.0002 -JAPAN 45410175.6954 +INDONESIA 55502041.169700000 +VIETNAM 55295086.996700000 +CHINA 53724494.256600000 +INDIA 52035512.000200000 +JAPAN 45410175.695400000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q06.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q06.out index b59a2676928824..686eb3895106c1 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q06.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q06.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q06 -- -123141078.2283 +123141078.228300000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q07.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q07.out index 4aeaf84ee5b9ac..16c986f4271cf6 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q07.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q07.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q07 -- -FRANCE GERMANY 1995 54639732.7336 -FRANCE GERMANY 1996 54633083.3076 -GERMANY FRANCE 1995 52531746.6697 -GERMANY FRANCE 1996 52520549.0224 +FRANCE GERMANY 1995 54639732.733600000 +FRANCE GERMANY 1996 54633083.307600000 +GERMANY FRANCE 1995 52531746.669700000 +GERMANY FRANCE 1996 52520549.022400000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q08.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q08.out index f2380afaff0f0c..b5af665d554659 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q08.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q08.out @@ -1,5 +1,5 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q08 -- -1995 0.03443589 +1995 0.034435890 1996 0.041485521 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q09.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q09.out index f896bc44816c4a..066965109d29d5 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q09.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q09.out @@ -1,178 +1,178 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q09 -- -ALGERIA 1998 27136900.1803 -ALGERIA 1997 48611833.4962 -ALGERIA 1996 48285482.6782 -ALGERIA 1995 44402273.5999 -ALGERIA 1994 48694008.0668 -ALGERIA 1993 46044207.7838 -ALGERIA 1992 45636849.4881 -ARGENTINA 1998 28341663.7848 -ARGENTINA 1997 47143964.1176 -ARGENTINA 1996 45255278.6021 -ARGENTINA 1995 45631769.2054 -ARGENTINA 1994 48268856.3547 -ARGENTINA 1993 48605593.6162 -ARGENTINA 1992 46654240.7487 -BRAZIL 1998 26527736.396 -BRAZIL 1997 45640660.7677 -BRAZIL 1996 45090647.163 -BRAZIL 1995 44015888.5132 -BRAZIL 1994 44854218.8932 -BRAZIL 1993 45766603.7379 -BRAZIL 1992 45280216.8027 -CANADA 1998 26828985.3944 -CANADA 1997 44849954.3186 -CANADA 1996 46307936.1108 -CANADA 1995 47311993.0441 -CANADA 1994 46691491.9596 -CANADA 1993 46634791.1121 -CANADA 1992 45873849.6882 -CHINA 1998 27510180.1657 -CHINA 1997 46123865.4097 -CHINA 1996 49532807.0601 -CHINA 1995 46734651.4838 -CHINA 1994 46397896.6097 -CHINA 1993 49634673.9463 -CHINA 1992 46949457.6426 -EGYPT 1998 28401491.7968 -EGYPT 1997 47674857.6783 -EGYPT 1996 47745727.545 -EGYPT 1995 45897160.6783 -EGYPT 1994 47194895.228 -EGYPT 1993 49133627.6471 -EGYPT 1992 47000574.5027 -ETHIOPIA 1998 25135046.1377 -ETHIOPIA 1997 43010596.0838 -ETHIOPIA 1996 43636287.1922 -ETHIOPIA 1995 43575757.3343 -ETHIOPIA 1994 41597208.5283 -ETHIOPIA 1993 42622804.1616 -ETHIOPIA 1992 44385735.6813 -FRANCE 1998 26210392.2804 -FRANCE 1997 42392969.4731 -FRANCE 1996 43306317.9749 -FRANCE 1995 46377408.4328 -FRANCE 1994 43447352.9922 -FRANCE 1993 43729961.0639 -FRANCE 1992 44052308.429 -GERMANY 1998 25991257.1071 -GERMANY 1997 43968355.8079 -GERMANY 1996 45882074.8049 -GERMANY 1995 43314338.3077 -GERMANY 1994 44616995.4369 -GERMANY 1993 45126645.9113 -GERMANY 1992 44361141.2107 -INDIA 1998 29626417.2379 -INDIA 1997 51386111.3448 -INDIA 1996 47571018.5122 -INDIA 1995 49344062.2829 -INDIA 1994 50106952.4261 -INDIA 1993 48112766.6987 -INDIA 1992 47914303.1234 -INDONESIA 1998 27734909.6763 -INDONESIA 1997 44593812.9863 -INDONESIA 1996 44746729.8078 -INDONESIA 1995 45593622.6993 -INDONESIA 1994 45988483.8772 -INDONESIA 1993 46147963.7895 -INDONESIA 1992 45185777.0688 -IRAN 1998 26661608.9301 -IRAN 1997 45019114.1696 -IRAN 1996 45891397.0992 -IRAN 1995 44414285.2348 -IRAN 1994 43696360.4795 -IRAN 1993 45362775.8094 -IRAN 1992 43052338.4143 -IRAQ 1998 31188498.1914 -IRAQ 1997 48585307.5222 -IRAQ 1996 50036593.8404 -IRAQ 1995 48774801.7275 -IRAQ 1994 48795847.231 -IRAQ 1993 47435691.5082 -IRAQ 1992 47562355.6571 -JAPAN 1998 24694102.172 -JAPAN 1997 42377052.3454 -JAPAN 1996 40267778.9094 -JAPAN 1995 40925317.465 -JAPAN 1994 41159518.3058 -JAPAN 1993 39589074.2771 -JAPAN 1992 39113493.9052 -JORDAN 1998 23489867.7893 -JORDAN 1997 41615962.6619 -JORDAN 1996 41860855.4684 -JORDAN 1995 39931672.0908 -JORDAN 1994 40707555.4638 -JORDAN 1993 39060405.4658 -JORDAN 1992 41657604.2684 -KENYA 1998 25566337.4303 -KENYA 1997 43108847.9024 -KENYA 1996 43482953.543 -KENYA 1995 42517988.9814 -KENYA 1994 43612479.4523 -KENYA 1993 42724038.7571 -KENYA 1992 43217106.2068 -MOROCCO 1998 24915496.8756 -MOROCCO 1997 42698382.855 -MOROCCO 1996 42986113.5049 -MOROCCO 1995 42316089.1593 -MOROCCO 1994 43458604.6029 -MOROCCO 1993 42672288.0699 -MOROCCO 1992 42800781.6415 -MOZAMBIQUE 1998 28279876.0301 -MOZAMBIQUE 1997 51159216.2298 -MOZAMBIQUE 1996 48072525.0645 -MOZAMBIQUE 1995 48905200.6007 -MOZAMBIQUE 1994 46092076.2805 -MOZAMBIQUE 1993 48555926.2669 -MOZAMBIQUE 1992 47809075.1192 -PERU 1998 26713966.2678 -PERU 1997 48324008.6011 -PERU 1996 50310008.8629 -PERU 1995 49647080.9629 -PERU 1994 46420910.2773 -PERU 1993 51536906.2487 -PERU 1992 47711665.3137 -ROMANIA 1998 27271993.101 -ROMANIA 1997 45063059.1953 -ROMANIA 1996 47492335.0323 -ROMANIA 1995 45710636.2909 -ROMANIA 1994 46088041.1066 -ROMANIA 1993 47515092.5613 -ROMANIA 1992 44111439.8044 -RUSSIA 1998 27935323.7271 -RUSSIA 1997 48222347.2924 -RUSSIA 1996 47553559.4932 -RUSSIA 1995 46755990.0976 -RUSSIA 1994 48000515.6191 -RUSSIA 1993 48569624.5082 -RUSSIA 1992 47672831.5329 -SAUDI ARABIA 1998 27113516.8424 -SAUDI ARABIA 1997 46690468.9649 -SAUDI ARABIA 1996 47775782.667 -SAUDI ARABIA 1995 46657107.8287 -SAUDI ARABIA 1994 48181672.81 -SAUDI ARABIA 1993 45692556.4438 -SAUDI ARABIA 1992 48924913.2717 -UNITED KINGDOM 1998 26366682.8786 -UNITED KINGDOM 1997 44518130.1851 -UNITED KINGDOM 1996 45539729.6166 -UNITED KINGDOM 1995 46845879.339 -UNITED KINGDOM 1994 43081609.5737 -UNITED KINGDOM 1993 44770146.7555 -UNITED KINGDOM 1992 44123402.5484 -UNITED STATES 1998 27826593.6825 -UNITED STATES 1997 46638572.3648 -UNITED STATES 1996 46688280.5474 -UNITED STATES 1995 48951591.6156 -UNITED STATES 1994 45099092.0598 -UNITED STATES 1993 46181600.5278 -UNITED STATES 1992 46168214.0901 -VIETNAM 1998 27281931.0011 -VIETNAM 1997 48735914.1796 -VIETNAM 1996 47824595.904 -VIETNAM 1995 48235135.8016 -VIETNAM 1994 47729256.3324 -VIETNAM 1993 45352676.8672 -VIETNAM 1992 47846355.6485 +ALGERIA 1998 27136900.180300000 +ALGERIA 1997 48611833.496200000 +ALGERIA 1996 48285482.678200000 +ALGERIA 1995 44402273.599900000 +ALGERIA 1994 48694008.066800000 +ALGERIA 1993 46044207.783800000 +ALGERIA 1992 45636849.488100000 +ARGENTINA 1998 28341663.784800000 +ARGENTINA 1997 47143964.117600000 +ARGENTINA 1996 45255278.602100000 +ARGENTINA 1995 45631769.205400000 +ARGENTINA 1994 48268856.354700000 +ARGENTINA 1993 48605593.616200000 +ARGENTINA 1992 46654240.748700000 +BRAZIL 1998 26527736.396000000 +BRAZIL 1997 45640660.767700000 +BRAZIL 1996 45090647.163000000 +BRAZIL 1995 44015888.513200000 +BRAZIL 1994 44854218.893200000 +BRAZIL 1993 45766603.737900000 +BRAZIL 1992 45280216.802700000 +CANADA 1998 26828985.394400000 +CANADA 1997 44849954.318600000 +CANADA 1996 46307936.110800000 +CANADA 1995 47311993.044100000 +CANADA 1994 46691491.959600000 +CANADA 1993 46634791.112100000 +CANADA 1992 45873849.688200000 +CHINA 1998 27510180.165700000 +CHINA 1997 46123865.409700000 +CHINA 1996 49532807.060100000 +CHINA 1995 46734651.483800000 +CHINA 1994 46397896.609700000 +CHINA 1993 49634673.946300000 +CHINA 1992 46949457.642600000 +EGYPT 1998 28401491.796800000 +EGYPT 1997 47674857.678300000 +EGYPT 1996 47745727.545000000 +EGYPT 1995 45897160.678300000 +EGYPT 1994 47194895.228000000 +EGYPT 1993 49133627.647100000 +EGYPT 1992 47000574.502700000 +ETHIOPIA 1998 25135046.137700000 +ETHIOPIA 1997 43010596.083800000 +ETHIOPIA 1996 43636287.192200000 +ETHIOPIA 1995 43575757.334300000 +ETHIOPIA 1994 41597208.528300000 +ETHIOPIA 1993 42622804.161600000 +ETHIOPIA 1992 44385735.681300000 +FRANCE 1998 26210392.280400000 +FRANCE 1997 42392969.473100000 +FRANCE 1996 43306317.974900000 +FRANCE 1995 46377408.432800000 +FRANCE 1994 43447352.992200000 +FRANCE 1993 43729961.063900000 +FRANCE 1992 44052308.429000000 +GERMANY 1998 25991257.107100000 +GERMANY 1997 43968355.807900000 +GERMANY 1996 45882074.804900000 +GERMANY 1995 43314338.307700000 +GERMANY 1994 44616995.436900000 +GERMANY 1993 45126645.911300000 +GERMANY 1992 44361141.210700000 +INDIA 1998 29626417.237900000 +INDIA 1997 51386111.344800000 +INDIA 1996 47571018.512200000 +INDIA 1995 49344062.282900000 +INDIA 1994 50106952.426100000 +INDIA 1993 48112766.698700000 +INDIA 1992 47914303.123400000 +INDONESIA 1998 27734909.676300000 +INDONESIA 1997 44593812.986300000 +INDONESIA 1996 44746729.807800000 +INDONESIA 1995 45593622.699300000 +INDONESIA 1994 45988483.877200000 +INDONESIA 1993 46147963.789500000 +INDONESIA 1992 45185777.068800000 +IRAN 1998 26661608.930100000 +IRAN 1997 45019114.169600000 +IRAN 1996 45891397.099200000 +IRAN 1995 44414285.234800000 +IRAN 1994 43696360.479500000 +IRAN 1993 45362775.809400000 +IRAN 1992 43052338.414300000 +IRAQ 1998 31188498.191400000 +IRAQ 1997 48585307.522200000 +IRAQ 1996 50036593.840400000 +IRAQ 1995 48774801.727500000 +IRAQ 1994 48795847.231000000 +IRAQ 1993 47435691.508200000 +IRAQ 1992 47562355.657100000 +JAPAN 1998 24694102.172000000 +JAPAN 1997 42377052.345400000 +JAPAN 1996 40267778.909400000 +JAPAN 1995 40925317.465000000 +JAPAN 1994 41159518.305800000 +JAPAN 1993 39589074.277100000 +JAPAN 1992 39113493.905200000 +JORDAN 1998 23489867.789300000 +JORDAN 1997 41615962.661900000 +JORDAN 1996 41860855.468400000 +JORDAN 1995 39931672.090800000 +JORDAN 1994 40707555.463800000 +JORDAN 1993 39060405.465800000 +JORDAN 1992 41657604.268400000 +KENYA 1998 25566337.430300000 +KENYA 1997 43108847.902400000 +KENYA 1996 43482953.543000000 +KENYA 1995 42517988.981400000 +KENYA 1994 43612479.452300000 +KENYA 1993 42724038.757100000 +KENYA 1992 43217106.206800000 +MOROCCO 1998 24915496.875600000 +MOROCCO 1997 42698382.855000000 +MOROCCO 1996 42986113.504900000 +MOROCCO 1995 42316089.159300000 +MOROCCO 1994 43458604.602900000 +MOROCCO 1993 42672288.069900000 +MOROCCO 1992 42800781.641500000 +MOZAMBIQUE 1998 28279876.030100000 +MOZAMBIQUE 1997 51159216.229800000 +MOZAMBIQUE 1996 48072525.064500000 +MOZAMBIQUE 1995 48905200.600700000 +MOZAMBIQUE 1994 46092076.280500000 +MOZAMBIQUE 1993 48555926.266900000 +MOZAMBIQUE 1992 47809075.119200000 +PERU 1998 26713966.267800000 +PERU 1997 48324008.601100000 +PERU 1996 50310008.862900000 +PERU 1995 49647080.962900000 +PERU 1994 46420910.277300000 +PERU 1993 51536906.248700000 +PERU 1992 47711665.313700000 +ROMANIA 1998 27271993.101000000 +ROMANIA 1997 45063059.195300000 +ROMANIA 1996 47492335.032300000 +ROMANIA 1995 45710636.290900000 +ROMANIA 1994 46088041.106600000 +ROMANIA 1993 47515092.561300000 +ROMANIA 1992 44111439.804400000 +RUSSIA 1998 27935323.727100000 +RUSSIA 1997 48222347.292400000 +RUSSIA 1996 47553559.493200000 +RUSSIA 1995 46755990.097600000 +RUSSIA 1994 48000515.619100000 +RUSSIA 1993 48569624.508200000 +RUSSIA 1992 47672831.532900000 +SAUDI ARABIA 1998 27113516.842400000 +SAUDI ARABIA 1997 46690468.964900000 +SAUDI ARABIA 1996 47775782.667000000 +SAUDI ARABIA 1995 46657107.828700000 +SAUDI ARABIA 1994 48181672.810000000 +SAUDI ARABIA 1993 45692556.443800000 +SAUDI ARABIA 1992 48924913.271700000 +UNITED KINGDOM 1998 26366682.878600000 +UNITED KINGDOM 1997 44518130.185100000 +UNITED KINGDOM 1996 45539729.616600000 +UNITED KINGDOM 1995 46845879.339000000 +UNITED KINGDOM 1994 43081609.573700000 +UNITED KINGDOM 1993 44770146.755500000 +UNITED KINGDOM 1992 44123402.548400000 +UNITED STATES 1998 27826593.682500000 +UNITED STATES 1997 46638572.364800000 +UNITED STATES 1996 46688280.547400000 +UNITED STATES 1995 48951591.615600000 +UNITED STATES 1994 45099092.059800000 +UNITED STATES 1993 46181600.527800000 +UNITED STATES 1992 46168214.090100000 +VIETNAM 1998 27281931.001100000 +VIETNAM 1997 48735914.179600000 +VIETNAM 1996 47824595.904000000 +VIETNAM 1995 48235135.801600000 +VIETNAM 1994 47729256.332400000 +VIETNAM 1993 45352676.867200000 +VIETNAM 1992 47846355.648500000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q10.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q10.out index 4b989e75948dcc..8e671d7af85b64 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q10.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q10.out @@ -1,23 +1,23 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q10 -- -57040 Customer#000057040 734235.2455 632.87 JAPAN Eioyzjf4pp 22-895-641-3466 sits. slyly regular requests sleep alongside of the regular inst -143347 Customer#000143347 721002.6948 2557.47 EGYPT 1aReFYv,Kw4 14-742-935-3718 ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re -60838 Customer#000060838 679127.3077 2454.77 BRAZIL 64EaJ5vMAHWJlBOxJklpNc2RJiWE 12-913-494-9813 need to boost against the slyly regular account -101998 Customer#000101998 637029.5667 3790.89 UNITED KINGDOM 01c9CILnNtfOQYmZj 33-593-865-6378 ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites -125341 Customer#000125341 633508.086 4983.51 GERMANY S29ODD6bceU8QSuuEJznkNaK 17-582-695-5962 arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca -25501 Customer#000025501 620269.7849 7725.04 ETHIOPIA W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ 15-874-808-6793 he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina -115831 Customer#000115831 596423.8672 5098.1 FRANCE rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc 16-715-386-3788 l somas sleep. furiously final deposits wake blithely regular pinto b -84223 Customer#000084223 594998.0239 528.65 UNITED KINGDOM nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA 33-442-824-8191 slyly final deposits haggle regular, pending dependencies. pending escapades wake -54289 Customer#000054289 585603.3918 5583.02 IRAN vXCxoCsU0Bad5JQI ,oobkZ 20-834-292-4707 ely special foxes are quickly finally ironic p -39922 Customer#000039922 584878.1134 7321.11 GERMANY Zgy4s50l2GKN4pLDPBU8m342gIw6R 17-147-757-8036 y final requests. furiously final foxes cajole blithely special platelets. f -6226 Customer#000006226 576783.7606 2230.09 UNITED KINGDOM 8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g, 33-657-701-3391 ending platelets along the express deposits cajole carefully final -922 Customer#000000922 576767.5333 3869.25 GERMANY Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq 17-945-916-9648 luffily fluffy deposits. packages c -147946 Customer#000147946 576455.132 2030.13 ALGERIA iANyZHjqhyy7Ajah0pTrYyhJ 10-886-956-3143 ithely ironic deposits haggle blithely ironic requests. quickly regu -115640 Customer#000115640 569341.1933 6436.1 ARGENTINA Vtgfia9qI 7EpHgecU1X 11-411-543-4901 ost slyly along the patterns; pinto be -73606 Customer#000073606 568656.8578 1785.67 JAPAN xuR0Tro5yChDfOCrjkd2ol 22-437-653-6966 he furiously regular ideas. slowly -110246 Customer#000110246 566842.9815 7763.35 VIETNAM 7KzflgX MDOq7sOkI 31-943-426-9837 egular deposits serve blithely above the fl -142549 Customer#000142549 563537.2368 5085.99 INDONESIA ChqEoK43OysjdHbtKCp6dKqjNyvvi9 19-955-562-2398 sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts. -146149 Customer#000146149 557254.9865 1791.55 ROMANIA s87fvzFQpU 29-744-164-6487 of the slyly silent accounts. quickly final accounts across the -52528 Customer#000052528 556397.3509 551.79 ARGENTINA NFztyTOR10UOJ 11-208-192-3205 deposits hinder. blithely pending asymptotes breach slyly regular re -23431 Customer#000023431 554269.536 3381.86 ROMANIA HgiV0phqhaIa9aydNoIlb 29-915-458-2654 nusual, even instructions: furiously stealthy n +57040 Customer#000057040 734235.245500000 632.87 JAPAN Eioyzjf4pp 22-895-641-3466 sits. slyly regular requests sleep alongside of the regular inst +143347 Customer#000143347 721002.694800000 2557.47 EGYPT 1aReFYv,Kw4 14-742-935-3718 ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re +60838 Customer#000060838 679127.307700000 2454.77 BRAZIL 64EaJ5vMAHWJlBOxJklpNc2RJiWE 12-913-494-9813 need to boost against the slyly regular account +101998 Customer#000101998 637029.566700000 3790.89 UNITED KINGDOM 01c9CILnNtfOQYmZj 33-593-865-6378 ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites +125341 Customer#000125341 633508.086000000 4983.51 GERMANY S29ODD6bceU8QSuuEJznkNaK 17-582-695-5962 arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca +25501 Customer#000025501 620269.784900000 7725.04 ETHIOPIA W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ 15-874-808-6793 he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina +115831 Customer#000115831 596423.867200000 5098.10 FRANCE rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc 16-715-386-3788 l somas sleep. furiously final deposits wake blithely regular pinto b +84223 Customer#000084223 594998.023900000 528.65 UNITED KINGDOM nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA 33-442-824-8191 slyly final deposits haggle regular, pending dependencies. pending escapades wake +54289 Customer#000054289 585603.391800000 5583.02 IRAN vXCxoCsU0Bad5JQI ,oobkZ 20-834-292-4707 ely special foxes are quickly finally ironic p +39922 Customer#000039922 584878.113400000 7321.11 GERMANY Zgy4s50l2GKN4pLDPBU8m342gIw6R 17-147-757-8036 y final requests. furiously final foxes cajole blithely special platelets. f +6226 Customer#000006226 576783.760600000 2230.09 UNITED KINGDOM 8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g, 33-657-701-3391 ending platelets along the express deposits cajole carefully final +922 Customer#000000922 576767.533300000 3869.25 GERMANY Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq 17-945-916-9648 luffily fluffy deposits. packages c +147946 Customer#000147946 576455.132000000 2030.13 ALGERIA iANyZHjqhyy7Ajah0pTrYyhJ 10-886-956-3143 ithely ironic deposits haggle blithely ironic requests. quickly regu +115640 Customer#000115640 569341.193300000 6436.10 ARGENTINA Vtgfia9qI 7EpHgecU1X 11-411-543-4901 ost slyly along the patterns; pinto be +73606 Customer#000073606 568656.857800000 1785.67 JAPAN xuR0Tro5yChDfOCrjkd2ol 22-437-653-6966 he furiously regular ideas. slowly +110246 Customer#000110246 566842.981500000 7763.35 VIETNAM 7KzflgX MDOq7sOkI 31-943-426-9837 egular deposits serve blithely above the fl +142549 Customer#000142549 563537.236800000 5085.99 INDONESIA ChqEoK43OysjdHbtKCp6dKqjNyvvi9 19-955-562-2398 sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts. +146149 Customer#000146149 557254.986500000 1791.55 ROMANIA s87fvzFQpU 29-744-164-6487 of the slyly silent accounts. quickly final accounts across the +52528 Customer#000052528 556397.350900000 551.79 ARGENTINA NFztyTOR10UOJ 11-208-192-3205 deposits hinder. blithely pending asymptotes breach slyly regular re +23431 Customer#000023431 554269.536000000 3381.86 ROMANIA HgiV0phqhaIa9aydNoIlb 29-915-458-2654 nusual, even instructions: furiously stealthy n diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q11.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q11.out index eccd251d71d3bb..645802f5f8be63 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q11.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q11.out @@ -1,1051 +1,1051 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q11 -- -129760 17538456.86 -166726 16503353.92 -191287 16474801.97 -161758 16101755.54 -34452 15983844.72 -139035 15907078.34 -9403 15451755.62 -154358 15212937.88 -38823 15064802.86 -85606 15053957.15 -33354 14408297.4 -154747 14407580.68 -82865 14235489.78 -76094 14094247.04 -222 13937777.74 -121271 13908336 -55221 13716120.47 -22819 13666434.28 -76281 13646853.68 -85298 13581154.93 -85158 13554904 -139684 13535538.72 -31034 13498025.25 -87305 13482847.04 -10181 13445148.75 -62323 13411824.3 -26489 13377256.38 -96493 13339057.83 -56548 13329014.97 -55576 13306843.35 -159751 13306614.48 -92406 13287414.5 -182636 13223726.74 -199969 13135288.21 -62865 13001926.94 -7284 12945298.19 -197867 12944510.52 -11562 12931575.51 -75165 12916918.12 -97175 12911283.5 -140840 12896562.23 -65241 12890600.46 -166120 12876927.22 -9035 12863828.7 -144616 12853549.3 -176723 12832309.74 -170884 12792136.58 -29790 12723300.33 -95213 12555483.73 -183873 12550533.05 -171235 12476538.3 -21533 12437821.32 -17290 12432159.5 -156397 12260623.5 -122611 12222812.98 -139155 12220319.25 -146316 12215800.61 -171381 12199734.52 -198633 12078226.95 -167417 12046637.62 -59512 12043468.76 -31688 12034893.64 -159586 12001505.84 -8993 11963814.3 -120302 11857707.55 -43536 11779340.52 -9552 11776909.16 -86223 11772205.08 -53776 11758669.65 -131285 11616953.74 -91628 11611114.83 -169644 11567959.72 -182299 11567462.05 -33107 11453818.76 -104184 11436657.44 -67027 11419127.14 -176869 11371451.71 -30885 11369674.79 -54420 11345076.88 -72240 11313951.05 -178708 11294635.17 -81298 11273686.13 -158324 11243442.72 -117095 11242535.24 -176793 11237733.38 -86091 11177793.79 -116033 11145434.36 -129058 11119112.2 -193714 11104706.39 -117195 11077217.96 -49851 11043701.78 -19791 11030662.62 -75800 11012401.62 -161562 10996371.69 -10119 10980015.75 -39185 10970042.56 -47223 10950022.13 -175594 10942923.05 -111295 10893675.61 -155446 10852764.57 -156391 10839810.38 -40884 10837234.19 -141288 10837130.21 -152388 10830977.82 -33449 10830858.72 -149035 10826130.02 -162620 10814275.68 -118324 10791788.1 -38932 10777541.75 -121294 10764225.22 -48721 10762582.49 -63342 10740132.6 -5614 10724668.8 -62266 10711143.1 -100202 10696675.55 -197741 10688560.72 -169178 10648522.8 -5271 10639392.65 -34499 10584177.1 -71108 10569117.56 -137132 10539880.47 -78451 10524873.24 -150827 10503810.48 -107237 10488030.84 -101727 10473558.1 -58708 10466280.44 -89768 10465477.22 -146493 10444291.58 -55424 10444006.48 -16560 10425574.74 -133114 10415097.9 -195810 10413625.2 -76673 10391977.18 -97305 10390890.57 -134210 10387210.02 -188536 10386529.92 -122255 10335760.32 -2682 10312966.1 -43814 10303086.61 -34767 10290405.18 -165584 10273705.89 -2231 10270415.55 -111259 10263256.56 -195578 10239795.82 -21093 10217531.3 -29856 10216932.54 -133686 10213345.76 -87745 10185509.4 -135153 10179379.7 -11773 10167410.84 -76316 10165151.7 -123076 10161225.78 -91894 10130462.19 -39741 10128387.52 -111753 10119780.98 -142729 10104748.89 -116775 10097750.42 -102589 10034784.36 -186268 10012181.57 -44545 10000286.48 -23307 9966577.5 -124281 9930018.9 -69604 9925730.64 -21971 9908982.03 -58148 9895894.4 -16532 9886529.9 -159180 9883744.43 -74733 9877582.88 -35173 9858275.92 -7116 9856881.02 -124620 9838589.14 -122108 9829949.35 -67200 9828690.69 -164775 9821424.44 -9039 9816447.72 -14912 9803102.2 -190906 9791315.7 -130398 9781674.27 -119310 9776927.21 -10132 9770930.78 -107211 9757586.25 -113958 9757065.5 -37009 9748362.69 -66746 9743528.76 -134486 9731922 -15945 9731096.45 -55307 9717745.8 -56362 9714922.83 -57726 9711792.1 -57256 9708621 -112292 9701653.08 -87514 9699492.53 -174206 9680562.02 -72865 9679043.34 -114357 9671017.44 -112807 9665019.21 -115203 9661018.73 -177454 9658906.35 -161275 9634313.71 -61893 9617095.44 -122219 9604888.2 -183427 9601362.58 -59158 9599705.96 -61931 9584918.98 -5532 9579964.14 -20158 9576714.38 -167199 9557413.08 -38869 9550279.53 -86949 9541943.7 -198544 9538613.92 -193762 9538238.94 -108807 9536247.16 -168324 9535647.99 -115588 9532195.04 -141372 9529702.14 -175120 9526068.66 -163851 9522808.83 -160954 9520359.45 -117757 9517882.8 -52594 9508325.76 -60960 9498843.06 -70272 9495775.62 -44050 9495515.36 -152213 9494756.96 -121203 9492601.3 -70114 9491012.3 -167588 9484741.11 -136455 9476241.78 -4357 9464355.64 -6786 9463632.57 -61345 9455336.7 -160826 9446754.84 -71275 9440138.4 -77746 9439118.35 -91289 9437472 -56723 9435102.16 -86647 9434604.18 -131234 9432120 -198129 9427651.36 -165530 9426193.68 -69233 9425053.92 -6243 9423304.66 -90110 9420422.7 -191980 9419368.36 -38461 9419316.07 -167873 9419024.49 -159373 9416950.15 -128707 9413428.5 -45267 9410863.78 -48460 9409793.93 -197672 9406887.68 -60884 9403442.4 -15209 9403245.31 -138049 9401262.1 -199286 9391770.7 -19629 9391236.4 -134019 9390615.15 -169475 9387639.58 -165918 9379510.44 -135602 9374251.54 -162323 9367566.51 -96277 9360850.68 -98336 9359671.29 -119781 9356395.73 -34440 9355365 -57362 9355180.1 -167236 9352973.84 -38463 9347530.94 -86749 9346826.44 -170007 9345699.9 -193087 9343744 -150383 9332576.75 -60932 9329582.02 -128420 9328206.35 -162145 9327722.88 -55686 9320304.4 -163080 9304916.96 -160583 9303515.92 -118153 9298606.56 -152634 9282184.57 -84731 9276586.92 -119989 9273814.2 -114584 9269698.65 -131817 9268570.08 -29068 9256583.88 -44116 9255922 -115818 9253311.91 -103388 9239218.08 -186118 9236209.12 -155809 9235410.84 -147003 9234847.99 -27769 9232511.64 -112779 9231927.36 -124851 9228982.68 -158488 9227216.4 -83328 9224792.2 -136797 9222927.09 -141730 9216370.68 -87304 9215695.5 -156004 9215557.9 -140740 9215329.2 -100648 9212185.08 -174774 9211718 -37644 9211578.6 -48807 9209496.24 -95940 9207948.4 -141586 9206699.22 -147248 9205654.95 -61372 9205228.76 -52970 9204415.95 -26430 9203710.51 -28504 9201669.2 -25810 9198878.5 -125329 9198688.5 -167867 9194022.72 -134767 9191444.72 -127745 9191271.56 -69208 9187110 -155222 9186469.16 -196916 9182995.82 -195590 9176353.12 -169155 9175176.09 -81558 9171946.5 -185136 9171293.04 -114790 9168509.1 -194142 9165836.61 -167639 9161165 -11241 9160789.46 -82628 9160155.54 -41399 9148338 -30755 9146196.84 -6944 9143574.58 -6326 9138803.16 -101296 9135657.62 -181479 9121093.3 -76898 9120983.1 -64274 9118745.25 -175826 9117387.99 -142215 9116876.88 -103415 9113128.62 -119765 9110768.79 -107624 9108837.45 -84215 9105257.36 -73774 9102651.92 -173972 9102069 -69817 9095513.88 -86943 9092253 -138859 9087719.3 -162273 9085296.48 -175945 9080401.21 -16836 9075715.44 -70224 9075265.95 -139765 9074755.89 -30319 9073233.1 -3851 9072657.24 -181271 9070631.52 -162184 9068835.78 -81683 9067258.47 -153028 9067010.51 -123324 9061870.95 -186481 9058608.3 -167680 9052908.76 -165293 9050545.7 -122148 9046298.17 -138604 9045840.8 -78851 9044822.6 -137280 9042355.34 -8823 9040855.1 -163900 9040848.48 -75600 9035392.45 -81676 9031999.4 -46033 9031460.58 -194917 9028500 -133936 9026949.02 -33182 9024971.1 -34220 9021485.39 -20118 9019942.6 -178258 9019881.66 -15560 9017687.28 -111425 9016198.56 -95942 9015585.12 -132709 9015240.15 -39731 9014746.95 -154307 9012571.2 -23769 9008157.6 -93328 9007211.2 -142826 8998297.44 -188792 8996014 -68703 8994982.22 -145280 8990941.05 -150725 8985686.16 -172046 8982469.52 -70476 8967629.5 -124988 8966805.22 -17937 8963319.76 -177372 8954873.64 -137994 8950916.79 -84019 8950039.98 -40389 8946158.2 -69187 8941054.14 -4863 8939044.92 -50465 8930503.14 -43686 8915543.84 -131352 8909053.59 -198916 8906940.03 -135932 8905282.95 -104673 8903682 -152308 8903244.08 -135298 8900323.2 -156873 8899429.1 -157454 8897339.2 -75415 8897068.09 -46325 8895569.09 -1966 8895117.06 -24576 8895034.75 -19425 8890156.6 -169735 8890085.56 -32225 8889829.28 -124537 8889770.71 -146327 8887836.23 -121562 8887740.4 -44731 8882444.95 -93141 8881850.88 -187871 8873506.18 -71709 8873057.28 -151913 8869321.17 -33786 8868955.39 -35902 8868126.06 -23588 8867769.9 -24508 8867616 -161282 8866661.43 -188061 8862304 -132847 8862082 -166843 8861200.8 -30609 8860214.73 -56191 8856546.96 -160740 8852685.43 -71229 8846106.99 -91208 8845541.28 -10995 8845306.56 -78094 8839938.29 -36489 8838538.1 -198437 8836494.84 -151693 8833807.64 -185367 8829791.37 -65682 8820622.89 -65421 8819329.24 -122225 8816821.86 -85330 8811013.16 -64555 8810643.12 -104188 8808211.02 -54411 8805703.4 -39438 8805282.56 -70795 8800060.92 -20383 8799073.28 -21952 8798624.19 -63584 8796590 -158768 8796422.95 -166588 8796214.38 -120600 8793558.06 -157202 8788287.88 -55358 8786820.75 -168322 8786670.73 -25143 8786324.8 -5368 8786274.14 -114025 8786201.12 -97744 8785315.94 -164327 8784503.86 -76542 8782613.28 -4731 8772846.7 -157590 8772006.45 -154276 8771733.91 -28705 8771576.64 -100226 8769455 -179195 8769185.16 -184355 8768118.05 -120408 8768011.12 -63145 8761991.96 -53135 8753491.8 -173071 8750508.8 -41087 8749436.79 -194830 8747438.4 -43496 8743359.3 -30235 8741611 -26391 8741399.64 -191816 8740258.72 -47616 8737229.68 -152101 8734432.76 -163784 8730514.34 -5134 8728424.64 -155241 8725429.86 -188814 8724182.4 -140782 8720378.75 -153141 8719407.51 -169373 8718609.06 -41335 8714773.8 -197450 8714617.32 -87004 8714017.79 -181804 8712257.76 -122814 8711119.14 -109939 8709193.16 -98094 8708780.04 -74630 8708040.75 -197291 8706519.09 -184173 8705467.45 -192175 8705411.12 -19471 8702536.12 -18052 8702155.7 -135560 8698137.72 -152791 8697325.8 -170953 8696909.19 -116137 8696687.17 -7722 8696589.4 -49788 8694846.71 -13252 8694822.42 -12633 8694559.36 -193438 8690426.72 -17326 8689329.16 -96124 8679794.58 -143802 8676626.48 -30389 8675826.6 -75250 8675257.14 -72613 8673524.94 -123520 8672456.25 -325 8667741.28 -167291 8667556.18 -150119 8663403.54 -88420 8663355.4 -179784 8653021.34 -130884 8651970 -172611 8648217 -85373 8647796.22 -122717 8646758.54 -113431 8646348.34 -66015 8643349.4 -33141 8643243.18 -69786 8637396.92 -181857 8637393.28 -122939 8636378 -196223 8635391.02 -50532 8632648.24 -58102 8632614.54 -93581 8632372.36 -52804 8632109.25 -755 8627091.68 -16597 8623357.05 -119041 8622397 -89050 8621185.98 -98696 8620784.82 -94399 8620524 -151295 8616671.02 -56417 8613450.35 -121322 8612948.23 -126883 8611373.42 -29155 8610163.64 -114530 8608471.74 -131007 8607394.82 -128715 8606833.62 -72522 8601479.98 -144061 8595718.74 -83503 8595034.2 -112199 8590717.44 -9227 8587350.42 -116318 8585910.66 -41248 8585559.64 -159398 8584821 -105966 8582308.79 -137876 8580641.3 -122272 8580400.77 -195717 8577278.1 -165295 8571121.92 -5840 8570728.74 -120860 8570610.44 -66692 8567540.52 -135596 8563276.31 -150576 8562794.1 -7500 8562393.84 -107716 8561541.56 -100611 8559995.85 -171192 8557390.08 -107660 8556696.6 -13461 8556545.12 -90310 8555131.51 -141493 8553782.93 -71286 8552682 -136423 8551300.76 -54241 8550785.25 -120325 8549976.6 -424 8547527.1 -196543 8545907.09 -13042 8542717.18 -58332 8536074.69 -9191 8535663.92 -134357 8535429.9 -96207 8534900.6 -92292 8530618.78 -181093 8528303.52 -105064 8527491.6 -59635 8526854.08 -136974 8524351.56 -126694 8522783.37 -6247 8522606.9 -139447 8522521.92 -96313 8520949.92 -108454 8520916.25 -181254 8519496.1 -71117 8519223 -131703 8517215.28 -59312 8510568.36 -2903 8509960.35 -102838 8509527.69 -162806 8508906.05 -41527 8508222.36 -118416 8505858.36 -180203 8505024.16 -14773 8500598.28 -140446 8499514.24 -199641 8497362.59 -109240 8494617.12 -150268 8494188.38 -45310 8492380.65 -36552 8490733.6 -199690 8490145.8 -185353 8488726.68 -163615 8484985.01 -196520 8483545.04 -133438 8483482.35 -77285 8481442.32 -55824 8476893.9 -76753 8475522.12 -46129 8472717.96 -28358 8472515.5 -9317 8472145.32 -33823 8469721.44 -39055 8469145.07 -91471 8468874.56 -142299 8466039.55 -97672 8464119.8 -134712 8461781.79 -157988 8460123.2 -102284 8458652.44 -73533 8458453.32 -90599 8457874.86 -112160 8457863.36 -124792 8457633.7 -66097 8457573.15 -165271 8456969.01 -146925 8454887.91 -164277 8454838.5 -131290 8454811.2 -179386 8450909.9 -90486 8447873.86 -175924 8444421.66 -185922 8442394.88 -38492 8436438.32 -172511 8436287.34 -139539 8434180.29 -11926 8433199.52 -55889 8431449.88 -163068 8431116.4 -138772 8428406.36 -126821 8425180.68 -22091 8420687.88 -55981 8419434.38 -100960 8419403.46 -172568 8417955.21 -63135 8415945.53 -137651 8413170.35 -191353 8413039.84 -62988 8411571.48 -103417 8411541.12 -12052 8411519.28 -104260 8408516.55 -157129 8405730.08 -77254 8405537.22 -112966 8403512.89 -168114 8402764.56 -49940 8402328.2 -52017 8398753.6 -176179 8398087 -100215 8395906.61 -61256 8392811.2 -15366 8388907.8 -109479 8388027.2 -66202 8386522.83 -81707 8385761.19 -51727 8385426.4 -9980 8382754.62 -174403 8378575.73 -54558 8378041.92 -3141 8377378.22 -134829 8377105.52 -145056 8376920.76 -194020 8375157.64 -7117 8373982.27 -120146 8373796.2 -126843 8370761.28 -62117 8369493.44 -111221 8367525.81 -159337 8366092.26 -173903 8365428.48 -136438 8364065.45 -56684 8363198 -137597 8363185.94 -20039 8361138.24 -121326 8359635.52 -48435 8352863.1 -1712 8349107 -167190 8347238.7 -32113 8346452.04 -40580 8342983.32 -74785 8342519.13 -14799 8342236.75 -177291 8341736.83 -198956 8340370.65 -69179 8338465.99 -118764 8337616.56 -128814 8336435.56 -82729 8331766.88 -152048 8330638.99 -171085 8326259.5 -126730 8325974.4 -77525 8323282.5 -170653 8322840.5 -5257 8320350.78 -67350 8318987.56 -109008 8317836.54 -199043 8316603.54 -139969 8316551.54 -22634 8316531.24 -173309 8315750.25 -10887 8315019.36 -42392 8312895.96 -126040 8312623.2 -101590 8304555.42 -46891 8302192.12 -138721 8301745.62 -113715 8301533.2 -78778 8299685.64 -142908 8299447.77 -64419 8297631.8 -21396 8296272.27 -4180 8295646.92 -63534 8295383.67 -135957 8294389.86 -30126 8291920.32 -158427 8288938 -14545 8288395.92 -75548 8288287.2 -64473 8286137.44 -149553 8285714.88 -151284 8283526.65 -171091 8282934.36 -194256 8278985.34 -952 8276136 -121541 8275390.26 -177664 8275315.2 -51117 8274504.3 -66770 8273407.8 -37238 8272728.06 -46679 8270486.55 -165852 8268312.6 -99458 8266564.47 -114519 8265493.54 -7231 8264881.5 -19033 8264826.56 -125123 8262732.65 -18642 8261578.99 -50386 8261380.05 -193770 8259578.82 -7276 8258101.6 -178045 8253904.15 -49033 8253696.23 -187195 8251334.58 -10590 8249227.4 -143779 8247057.7 -35205 8245675.17 -19729 8245081.6 -144946 8240479.8 -123786 8239581.24 -70843 8237973.2 -112437 8236907.52 -5436 8236039.57 -163754 8235471.16 -115945 8234811.36 -27918 8233957.88 -105712 8233571.86 -41007 8229431.79 -40476 8226640.41 -145620 8221371.6 -7771 8220413.33 -86424 8215572.61 -129137 8215478.4 -76020 8210495.36 -140213 8209831.8 -32379 8208338.88 -130616 8207715.75 -195469 8206609.8 -191805 8205147.75 -90906 8200951.2 -170910 8195558.01 -105399 8193122.63 -123798 8192385.97 -90218 8191689.16 -114766 8189339.54 -11289 8187354.72 -178308 8185750.5 -71271 8185519.24 -1115 8184903.38 -152636 8184530.72 -151619 8182909.05 -116943 8181072.69 -28891 8181051.54 -47049 8180955 -158827 8180470.9 -92620 8179671.55 -20814 8176953.54 -179323 8176795.55 -193453 8174343.94 -56888 8173342 -28087 8169876.3 -164254 8169632.35 -57661 8168848.16 -7363 8167538.05 -164499 8167512.08 -197557 8165940.45 -5495 8164805.22 -966 8163824.79 -98435 8161771.45 -127227 8161344.92 -194100 8160978.78 -40134 8160358.08 -107341 8159952.05 -6790 8158792.66 -43851 8157101.4 -51295 8156419.2 -69512 8151537 -164274 8149869.93 -130854 8145338.85 -186865 8143586.82 -176629 8141411.2 -193739 8141377.77 -6810 8139822.6 -27732 8136724.96 -50616 8134089.82 -123908 8128920.54 -140994 8128470.82 -99039 8128290.78 -62735 8124940.5 -47829 8122796.5 -192635 8122687.57 -192429 8119268 -145812 8119165.63 -42896 8118529.8 -146877 8118266.16 -60882 8116095.04 -18254 8114783.04 -165464 8114571.8 -57936 8111927.25 -52226 8110723.32 -128571 8106788.8 -100308 8105837.04 -8872 8102395.62 -58867 8102033.19 -145153 8100222.84 -172088 8098138.2 -59398 8095845.45 -89395 8093576.1 -171961 8093538 -88736 8090762.16 -174053 8090350.11 -102237 8089103.22 -43041 8086537.9 -110219 8085296.9 -126738 8084199.2 -44787 8083628.4 -31277 8083580.76 -93595 8082188.8 -189040 8080257.21 -59851 8079024.24 -175100 8077904.01 -43429 8076729.96 -154199 8074940.76 -60963 8073894.4 -8768 8072760.96 -66095 8071421.7 -111552 8068184.48 -24563 8067500.4 -16167 8067495.24 -12662 8067248.85 -94540 8063727.16 -23308 8063463.18 -27390 8062823.25 -130660 8062787.48 -8608 8062411.16 -181552 8062008.3 -199319 8060248.56 -55475 8058850.92 -142711 8057926.58 -103499 8056978 -105943 8056698.75 -8432 8053052.16 -149392 8049675.69 -101248 8048855.49 -140962 8047260.7 -87101 8046651.83 -133107 8046476.73 -45126 8045924.4 -87508 8042966.39 -124711 8042722.72 -173169 8042224.41 -175161 8041331.98 -167787 8040075.78 -3242 8038855.53 -114789 8038628.35 -43833 8038545.83 -141198 8035110.72 -137248 8034109.35 -96673 8033491.2 -32180 8032380.72 -166493 8031902.4 -66959 8031839.4 -85628 8029693.44 -110971 8029469.7 -130395 8027463.92 -7757 8026840.37 -178446 8025379.09 -41295 8024785.53 -100956 8024179.3 -131917 8021604.78 -24224 8020463.52 -2073 8020009.64 -121622 8018462.17 -14357 8016906.3 -135601 8016209.44 -58458 8016192.52 -73036 8015799 -184722 8015680.31 -151664 8014821.96 -195090 8012680.2 -162609 8011241 -83532 8009753.85 -50166 8007137.89 -181562 8006805.96 -175165 8005319.76 -62500 8005316.28 -36342 8004333.4 -128435 8004242.88 -92516 8003836.8 -30802 8003710.88 -107418 8000430.3 -46620 7999778.35 -191803 7994734.15 -106343 7993087.76 -59362 7990397.46 -8329 7990052.9 -75133 7988244 -179023 7986829.62 -135899 7985726.64 -5824 7985340.02 -148579 7984889.56 -95888 7984735.72 -9791 7982699.79 -170437 7982370.72 -39782 7977858.24 -20605 7977556 -28682 7976960 -42172 7973399 -56137 7971405.4 -64729 7970769.72 -98643 7968603.73 -153787 7967535.58 -8932 7967222.19 -20134 7965713.28 -197635 7963507.58 -80408 7963312.17 -37728 7961875.68 -26624 7961772.31 -44736 7961144.1 -29763 7960605.03 -36147 7959463.68 -146040 7957587.66 -115469 7957485.14 -142276 7956790.63 -181280 7954037.35 -115096 7953047.55 -109650 7952258.73 -93862 7951992.24 -158325 7950728.3 -55952 7950387.06 -122397 7947106.27 -28114 7946945.72 -11966 7945197.48 -47814 7944083 -85096 7943691.06 -51657 7943593.77 -196680 7943578.89 -13141 7942730.34 -193327 7941036.25 -152612 7940663.71 -139680 7939242.36 -31134 7938318.3 -45636 7937240.85 -56694 7936015.95 -8114 7933921.88 -71518 7932261.69 -72922 7930400.64 -146699 7929167.4 -92387 7928972.67 -186289 7928786.19 -95952 7927972.78 -196514 7927180.7 -4403 7925729.04 -2267 7925649.37 -45924 7925047.68 -11493 7916722.23 -104478 7916253.6 -166794 7913842 -161995 7910874.27 -23538 7909752.06 -41093 7909579.92 -112073 7908617.57 -92814 7908262.5 -88919 7907992.5 -79753 7907933.88 -108765 7905338.98 -146530 7905336.6 -71475 7903367.58 -36289 7901946.5 -61739 7900794 -52338 7898638.08 -194299 7898421.24 -105235 7897829.94 -77207 7897752.72 -96712 7897575.27 -10157 7897046.25 -171154 7896814.5 -79373 7896186 -113808 7893353.88 -27901 7892952 -128820 7892882.72 -25891 7890511.2 -122819 7888881.02 -154731 7888301.33 -101674 7879324.6 -51968 7879102.21 -72073 7877736.11 -5182 7874521.73 +129760 17538456.860000000 +166726 16503353.920000000 +191287 16474801.970000000 +161758 16101755.540000000 +34452 15983844.720000000 +139035 15907078.340000000 +9403 15451755.620000000 +154358 15212937.880000000 +38823 15064802.860000000 +85606 15053957.150000000 +33354 14408297.400000000 +154747 14407580.680000000 +82865 14235489.780000000 +76094 14094247.040000000 +222 13937777.740000000 +121271 13908336.000000000 +55221 13716120.470000000 +22819 13666434.280000000 +76281 13646853.680000000 +85298 13581154.930000000 +85158 13554904.000000000 +139684 13535538.720000000 +31034 13498025.250000000 +87305 13482847.040000000 +10181 13445148.750000000 +62323 13411824.300000000 +26489 13377256.380000000 +96493 13339057.830000000 +56548 13329014.970000000 +55576 13306843.350000000 +159751 13306614.480000000 +92406 13287414.500000000 +182636 13223726.740000000 +199969 13135288.210000000 +62865 13001926.940000000 +7284 12945298.190000000 +197867 12944510.520000000 +11562 12931575.510000000 +75165 12916918.120000000 +97175 12911283.500000000 +140840 12896562.230000000 +65241 12890600.460000000 +166120 12876927.220000000 +9035 12863828.700000000 +144616 12853549.300000000 +176723 12832309.740000000 +170884 12792136.580000000 +29790 12723300.330000000 +95213 12555483.730000000 +183873 12550533.050000000 +171235 12476538.300000000 +21533 12437821.320000000 +17290 12432159.500000000 +156397 12260623.500000000 +122611 12222812.980000000 +139155 12220319.250000000 +146316 12215800.610000000 +171381 12199734.520000000 +198633 12078226.950000000 +167417 12046637.620000000 +59512 12043468.760000000 +31688 12034893.640000000 +159586 12001505.840000000 +8993 11963814.300000000 +120302 11857707.550000000 +43536 11779340.520000000 +9552 11776909.160000000 +86223 11772205.080000000 +53776 11758669.650000000 +131285 11616953.740000000 +91628 11611114.830000000 +169644 11567959.720000000 +182299 11567462.050000000 +33107 11453818.760000000 +104184 11436657.440000000 +67027 11419127.140000000 +176869 11371451.710000000 +30885 11369674.790000000 +54420 11345076.880000000 +72240 11313951.050000000 +178708 11294635.170000000 +81298 11273686.130000000 +158324 11243442.720000000 +117095 11242535.240000000 +176793 11237733.380000000 +86091 11177793.790000000 +116033 11145434.360000000 +129058 11119112.200000000 +193714 11104706.390000000 +117195 11077217.960000000 +49851 11043701.780000000 +19791 11030662.620000000 +75800 11012401.620000000 +161562 10996371.690000000 +10119 10980015.750000000 +39185 10970042.560000000 +47223 10950022.130000000 +175594 10942923.050000000 +111295 10893675.610000000 +155446 10852764.570000000 +156391 10839810.380000000 +40884 10837234.190000000 +141288 10837130.210000000 +152388 10830977.820000000 +33449 10830858.720000000 +149035 10826130.020000000 +162620 10814275.680000000 +118324 10791788.100000000 +38932 10777541.750000000 +121294 10764225.220000000 +48721 10762582.490000000 +63342 10740132.600000000 +5614 10724668.800000000 +62266 10711143.100000000 +100202 10696675.550000000 +197741 10688560.720000000 +169178 10648522.800000000 +5271 10639392.650000000 +34499 10584177.100000000 +71108 10569117.560000000 +137132 10539880.470000000 +78451 10524873.240000000 +150827 10503810.480000000 +107237 10488030.840000000 +101727 10473558.100000000 +58708 10466280.440000000 +89768 10465477.220000000 +146493 10444291.580000000 +55424 10444006.480000000 +16560 10425574.740000000 +133114 10415097.900000000 +195810 10413625.200000000 +76673 10391977.180000000 +97305 10390890.570000000 +134210 10387210.020000000 +188536 10386529.920000000 +122255 10335760.320000000 +2682 10312966.100000000 +43814 10303086.610000000 +34767 10290405.180000000 +165584 10273705.890000000 +2231 10270415.550000000 +111259 10263256.560000000 +195578 10239795.820000000 +21093 10217531.300000000 +29856 10216932.540000000 +133686 10213345.760000000 +87745 10185509.400000000 +135153 10179379.700000000 +11773 10167410.840000000 +76316 10165151.700000000 +123076 10161225.780000000 +91894 10130462.190000000 +39741 10128387.520000000 +111753 10119780.980000000 +142729 10104748.890000000 +116775 10097750.420000000 +102589 10034784.360000000 +186268 10012181.570000000 +44545 10000286.480000000 +23307 9966577.500000000 +124281 9930018.900000000 +69604 9925730.640000000 +21971 9908982.030000000 +58148 9895894.400000000 +16532 9886529.900000000 +159180 9883744.430000000 +74733 9877582.880000000 +35173 9858275.920000000 +7116 9856881.020000000 +124620 9838589.140000000 +122108 9829949.350000000 +67200 9828690.690000000 +164775 9821424.440000000 +9039 9816447.720000000 +14912 9803102.200000000 +190906 9791315.700000000 +130398 9781674.270000000 +119310 9776927.210000000 +10132 9770930.780000000 +107211 9757586.250000000 +113958 9757065.500000000 +37009 9748362.690000000 +66746 9743528.760000000 +134486 9731922.000000000 +15945 9731096.450000000 +55307 9717745.800000000 +56362 9714922.830000000 +57726 9711792.100000000 +57256 9708621.000000000 +112292 9701653.080000000 +87514 9699492.530000000 +174206 9680562.020000000 +72865 9679043.340000000 +114357 9671017.440000000 +112807 9665019.210000000 +115203 9661018.730000000 +177454 9658906.350000000 +161275 9634313.710000000 +61893 9617095.440000000 +122219 9604888.200000000 +183427 9601362.580000000 +59158 9599705.960000000 +61931 9584918.980000000 +5532 9579964.140000000 +20158 9576714.380000000 +167199 9557413.080000000 +38869 9550279.530000000 +86949 9541943.700000000 +198544 9538613.920000000 +193762 9538238.940000000 +108807 9536247.160000000 +168324 9535647.990000000 +115588 9532195.040000000 +141372 9529702.140000000 +175120 9526068.660000000 +163851 9522808.830000000 +160954 9520359.450000000 +117757 9517882.800000000 +52594 9508325.760000000 +60960 9498843.060000000 +70272 9495775.620000000 +44050 9495515.360000000 +152213 9494756.960000000 +121203 9492601.300000000 +70114 9491012.300000000 +167588 9484741.110000000 +136455 9476241.780000000 +4357 9464355.640000000 +6786 9463632.570000000 +61345 9455336.700000000 +160826 9446754.840000000 +71275 9440138.400000000 +77746 9439118.350000000 +91289 9437472.000000000 +56723 9435102.160000000 +86647 9434604.180000000 +131234 9432120.000000000 +198129 9427651.360000000 +165530 9426193.680000000 +69233 9425053.920000000 +6243 9423304.660000000 +90110 9420422.700000000 +191980 9419368.360000000 +38461 9419316.070000000 +167873 9419024.490000000 +159373 9416950.150000000 +128707 9413428.500000000 +45267 9410863.780000000 +48460 9409793.930000000 +197672 9406887.680000000 +60884 9403442.400000000 +15209 9403245.310000000 +138049 9401262.100000000 +199286 9391770.700000000 +19629 9391236.400000000 +134019 9390615.150000000 +169475 9387639.580000000 +165918 9379510.440000000 +135602 9374251.540000000 +162323 9367566.510000000 +96277 9360850.680000000 +98336 9359671.290000000 +119781 9356395.730000000 +34440 9355365.000000000 +57362 9355180.100000000 +167236 9352973.840000000 +38463 9347530.940000000 +86749 9346826.440000000 +170007 9345699.900000000 +193087 9343744.000000000 +150383 9332576.750000000 +60932 9329582.020000000 +128420 9328206.350000000 +162145 9327722.880000000 +55686 9320304.400000000 +163080 9304916.960000000 +160583 9303515.920000000 +118153 9298606.560000000 +152634 9282184.570000000 +84731 9276586.920000000 +119989 9273814.200000000 +114584 9269698.650000000 +131817 9268570.080000000 +29068 9256583.880000000 +44116 9255922.000000000 +115818 9253311.910000000 +103388 9239218.080000000 +186118 9236209.120000000 +155809 9235410.840000000 +147003 9234847.990000000 +27769 9232511.640000000 +112779 9231927.360000000 +124851 9228982.680000000 +158488 9227216.400000000 +83328 9224792.200000000 +136797 9222927.090000000 +141730 9216370.680000000 +87304 9215695.500000000 +156004 9215557.900000000 +140740 9215329.200000000 +100648 9212185.080000000 +174774 9211718.000000000 +37644 9211578.600000000 +48807 9209496.240000000 +95940 9207948.400000000 +141586 9206699.220000000 +147248 9205654.950000000 +61372 9205228.760000000 +52970 9204415.950000000 +26430 9203710.510000000 +28504 9201669.200000000 +25810 9198878.500000000 +125329 9198688.500000000 +167867 9194022.720000000 +134767 9191444.720000000 +127745 9191271.560000000 +69208 9187110.000000000 +155222 9186469.160000000 +196916 9182995.820000000 +195590 9176353.120000000 +169155 9175176.090000000 +81558 9171946.500000000 +185136 9171293.040000000 +114790 9168509.100000000 +194142 9165836.610000000 +167639 9161165.000000000 +11241 9160789.460000000 +82628 9160155.540000000 +41399 9148338.000000000 +30755 9146196.840000000 +6944 9143574.580000000 +6326 9138803.160000000 +101296 9135657.620000000 +181479 9121093.300000000 +76898 9120983.100000000 +64274 9118745.250000000 +175826 9117387.990000000 +142215 9116876.880000000 +103415 9113128.620000000 +119765 9110768.790000000 +107624 9108837.450000000 +84215 9105257.360000000 +73774 9102651.920000000 +173972 9102069.000000000 +69817 9095513.880000000 +86943 9092253.000000000 +138859 9087719.300000000 +162273 9085296.480000000 +175945 9080401.210000000 +16836 9075715.440000000 +70224 9075265.950000000 +139765 9074755.890000000 +30319 9073233.100000000 +3851 9072657.240000000 +181271 9070631.520000000 +162184 9068835.780000000 +81683 9067258.470000000 +153028 9067010.510000000 +123324 9061870.950000000 +186481 9058608.300000000 +167680 9052908.760000000 +165293 9050545.700000000 +122148 9046298.170000000 +138604 9045840.800000000 +78851 9044822.600000000 +137280 9042355.340000000 +8823 9040855.100000000 +163900 9040848.480000000 +75600 9035392.450000000 +81676 9031999.400000000 +46033 9031460.580000000 +194917 9028500.000000000 +133936 9026949.020000000 +33182 9024971.100000000 +34220 9021485.390000000 +20118 9019942.600000000 +178258 9019881.660000000 +15560 9017687.280000000 +111425 9016198.560000000 +95942 9015585.120000000 +132709 9015240.150000000 +39731 9014746.950000000 +154307 9012571.200000000 +23769 9008157.600000000 +93328 9007211.200000000 +142826 8998297.440000000 +188792 8996014.000000000 +68703 8994982.220000000 +145280 8990941.050000000 +150725 8985686.160000000 +172046 8982469.520000000 +70476 8967629.500000000 +124988 8966805.220000000 +17937 8963319.760000000 +177372 8954873.640000000 +137994 8950916.790000000 +84019 8950039.980000000 +40389 8946158.200000000 +69187 8941054.140000000 +4863 8939044.920000000 +50465 8930503.140000000 +43686 8915543.840000000 +131352 8909053.590000000 +198916 8906940.030000000 +135932 8905282.950000000 +104673 8903682.000000000 +152308 8903244.080000000 +135298 8900323.200000000 +156873 8899429.100000000 +157454 8897339.200000000 +75415 8897068.090000000 +46325 8895569.090000000 +1966 8895117.060000000 +24576 8895034.750000000 +19425 8890156.600000000 +169735 8890085.560000000 +32225 8889829.280000000 +124537 8889770.710000000 +146327 8887836.230000000 +121562 8887740.400000000 +44731 8882444.950000000 +93141 8881850.880000000 +187871 8873506.180000000 +71709 8873057.280000000 +151913 8869321.170000000 +33786 8868955.390000000 +35902 8868126.060000000 +23588 8867769.900000000 +24508 8867616.000000000 +161282 8866661.430000000 +188061 8862304.000000000 +132847 8862082.000000000 +166843 8861200.800000000 +30609 8860214.730000000 +56191 8856546.960000000 +160740 8852685.430000000 +71229 8846106.990000000 +91208 8845541.280000000 +10995 8845306.560000000 +78094 8839938.290000000 +36489 8838538.100000000 +198437 8836494.840000000 +151693 8833807.640000000 +185367 8829791.370000000 +65682 8820622.890000000 +65421 8819329.240000000 +122225 8816821.860000000 +85330 8811013.160000000 +64555 8810643.120000000 +104188 8808211.020000000 +54411 8805703.400000000 +39438 8805282.560000000 +70795 8800060.920000000 +20383 8799073.280000000 +21952 8798624.190000000 +63584 8796590.000000000 +158768 8796422.950000000 +166588 8796214.380000000 +120600 8793558.060000000 +157202 8788287.880000000 +55358 8786820.750000000 +168322 8786670.730000000 +25143 8786324.800000000 +5368 8786274.140000000 +114025 8786201.120000000 +97744 8785315.940000000 +164327 8784503.860000000 +76542 8782613.280000000 +4731 8772846.700000000 +157590 8772006.450000000 +154276 8771733.910000000 +28705 8771576.640000000 +100226 8769455.000000000 +179195 8769185.160000000 +184355 8768118.050000000 +120408 8768011.120000000 +63145 8761991.960000000 +53135 8753491.800000000 +173071 8750508.800000000 +41087 8749436.790000000 +194830 8747438.400000000 +43496 8743359.300000000 +30235 8741611.000000000 +26391 8741399.640000000 +191816 8740258.720000000 +47616 8737229.680000000 +152101 8734432.760000000 +163784 8730514.340000000 +5134 8728424.640000000 +155241 8725429.860000000 +188814 8724182.400000000 +140782 8720378.750000000 +153141 8719407.510000000 +169373 8718609.060000000 +41335 8714773.800000000 +197450 8714617.320000000 +87004 8714017.790000000 +181804 8712257.760000000 +122814 8711119.140000000 +109939 8709193.160000000 +98094 8708780.040000000 +74630 8708040.750000000 +197291 8706519.090000000 +184173 8705467.450000000 +192175 8705411.120000000 +19471 8702536.120000000 +18052 8702155.700000000 +135560 8698137.720000000 +152791 8697325.800000000 +170953 8696909.190000000 +116137 8696687.170000000 +7722 8696589.400000000 +49788 8694846.710000000 +13252 8694822.420000000 +12633 8694559.360000000 +193438 8690426.720000000 +17326 8689329.160000000 +96124 8679794.580000000 +143802 8676626.480000000 +30389 8675826.600000000 +75250 8675257.140000000 +72613 8673524.940000000 +123520 8672456.250000000 +325 8667741.280000000 +167291 8667556.180000000 +150119 8663403.540000000 +88420 8663355.400000000 +179784 8653021.340000000 +130884 8651970.000000000 +172611 8648217.000000000 +85373 8647796.220000000 +122717 8646758.540000000 +113431 8646348.340000000 +66015 8643349.400000000 +33141 8643243.180000000 +69786 8637396.920000000 +181857 8637393.280000000 +122939 8636378.000000000 +196223 8635391.020000000 +50532 8632648.240000000 +58102 8632614.540000000 +93581 8632372.360000000 +52804 8632109.250000000 +755 8627091.680000000 +16597 8623357.050000000 +119041 8622397.000000000 +89050 8621185.980000000 +98696 8620784.820000000 +94399 8620524.000000000 +151295 8616671.020000000 +56417 8613450.350000000 +121322 8612948.230000000 +126883 8611373.420000000 +29155 8610163.640000000 +114530 8608471.740000000 +131007 8607394.820000000 +128715 8606833.620000000 +72522 8601479.980000000 +144061 8595718.740000000 +83503 8595034.200000000 +112199 8590717.440000000 +9227 8587350.420000000 +116318 8585910.660000000 +41248 8585559.640000000 +159398 8584821.000000000 +105966 8582308.790000000 +137876 8580641.300000000 +122272 8580400.770000000 +195717 8577278.100000000 +165295 8571121.920000000 +5840 8570728.740000000 +120860 8570610.440000000 +66692 8567540.520000000 +135596 8563276.310000000 +150576 8562794.100000000 +7500 8562393.840000000 +107716 8561541.560000000 +100611 8559995.850000000 +171192 8557390.080000000 +107660 8556696.600000000 +13461 8556545.120000000 +90310 8555131.510000000 +141493 8553782.930000000 +71286 8552682.000000000 +136423 8551300.760000000 +54241 8550785.250000000 +120325 8549976.600000000 +424 8547527.100000000 +196543 8545907.090000000 +13042 8542717.180000000 +58332 8536074.690000000 +9191 8535663.920000000 +134357 8535429.900000000 +96207 8534900.600000000 +92292 8530618.780000000 +181093 8528303.520000000 +105064 8527491.600000000 +59635 8526854.080000000 +136974 8524351.560000000 +126694 8522783.370000000 +6247 8522606.900000000 +139447 8522521.920000000 +96313 8520949.920000000 +108454 8520916.250000000 +181254 8519496.100000000 +71117 8519223.000000000 +131703 8517215.280000000 +59312 8510568.360000000 +2903 8509960.350000000 +102838 8509527.690000000 +162806 8508906.050000000 +41527 8508222.360000000 +118416 8505858.360000000 +180203 8505024.160000000 +14773 8500598.280000000 +140446 8499514.240000000 +199641 8497362.590000000 +109240 8494617.120000000 +150268 8494188.380000000 +45310 8492380.650000000 +36552 8490733.600000000 +199690 8490145.800000000 +185353 8488726.680000000 +163615 8484985.010000000 +196520 8483545.040000000 +133438 8483482.350000000 +77285 8481442.320000000 +55824 8476893.900000000 +76753 8475522.120000000 +46129 8472717.960000000 +28358 8472515.500000000 +9317 8472145.320000000 +33823 8469721.440000000 +39055 8469145.070000000 +91471 8468874.560000000 +142299 8466039.550000000 +97672 8464119.800000000 +134712 8461781.790000000 +157988 8460123.200000000 +102284 8458652.440000000 +73533 8458453.320000000 +90599 8457874.860000000 +112160 8457863.360000000 +124792 8457633.700000000 +66097 8457573.150000000 +165271 8456969.010000000 +146925 8454887.910000000 +164277 8454838.500000000 +131290 8454811.200000000 +179386 8450909.900000000 +90486 8447873.860000000 +175924 8444421.660000000 +185922 8442394.880000000 +38492 8436438.320000000 +172511 8436287.340000000 +139539 8434180.290000000 +11926 8433199.520000000 +55889 8431449.880000000 +163068 8431116.400000000 +138772 8428406.360000000 +126821 8425180.680000000 +22091 8420687.880000000 +55981 8419434.380000000 +100960 8419403.460000000 +172568 8417955.210000000 +63135 8415945.530000000 +137651 8413170.350000000 +191353 8413039.840000000 +62988 8411571.480000000 +103417 8411541.120000000 +12052 8411519.280000000 +104260 8408516.550000000 +157129 8405730.080000000 +77254 8405537.220000000 +112966 8403512.890000000 +168114 8402764.560000000 +49940 8402328.200000000 +52017 8398753.600000000 +176179 8398087.000000000 +100215 8395906.610000000 +61256 8392811.200000000 +15366 8388907.800000000 +109479 8388027.200000000 +66202 8386522.830000000 +81707 8385761.190000000 +51727 8385426.400000000 +9980 8382754.620000000 +174403 8378575.730000000 +54558 8378041.920000000 +3141 8377378.220000000 +134829 8377105.520000000 +145056 8376920.760000000 +194020 8375157.640000000 +7117 8373982.270000000 +120146 8373796.200000000 +126843 8370761.280000000 +62117 8369493.440000000 +111221 8367525.810000000 +159337 8366092.260000000 +173903 8365428.480000000 +136438 8364065.450000000 +56684 8363198.000000000 +137597 8363185.940000000 +20039 8361138.240000000 +121326 8359635.520000000 +48435 8352863.100000000 +1712 8349107.000000000 +167190 8347238.700000000 +32113 8346452.040000000 +40580 8342983.320000000 +74785 8342519.130000000 +14799 8342236.750000000 +177291 8341736.830000000 +198956 8340370.650000000 +69179 8338465.990000000 +118764 8337616.560000000 +128814 8336435.560000000 +82729 8331766.880000000 +152048 8330638.990000000 +171085 8326259.500000000 +126730 8325974.400000000 +77525 8323282.500000000 +170653 8322840.500000000 +5257 8320350.780000000 +67350 8318987.560000000 +109008 8317836.540000000 +199043 8316603.540000000 +139969 8316551.540000000 +22634 8316531.240000000 +173309 8315750.250000000 +10887 8315019.360000000 +42392 8312895.960000000 +126040 8312623.200000000 +101590 8304555.420000000 +46891 8302192.120000000 +138721 8301745.620000000 +113715 8301533.200000000 +78778 8299685.640000000 +142908 8299447.770000000 +64419 8297631.800000000 +21396 8296272.270000000 +4180 8295646.920000000 +63534 8295383.670000000 +135957 8294389.860000000 +30126 8291920.320000000 +158427 8288938.000000000 +14545 8288395.920000000 +75548 8288287.200000000 +64473 8286137.440000000 +149553 8285714.880000000 +151284 8283526.650000000 +171091 8282934.360000000 +194256 8278985.340000000 +952 8276136.000000000 +121541 8275390.260000000 +177664 8275315.200000000 +51117 8274504.300000000 +66770 8273407.800000000 +37238 8272728.060000000 +46679 8270486.550000000 +165852 8268312.600000000 +99458 8266564.470000000 +114519 8265493.540000000 +7231 8264881.500000000 +19033 8264826.560000000 +125123 8262732.650000000 +18642 8261578.990000000 +50386 8261380.050000000 +193770 8259578.820000000 +7276 8258101.600000000 +178045 8253904.150000000 +49033 8253696.230000000 +187195 8251334.580000000 +10590 8249227.400000000 +143779 8247057.700000000 +35205 8245675.170000000 +19729 8245081.600000000 +144946 8240479.800000000 +123786 8239581.240000000 +70843 8237973.200000000 +112437 8236907.520000000 +5436 8236039.570000000 +163754 8235471.160000000 +115945 8234811.360000000 +27918 8233957.880000000 +105712 8233571.860000000 +41007 8229431.790000000 +40476 8226640.410000000 +145620 8221371.600000000 +7771 8220413.330000000 +86424 8215572.610000000 +129137 8215478.400000000 +76020 8210495.360000000 +140213 8209831.800000000 +32379 8208338.880000000 +130616 8207715.750000000 +195469 8206609.800000000 +191805 8205147.750000000 +90906 8200951.200000000 +170910 8195558.010000000 +105399 8193122.630000000 +123798 8192385.970000000 +90218 8191689.160000000 +114766 8189339.540000000 +11289 8187354.720000000 +178308 8185750.500000000 +71271 8185519.240000000 +1115 8184903.380000000 +152636 8184530.720000000 +151619 8182909.050000000 +116943 8181072.690000000 +28891 8181051.540000000 +47049 8180955.000000000 +158827 8180470.900000000 +92620 8179671.550000000 +20814 8176953.540000000 +179323 8176795.550000000 +193453 8174343.940000000 +56888 8173342.000000000 +28087 8169876.300000000 +164254 8169632.350000000 +57661 8168848.160000000 +7363 8167538.050000000 +164499 8167512.080000000 +197557 8165940.450000000 +5495 8164805.220000000 +966 8163824.790000000 +98435 8161771.450000000 +127227 8161344.920000000 +194100 8160978.780000000 +40134 8160358.080000000 +107341 8159952.050000000 +6790 8158792.660000000 +43851 8157101.400000000 +51295 8156419.200000000 +69512 8151537.000000000 +164274 8149869.930000000 +130854 8145338.850000000 +186865 8143586.820000000 +176629 8141411.200000000 +193739 8141377.770000000 +6810 8139822.600000000 +27732 8136724.960000000 +50616 8134089.820000000 +123908 8128920.540000000 +140994 8128470.820000000 +99039 8128290.780000000 +62735 8124940.500000000 +47829 8122796.500000000 +192635 8122687.570000000 +192429 8119268.000000000 +145812 8119165.630000000 +42896 8118529.800000000 +146877 8118266.160000000 +60882 8116095.040000000 +18254 8114783.040000000 +165464 8114571.800000000 +57936 8111927.250000000 +52226 8110723.320000000 +128571 8106788.800000000 +100308 8105837.040000000 +8872 8102395.620000000 +58867 8102033.190000000 +145153 8100222.840000000 +172088 8098138.200000000 +59398 8095845.450000000 +89395 8093576.100000000 +171961 8093538.000000000 +88736 8090762.160000000 +174053 8090350.110000000 +102237 8089103.220000000 +43041 8086537.900000000 +110219 8085296.900000000 +126738 8084199.200000000 +44787 8083628.400000000 +31277 8083580.760000000 +93595 8082188.800000000 +189040 8080257.210000000 +59851 8079024.240000000 +175100 8077904.010000000 +43429 8076729.960000000 +154199 8074940.760000000 +60963 8073894.400000000 +8768 8072760.960000000 +66095 8071421.700000000 +111552 8068184.480000000 +24563 8067500.400000000 +16167 8067495.240000000 +12662 8067248.850000000 +94540 8063727.160000000 +23308 8063463.180000000 +27390 8062823.250000000 +130660 8062787.480000000 +8608 8062411.160000000 +181552 8062008.300000000 +199319 8060248.560000000 +55475 8058850.920000000 +142711 8057926.580000000 +103499 8056978.000000000 +105943 8056698.750000000 +8432 8053052.160000000 +149392 8049675.690000000 +101248 8048855.490000000 +140962 8047260.700000000 +87101 8046651.830000000 +133107 8046476.730000000 +45126 8045924.400000000 +87508 8042966.390000000 +124711 8042722.720000000 +173169 8042224.410000000 +175161 8041331.980000000 +167787 8040075.780000000 +3242 8038855.530000000 +114789 8038628.350000000 +43833 8038545.830000000 +141198 8035110.720000000 +137248 8034109.350000000 +96673 8033491.200000000 +32180 8032380.720000000 +166493 8031902.400000000 +66959 8031839.400000000 +85628 8029693.440000000 +110971 8029469.700000000 +130395 8027463.920000000 +7757 8026840.370000000 +178446 8025379.090000000 +41295 8024785.530000000 +100956 8024179.300000000 +131917 8021604.780000000 +24224 8020463.520000000 +2073 8020009.640000000 +121622 8018462.170000000 +14357 8016906.300000000 +135601 8016209.440000000 +58458 8016192.520000000 +73036 8015799.000000000 +184722 8015680.310000000 +151664 8014821.960000000 +195090 8012680.200000000 +162609 8011241.000000000 +83532 8009753.850000000 +50166 8007137.890000000 +181562 8006805.960000000 +175165 8005319.760000000 +62500 8005316.280000000 +36342 8004333.400000000 +128435 8004242.880000000 +92516 8003836.800000000 +30802 8003710.880000000 +107418 8000430.300000000 +46620 7999778.350000000 +191803 7994734.150000000 +106343 7993087.760000000 +59362 7990397.460000000 +8329 7990052.900000000 +75133 7988244.000000000 +179023 7986829.620000000 +135899 7985726.640000000 +5824 7985340.020000000 +148579 7984889.560000000 +95888 7984735.720000000 +9791 7982699.790000000 +170437 7982370.720000000 +39782 7977858.240000000 +20605 7977556.000000000 +28682 7976960.000000000 +42172 7973399.000000000 +56137 7971405.400000000 +64729 7970769.720000000 +98643 7968603.730000000 +153787 7967535.580000000 +8932 7967222.190000000 +20134 7965713.280000000 +197635 7963507.580000000 +80408 7963312.170000000 +37728 7961875.680000000 +26624 7961772.310000000 +44736 7961144.100000000 +29763 7960605.030000000 +36147 7959463.680000000 +146040 7957587.660000000 +115469 7957485.140000000 +142276 7956790.630000000 +181280 7954037.350000000 +115096 7953047.550000000 +109650 7952258.730000000 +93862 7951992.240000000 +158325 7950728.300000000 +55952 7950387.060000000 +122397 7947106.270000000 +28114 7946945.720000000 +11966 7945197.480000000 +47814 7944083.000000000 +85096 7943691.060000000 +51657 7943593.770000000 +196680 7943578.890000000 +13141 7942730.340000000 +193327 7941036.250000000 +152612 7940663.710000000 +139680 7939242.360000000 +31134 7938318.300000000 +45636 7937240.850000000 +56694 7936015.950000000 +8114 7933921.880000000 +71518 7932261.690000000 +72922 7930400.640000000 +146699 7929167.400000000 +92387 7928972.670000000 +186289 7928786.190000000 +95952 7927972.780000000 +196514 7927180.700000000 +4403 7925729.040000000 +2267 7925649.370000000 +45924 7925047.680000000 +11493 7916722.230000000 +104478 7916253.600000000 +166794 7913842.000000000 +161995 7910874.270000000 +23538 7909752.060000000 +41093 7909579.920000000 +112073 7908617.570000000 +92814 7908262.500000000 +88919 7907992.500000000 +79753 7907933.880000000 +108765 7905338.980000000 +146530 7905336.600000000 +71475 7903367.580000000 +36289 7901946.500000000 +61739 7900794.000000000 +52338 7898638.080000000 +194299 7898421.240000000 +105235 7897829.940000000 +77207 7897752.720000000 +96712 7897575.270000000 +10157 7897046.250000000 +171154 7896814.500000000 +79373 7896186.000000000 +113808 7893353.880000000 +27901 7892952.000000000 +128820 7892882.720000000 +25891 7890511.200000000 +122819 7888881.020000000 +154731 7888301.330000000 +101674 7879324.600000000 +51968 7879102.210000000 +72073 7877736.110000000 +5182 7874521.730000000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q15.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q15.out index 6e1807cb92bce5..fabce0b5be8b14 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q15.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q15.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q15 -- -8449 Supplier#000008449 Wp34zim9qYFbVctdW 20-469-856-8873 1772627.2087 +8449 Supplier#000008449 Wp34zim9qYFbVctdW 20-469-856-8873 1772627.208700000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q18.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q18.out index 25f37c81730b2d..625f5d25af0603 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q18.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q18.out @@ -1,60 +1,60 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q18 -- -Customer#000128120 128120 4722021 1994-04-07 544089.09 323 -Customer#000144617 144617 3043270 1997-02-12 530604.44 317 -Customer#000013940 13940 2232932 1997-04-13 522720.61 304 -Customer#000066790 66790 2199712 1996-09-30 515531.82 327 -Customer#000046435 46435 4745607 1997-07-03 508047.99 309 -Customer#000015272 15272 3883783 1993-07-28 500241.33 302 -Customer#000146608 146608 3342468 1994-06-12 499794.58 303 -Customer#000096103 96103 5984582 1992-03-16 494398.79 312 -Customer#000024341 24341 1474818 1992-11-15 491348.26 302 -Customer#000137446 137446 5489475 1997-05-23 487763.25 311 -Customer#000107590 107590 4267751 1994-11-04 485141.38 301 -Customer#000050008 50008 2366755 1996-12-09 483891.26 302 -Customer#000015619 15619 3767271 1996-08-07 480083.96 318 -Customer#000077260 77260 1436544 1992-09-12 479499.43 307 -Customer#000109379 109379 5746311 1996-10-10 478064.11 302 -Customer#000054602 54602 5832321 1997-02-09 471220.08 307 -Customer#000105995 105995 2096705 1994-07-03 469692.58 307 -Customer#000148885 148885 2942469 1992-05-31 469630.44 313 -Customer#000114586 114586 551136 1993-05-19 469605.59 308 -Customer#000105260 105260 5296167 1996-09-06 469360.57 303 -Customer#000147197 147197 1263015 1997-02-02 467149.67 320 -Customer#000064483 64483 2745894 1996-07-04 466991.35 304 -Customer#000136573 136573 2761378 1996-05-31 461282.73 301 -Customer#000016384 16384 502886 1994-04-12 458378.92 312 -Customer#000117919 117919 2869152 1996-06-20 456815.92 317 -Customer#000012251 12251 735366 1993-11-24 455107.26 309 -Customer#000120098 120098 1971680 1995-06-14 453451.23 308 -Customer#000066098 66098 5007490 1992-08-07 453436.16 304 -Customer#000117076 117076 4290656 1997-02-05 449545.85 301 -Customer#000129379 129379 4720454 1997-06-07 448665.79 303 -Customer#000126865 126865 4702759 1994-11-07 447606.65 320 -Customer#000088876 88876 983201 1993-12-30 446717.46 304 -Customer#000036619 36619 4806726 1995-01-17 446704.09 328 -Customer#000141823 141823 2806245 1996-12-29 446269.12 310 -Customer#000053029 53029 2662214 1993-08-13 446144.49 302 -Customer#000018188 18188 3037414 1995-01-25 443807.22 308 -Customer#000066533 66533 29158 1995-10-21 443576.5 305 -Customer#000037729 37729 4134341 1995-06-29 441082.97 309 -Customer#000003566 3566 2329187 1998-01-04 439803.36 304 -Customer#000045538 45538 4527553 1994-05-22 436275.31 305 -Customer#000081581 81581 4739650 1995-11-04 435405.9 305 -Customer#000119989 119989 1544643 1997-09-20 434568.25 320 -Customer#000003680 3680 3861123 1998-07-03 433525.97 301 -Customer#000113131 113131 967334 1995-12-15 432957.75 301 -Customer#000141098 141098 565574 1995-09-24 430986.69 301 -Customer#000093392 93392 5200102 1997-01-22 425487.51 304 -Customer#000015631 15631 1845057 1994-05-12 419879.59 302 -Customer#000112987 112987 4439686 1996-09-17 418161.49 305 -Customer#000012599 12599 4259524 1998-02-12 415200.61 304 -Customer#000105410 105410 4478371 1996-03-05 412754.51 302 -Customer#000149842 149842 5156581 1994-05-30 411329.35 302 -Customer#000010129 10129 5849444 1994-03-21 409129.85 309 -Customer#000069904 69904 1742403 1996-10-19 408513 305 -Customer#000017746 17746 6882 1997-04-09 408446.93 303 -Customer#000013072 13072 1481925 1998-03-15 399195.47 301 -Customer#000082441 82441 857959 1994-02-07 382579.74 305 -Customer#000088703 88703 2995076 1994-01-30 363812.12 302 +Customer#000128120 128120 4722021 1994-04-07 544089.09 323.000000000 +Customer#000144617 144617 3043270 1997-02-12 530604.44 317.000000000 +Customer#000013940 13940 2232932 1997-04-13 522720.61 304.000000000 +Customer#000066790 66790 2199712 1996-09-30 515531.82 327.000000000 +Customer#000046435 46435 4745607 1997-07-03 508047.99 309.000000000 +Customer#000015272 15272 3883783 1993-07-28 500241.33 302.000000000 +Customer#000146608 146608 3342468 1994-06-12 499794.58 303.000000000 +Customer#000096103 96103 5984582 1992-03-16 494398.79 312.000000000 +Customer#000024341 24341 1474818 1992-11-15 491348.26 302.000000000 +Customer#000137446 137446 5489475 1997-05-23 487763.25 311.000000000 +Customer#000107590 107590 4267751 1994-11-04 485141.38 301.000000000 +Customer#000050008 50008 2366755 1996-12-09 483891.26 302.000000000 +Customer#000015619 15619 3767271 1996-08-07 480083.96 318.000000000 +Customer#000077260 77260 1436544 1992-09-12 479499.43 307.000000000 +Customer#000109379 109379 5746311 1996-10-10 478064.11 302.000000000 +Customer#000054602 54602 5832321 1997-02-09 471220.08 307.000000000 +Customer#000105995 105995 2096705 1994-07-03 469692.58 307.000000000 +Customer#000148885 148885 2942469 1992-05-31 469630.44 313.000000000 +Customer#000114586 114586 551136 1993-05-19 469605.59 308.000000000 +Customer#000105260 105260 5296167 1996-09-06 469360.57 303.000000000 +Customer#000147197 147197 1263015 1997-02-02 467149.67 320.000000000 +Customer#000064483 64483 2745894 1996-07-04 466991.35 304.000000000 +Customer#000136573 136573 2761378 1996-05-31 461282.73 301.000000000 +Customer#000016384 16384 502886 1994-04-12 458378.92 312.000000000 +Customer#000117919 117919 2869152 1996-06-20 456815.92 317.000000000 +Customer#000012251 12251 735366 1993-11-24 455107.26 309.000000000 +Customer#000120098 120098 1971680 1995-06-14 453451.23 308.000000000 +Customer#000066098 66098 5007490 1992-08-07 453436.16 304.000000000 +Customer#000117076 117076 4290656 1997-02-05 449545.85 301.000000000 +Customer#000129379 129379 4720454 1997-06-07 448665.79 303.000000000 +Customer#000126865 126865 4702759 1994-11-07 447606.65 320.000000000 +Customer#000088876 88876 983201 1993-12-30 446717.46 304.000000000 +Customer#000036619 36619 4806726 1995-01-17 446704.09 328.000000000 +Customer#000141823 141823 2806245 1996-12-29 446269.12 310.000000000 +Customer#000053029 53029 2662214 1993-08-13 446144.49 302.000000000 +Customer#000018188 18188 3037414 1995-01-25 443807.22 308.000000000 +Customer#000066533 66533 29158 1995-10-21 443576.50 305.000000000 +Customer#000037729 37729 4134341 1995-06-29 441082.97 309.000000000 +Customer#000003566 3566 2329187 1998-01-04 439803.36 304.000000000 +Customer#000045538 45538 4527553 1994-05-22 436275.31 305.000000000 +Customer#000081581 81581 4739650 1995-11-04 435405.90 305.000000000 +Customer#000119989 119989 1544643 1997-09-20 434568.25 320.000000000 +Customer#000003680 3680 3861123 1998-07-03 433525.97 301.000000000 +Customer#000113131 113131 967334 1995-12-15 432957.75 301.000000000 +Customer#000141098 141098 565574 1995-09-24 430986.69 301.000000000 +Customer#000093392 93392 5200102 1997-01-22 425487.51 304.000000000 +Customer#000015631 15631 1845057 1994-05-12 419879.59 302.000000000 +Customer#000112987 112987 4439686 1996-09-17 418161.49 305.000000000 +Customer#000012599 12599 4259524 1998-02-12 415200.61 304.000000000 +Customer#000105410 105410 4478371 1996-03-05 412754.51 302.000000000 +Customer#000149842 149842 5156581 1994-05-30 411329.35 302.000000000 +Customer#000010129 10129 5849444 1994-03-21 409129.85 309.000000000 +Customer#000069904 69904 1742403 1996-10-19 408513.00 305.000000000 +Customer#000017746 17746 6882 1997-04-09 408446.93 303.000000000 +Customer#000013072 13072 1481925 1998-03-15 399195.47 301.000000000 +Customer#000082441 82441 857959 1994-02-07 382579.74 305.000000000 +Customer#000088703 88703 2995076 1994-01-30 363812.12 302.000000000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q19.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q19.out index 604202a0a39570..c50a3a40196a05 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q19.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q19.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q19 -- -3083843.0578 +3083843.057800000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q22.out b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q22.out index 7cdade17345fe1..ae14ed4fb34f7f 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q22.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/pipeline_q22.out @@ -1,10 +1,10 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !pipeline_q22 -- -13 888 6737713.99 -17 861 6460573.72 -18 964 7236687.4 -23 892 6701457.95 -29 948 7158866.63 -30 909 6808436.13 -31 922 6806670.18 +13 888 6737713.990000000 +17 861 6460573.720000000 +18 964 7236687.400000000 +23 892 6701457.950000000 +29 948 7158866.630000000 +30 909 6808436.130000000 +31 922 6806670.180000000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q01.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q01.out index aaeb9d59242b19..427013f68c2a5d 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q01.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q01.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q01 -- -A F 37734107 56586554400.73 53758257134.87 55909065222.827692 25.522005853 38273.129734622 0.049985296 1478493 -N F 991417 1487504710.38 1413082168.0541 1469649223.194375 25.516471921 38284.467760848 0.050093427 38854 -N O 74476040 111701729697.74 106118230307.6056 110367043872.49701 25.50222677 38249.117988908 0.049996586 2920374 -R F 37719753 56568041380.9 53741292684.604 55889619119.831932 25.505793613 38250.8546261 0.050009406 1478870 +A F 37734107.000000000 56586554400.730000000 53758257134.870000000 55909065222.827692000 25.522005853 38273.129734622 0.049985296 1478493 +N F 991417.000000000 1487504710.380000000 1413082168.054100000 1469649223.194375000 25.516471921 38284.467760848 0.050093427 38854 +N O 74476040.000000000 111701729697.740000000 106118230307.605600000 110367043872.497010000 25.502226770 38249.117988908 0.049996586 2920374 +R F 37719753.000000000 56568041380.900000000 53741292684.604000000 55889619119.831932000 25.505793613 38250.854626100 0.050009406 1478870 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q02.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q02.out index 4ecc79e550a72d..3a7252f5f89bed 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q02.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q02.out @@ -12,8 +12,8 @@ 9847.57 Supplier#000006345 FRANCE 86344 Manufacturer#1 VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag 16-886-766-7945 ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu 9847.57 Supplier#000006345 FRANCE 173827 Manufacturer#2 VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag 16-886-766-7945 ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu 9836.93 Supplier#000007342 RUSSIA 4841 Manufacturer#4 JOlK7C1,7xrEZSSOw 32-399-414-5385 blithely carefully bold theodolites. fur -9817.1 Supplier#000002352 RUSSIA 124815 Manufacturer#2 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex -9817.1 Supplier#000002352 RUSSIA 152351 Manufacturer#3 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex +9817.10 Supplier#000002352 RUSSIA 124815 Manufacturer#2 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex +9817.10 Supplier#000002352 RUSSIA 152351 Manufacturer#3 4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw 32-551-831-1437 wake carefully alongside of the carefully final ex 9739.86 Supplier#000003384 FRANCE 138357 Manufacturer#2 o,Z3v4POifevE k9U1b 6J1ucX,I 16-494-913-5925 s after the furiously bold packages sleep fluffily idly final requests: quickly final 9721.95 Supplier#000008757 UNITED KINGDOM 156241 Manufacturer#3 Atg6GnM4dT2 33-821-407-2995 eep furiously sauternes; quickl 9681.33 Supplier#000008406 RUSSIA 78405 Manufacturer#1 ,qUuXcftUl 32-139-873-8571 haggle slyly regular excuses. quic @@ -23,7 +23,7 @@ 9612.94 Supplier#000003228 ROMANIA 120715 Manufacturer#2 KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB 29-325-784-8187 warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t 9612.94 Supplier#000003228 ROMANIA 198189 Manufacturer#4 KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB 29-325-784-8187 warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t 9571.83 Supplier#000004305 ROMANIA 179270 Manufacturer#2 qNHZ7WmCzygwMPRDO9Ps 29-973-481-1831 kly carefully express asymptotes. furiou -9558.1 Supplier#000003532 UNITED KINGDOM 88515 Manufacturer#4 EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp 33-152-301-2164 foxes. quickly even excuses use. slyly special foxes nag bl +9558.10 Supplier#000003532 UNITED KINGDOM 88515 Manufacturer#4 EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp 33-152-301-2164 foxes. quickly even excuses use. slyly special foxes nag bl 9492.79 Supplier#000005975 GERMANY 25974 Manufacturer#5 S6mIiCTx82z7lV 17-992-579-4839 arefully pending accounts. blithely regular excuses boost carefully carefully ironic p 9461.05 Supplier#000002536 UNITED KINGDOM 20033 Manufacturer#1 8mmGbyzaU 7ZS2wJumTibypncu9pNkDc4FYA 33-556-973-5522 . slyly regular deposits wake slyly. furiously regular warthogs are. 9453.01 Supplier#000000802 ROMANIA 175767 Manufacturer#1 ,6HYXb4uaHITmtMBj4Ak57Pd 29-342-882-6463 gular frets. permanently special multipliers believe blithely alongs @@ -34,16 +34,16 @@ 9312.97 Supplier#000007807 RUSSIA 90279 Manufacturer#5 oGYMPCk9XHGB2PBfKRnHA 32-673-872-5854 ecial packages among the pending, even requests use regula 9312.97 Supplier#000007807 RUSSIA 100276 Manufacturer#5 oGYMPCk9XHGB2PBfKRnHA 32-673-872-5854 ecial packages among the pending, even requests use regula 9280.27 Supplier#000007194 ROMANIA 47193 Manufacturer#3 zhRUQkBSrFYxIAXTfInj vyGRQjeK 29-318-454-2133 o beans haggle after the furiously unusual deposits. carefully silent dolphins cajole carefully -9274.8 Supplier#000008854 RUSSIA 76346 Manufacturer#3 1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa 32-524-148-5221 y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the +9274.80 Supplier#000008854 RUSSIA 76346 Manufacturer#3 1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa 32-524-148-5221 y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the 9249.35 Supplier#000003973 FRANCE 26466 Manufacturer#1 d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4 16-722-866-1658 uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q 9249.35 Supplier#000003973 FRANCE 33972 Manufacturer#1 d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4 16-722-866-1658 uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q -9208.7 Supplier#000007769 ROMANIA 40256 Manufacturer#5 rsimdze 5o9P Ht7xS 29-964-424-9649 lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold +9208.70 Supplier#000007769 ROMANIA 40256 Manufacturer#5 rsimdze 5o9P Ht7xS 29-964-424-9649 lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold 9201.47 Supplier#000009690 UNITED KINGDOM 67183 Manufacturer#5 CB BnUTlmi5zdeEl7R7 33-121-267-9529 e even, even foxes. blithely ironic packages cajole regular packages. slyly final ide -9192.1 Supplier#000000115 UNITED KINGDOM 85098 Manufacturer#3 nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV 33-597-248-1220 es across the carefully express accounts boost caref +9192.10 Supplier#000000115 UNITED KINGDOM 85098 Manufacturer#3 nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV 33-597-248-1220 es across the carefully express accounts boost caref 9189.98 Supplier#000001226 GERMANY 21225 Manufacturer#4 qsLCqSvLyZfuXIpjz 17-725-903-1381 deposits. blithely bold excuses about the slyly bold forges wake 9128.97 Supplier#000004311 RUSSIA 146768 Manufacturer#5 I8IjnXd7NSJRs594RxsRR0 32-155-440-7120 refully. blithely unusual asymptotes haggle 9104.83 Supplier#000008520 GERMANY 150974 Manufacturer#4 RqRVDgD0ER J9 b41vR2,3 17-728-804-1793 ly about the blithely ironic depths. slyly final theodolites among the fluffily bold ideas print -9101 Supplier#000005791 ROMANIA 128254 Manufacturer#5 zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG 29-549-251-5384 ts. notornis detect blithely above the carefully bold requests. blithely even package +9101.00 Supplier#000005791 ROMANIA 128254 Manufacturer#5 zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG 29-549-251-5384 ts. notornis detect blithely above the carefully bold requests. blithely even package 9094.57 Supplier#000004582 RUSSIA 39575 Manufacturer#1 WB0XkCSG3r,mnQ n,h9VIxjjr9ARHFvKgMDf 32-587-577-1351 jole. regular accounts sleep blithely frets. final pinto beans play furiously past the 8996.87 Supplier#000004702 FRANCE 102191 Manufacturer#5 8XVcQK23akp 16-811-269-8946 ickly final packages along the express plat 8996.14 Supplier#000009814 ROMANIA 139813 Manufacturer#2 af0O5pg83lPU4IDVmEylXZVqYZQzSDlYLAmR 29-995-571-8781 dependencies boost quickly across the furiously pending requests! unusual dolphins play sl @@ -68,11 +68,11 @@ 8553.82 Supplier#000003979 ROMANIA 143978 Manufacturer#4 BfmVhCAnCMY3jzpjUMy4CNWs9 HzpdQR7INJU 29-124-646-4897 ic requests wake against the blithely unusual accounts. fluffily r 8517.23 Supplier#000009529 RUSSIA 37025 Manufacturer#5 e44R8o7JAIS9iMcr 32-565-297-8775 ove the even courts. furiously special platelets 8517.23 Supplier#000009529 RUSSIA 59528 Manufacturer#2 e44R8o7JAIS9iMcr 32-565-297-8775 ove the even courts. furiously special platelets -8503.7 Supplier#000006830 RUSSIA 44325 Manufacturer#4 BC4WFCYRUZyaIgchU 4S 32-147-878-5069 pades cajole. furious packages among the carefully express excuses boost furiously across th +8503.70 Supplier#000006830 RUSSIA 44325 Manufacturer#4 BC4WFCYRUZyaIgchU 4S 32-147-878-5069 pades cajole. furious packages among the carefully express excuses boost furiously across th 8457.09 Supplier#000009456 UNITED KINGDOM 19455 Manufacturer#1 7SBhZs8gP1cJjT0Qf433YBk 33-858-440-4349 cing requests along the furiously unusual deposits promise among the furiously unus -8441.4 Supplier#000003817 FRANCE 141302 Manufacturer#2 hU3fz3xL78 16-339-356-5115 ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag +8441.40 Supplier#000003817 FRANCE 141302 Manufacturer#2 hU3fz3xL78 16-339-356-5115 ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag 8432.89 Supplier#000003990 RUSSIA 191470 Manufacturer#1 wehBBp1RQbfxAYDASS75MsywmsKHRVdkrvNe6m 32-839-509-9301 ep furiously. packages should have to haggle slyly across the deposits. furiously regu -8431.4 Supplier#000002675 ROMANIA 5174 Manufacturer#1 HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w 29-474-643-1443 ithely express pinto beans. blithely even foxes haggle. furiously regular theodol +8431.40 Supplier#000002675 ROMANIA 5174 Manufacturer#1 HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w 29-474-643-1443 ithely express pinto beans. blithely even foxes haggle. furiously regular theodol 8407.04 Supplier#000005406 RUSSIA 162889 Manufacturer#4 j7 gYF5RW8DC5UrjKC 32-626-152-4621 r the blithely regular packages. slyly ironic theodoli 8386.08 Supplier#000008518 FRANCE 36014 Manufacturer#3 2jqzqqAVe9crMVGP,n9nTsQXulNLTUYoJjEDcqWV 16-618-780-7481 blithely bold pains are carefully platelets. finally regular pinto beans sleep carefully special 8376.52 Supplier#000005306 UNITED KINGDOM 190267 Manufacturer#5 9t8Y8 QqSIsoADPt6NLdk,TP5zyRx41oBUlgoGc9 33-632-514-7931 ly final accounts sleep special, regular requests. furiously regular @@ -87,7 +87,7 @@ 8046.07 Supplier#000008780 FRANCE 191222 Manufacturer#3 AczzuE0UK9osj ,Lx0Jmh 16-473-215-6395 onic platelets cajole after the regular instructions. permanently bold excuses 8042.09 Supplier#000003245 RUSSIA 135705 Manufacturer#4 Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y 32-836-132-8872 osits. packages cajole slyly. furiously regular deposits cajole slyly. q 8042.09 Supplier#000003245 RUSSIA 150729 Manufacturer#1 Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y 32-836-132-8872 osits. packages cajole slyly. furiously regular deposits cajole slyly. q -7992.4 Supplier#000006108 FRANCE 118574 Manufacturer#1 8tBydnTDwUqfBfFV4l3 16-974-998-8937 ironic ideas? fluffily even instructions wake. blithel +7992.40 Supplier#000006108 FRANCE 118574 Manufacturer#1 8tBydnTDwUqfBfFV4l3 16-974-998-8937 ironic ideas? fluffily even instructions wake. blithel 7980.65 Supplier#000001288 FRANCE 13784 Manufacturer#4 zE,7HgVPrCn 16-646-464-8247 ully bold courts. escapades nag slyly. furiously fluffy theodo 7950.37 Supplier#000008101 GERMANY 33094 Manufacturer#5 kkYvL6IuvojJgTNG IKkaXQDYgx8ILohj 17-627-663-8014 arefully unusual requests x-ray above the quickly final deposits. 7937.93 Supplier#000009012 ROMANIA 83995 Manufacturer#2 iUiTziH,Ek3i4lwSgunXMgrcTzwdb 29-250-925-9690 to the blithely ironic deposits nag sly @@ -96,7 +96,7 @@ 7912.91 Supplier#000004211 GERMANY 184210 Manufacturer#4 2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG 17-266-947-7315 ay furiously regular platelets. cou 7894.56 Supplier#000007981 GERMANY 85472 Manufacturer#4 NSJ96vMROAbeXP 17-963-404-3760 ic platelets affix after the furiously 7887.08 Supplier#000009792 GERMANY 164759 Manufacturer#3 Y28ITVeYriT3kIGdV2K8fSZ V2UqT5H1Otz 17-988-938-4296 ckly around the carefully fluffy theodolites. slyly ironic pack -7871.5 Supplier#000007206 RUSSIA 104695 Manufacturer#1 3w fNCnrVmvJjE95sgWZzvW 32-432-452-7731 ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg +7871.50 Supplier#000007206 RUSSIA 104695 Manufacturer#1 3w fNCnrVmvJjE95sgWZzvW 32-432-452-7731 ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg 7852.45 Supplier#000005864 RUSSIA 8363 Manufacturer#4 WCNfBPZeSXh3h,c 32-454-883-3821 usly unusual pinto beans. brave ideas sleep carefully quickly ironi 7850.66 Supplier#000001518 UNITED KINGDOM 86501 Manufacturer#1 ONda3YJiHKJOC 33-730-383-3892 ifts haggle fluffily pending pai 7843.52 Supplier#000006683 FRANCE 11680 Manufacturer#4 2Z0JGkiv01Y00oCFwUGfviIbhzCdy 16-464-517-8943 express, final pinto beans x-ray slyly asymptotes. unusual, unusual diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q03.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q03.out index 02dd9e22d3cf22..6d835ef8264fbf 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q03.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q03.out @@ -1,13 +1,13 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q03 -- -2456423 406181.0111 1995-03-05 0 -3459808 405838.6989 1995-03-04 0 -492164 390324.061 1995-02-19 0 -1188320 384537.9359 1995-03-09 0 -2435712 378673.0558 1995-02-26 0 -4878020 378376.7952 1995-03-12 0 -5521732 375153.9215 1995-03-13 0 -2628192 373133.3094 1995-02-22 0 -993600 371407.4595 1995-03-05 0 -2300070 367371.1452 1995-03-13 0 +2456423 406181.011100000 1995-03-05 0 +3459808 405838.698900000 1995-03-04 0 +492164 390324.061000000 1995-02-19 0 +1188320 384537.935900000 1995-03-09 0 +2435712 378673.055800000 1995-02-26 0 +4878020 378376.795200000 1995-03-12 0 +5521732 375153.921500000 1995-03-13 0 +2628192 373133.309400000 1995-02-22 0 +993600 371407.459500000 1995-03-05 0 +2300070 367371.145200000 1995-03-13 0 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q05.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q05.out index 5061f92eb3f756..2dc713c349af48 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q05.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q05.out @@ -1,8 +1,8 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q05 -- -INDONESIA 55502041.1697 -VIETNAM 55295086.9967 -CHINA 53724494.2566 -INDIA 52035512.0002 -JAPAN 45410175.6954 +INDONESIA 55502041.169700000 +VIETNAM 55295086.996700000 +CHINA 53724494.256600000 +INDIA 52035512.000200000 +JAPAN 45410175.695400000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q06.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q06.out index 84b603362a6d0e..b8efd770de5cf1 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q06.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q06.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q06 -- -123141078.2283 +123141078.228300000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q07.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q07.out index 28fb76a6dfddd5..18d652b77260d7 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q07.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q07.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q07 -- -FRANCE GERMANY 1995 54639732.7336 -FRANCE GERMANY 1996 54633083.3076 -GERMANY FRANCE 1995 52531746.6697 -GERMANY FRANCE 1996 52520549.0224 +FRANCE GERMANY 1995 54639732.733600000 +FRANCE GERMANY 1996 54633083.307600000 +GERMANY FRANCE 1995 52531746.669700000 +GERMANY FRANCE 1996 52520549.022400000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q08.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q08.out index 74991fae42a8c3..d0a1beeb7f24e7 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q08.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q08.out @@ -1,5 +1,5 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q08 -- -1995 0.03443589 +1995 0.034435890 1996 0.041485521 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q09.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q09.out index cd42354554e42b..65d822bdb4882f 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q09.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q09.out @@ -1,178 +1,178 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q09 -- -ALGERIA 1998 27136900.1803 -ALGERIA 1997 48611833.4962 -ALGERIA 1996 48285482.6782 -ALGERIA 1995 44402273.5999 -ALGERIA 1994 48694008.0668 -ALGERIA 1993 46044207.7838 -ALGERIA 1992 45636849.4881 -ARGENTINA 1998 28341663.7848 -ARGENTINA 1997 47143964.1176 -ARGENTINA 1996 45255278.6021 -ARGENTINA 1995 45631769.2054 -ARGENTINA 1994 48268856.3547 -ARGENTINA 1993 48605593.6162 -ARGENTINA 1992 46654240.7487 -BRAZIL 1998 26527736.396 -BRAZIL 1997 45640660.7677 -BRAZIL 1996 45090647.163 -BRAZIL 1995 44015888.5132 -BRAZIL 1994 44854218.8932 -BRAZIL 1993 45766603.7379 -BRAZIL 1992 45280216.8027 -CANADA 1998 26828985.3944 -CANADA 1997 44849954.3186 -CANADA 1996 46307936.1108 -CANADA 1995 47311993.0441 -CANADA 1994 46691491.9596 -CANADA 1993 46634791.1121 -CANADA 1992 45873849.6882 -CHINA 1998 27510180.1657 -CHINA 1997 46123865.4097 -CHINA 1996 49532807.0601 -CHINA 1995 46734651.4838 -CHINA 1994 46397896.6097 -CHINA 1993 49634673.9463 -CHINA 1992 46949457.6426 -EGYPT 1998 28401491.7968 -EGYPT 1997 47674857.6783 -EGYPT 1996 47745727.545 -EGYPT 1995 45897160.6783 -EGYPT 1994 47194895.228 -EGYPT 1993 49133627.6471 -EGYPT 1992 47000574.5027 -ETHIOPIA 1998 25135046.1377 -ETHIOPIA 1997 43010596.0838 -ETHIOPIA 1996 43636287.1922 -ETHIOPIA 1995 43575757.3343 -ETHIOPIA 1994 41597208.5283 -ETHIOPIA 1993 42622804.1616 -ETHIOPIA 1992 44385735.6813 -FRANCE 1998 26210392.2804 -FRANCE 1997 42392969.4731 -FRANCE 1996 43306317.9749 -FRANCE 1995 46377408.4328 -FRANCE 1994 43447352.9922 -FRANCE 1993 43729961.0639 -FRANCE 1992 44052308.429 -GERMANY 1998 25991257.1071 -GERMANY 1997 43968355.8079 -GERMANY 1996 45882074.8049 -GERMANY 1995 43314338.3077 -GERMANY 1994 44616995.4369 -GERMANY 1993 45126645.9113 -GERMANY 1992 44361141.2107 -INDIA 1998 29626417.2379 -INDIA 1997 51386111.3448 -INDIA 1996 47571018.5122 -INDIA 1995 49344062.2829 -INDIA 1994 50106952.4261 -INDIA 1993 48112766.6987 -INDIA 1992 47914303.1234 -INDONESIA 1998 27734909.6763 -INDONESIA 1997 44593812.9863 -INDONESIA 1996 44746729.8078 -INDONESIA 1995 45593622.6993 -INDONESIA 1994 45988483.8772 -INDONESIA 1993 46147963.7895 -INDONESIA 1992 45185777.0688 -IRAN 1998 26661608.9301 -IRAN 1997 45019114.1696 -IRAN 1996 45891397.0992 -IRAN 1995 44414285.2348 -IRAN 1994 43696360.4795 -IRAN 1993 45362775.8094 -IRAN 1992 43052338.4143 -IRAQ 1998 31188498.1914 -IRAQ 1997 48585307.5222 -IRAQ 1996 50036593.8404 -IRAQ 1995 48774801.7275 -IRAQ 1994 48795847.231 -IRAQ 1993 47435691.5082 -IRAQ 1992 47562355.6571 -JAPAN 1998 24694102.172 -JAPAN 1997 42377052.3454 -JAPAN 1996 40267778.9094 -JAPAN 1995 40925317.465 -JAPAN 1994 41159518.3058 -JAPAN 1993 39589074.2771 -JAPAN 1992 39113493.9052 -JORDAN 1998 23489867.7893 -JORDAN 1997 41615962.6619 -JORDAN 1996 41860855.4684 -JORDAN 1995 39931672.0908 -JORDAN 1994 40707555.4638 -JORDAN 1993 39060405.4658 -JORDAN 1992 41657604.2684 -KENYA 1998 25566337.4303 -KENYA 1997 43108847.9024 -KENYA 1996 43482953.543 -KENYA 1995 42517988.9814 -KENYA 1994 43612479.4523 -KENYA 1993 42724038.7571 -KENYA 1992 43217106.2068 -MOROCCO 1998 24915496.8756 -MOROCCO 1997 42698382.855 -MOROCCO 1996 42986113.5049 -MOROCCO 1995 42316089.1593 -MOROCCO 1994 43458604.6029 -MOROCCO 1993 42672288.0699 -MOROCCO 1992 42800781.6415 -MOZAMBIQUE 1998 28279876.0301 -MOZAMBIQUE 1997 51159216.2298 -MOZAMBIQUE 1996 48072525.0645 -MOZAMBIQUE 1995 48905200.6007 -MOZAMBIQUE 1994 46092076.2805 -MOZAMBIQUE 1993 48555926.2669 -MOZAMBIQUE 1992 47809075.1192 -PERU 1998 26713966.2678 -PERU 1997 48324008.6011 -PERU 1996 50310008.8629 -PERU 1995 49647080.9629 -PERU 1994 46420910.2773 -PERU 1993 51536906.2487 -PERU 1992 47711665.3137 -ROMANIA 1998 27271993.101 -ROMANIA 1997 45063059.1953 -ROMANIA 1996 47492335.0323 -ROMANIA 1995 45710636.2909 -ROMANIA 1994 46088041.1066 -ROMANIA 1993 47515092.5613 -ROMANIA 1992 44111439.8044 -RUSSIA 1998 27935323.7271 -RUSSIA 1997 48222347.2924 -RUSSIA 1996 47553559.4932 -RUSSIA 1995 46755990.0976 -RUSSIA 1994 48000515.6191 -RUSSIA 1993 48569624.5082 -RUSSIA 1992 47672831.5329 -SAUDI ARABIA 1998 27113516.8424 -SAUDI ARABIA 1997 46690468.9649 -SAUDI ARABIA 1996 47775782.667 -SAUDI ARABIA 1995 46657107.8287 -SAUDI ARABIA 1994 48181672.81 -SAUDI ARABIA 1993 45692556.4438 -SAUDI ARABIA 1992 48924913.2717 -UNITED KINGDOM 1998 26366682.8786 -UNITED KINGDOM 1997 44518130.1851 -UNITED KINGDOM 1996 45539729.6166 -UNITED KINGDOM 1995 46845879.339 -UNITED KINGDOM 1994 43081609.5737 -UNITED KINGDOM 1993 44770146.7555 -UNITED KINGDOM 1992 44123402.5484 -UNITED STATES 1998 27826593.6825 -UNITED STATES 1997 46638572.3648 -UNITED STATES 1996 46688280.5474 -UNITED STATES 1995 48951591.6156 -UNITED STATES 1994 45099092.0598 -UNITED STATES 1993 46181600.5278 -UNITED STATES 1992 46168214.0901 -VIETNAM 1998 27281931.0011 -VIETNAM 1997 48735914.1796 -VIETNAM 1996 47824595.904 -VIETNAM 1995 48235135.8016 -VIETNAM 1994 47729256.3324 -VIETNAM 1993 45352676.8672 -VIETNAM 1992 47846355.6485 +ALGERIA 1998 27136900.180300000 +ALGERIA 1997 48611833.496200000 +ALGERIA 1996 48285482.678200000 +ALGERIA 1995 44402273.599900000 +ALGERIA 1994 48694008.066800000 +ALGERIA 1993 46044207.783800000 +ALGERIA 1992 45636849.488100000 +ARGENTINA 1998 28341663.784800000 +ARGENTINA 1997 47143964.117600000 +ARGENTINA 1996 45255278.602100000 +ARGENTINA 1995 45631769.205400000 +ARGENTINA 1994 48268856.354700000 +ARGENTINA 1993 48605593.616200000 +ARGENTINA 1992 46654240.748700000 +BRAZIL 1998 26527736.396000000 +BRAZIL 1997 45640660.767700000 +BRAZIL 1996 45090647.163000000 +BRAZIL 1995 44015888.513200000 +BRAZIL 1994 44854218.893200000 +BRAZIL 1993 45766603.737900000 +BRAZIL 1992 45280216.802700000 +CANADA 1998 26828985.394400000 +CANADA 1997 44849954.318600000 +CANADA 1996 46307936.110800000 +CANADA 1995 47311993.044100000 +CANADA 1994 46691491.959600000 +CANADA 1993 46634791.112100000 +CANADA 1992 45873849.688200000 +CHINA 1998 27510180.165700000 +CHINA 1997 46123865.409700000 +CHINA 1996 49532807.060100000 +CHINA 1995 46734651.483800000 +CHINA 1994 46397896.609700000 +CHINA 1993 49634673.946300000 +CHINA 1992 46949457.642600000 +EGYPT 1998 28401491.796800000 +EGYPT 1997 47674857.678300000 +EGYPT 1996 47745727.545000000 +EGYPT 1995 45897160.678300000 +EGYPT 1994 47194895.228000000 +EGYPT 1993 49133627.647100000 +EGYPT 1992 47000574.502700000 +ETHIOPIA 1998 25135046.137700000 +ETHIOPIA 1997 43010596.083800000 +ETHIOPIA 1996 43636287.192200000 +ETHIOPIA 1995 43575757.334300000 +ETHIOPIA 1994 41597208.528300000 +ETHIOPIA 1993 42622804.161600000 +ETHIOPIA 1992 44385735.681300000 +FRANCE 1998 26210392.280400000 +FRANCE 1997 42392969.473100000 +FRANCE 1996 43306317.974900000 +FRANCE 1995 46377408.432800000 +FRANCE 1994 43447352.992200000 +FRANCE 1993 43729961.063900000 +FRANCE 1992 44052308.429000000 +GERMANY 1998 25991257.107100000 +GERMANY 1997 43968355.807900000 +GERMANY 1996 45882074.804900000 +GERMANY 1995 43314338.307700000 +GERMANY 1994 44616995.436900000 +GERMANY 1993 45126645.911300000 +GERMANY 1992 44361141.210700000 +INDIA 1998 29626417.237900000 +INDIA 1997 51386111.344800000 +INDIA 1996 47571018.512200000 +INDIA 1995 49344062.282900000 +INDIA 1994 50106952.426100000 +INDIA 1993 48112766.698700000 +INDIA 1992 47914303.123400000 +INDONESIA 1998 27734909.676300000 +INDONESIA 1997 44593812.986300000 +INDONESIA 1996 44746729.807800000 +INDONESIA 1995 45593622.699300000 +INDONESIA 1994 45988483.877200000 +INDONESIA 1993 46147963.789500000 +INDONESIA 1992 45185777.068800000 +IRAN 1998 26661608.930100000 +IRAN 1997 45019114.169600000 +IRAN 1996 45891397.099200000 +IRAN 1995 44414285.234800000 +IRAN 1994 43696360.479500000 +IRAN 1993 45362775.809400000 +IRAN 1992 43052338.414300000 +IRAQ 1998 31188498.191400000 +IRAQ 1997 48585307.522200000 +IRAQ 1996 50036593.840400000 +IRAQ 1995 48774801.727500000 +IRAQ 1994 48795847.231000000 +IRAQ 1993 47435691.508200000 +IRAQ 1992 47562355.657100000 +JAPAN 1998 24694102.172000000 +JAPAN 1997 42377052.345400000 +JAPAN 1996 40267778.909400000 +JAPAN 1995 40925317.465000000 +JAPAN 1994 41159518.305800000 +JAPAN 1993 39589074.277100000 +JAPAN 1992 39113493.905200000 +JORDAN 1998 23489867.789300000 +JORDAN 1997 41615962.661900000 +JORDAN 1996 41860855.468400000 +JORDAN 1995 39931672.090800000 +JORDAN 1994 40707555.463800000 +JORDAN 1993 39060405.465800000 +JORDAN 1992 41657604.268400000 +KENYA 1998 25566337.430300000 +KENYA 1997 43108847.902400000 +KENYA 1996 43482953.543000000 +KENYA 1995 42517988.981400000 +KENYA 1994 43612479.452300000 +KENYA 1993 42724038.757100000 +KENYA 1992 43217106.206800000 +MOROCCO 1998 24915496.875600000 +MOROCCO 1997 42698382.855000000 +MOROCCO 1996 42986113.504900000 +MOROCCO 1995 42316089.159300000 +MOROCCO 1994 43458604.602900000 +MOROCCO 1993 42672288.069900000 +MOROCCO 1992 42800781.641500000 +MOZAMBIQUE 1998 28279876.030100000 +MOZAMBIQUE 1997 51159216.229800000 +MOZAMBIQUE 1996 48072525.064500000 +MOZAMBIQUE 1995 48905200.600700000 +MOZAMBIQUE 1994 46092076.280500000 +MOZAMBIQUE 1993 48555926.266900000 +MOZAMBIQUE 1992 47809075.119200000 +PERU 1998 26713966.267800000 +PERU 1997 48324008.601100000 +PERU 1996 50310008.862900000 +PERU 1995 49647080.962900000 +PERU 1994 46420910.277300000 +PERU 1993 51536906.248700000 +PERU 1992 47711665.313700000 +ROMANIA 1998 27271993.101000000 +ROMANIA 1997 45063059.195300000 +ROMANIA 1996 47492335.032300000 +ROMANIA 1995 45710636.290900000 +ROMANIA 1994 46088041.106600000 +ROMANIA 1993 47515092.561300000 +ROMANIA 1992 44111439.804400000 +RUSSIA 1998 27935323.727100000 +RUSSIA 1997 48222347.292400000 +RUSSIA 1996 47553559.493200000 +RUSSIA 1995 46755990.097600000 +RUSSIA 1994 48000515.619100000 +RUSSIA 1993 48569624.508200000 +RUSSIA 1992 47672831.532900000 +SAUDI ARABIA 1998 27113516.842400000 +SAUDI ARABIA 1997 46690468.964900000 +SAUDI ARABIA 1996 47775782.667000000 +SAUDI ARABIA 1995 46657107.828700000 +SAUDI ARABIA 1994 48181672.810000000 +SAUDI ARABIA 1993 45692556.443800000 +SAUDI ARABIA 1992 48924913.271700000 +UNITED KINGDOM 1998 26366682.878600000 +UNITED KINGDOM 1997 44518130.185100000 +UNITED KINGDOM 1996 45539729.616600000 +UNITED KINGDOM 1995 46845879.339000000 +UNITED KINGDOM 1994 43081609.573700000 +UNITED KINGDOM 1993 44770146.755500000 +UNITED KINGDOM 1992 44123402.548400000 +UNITED STATES 1998 27826593.682500000 +UNITED STATES 1997 46638572.364800000 +UNITED STATES 1996 46688280.547400000 +UNITED STATES 1995 48951591.615600000 +UNITED STATES 1994 45099092.059800000 +UNITED STATES 1993 46181600.527800000 +UNITED STATES 1992 46168214.090100000 +VIETNAM 1998 27281931.001100000 +VIETNAM 1997 48735914.179600000 +VIETNAM 1996 47824595.904000000 +VIETNAM 1995 48235135.801600000 +VIETNAM 1994 47729256.332400000 +VIETNAM 1993 45352676.867200000 +VIETNAM 1992 47846355.648500000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q10.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q10.out index 15f8d63cd35c07..95eb4c7a73e299 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q10.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q10.out @@ -1,23 +1,23 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q10 -- -57040 Customer#000057040 734235.2455 632.87 JAPAN Eioyzjf4pp 22-895-641-3466 sits. slyly regular requests sleep alongside of the regular inst -143347 Customer#000143347 721002.6948 2557.47 EGYPT 1aReFYv,Kw4 14-742-935-3718 ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re -60838 Customer#000060838 679127.3077 2454.77 BRAZIL 64EaJ5vMAHWJlBOxJklpNc2RJiWE 12-913-494-9813 need to boost against the slyly regular account -101998 Customer#000101998 637029.5667 3790.89 UNITED KINGDOM 01c9CILnNtfOQYmZj 33-593-865-6378 ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites -125341 Customer#000125341 633508.086 4983.51 GERMANY S29ODD6bceU8QSuuEJznkNaK 17-582-695-5962 arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca -25501 Customer#000025501 620269.7849 7725.04 ETHIOPIA W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ 15-874-808-6793 he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina -115831 Customer#000115831 596423.8672 5098.1 FRANCE rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc 16-715-386-3788 l somas sleep. furiously final deposits wake blithely regular pinto b -84223 Customer#000084223 594998.0239 528.65 UNITED KINGDOM nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA 33-442-824-8191 slyly final deposits haggle regular, pending dependencies. pending escapades wake -54289 Customer#000054289 585603.3918 5583.02 IRAN vXCxoCsU0Bad5JQI ,oobkZ 20-834-292-4707 ely special foxes are quickly finally ironic p -39922 Customer#000039922 584878.1134 7321.11 GERMANY Zgy4s50l2GKN4pLDPBU8m342gIw6R 17-147-757-8036 y final requests. furiously final foxes cajole blithely special platelets. f -6226 Customer#000006226 576783.7606 2230.09 UNITED KINGDOM 8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g, 33-657-701-3391 ending platelets along the express deposits cajole carefully final -922 Customer#000000922 576767.5333 3869.25 GERMANY Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq 17-945-916-9648 luffily fluffy deposits. packages c -147946 Customer#000147946 576455.132 2030.13 ALGERIA iANyZHjqhyy7Ajah0pTrYyhJ 10-886-956-3143 ithely ironic deposits haggle blithely ironic requests. quickly regu -115640 Customer#000115640 569341.1933 6436.1 ARGENTINA Vtgfia9qI 7EpHgecU1X 11-411-543-4901 ost slyly along the patterns; pinto be -73606 Customer#000073606 568656.8578 1785.67 JAPAN xuR0Tro5yChDfOCrjkd2ol 22-437-653-6966 he furiously regular ideas. slowly -110246 Customer#000110246 566842.9815 7763.35 VIETNAM 7KzflgX MDOq7sOkI 31-943-426-9837 egular deposits serve blithely above the fl -142549 Customer#000142549 563537.2368 5085.99 INDONESIA ChqEoK43OysjdHbtKCp6dKqjNyvvi9 19-955-562-2398 sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts. -146149 Customer#000146149 557254.9865 1791.55 ROMANIA s87fvzFQpU 29-744-164-6487 of the slyly silent accounts. quickly final accounts across the -52528 Customer#000052528 556397.3509 551.79 ARGENTINA NFztyTOR10UOJ 11-208-192-3205 deposits hinder. blithely pending asymptotes breach slyly regular re -23431 Customer#000023431 554269.536 3381.86 ROMANIA HgiV0phqhaIa9aydNoIlb 29-915-458-2654 nusual, even instructions: furiously stealthy n +57040 Customer#000057040 734235.245500000 632.87 JAPAN Eioyzjf4pp 22-895-641-3466 sits. slyly regular requests sleep alongside of the regular inst +143347 Customer#000143347 721002.694800000 2557.47 EGYPT 1aReFYv,Kw4 14-742-935-3718 ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re +60838 Customer#000060838 679127.307700000 2454.77 BRAZIL 64EaJ5vMAHWJlBOxJklpNc2RJiWE 12-913-494-9813 need to boost against the slyly regular account +101998 Customer#000101998 637029.566700000 3790.89 UNITED KINGDOM 01c9CILnNtfOQYmZj 33-593-865-6378 ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites +125341 Customer#000125341 633508.086000000 4983.51 GERMANY S29ODD6bceU8QSuuEJznkNaK 17-582-695-5962 arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca +25501 Customer#000025501 620269.784900000 7725.04 ETHIOPIA W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ 15-874-808-6793 he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina +115831 Customer#000115831 596423.867200000 5098.10 FRANCE rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc 16-715-386-3788 l somas sleep. furiously final deposits wake blithely regular pinto b +84223 Customer#000084223 594998.023900000 528.65 UNITED KINGDOM nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA 33-442-824-8191 slyly final deposits haggle regular, pending dependencies. pending escapades wake +54289 Customer#000054289 585603.391800000 5583.02 IRAN vXCxoCsU0Bad5JQI ,oobkZ 20-834-292-4707 ely special foxes are quickly finally ironic p +39922 Customer#000039922 584878.113400000 7321.11 GERMANY Zgy4s50l2GKN4pLDPBU8m342gIw6R 17-147-757-8036 y final requests. furiously final foxes cajole blithely special platelets. f +6226 Customer#000006226 576783.760600000 2230.09 UNITED KINGDOM 8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g, 33-657-701-3391 ending platelets along the express deposits cajole carefully final +922 Customer#000000922 576767.533300000 3869.25 GERMANY Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq 17-945-916-9648 luffily fluffy deposits. packages c +147946 Customer#000147946 576455.132000000 2030.13 ALGERIA iANyZHjqhyy7Ajah0pTrYyhJ 10-886-956-3143 ithely ironic deposits haggle blithely ironic requests. quickly regu +115640 Customer#000115640 569341.193300000 6436.10 ARGENTINA Vtgfia9qI 7EpHgecU1X 11-411-543-4901 ost slyly along the patterns; pinto be +73606 Customer#000073606 568656.857800000 1785.67 JAPAN xuR0Tro5yChDfOCrjkd2ol 22-437-653-6966 he furiously regular ideas. slowly +110246 Customer#000110246 566842.981500000 7763.35 VIETNAM 7KzflgX MDOq7sOkI 31-943-426-9837 egular deposits serve blithely above the fl +142549 Customer#000142549 563537.236800000 5085.99 INDONESIA ChqEoK43OysjdHbtKCp6dKqjNyvvi9 19-955-562-2398 sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts. +146149 Customer#000146149 557254.986500000 1791.55 ROMANIA s87fvzFQpU 29-744-164-6487 of the slyly silent accounts. quickly final accounts across the +52528 Customer#000052528 556397.350900000 551.79 ARGENTINA NFztyTOR10UOJ 11-208-192-3205 deposits hinder. blithely pending asymptotes breach slyly regular re +23431 Customer#000023431 554269.536000000 3381.86 ROMANIA HgiV0phqhaIa9aydNoIlb 29-915-458-2654 nusual, even instructions: furiously stealthy n diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q11.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q11.out index 42bf24b728540d..e159e66a81fe17 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q11.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q11.out @@ -1,1051 +1,1051 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q11 -- -129760 17538456.86 -166726 16503353.92 -191287 16474801.97 -161758 16101755.54 -34452 15983844.72 -139035 15907078.34 -9403 15451755.62 -154358 15212937.88 -38823 15064802.86 -85606 15053957.15 -33354 14408297.4 -154747 14407580.68 -82865 14235489.78 -76094 14094247.04 -222 13937777.74 -121271 13908336 -55221 13716120.47 -22819 13666434.28 -76281 13646853.68 -85298 13581154.93 -85158 13554904 -139684 13535538.72 -31034 13498025.25 -87305 13482847.04 -10181 13445148.75 -62323 13411824.3 -26489 13377256.38 -96493 13339057.83 -56548 13329014.97 -55576 13306843.35 -159751 13306614.48 -92406 13287414.5 -182636 13223726.74 -199969 13135288.21 -62865 13001926.94 -7284 12945298.19 -197867 12944510.52 -11562 12931575.51 -75165 12916918.12 -97175 12911283.5 -140840 12896562.23 -65241 12890600.46 -166120 12876927.22 -9035 12863828.7 -144616 12853549.3 -176723 12832309.74 -170884 12792136.58 -29790 12723300.33 -95213 12555483.73 -183873 12550533.05 -171235 12476538.3 -21533 12437821.32 -17290 12432159.5 -156397 12260623.5 -122611 12222812.98 -139155 12220319.25 -146316 12215800.61 -171381 12199734.52 -198633 12078226.95 -167417 12046637.62 -59512 12043468.76 -31688 12034893.64 -159586 12001505.84 -8993 11963814.3 -120302 11857707.55 -43536 11779340.52 -9552 11776909.16 -86223 11772205.08 -53776 11758669.65 -131285 11616953.74 -91628 11611114.83 -169644 11567959.72 -182299 11567462.05 -33107 11453818.76 -104184 11436657.44 -67027 11419127.14 -176869 11371451.71 -30885 11369674.79 -54420 11345076.88 -72240 11313951.05 -178708 11294635.17 -81298 11273686.13 -158324 11243442.72 -117095 11242535.24 -176793 11237733.38 -86091 11177793.79 -116033 11145434.36 -129058 11119112.2 -193714 11104706.39 -117195 11077217.96 -49851 11043701.78 -19791 11030662.62 -75800 11012401.62 -161562 10996371.69 -10119 10980015.75 -39185 10970042.56 -47223 10950022.13 -175594 10942923.05 -111295 10893675.61 -155446 10852764.57 -156391 10839810.38 -40884 10837234.19 -141288 10837130.21 -152388 10830977.82 -33449 10830858.72 -149035 10826130.02 -162620 10814275.68 -118324 10791788.1 -38932 10777541.75 -121294 10764225.22 -48721 10762582.49 -63342 10740132.6 -5614 10724668.8 -62266 10711143.1 -100202 10696675.55 -197741 10688560.72 -169178 10648522.8 -5271 10639392.65 -34499 10584177.1 -71108 10569117.56 -137132 10539880.47 -78451 10524873.24 -150827 10503810.48 -107237 10488030.84 -101727 10473558.1 -58708 10466280.44 -89768 10465477.22 -146493 10444291.58 -55424 10444006.48 -16560 10425574.74 -133114 10415097.9 -195810 10413625.2 -76673 10391977.18 -97305 10390890.57 -134210 10387210.02 -188536 10386529.92 -122255 10335760.32 -2682 10312966.1 -43814 10303086.61 -34767 10290405.18 -165584 10273705.89 -2231 10270415.55 -111259 10263256.56 -195578 10239795.82 -21093 10217531.3 -29856 10216932.54 -133686 10213345.76 -87745 10185509.4 -135153 10179379.7 -11773 10167410.84 -76316 10165151.7 -123076 10161225.78 -91894 10130462.19 -39741 10128387.52 -111753 10119780.98 -142729 10104748.89 -116775 10097750.42 -102589 10034784.36 -186268 10012181.57 -44545 10000286.48 -23307 9966577.5 -124281 9930018.9 -69604 9925730.64 -21971 9908982.03 -58148 9895894.4 -16532 9886529.9 -159180 9883744.43 -74733 9877582.88 -35173 9858275.92 -7116 9856881.02 -124620 9838589.14 -122108 9829949.35 -67200 9828690.69 -164775 9821424.44 -9039 9816447.72 -14912 9803102.2 -190906 9791315.7 -130398 9781674.27 -119310 9776927.21 -10132 9770930.78 -107211 9757586.25 -113958 9757065.5 -37009 9748362.69 -66746 9743528.76 -134486 9731922 -15945 9731096.45 -55307 9717745.8 -56362 9714922.83 -57726 9711792.1 -57256 9708621 -112292 9701653.08 -87514 9699492.53 -174206 9680562.02 -72865 9679043.34 -114357 9671017.44 -112807 9665019.21 -115203 9661018.73 -177454 9658906.35 -161275 9634313.71 -61893 9617095.44 -122219 9604888.2 -183427 9601362.58 -59158 9599705.96 -61931 9584918.98 -5532 9579964.14 -20158 9576714.38 -167199 9557413.08 -38869 9550279.53 -86949 9541943.7 -198544 9538613.92 -193762 9538238.94 -108807 9536247.16 -168324 9535647.99 -115588 9532195.04 -141372 9529702.14 -175120 9526068.66 -163851 9522808.83 -160954 9520359.45 -117757 9517882.8 -52594 9508325.76 -60960 9498843.06 -70272 9495775.62 -44050 9495515.36 -152213 9494756.96 -121203 9492601.3 -70114 9491012.3 -167588 9484741.11 -136455 9476241.78 -4357 9464355.64 -6786 9463632.57 -61345 9455336.7 -160826 9446754.84 -71275 9440138.4 -77746 9439118.35 -91289 9437472 -56723 9435102.16 -86647 9434604.18 -131234 9432120 -198129 9427651.36 -165530 9426193.68 -69233 9425053.92 -6243 9423304.66 -90110 9420422.7 -191980 9419368.36 -38461 9419316.07 -167873 9419024.49 -159373 9416950.15 -128707 9413428.5 -45267 9410863.78 -48460 9409793.93 -197672 9406887.68 -60884 9403442.4 -15209 9403245.31 -138049 9401262.1 -199286 9391770.7 -19629 9391236.4 -134019 9390615.15 -169475 9387639.58 -165918 9379510.44 -135602 9374251.54 -162323 9367566.51 -96277 9360850.68 -98336 9359671.29 -119781 9356395.73 -34440 9355365 -57362 9355180.1 -167236 9352973.84 -38463 9347530.94 -86749 9346826.44 -170007 9345699.9 -193087 9343744 -150383 9332576.75 -60932 9329582.02 -128420 9328206.35 -162145 9327722.88 -55686 9320304.4 -163080 9304916.96 -160583 9303515.92 -118153 9298606.56 -152634 9282184.57 -84731 9276586.92 -119989 9273814.2 -114584 9269698.65 -131817 9268570.08 -29068 9256583.88 -44116 9255922 -115818 9253311.91 -103388 9239218.08 -186118 9236209.12 -155809 9235410.84 -147003 9234847.99 -27769 9232511.64 -112779 9231927.36 -124851 9228982.68 -158488 9227216.4 -83328 9224792.2 -136797 9222927.09 -141730 9216370.68 -87304 9215695.5 -156004 9215557.9 -140740 9215329.2 -100648 9212185.08 -174774 9211718 -37644 9211578.6 -48807 9209496.24 -95940 9207948.4 -141586 9206699.22 -147248 9205654.95 -61372 9205228.76 -52970 9204415.95 -26430 9203710.51 -28504 9201669.2 -25810 9198878.5 -125329 9198688.5 -167867 9194022.72 -134767 9191444.72 -127745 9191271.56 -69208 9187110 -155222 9186469.16 -196916 9182995.82 -195590 9176353.12 -169155 9175176.09 -81558 9171946.5 -185136 9171293.04 -114790 9168509.1 -194142 9165836.61 -167639 9161165 -11241 9160789.46 -82628 9160155.54 -41399 9148338 -30755 9146196.84 -6944 9143574.58 -6326 9138803.16 -101296 9135657.62 -181479 9121093.3 -76898 9120983.1 -64274 9118745.25 -175826 9117387.99 -142215 9116876.88 -103415 9113128.62 -119765 9110768.79 -107624 9108837.45 -84215 9105257.36 -73774 9102651.92 -173972 9102069 -69817 9095513.88 -86943 9092253 -138859 9087719.3 -162273 9085296.48 -175945 9080401.21 -16836 9075715.44 -70224 9075265.95 -139765 9074755.89 -30319 9073233.1 -3851 9072657.24 -181271 9070631.52 -162184 9068835.78 -81683 9067258.47 -153028 9067010.51 -123324 9061870.95 -186481 9058608.3 -167680 9052908.76 -165293 9050545.7 -122148 9046298.17 -138604 9045840.8 -78851 9044822.6 -137280 9042355.34 -8823 9040855.1 -163900 9040848.48 -75600 9035392.45 -81676 9031999.4 -46033 9031460.58 -194917 9028500 -133936 9026949.02 -33182 9024971.1 -34220 9021485.39 -20118 9019942.6 -178258 9019881.66 -15560 9017687.28 -111425 9016198.56 -95942 9015585.12 -132709 9015240.15 -39731 9014746.95 -154307 9012571.2 -23769 9008157.6 -93328 9007211.2 -142826 8998297.44 -188792 8996014 -68703 8994982.22 -145280 8990941.05 -150725 8985686.16 -172046 8982469.52 -70476 8967629.5 -124988 8966805.22 -17937 8963319.76 -177372 8954873.64 -137994 8950916.79 -84019 8950039.98 -40389 8946158.2 -69187 8941054.14 -4863 8939044.92 -50465 8930503.14 -43686 8915543.84 -131352 8909053.59 -198916 8906940.03 -135932 8905282.95 -104673 8903682 -152308 8903244.08 -135298 8900323.2 -156873 8899429.1 -157454 8897339.2 -75415 8897068.09 -46325 8895569.09 -1966 8895117.06 -24576 8895034.75 -19425 8890156.6 -169735 8890085.56 -32225 8889829.28 -124537 8889770.71 -146327 8887836.23 -121562 8887740.4 -44731 8882444.95 -93141 8881850.88 -187871 8873506.18 -71709 8873057.28 -151913 8869321.17 -33786 8868955.39 -35902 8868126.06 -23588 8867769.9 -24508 8867616 -161282 8866661.43 -188061 8862304 -132847 8862082 -166843 8861200.8 -30609 8860214.73 -56191 8856546.96 -160740 8852685.43 -71229 8846106.99 -91208 8845541.28 -10995 8845306.56 -78094 8839938.29 -36489 8838538.1 -198437 8836494.84 -151693 8833807.64 -185367 8829791.37 -65682 8820622.89 -65421 8819329.24 -122225 8816821.86 -85330 8811013.16 -64555 8810643.12 -104188 8808211.02 -54411 8805703.4 -39438 8805282.56 -70795 8800060.92 -20383 8799073.28 -21952 8798624.19 -63584 8796590 -158768 8796422.95 -166588 8796214.38 -120600 8793558.06 -157202 8788287.88 -55358 8786820.75 -168322 8786670.73 -25143 8786324.8 -5368 8786274.14 -114025 8786201.12 -97744 8785315.94 -164327 8784503.86 -76542 8782613.28 -4731 8772846.7 -157590 8772006.45 -154276 8771733.91 -28705 8771576.64 -100226 8769455 -179195 8769185.16 -184355 8768118.05 -120408 8768011.12 -63145 8761991.96 -53135 8753491.8 -173071 8750508.8 -41087 8749436.79 -194830 8747438.4 -43496 8743359.3 -30235 8741611 -26391 8741399.64 -191816 8740258.72 -47616 8737229.68 -152101 8734432.76 -163784 8730514.34 -5134 8728424.64 -155241 8725429.86 -188814 8724182.4 -140782 8720378.75 -153141 8719407.51 -169373 8718609.06 -41335 8714773.8 -197450 8714617.32 -87004 8714017.79 -181804 8712257.76 -122814 8711119.14 -109939 8709193.16 -98094 8708780.04 -74630 8708040.75 -197291 8706519.09 -184173 8705467.45 -192175 8705411.12 -19471 8702536.12 -18052 8702155.7 -135560 8698137.72 -152791 8697325.8 -170953 8696909.19 -116137 8696687.17 -7722 8696589.4 -49788 8694846.71 -13252 8694822.42 -12633 8694559.36 -193438 8690426.72 -17326 8689329.16 -96124 8679794.58 -143802 8676626.48 -30389 8675826.6 -75250 8675257.14 -72613 8673524.94 -123520 8672456.25 -325 8667741.28 -167291 8667556.18 -150119 8663403.54 -88420 8663355.4 -179784 8653021.34 -130884 8651970 -172611 8648217 -85373 8647796.22 -122717 8646758.54 -113431 8646348.34 -66015 8643349.4 -33141 8643243.18 -69786 8637396.92 -181857 8637393.28 -122939 8636378 -196223 8635391.02 -50532 8632648.24 -58102 8632614.54 -93581 8632372.36 -52804 8632109.25 -755 8627091.68 -16597 8623357.05 -119041 8622397 -89050 8621185.98 -98696 8620784.82 -94399 8620524 -151295 8616671.02 -56417 8613450.35 -121322 8612948.23 -126883 8611373.42 -29155 8610163.64 -114530 8608471.74 -131007 8607394.82 -128715 8606833.62 -72522 8601479.98 -144061 8595718.74 -83503 8595034.2 -112199 8590717.44 -9227 8587350.42 -116318 8585910.66 -41248 8585559.64 -159398 8584821 -105966 8582308.79 -137876 8580641.3 -122272 8580400.77 -195717 8577278.1 -165295 8571121.92 -5840 8570728.74 -120860 8570610.44 -66692 8567540.52 -135596 8563276.31 -150576 8562794.1 -7500 8562393.84 -107716 8561541.56 -100611 8559995.85 -171192 8557390.08 -107660 8556696.6 -13461 8556545.12 -90310 8555131.51 -141493 8553782.93 -71286 8552682 -136423 8551300.76 -54241 8550785.25 -120325 8549976.6 -424 8547527.1 -196543 8545907.09 -13042 8542717.18 -58332 8536074.69 -9191 8535663.92 -134357 8535429.9 -96207 8534900.6 -92292 8530618.78 -181093 8528303.52 -105064 8527491.6 -59635 8526854.08 -136974 8524351.56 -126694 8522783.37 -6247 8522606.9 -139447 8522521.92 -96313 8520949.92 -108454 8520916.25 -181254 8519496.1 -71117 8519223 -131703 8517215.28 -59312 8510568.36 -2903 8509960.35 -102838 8509527.69 -162806 8508906.05 -41527 8508222.36 -118416 8505858.36 -180203 8505024.16 -14773 8500598.28 -140446 8499514.24 -199641 8497362.59 -109240 8494617.12 -150268 8494188.38 -45310 8492380.65 -36552 8490733.6 -199690 8490145.8 -185353 8488726.68 -163615 8484985.01 -196520 8483545.04 -133438 8483482.35 -77285 8481442.32 -55824 8476893.9 -76753 8475522.12 -46129 8472717.96 -28358 8472515.5 -9317 8472145.32 -33823 8469721.44 -39055 8469145.07 -91471 8468874.56 -142299 8466039.55 -97672 8464119.8 -134712 8461781.79 -157988 8460123.2 -102284 8458652.44 -73533 8458453.32 -90599 8457874.86 -112160 8457863.36 -124792 8457633.7 -66097 8457573.15 -165271 8456969.01 -146925 8454887.91 -164277 8454838.5 -131290 8454811.2 -179386 8450909.9 -90486 8447873.86 -175924 8444421.66 -185922 8442394.88 -38492 8436438.32 -172511 8436287.34 -139539 8434180.29 -11926 8433199.52 -55889 8431449.88 -163068 8431116.4 -138772 8428406.36 -126821 8425180.68 -22091 8420687.88 -55981 8419434.38 -100960 8419403.46 -172568 8417955.21 -63135 8415945.53 -137651 8413170.35 -191353 8413039.84 -62988 8411571.48 -103417 8411541.12 -12052 8411519.28 -104260 8408516.55 -157129 8405730.08 -77254 8405537.22 -112966 8403512.89 -168114 8402764.56 -49940 8402328.2 -52017 8398753.6 -176179 8398087 -100215 8395906.61 -61256 8392811.2 -15366 8388907.8 -109479 8388027.2 -66202 8386522.83 -81707 8385761.19 -51727 8385426.4 -9980 8382754.62 -174403 8378575.73 -54558 8378041.92 -3141 8377378.22 -134829 8377105.52 -145056 8376920.76 -194020 8375157.64 -7117 8373982.27 -120146 8373796.2 -126843 8370761.28 -62117 8369493.44 -111221 8367525.81 -159337 8366092.26 -173903 8365428.48 -136438 8364065.45 -56684 8363198 -137597 8363185.94 -20039 8361138.24 -121326 8359635.52 -48435 8352863.1 -1712 8349107 -167190 8347238.7 -32113 8346452.04 -40580 8342983.32 -74785 8342519.13 -14799 8342236.75 -177291 8341736.83 -198956 8340370.65 -69179 8338465.99 -118764 8337616.56 -128814 8336435.56 -82729 8331766.88 -152048 8330638.99 -171085 8326259.5 -126730 8325974.4 -77525 8323282.5 -170653 8322840.5 -5257 8320350.78 -67350 8318987.56 -109008 8317836.54 -199043 8316603.54 -139969 8316551.54 -22634 8316531.24 -173309 8315750.25 -10887 8315019.36 -42392 8312895.96 -126040 8312623.2 -101590 8304555.42 -46891 8302192.12 -138721 8301745.62 -113715 8301533.2 -78778 8299685.64 -142908 8299447.77 -64419 8297631.8 -21396 8296272.27 -4180 8295646.92 -63534 8295383.67 -135957 8294389.86 -30126 8291920.32 -158427 8288938 -14545 8288395.92 -75548 8288287.2 -64473 8286137.44 -149553 8285714.88 -151284 8283526.65 -171091 8282934.36 -194256 8278985.34 -952 8276136 -121541 8275390.26 -177664 8275315.2 -51117 8274504.3 -66770 8273407.8 -37238 8272728.06 -46679 8270486.55 -165852 8268312.6 -99458 8266564.47 -114519 8265493.54 -7231 8264881.5 -19033 8264826.56 -125123 8262732.65 -18642 8261578.99 -50386 8261380.05 -193770 8259578.82 -7276 8258101.6 -178045 8253904.15 -49033 8253696.23 -187195 8251334.58 -10590 8249227.4 -143779 8247057.7 -35205 8245675.17 -19729 8245081.6 -144946 8240479.8 -123786 8239581.24 -70843 8237973.2 -112437 8236907.52 -5436 8236039.57 -163754 8235471.16 -115945 8234811.36 -27918 8233957.88 -105712 8233571.86 -41007 8229431.79 -40476 8226640.41 -145620 8221371.6 -7771 8220413.33 -86424 8215572.61 -129137 8215478.4 -76020 8210495.36 -140213 8209831.8 -32379 8208338.88 -130616 8207715.75 -195469 8206609.8 -191805 8205147.75 -90906 8200951.2 -170910 8195558.01 -105399 8193122.63 -123798 8192385.97 -90218 8191689.16 -114766 8189339.54 -11289 8187354.72 -178308 8185750.5 -71271 8185519.24 -1115 8184903.38 -152636 8184530.72 -151619 8182909.05 -116943 8181072.69 -28891 8181051.54 -47049 8180955 -158827 8180470.9 -92620 8179671.55 -20814 8176953.54 -179323 8176795.55 -193453 8174343.94 -56888 8173342 -28087 8169876.3 -164254 8169632.35 -57661 8168848.16 -7363 8167538.05 -164499 8167512.08 -197557 8165940.45 -5495 8164805.22 -966 8163824.79 -98435 8161771.45 -127227 8161344.92 -194100 8160978.78 -40134 8160358.08 -107341 8159952.05 -6790 8158792.66 -43851 8157101.4 -51295 8156419.2 -69512 8151537 -164274 8149869.93 -130854 8145338.85 -186865 8143586.82 -176629 8141411.2 -193739 8141377.77 -6810 8139822.6 -27732 8136724.96 -50616 8134089.82 -123908 8128920.54 -140994 8128470.82 -99039 8128290.78 -62735 8124940.5 -47829 8122796.5 -192635 8122687.57 -192429 8119268 -145812 8119165.63 -42896 8118529.8 -146877 8118266.16 -60882 8116095.04 -18254 8114783.04 -165464 8114571.8 -57936 8111927.25 -52226 8110723.32 -128571 8106788.8 -100308 8105837.04 -8872 8102395.62 -58867 8102033.19 -145153 8100222.84 -172088 8098138.2 -59398 8095845.45 -89395 8093576.1 -171961 8093538 -88736 8090762.16 -174053 8090350.11 -102237 8089103.22 -43041 8086537.9 -110219 8085296.9 -126738 8084199.2 -44787 8083628.4 -31277 8083580.76 -93595 8082188.8 -189040 8080257.21 -59851 8079024.24 -175100 8077904.01 -43429 8076729.96 -154199 8074940.76 -60963 8073894.4 -8768 8072760.96 -66095 8071421.7 -111552 8068184.48 -24563 8067500.4 -16167 8067495.24 -12662 8067248.85 -94540 8063727.16 -23308 8063463.18 -27390 8062823.25 -130660 8062787.48 -8608 8062411.16 -181552 8062008.3 -199319 8060248.56 -55475 8058850.92 -142711 8057926.58 -103499 8056978 -105943 8056698.75 -8432 8053052.16 -149392 8049675.69 -101248 8048855.49 -140962 8047260.7 -87101 8046651.83 -133107 8046476.73 -45126 8045924.4 -87508 8042966.39 -124711 8042722.72 -173169 8042224.41 -175161 8041331.98 -167787 8040075.78 -3242 8038855.53 -114789 8038628.35 -43833 8038545.83 -141198 8035110.72 -137248 8034109.35 -96673 8033491.2 -32180 8032380.72 -166493 8031902.4 -66959 8031839.4 -85628 8029693.44 -110971 8029469.7 -130395 8027463.92 -7757 8026840.37 -178446 8025379.09 -41295 8024785.53 -100956 8024179.3 -131917 8021604.78 -24224 8020463.52 -2073 8020009.64 -121622 8018462.17 -14357 8016906.3 -135601 8016209.44 -58458 8016192.52 -73036 8015799 -184722 8015680.31 -151664 8014821.96 -195090 8012680.2 -162609 8011241 -83532 8009753.85 -50166 8007137.89 -181562 8006805.96 -175165 8005319.76 -62500 8005316.28 -36342 8004333.4 -128435 8004242.88 -92516 8003836.8 -30802 8003710.88 -107418 8000430.3 -46620 7999778.35 -191803 7994734.15 -106343 7993087.76 -59362 7990397.46 -8329 7990052.9 -75133 7988244 -179023 7986829.62 -135899 7985726.64 -5824 7985340.02 -148579 7984889.56 -95888 7984735.72 -9791 7982699.79 -170437 7982370.72 -39782 7977858.24 -20605 7977556 -28682 7976960 -42172 7973399 -56137 7971405.4 -64729 7970769.72 -98643 7968603.73 -153787 7967535.58 -8932 7967222.19 -20134 7965713.28 -197635 7963507.58 -80408 7963312.17 -37728 7961875.68 -26624 7961772.31 -44736 7961144.1 -29763 7960605.03 -36147 7959463.68 -146040 7957587.66 -115469 7957485.14 -142276 7956790.63 -181280 7954037.35 -115096 7953047.55 -109650 7952258.73 -93862 7951992.24 -158325 7950728.3 -55952 7950387.06 -122397 7947106.27 -28114 7946945.72 -11966 7945197.48 -47814 7944083 -85096 7943691.06 -51657 7943593.77 -196680 7943578.89 -13141 7942730.34 -193327 7941036.25 -152612 7940663.71 -139680 7939242.36 -31134 7938318.3 -45636 7937240.85 -56694 7936015.95 -8114 7933921.88 -71518 7932261.69 -72922 7930400.64 -146699 7929167.4 -92387 7928972.67 -186289 7928786.19 -95952 7927972.78 -196514 7927180.7 -4403 7925729.04 -2267 7925649.37 -45924 7925047.68 -11493 7916722.23 -104478 7916253.6 -166794 7913842 -161995 7910874.27 -23538 7909752.06 -41093 7909579.92 -112073 7908617.57 -92814 7908262.5 -88919 7907992.5 -79753 7907933.88 -108765 7905338.98 -146530 7905336.6 -71475 7903367.58 -36289 7901946.5 -61739 7900794 -52338 7898638.08 -194299 7898421.24 -105235 7897829.94 -77207 7897752.72 -96712 7897575.27 -10157 7897046.25 -171154 7896814.5 -79373 7896186 -113808 7893353.88 -27901 7892952 -128820 7892882.72 -25891 7890511.2 -122819 7888881.02 -154731 7888301.33 -101674 7879324.6 -51968 7879102.21 -72073 7877736.11 -5182 7874521.73 +129760 17538456.860000000 +166726 16503353.920000000 +191287 16474801.970000000 +161758 16101755.540000000 +34452 15983844.720000000 +139035 15907078.340000000 +9403 15451755.620000000 +154358 15212937.880000000 +38823 15064802.860000000 +85606 15053957.150000000 +33354 14408297.400000000 +154747 14407580.680000000 +82865 14235489.780000000 +76094 14094247.040000000 +222 13937777.740000000 +121271 13908336.000000000 +55221 13716120.470000000 +22819 13666434.280000000 +76281 13646853.680000000 +85298 13581154.930000000 +85158 13554904.000000000 +139684 13535538.720000000 +31034 13498025.250000000 +87305 13482847.040000000 +10181 13445148.750000000 +62323 13411824.300000000 +26489 13377256.380000000 +96493 13339057.830000000 +56548 13329014.970000000 +55576 13306843.350000000 +159751 13306614.480000000 +92406 13287414.500000000 +182636 13223726.740000000 +199969 13135288.210000000 +62865 13001926.940000000 +7284 12945298.190000000 +197867 12944510.520000000 +11562 12931575.510000000 +75165 12916918.120000000 +97175 12911283.500000000 +140840 12896562.230000000 +65241 12890600.460000000 +166120 12876927.220000000 +9035 12863828.700000000 +144616 12853549.300000000 +176723 12832309.740000000 +170884 12792136.580000000 +29790 12723300.330000000 +95213 12555483.730000000 +183873 12550533.050000000 +171235 12476538.300000000 +21533 12437821.320000000 +17290 12432159.500000000 +156397 12260623.500000000 +122611 12222812.980000000 +139155 12220319.250000000 +146316 12215800.610000000 +171381 12199734.520000000 +198633 12078226.950000000 +167417 12046637.620000000 +59512 12043468.760000000 +31688 12034893.640000000 +159586 12001505.840000000 +8993 11963814.300000000 +120302 11857707.550000000 +43536 11779340.520000000 +9552 11776909.160000000 +86223 11772205.080000000 +53776 11758669.650000000 +131285 11616953.740000000 +91628 11611114.830000000 +169644 11567959.720000000 +182299 11567462.050000000 +33107 11453818.760000000 +104184 11436657.440000000 +67027 11419127.140000000 +176869 11371451.710000000 +30885 11369674.790000000 +54420 11345076.880000000 +72240 11313951.050000000 +178708 11294635.170000000 +81298 11273686.130000000 +158324 11243442.720000000 +117095 11242535.240000000 +176793 11237733.380000000 +86091 11177793.790000000 +116033 11145434.360000000 +129058 11119112.200000000 +193714 11104706.390000000 +117195 11077217.960000000 +49851 11043701.780000000 +19791 11030662.620000000 +75800 11012401.620000000 +161562 10996371.690000000 +10119 10980015.750000000 +39185 10970042.560000000 +47223 10950022.130000000 +175594 10942923.050000000 +111295 10893675.610000000 +155446 10852764.570000000 +156391 10839810.380000000 +40884 10837234.190000000 +141288 10837130.210000000 +152388 10830977.820000000 +33449 10830858.720000000 +149035 10826130.020000000 +162620 10814275.680000000 +118324 10791788.100000000 +38932 10777541.750000000 +121294 10764225.220000000 +48721 10762582.490000000 +63342 10740132.600000000 +5614 10724668.800000000 +62266 10711143.100000000 +100202 10696675.550000000 +197741 10688560.720000000 +169178 10648522.800000000 +5271 10639392.650000000 +34499 10584177.100000000 +71108 10569117.560000000 +137132 10539880.470000000 +78451 10524873.240000000 +150827 10503810.480000000 +107237 10488030.840000000 +101727 10473558.100000000 +58708 10466280.440000000 +89768 10465477.220000000 +146493 10444291.580000000 +55424 10444006.480000000 +16560 10425574.740000000 +133114 10415097.900000000 +195810 10413625.200000000 +76673 10391977.180000000 +97305 10390890.570000000 +134210 10387210.020000000 +188536 10386529.920000000 +122255 10335760.320000000 +2682 10312966.100000000 +43814 10303086.610000000 +34767 10290405.180000000 +165584 10273705.890000000 +2231 10270415.550000000 +111259 10263256.560000000 +195578 10239795.820000000 +21093 10217531.300000000 +29856 10216932.540000000 +133686 10213345.760000000 +87745 10185509.400000000 +135153 10179379.700000000 +11773 10167410.840000000 +76316 10165151.700000000 +123076 10161225.780000000 +91894 10130462.190000000 +39741 10128387.520000000 +111753 10119780.980000000 +142729 10104748.890000000 +116775 10097750.420000000 +102589 10034784.360000000 +186268 10012181.570000000 +44545 10000286.480000000 +23307 9966577.500000000 +124281 9930018.900000000 +69604 9925730.640000000 +21971 9908982.030000000 +58148 9895894.400000000 +16532 9886529.900000000 +159180 9883744.430000000 +74733 9877582.880000000 +35173 9858275.920000000 +7116 9856881.020000000 +124620 9838589.140000000 +122108 9829949.350000000 +67200 9828690.690000000 +164775 9821424.440000000 +9039 9816447.720000000 +14912 9803102.200000000 +190906 9791315.700000000 +130398 9781674.270000000 +119310 9776927.210000000 +10132 9770930.780000000 +107211 9757586.250000000 +113958 9757065.500000000 +37009 9748362.690000000 +66746 9743528.760000000 +134486 9731922.000000000 +15945 9731096.450000000 +55307 9717745.800000000 +56362 9714922.830000000 +57726 9711792.100000000 +57256 9708621.000000000 +112292 9701653.080000000 +87514 9699492.530000000 +174206 9680562.020000000 +72865 9679043.340000000 +114357 9671017.440000000 +112807 9665019.210000000 +115203 9661018.730000000 +177454 9658906.350000000 +161275 9634313.710000000 +61893 9617095.440000000 +122219 9604888.200000000 +183427 9601362.580000000 +59158 9599705.960000000 +61931 9584918.980000000 +5532 9579964.140000000 +20158 9576714.380000000 +167199 9557413.080000000 +38869 9550279.530000000 +86949 9541943.700000000 +198544 9538613.920000000 +193762 9538238.940000000 +108807 9536247.160000000 +168324 9535647.990000000 +115588 9532195.040000000 +141372 9529702.140000000 +175120 9526068.660000000 +163851 9522808.830000000 +160954 9520359.450000000 +117757 9517882.800000000 +52594 9508325.760000000 +60960 9498843.060000000 +70272 9495775.620000000 +44050 9495515.360000000 +152213 9494756.960000000 +121203 9492601.300000000 +70114 9491012.300000000 +167588 9484741.110000000 +136455 9476241.780000000 +4357 9464355.640000000 +6786 9463632.570000000 +61345 9455336.700000000 +160826 9446754.840000000 +71275 9440138.400000000 +77746 9439118.350000000 +91289 9437472.000000000 +56723 9435102.160000000 +86647 9434604.180000000 +131234 9432120.000000000 +198129 9427651.360000000 +165530 9426193.680000000 +69233 9425053.920000000 +6243 9423304.660000000 +90110 9420422.700000000 +191980 9419368.360000000 +38461 9419316.070000000 +167873 9419024.490000000 +159373 9416950.150000000 +128707 9413428.500000000 +45267 9410863.780000000 +48460 9409793.930000000 +197672 9406887.680000000 +60884 9403442.400000000 +15209 9403245.310000000 +138049 9401262.100000000 +199286 9391770.700000000 +19629 9391236.400000000 +134019 9390615.150000000 +169475 9387639.580000000 +165918 9379510.440000000 +135602 9374251.540000000 +162323 9367566.510000000 +96277 9360850.680000000 +98336 9359671.290000000 +119781 9356395.730000000 +34440 9355365.000000000 +57362 9355180.100000000 +167236 9352973.840000000 +38463 9347530.940000000 +86749 9346826.440000000 +170007 9345699.900000000 +193087 9343744.000000000 +150383 9332576.750000000 +60932 9329582.020000000 +128420 9328206.350000000 +162145 9327722.880000000 +55686 9320304.400000000 +163080 9304916.960000000 +160583 9303515.920000000 +118153 9298606.560000000 +152634 9282184.570000000 +84731 9276586.920000000 +119989 9273814.200000000 +114584 9269698.650000000 +131817 9268570.080000000 +29068 9256583.880000000 +44116 9255922.000000000 +115818 9253311.910000000 +103388 9239218.080000000 +186118 9236209.120000000 +155809 9235410.840000000 +147003 9234847.990000000 +27769 9232511.640000000 +112779 9231927.360000000 +124851 9228982.680000000 +158488 9227216.400000000 +83328 9224792.200000000 +136797 9222927.090000000 +141730 9216370.680000000 +87304 9215695.500000000 +156004 9215557.900000000 +140740 9215329.200000000 +100648 9212185.080000000 +174774 9211718.000000000 +37644 9211578.600000000 +48807 9209496.240000000 +95940 9207948.400000000 +141586 9206699.220000000 +147248 9205654.950000000 +61372 9205228.760000000 +52970 9204415.950000000 +26430 9203710.510000000 +28504 9201669.200000000 +25810 9198878.500000000 +125329 9198688.500000000 +167867 9194022.720000000 +134767 9191444.720000000 +127745 9191271.560000000 +69208 9187110.000000000 +155222 9186469.160000000 +196916 9182995.820000000 +195590 9176353.120000000 +169155 9175176.090000000 +81558 9171946.500000000 +185136 9171293.040000000 +114790 9168509.100000000 +194142 9165836.610000000 +167639 9161165.000000000 +11241 9160789.460000000 +82628 9160155.540000000 +41399 9148338.000000000 +30755 9146196.840000000 +6944 9143574.580000000 +6326 9138803.160000000 +101296 9135657.620000000 +181479 9121093.300000000 +76898 9120983.100000000 +64274 9118745.250000000 +175826 9117387.990000000 +142215 9116876.880000000 +103415 9113128.620000000 +119765 9110768.790000000 +107624 9108837.450000000 +84215 9105257.360000000 +73774 9102651.920000000 +173972 9102069.000000000 +69817 9095513.880000000 +86943 9092253.000000000 +138859 9087719.300000000 +162273 9085296.480000000 +175945 9080401.210000000 +16836 9075715.440000000 +70224 9075265.950000000 +139765 9074755.890000000 +30319 9073233.100000000 +3851 9072657.240000000 +181271 9070631.520000000 +162184 9068835.780000000 +81683 9067258.470000000 +153028 9067010.510000000 +123324 9061870.950000000 +186481 9058608.300000000 +167680 9052908.760000000 +165293 9050545.700000000 +122148 9046298.170000000 +138604 9045840.800000000 +78851 9044822.600000000 +137280 9042355.340000000 +8823 9040855.100000000 +163900 9040848.480000000 +75600 9035392.450000000 +81676 9031999.400000000 +46033 9031460.580000000 +194917 9028500.000000000 +133936 9026949.020000000 +33182 9024971.100000000 +34220 9021485.390000000 +20118 9019942.600000000 +178258 9019881.660000000 +15560 9017687.280000000 +111425 9016198.560000000 +95942 9015585.120000000 +132709 9015240.150000000 +39731 9014746.950000000 +154307 9012571.200000000 +23769 9008157.600000000 +93328 9007211.200000000 +142826 8998297.440000000 +188792 8996014.000000000 +68703 8994982.220000000 +145280 8990941.050000000 +150725 8985686.160000000 +172046 8982469.520000000 +70476 8967629.500000000 +124988 8966805.220000000 +17937 8963319.760000000 +177372 8954873.640000000 +137994 8950916.790000000 +84019 8950039.980000000 +40389 8946158.200000000 +69187 8941054.140000000 +4863 8939044.920000000 +50465 8930503.140000000 +43686 8915543.840000000 +131352 8909053.590000000 +198916 8906940.030000000 +135932 8905282.950000000 +104673 8903682.000000000 +152308 8903244.080000000 +135298 8900323.200000000 +156873 8899429.100000000 +157454 8897339.200000000 +75415 8897068.090000000 +46325 8895569.090000000 +1966 8895117.060000000 +24576 8895034.750000000 +19425 8890156.600000000 +169735 8890085.560000000 +32225 8889829.280000000 +124537 8889770.710000000 +146327 8887836.230000000 +121562 8887740.400000000 +44731 8882444.950000000 +93141 8881850.880000000 +187871 8873506.180000000 +71709 8873057.280000000 +151913 8869321.170000000 +33786 8868955.390000000 +35902 8868126.060000000 +23588 8867769.900000000 +24508 8867616.000000000 +161282 8866661.430000000 +188061 8862304.000000000 +132847 8862082.000000000 +166843 8861200.800000000 +30609 8860214.730000000 +56191 8856546.960000000 +160740 8852685.430000000 +71229 8846106.990000000 +91208 8845541.280000000 +10995 8845306.560000000 +78094 8839938.290000000 +36489 8838538.100000000 +198437 8836494.840000000 +151693 8833807.640000000 +185367 8829791.370000000 +65682 8820622.890000000 +65421 8819329.240000000 +122225 8816821.860000000 +85330 8811013.160000000 +64555 8810643.120000000 +104188 8808211.020000000 +54411 8805703.400000000 +39438 8805282.560000000 +70795 8800060.920000000 +20383 8799073.280000000 +21952 8798624.190000000 +63584 8796590.000000000 +158768 8796422.950000000 +166588 8796214.380000000 +120600 8793558.060000000 +157202 8788287.880000000 +55358 8786820.750000000 +168322 8786670.730000000 +25143 8786324.800000000 +5368 8786274.140000000 +114025 8786201.120000000 +97744 8785315.940000000 +164327 8784503.860000000 +76542 8782613.280000000 +4731 8772846.700000000 +157590 8772006.450000000 +154276 8771733.910000000 +28705 8771576.640000000 +100226 8769455.000000000 +179195 8769185.160000000 +184355 8768118.050000000 +120408 8768011.120000000 +63145 8761991.960000000 +53135 8753491.800000000 +173071 8750508.800000000 +41087 8749436.790000000 +194830 8747438.400000000 +43496 8743359.300000000 +30235 8741611.000000000 +26391 8741399.640000000 +191816 8740258.720000000 +47616 8737229.680000000 +152101 8734432.760000000 +163784 8730514.340000000 +5134 8728424.640000000 +155241 8725429.860000000 +188814 8724182.400000000 +140782 8720378.750000000 +153141 8719407.510000000 +169373 8718609.060000000 +41335 8714773.800000000 +197450 8714617.320000000 +87004 8714017.790000000 +181804 8712257.760000000 +122814 8711119.140000000 +109939 8709193.160000000 +98094 8708780.040000000 +74630 8708040.750000000 +197291 8706519.090000000 +184173 8705467.450000000 +192175 8705411.120000000 +19471 8702536.120000000 +18052 8702155.700000000 +135560 8698137.720000000 +152791 8697325.800000000 +170953 8696909.190000000 +116137 8696687.170000000 +7722 8696589.400000000 +49788 8694846.710000000 +13252 8694822.420000000 +12633 8694559.360000000 +193438 8690426.720000000 +17326 8689329.160000000 +96124 8679794.580000000 +143802 8676626.480000000 +30389 8675826.600000000 +75250 8675257.140000000 +72613 8673524.940000000 +123520 8672456.250000000 +325 8667741.280000000 +167291 8667556.180000000 +150119 8663403.540000000 +88420 8663355.400000000 +179784 8653021.340000000 +130884 8651970.000000000 +172611 8648217.000000000 +85373 8647796.220000000 +122717 8646758.540000000 +113431 8646348.340000000 +66015 8643349.400000000 +33141 8643243.180000000 +69786 8637396.920000000 +181857 8637393.280000000 +122939 8636378.000000000 +196223 8635391.020000000 +50532 8632648.240000000 +58102 8632614.540000000 +93581 8632372.360000000 +52804 8632109.250000000 +755 8627091.680000000 +16597 8623357.050000000 +119041 8622397.000000000 +89050 8621185.980000000 +98696 8620784.820000000 +94399 8620524.000000000 +151295 8616671.020000000 +56417 8613450.350000000 +121322 8612948.230000000 +126883 8611373.420000000 +29155 8610163.640000000 +114530 8608471.740000000 +131007 8607394.820000000 +128715 8606833.620000000 +72522 8601479.980000000 +144061 8595718.740000000 +83503 8595034.200000000 +112199 8590717.440000000 +9227 8587350.420000000 +116318 8585910.660000000 +41248 8585559.640000000 +159398 8584821.000000000 +105966 8582308.790000000 +137876 8580641.300000000 +122272 8580400.770000000 +195717 8577278.100000000 +165295 8571121.920000000 +5840 8570728.740000000 +120860 8570610.440000000 +66692 8567540.520000000 +135596 8563276.310000000 +150576 8562794.100000000 +7500 8562393.840000000 +107716 8561541.560000000 +100611 8559995.850000000 +171192 8557390.080000000 +107660 8556696.600000000 +13461 8556545.120000000 +90310 8555131.510000000 +141493 8553782.930000000 +71286 8552682.000000000 +136423 8551300.760000000 +54241 8550785.250000000 +120325 8549976.600000000 +424 8547527.100000000 +196543 8545907.090000000 +13042 8542717.180000000 +58332 8536074.690000000 +9191 8535663.920000000 +134357 8535429.900000000 +96207 8534900.600000000 +92292 8530618.780000000 +181093 8528303.520000000 +105064 8527491.600000000 +59635 8526854.080000000 +136974 8524351.560000000 +126694 8522783.370000000 +6247 8522606.900000000 +139447 8522521.920000000 +96313 8520949.920000000 +108454 8520916.250000000 +181254 8519496.100000000 +71117 8519223.000000000 +131703 8517215.280000000 +59312 8510568.360000000 +2903 8509960.350000000 +102838 8509527.690000000 +162806 8508906.050000000 +41527 8508222.360000000 +118416 8505858.360000000 +180203 8505024.160000000 +14773 8500598.280000000 +140446 8499514.240000000 +199641 8497362.590000000 +109240 8494617.120000000 +150268 8494188.380000000 +45310 8492380.650000000 +36552 8490733.600000000 +199690 8490145.800000000 +185353 8488726.680000000 +163615 8484985.010000000 +196520 8483545.040000000 +133438 8483482.350000000 +77285 8481442.320000000 +55824 8476893.900000000 +76753 8475522.120000000 +46129 8472717.960000000 +28358 8472515.500000000 +9317 8472145.320000000 +33823 8469721.440000000 +39055 8469145.070000000 +91471 8468874.560000000 +142299 8466039.550000000 +97672 8464119.800000000 +134712 8461781.790000000 +157988 8460123.200000000 +102284 8458652.440000000 +73533 8458453.320000000 +90599 8457874.860000000 +112160 8457863.360000000 +124792 8457633.700000000 +66097 8457573.150000000 +165271 8456969.010000000 +146925 8454887.910000000 +164277 8454838.500000000 +131290 8454811.200000000 +179386 8450909.900000000 +90486 8447873.860000000 +175924 8444421.660000000 +185922 8442394.880000000 +38492 8436438.320000000 +172511 8436287.340000000 +139539 8434180.290000000 +11926 8433199.520000000 +55889 8431449.880000000 +163068 8431116.400000000 +138772 8428406.360000000 +126821 8425180.680000000 +22091 8420687.880000000 +55981 8419434.380000000 +100960 8419403.460000000 +172568 8417955.210000000 +63135 8415945.530000000 +137651 8413170.350000000 +191353 8413039.840000000 +62988 8411571.480000000 +103417 8411541.120000000 +12052 8411519.280000000 +104260 8408516.550000000 +157129 8405730.080000000 +77254 8405537.220000000 +112966 8403512.890000000 +168114 8402764.560000000 +49940 8402328.200000000 +52017 8398753.600000000 +176179 8398087.000000000 +100215 8395906.610000000 +61256 8392811.200000000 +15366 8388907.800000000 +109479 8388027.200000000 +66202 8386522.830000000 +81707 8385761.190000000 +51727 8385426.400000000 +9980 8382754.620000000 +174403 8378575.730000000 +54558 8378041.920000000 +3141 8377378.220000000 +134829 8377105.520000000 +145056 8376920.760000000 +194020 8375157.640000000 +7117 8373982.270000000 +120146 8373796.200000000 +126843 8370761.280000000 +62117 8369493.440000000 +111221 8367525.810000000 +159337 8366092.260000000 +173903 8365428.480000000 +136438 8364065.450000000 +56684 8363198.000000000 +137597 8363185.940000000 +20039 8361138.240000000 +121326 8359635.520000000 +48435 8352863.100000000 +1712 8349107.000000000 +167190 8347238.700000000 +32113 8346452.040000000 +40580 8342983.320000000 +74785 8342519.130000000 +14799 8342236.750000000 +177291 8341736.830000000 +198956 8340370.650000000 +69179 8338465.990000000 +118764 8337616.560000000 +128814 8336435.560000000 +82729 8331766.880000000 +152048 8330638.990000000 +171085 8326259.500000000 +126730 8325974.400000000 +77525 8323282.500000000 +170653 8322840.500000000 +5257 8320350.780000000 +67350 8318987.560000000 +109008 8317836.540000000 +199043 8316603.540000000 +139969 8316551.540000000 +22634 8316531.240000000 +173309 8315750.250000000 +10887 8315019.360000000 +42392 8312895.960000000 +126040 8312623.200000000 +101590 8304555.420000000 +46891 8302192.120000000 +138721 8301745.620000000 +113715 8301533.200000000 +78778 8299685.640000000 +142908 8299447.770000000 +64419 8297631.800000000 +21396 8296272.270000000 +4180 8295646.920000000 +63534 8295383.670000000 +135957 8294389.860000000 +30126 8291920.320000000 +158427 8288938.000000000 +14545 8288395.920000000 +75548 8288287.200000000 +64473 8286137.440000000 +149553 8285714.880000000 +151284 8283526.650000000 +171091 8282934.360000000 +194256 8278985.340000000 +952 8276136.000000000 +121541 8275390.260000000 +177664 8275315.200000000 +51117 8274504.300000000 +66770 8273407.800000000 +37238 8272728.060000000 +46679 8270486.550000000 +165852 8268312.600000000 +99458 8266564.470000000 +114519 8265493.540000000 +7231 8264881.500000000 +19033 8264826.560000000 +125123 8262732.650000000 +18642 8261578.990000000 +50386 8261380.050000000 +193770 8259578.820000000 +7276 8258101.600000000 +178045 8253904.150000000 +49033 8253696.230000000 +187195 8251334.580000000 +10590 8249227.400000000 +143779 8247057.700000000 +35205 8245675.170000000 +19729 8245081.600000000 +144946 8240479.800000000 +123786 8239581.240000000 +70843 8237973.200000000 +112437 8236907.520000000 +5436 8236039.570000000 +163754 8235471.160000000 +115945 8234811.360000000 +27918 8233957.880000000 +105712 8233571.860000000 +41007 8229431.790000000 +40476 8226640.410000000 +145620 8221371.600000000 +7771 8220413.330000000 +86424 8215572.610000000 +129137 8215478.400000000 +76020 8210495.360000000 +140213 8209831.800000000 +32379 8208338.880000000 +130616 8207715.750000000 +195469 8206609.800000000 +191805 8205147.750000000 +90906 8200951.200000000 +170910 8195558.010000000 +105399 8193122.630000000 +123798 8192385.970000000 +90218 8191689.160000000 +114766 8189339.540000000 +11289 8187354.720000000 +178308 8185750.500000000 +71271 8185519.240000000 +1115 8184903.380000000 +152636 8184530.720000000 +151619 8182909.050000000 +116943 8181072.690000000 +28891 8181051.540000000 +47049 8180955.000000000 +158827 8180470.900000000 +92620 8179671.550000000 +20814 8176953.540000000 +179323 8176795.550000000 +193453 8174343.940000000 +56888 8173342.000000000 +28087 8169876.300000000 +164254 8169632.350000000 +57661 8168848.160000000 +7363 8167538.050000000 +164499 8167512.080000000 +197557 8165940.450000000 +5495 8164805.220000000 +966 8163824.790000000 +98435 8161771.450000000 +127227 8161344.920000000 +194100 8160978.780000000 +40134 8160358.080000000 +107341 8159952.050000000 +6790 8158792.660000000 +43851 8157101.400000000 +51295 8156419.200000000 +69512 8151537.000000000 +164274 8149869.930000000 +130854 8145338.850000000 +186865 8143586.820000000 +176629 8141411.200000000 +193739 8141377.770000000 +6810 8139822.600000000 +27732 8136724.960000000 +50616 8134089.820000000 +123908 8128920.540000000 +140994 8128470.820000000 +99039 8128290.780000000 +62735 8124940.500000000 +47829 8122796.500000000 +192635 8122687.570000000 +192429 8119268.000000000 +145812 8119165.630000000 +42896 8118529.800000000 +146877 8118266.160000000 +60882 8116095.040000000 +18254 8114783.040000000 +165464 8114571.800000000 +57936 8111927.250000000 +52226 8110723.320000000 +128571 8106788.800000000 +100308 8105837.040000000 +8872 8102395.620000000 +58867 8102033.190000000 +145153 8100222.840000000 +172088 8098138.200000000 +59398 8095845.450000000 +89395 8093576.100000000 +171961 8093538.000000000 +88736 8090762.160000000 +174053 8090350.110000000 +102237 8089103.220000000 +43041 8086537.900000000 +110219 8085296.900000000 +126738 8084199.200000000 +44787 8083628.400000000 +31277 8083580.760000000 +93595 8082188.800000000 +189040 8080257.210000000 +59851 8079024.240000000 +175100 8077904.010000000 +43429 8076729.960000000 +154199 8074940.760000000 +60963 8073894.400000000 +8768 8072760.960000000 +66095 8071421.700000000 +111552 8068184.480000000 +24563 8067500.400000000 +16167 8067495.240000000 +12662 8067248.850000000 +94540 8063727.160000000 +23308 8063463.180000000 +27390 8062823.250000000 +130660 8062787.480000000 +8608 8062411.160000000 +181552 8062008.300000000 +199319 8060248.560000000 +55475 8058850.920000000 +142711 8057926.580000000 +103499 8056978.000000000 +105943 8056698.750000000 +8432 8053052.160000000 +149392 8049675.690000000 +101248 8048855.490000000 +140962 8047260.700000000 +87101 8046651.830000000 +133107 8046476.730000000 +45126 8045924.400000000 +87508 8042966.390000000 +124711 8042722.720000000 +173169 8042224.410000000 +175161 8041331.980000000 +167787 8040075.780000000 +3242 8038855.530000000 +114789 8038628.350000000 +43833 8038545.830000000 +141198 8035110.720000000 +137248 8034109.350000000 +96673 8033491.200000000 +32180 8032380.720000000 +166493 8031902.400000000 +66959 8031839.400000000 +85628 8029693.440000000 +110971 8029469.700000000 +130395 8027463.920000000 +7757 8026840.370000000 +178446 8025379.090000000 +41295 8024785.530000000 +100956 8024179.300000000 +131917 8021604.780000000 +24224 8020463.520000000 +2073 8020009.640000000 +121622 8018462.170000000 +14357 8016906.300000000 +135601 8016209.440000000 +58458 8016192.520000000 +73036 8015799.000000000 +184722 8015680.310000000 +151664 8014821.960000000 +195090 8012680.200000000 +162609 8011241.000000000 +83532 8009753.850000000 +50166 8007137.890000000 +181562 8006805.960000000 +175165 8005319.760000000 +62500 8005316.280000000 +36342 8004333.400000000 +128435 8004242.880000000 +92516 8003836.800000000 +30802 8003710.880000000 +107418 8000430.300000000 +46620 7999778.350000000 +191803 7994734.150000000 +106343 7993087.760000000 +59362 7990397.460000000 +8329 7990052.900000000 +75133 7988244.000000000 +179023 7986829.620000000 +135899 7985726.640000000 +5824 7985340.020000000 +148579 7984889.560000000 +95888 7984735.720000000 +9791 7982699.790000000 +170437 7982370.720000000 +39782 7977858.240000000 +20605 7977556.000000000 +28682 7976960.000000000 +42172 7973399.000000000 +56137 7971405.400000000 +64729 7970769.720000000 +98643 7968603.730000000 +153787 7967535.580000000 +8932 7967222.190000000 +20134 7965713.280000000 +197635 7963507.580000000 +80408 7963312.170000000 +37728 7961875.680000000 +26624 7961772.310000000 +44736 7961144.100000000 +29763 7960605.030000000 +36147 7959463.680000000 +146040 7957587.660000000 +115469 7957485.140000000 +142276 7956790.630000000 +181280 7954037.350000000 +115096 7953047.550000000 +109650 7952258.730000000 +93862 7951992.240000000 +158325 7950728.300000000 +55952 7950387.060000000 +122397 7947106.270000000 +28114 7946945.720000000 +11966 7945197.480000000 +47814 7944083.000000000 +85096 7943691.060000000 +51657 7943593.770000000 +196680 7943578.890000000 +13141 7942730.340000000 +193327 7941036.250000000 +152612 7940663.710000000 +139680 7939242.360000000 +31134 7938318.300000000 +45636 7937240.850000000 +56694 7936015.950000000 +8114 7933921.880000000 +71518 7932261.690000000 +72922 7930400.640000000 +146699 7929167.400000000 +92387 7928972.670000000 +186289 7928786.190000000 +95952 7927972.780000000 +196514 7927180.700000000 +4403 7925729.040000000 +2267 7925649.370000000 +45924 7925047.680000000 +11493 7916722.230000000 +104478 7916253.600000000 +166794 7913842.000000000 +161995 7910874.270000000 +23538 7909752.060000000 +41093 7909579.920000000 +112073 7908617.570000000 +92814 7908262.500000000 +88919 7907992.500000000 +79753 7907933.880000000 +108765 7905338.980000000 +146530 7905336.600000000 +71475 7903367.580000000 +36289 7901946.500000000 +61739 7900794.000000000 +52338 7898638.080000000 +194299 7898421.240000000 +105235 7897829.940000000 +77207 7897752.720000000 +96712 7897575.270000000 +10157 7897046.250000000 +171154 7896814.500000000 +79373 7896186.000000000 +113808 7893353.880000000 +27901 7892952.000000000 +128820 7892882.720000000 +25891 7890511.200000000 +122819 7888881.020000000 +154731 7888301.330000000 +101674 7879324.600000000 +51968 7879102.210000000 +72073 7877736.110000000 +5182 7874521.730000000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q15.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q15.out index 5838117362624f..aac7812ca2c0f1 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q15.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q15.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q15 -- -8449 Supplier#000008449 Wp34zim9qYFbVctdW 20-469-856-8873 1772627.2087 +8449 Supplier#000008449 Wp34zim9qYFbVctdW 20-469-856-8873 1772627.208700000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q18.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q18.out index a20cb1e62aa74a..3dd788ad76a9b3 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q18.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q18.out @@ -1,60 +1,60 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q18 -- -Customer#000128120 128120 4722021 1994-04-07 544089.09 323 -Customer#000144617 144617 3043270 1997-02-12 530604.44 317 -Customer#000013940 13940 2232932 1997-04-13 522720.61 304 -Customer#000066790 66790 2199712 1996-09-30 515531.82 327 -Customer#000046435 46435 4745607 1997-07-03 508047.99 309 -Customer#000015272 15272 3883783 1993-07-28 500241.33 302 -Customer#000146608 146608 3342468 1994-06-12 499794.58 303 -Customer#000096103 96103 5984582 1992-03-16 494398.79 312 -Customer#000024341 24341 1474818 1992-11-15 491348.26 302 -Customer#000137446 137446 5489475 1997-05-23 487763.25 311 -Customer#000107590 107590 4267751 1994-11-04 485141.38 301 -Customer#000050008 50008 2366755 1996-12-09 483891.26 302 -Customer#000015619 15619 3767271 1996-08-07 480083.96 318 -Customer#000077260 77260 1436544 1992-09-12 479499.43 307 -Customer#000109379 109379 5746311 1996-10-10 478064.11 302 -Customer#000054602 54602 5832321 1997-02-09 471220.08 307 -Customer#000105995 105995 2096705 1994-07-03 469692.58 307 -Customer#000148885 148885 2942469 1992-05-31 469630.44 313 -Customer#000114586 114586 551136 1993-05-19 469605.59 308 -Customer#000105260 105260 5296167 1996-09-06 469360.57 303 -Customer#000147197 147197 1263015 1997-02-02 467149.67 320 -Customer#000064483 64483 2745894 1996-07-04 466991.35 304 -Customer#000136573 136573 2761378 1996-05-31 461282.73 301 -Customer#000016384 16384 502886 1994-04-12 458378.92 312 -Customer#000117919 117919 2869152 1996-06-20 456815.92 317 -Customer#000012251 12251 735366 1993-11-24 455107.26 309 -Customer#000120098 120098 1971680 1995-06-14 453451.23 308 -Customer#000066098 66098 5007490 1992-08-07 453436.16 304 -Customer#000117076 117076 4290656 1997-02-05 449545.85 301 -Customer#000129379 129379 4720454 1997-06-07 448665.79 303 -Customer#000126865 126865 4702759 1994-11-07 447606.65 320 -Customer#000088876 88876 983201 1993-12-30 446717.46 304 -Customer#000036619 36619 4806726 1995-01-17 446704.09 328 -Customer#000141823 141823 2806245 1996-12-29 446269.12 310 -Customer#000053029 53029 2662214 1993-08-13 446144.49 302 -Customer#000018188 18188 3037414 1995-01-25 443807.22 308 -Customer#000066533 66533 29158 1995-10-21 443576.5 305 -Customer#000037729 37729 4134341 1995-06-29 441082.97 309 -Customer#000003566 3566 2329187 1998-01-04 439803.36 304 -Customer#000045538 45538 4527553 1994-05-22 436275.31 305 -Customer#000081581 81581 4739650 1995-11-04 435405.9 305 -Customer#000119989 119989 1544643 1997-09-20 434568.25 320 -Customer#000003680 3680 3861123 1998-07-03 433525.97 301 -Customer#000113131 113131 967334 1995-12-15 432957.75 301 -Customer#000141098 141098 565574 1995-09-24 430986.69 301 -Customer#000093392 93392 5200102 1997-01-22 425487.51 304 -Customer#000015631 15631 1845057 1994-05-12 419879.59 302 -Customer#000112987 112987 4439686 1996-09-17 418161.49 305 -Customer#000012599 12599 4259524 1998-02-12 415200.61 304 -Customer#000105410 105410 4478371 1996-03-05 412754.51 302 -Customer#000149842 149842 5156581 1994-05-30 411329.35 302 -Customer#000010129 10129 5849444 1994-03-21 409129.85 309 -Customer#000069904 69904 1742403 1996-10-19 408513 305 -Customer#000017746 17746 6882 1997-04-09 408446.93 303 -Customer#000013072 13072 1481925 1998-03-15 399195.47 301 -Customer#000082441 82441 857959 1994-02-07 382579.74 305 -Customer#000088703 88703 2995076 1994-01-30 363812.12 302 +Customer#000128120 128120 4722021 1994-04-07 544089.09 323.000000000 +Customer#000144617 144617 3043270 1997-02-12 530604.44 317.000000000 +Customer#000013940 13940 2232932 1997-04-13 522720.61 304.000000000 +Customer#000066790 66790 2199712 1996-09-30 515531.82 327.000000000 +Customer#000046435 46435 4745607 1997-07-03 508047.99 309.000000000 +Customer#000015272 15272 3883783 1993-07-28 500241.33 302.000000000 +Customer#000146608 146608 3342468 1994-06-12 499794.58 303.000000000 +Customer#000096103 96103 5984582 1992-03-16 494398.79 312.000000000 +Customer#000024341 24341 1474818 1992-11-15 491348.26 302.000000000 +Customer#000137446 137446 5489475 1997-05-23 487763.25 311.000000000 +Customer#000107590 107590 4267751 1994-11-04 485141.38 301.000000000 +Customer#000050008 50008 2366755 1996-12-09 483891.26 302.000000000 +Customer#000015619 15619 3767271 1996-08-07 480083.96 318.000000000 +Customer#000077260 77260 1436544 1992-09-12 479499.43 307.000000000 +Customer#000109379 109379 5746311 1996-10-10 478064.11 302.000000000 +Customer#000054602 54602 5832321 1997-02-09 471220.08 307.000000000 +Customer#000105995 105995 2096705 1994-07-03 469692.58 307.000000000 +Customer#000148885 148885 2942469 1992-05-31 469630.44 313.000000000 +Customer#000114586 114586 551136 1993-05-19 469605.59 308.000000000 +Customer#000105260 105260 5296167 1996-09-06 469360.57 303.000000000 +Customer#000147197 147197 1263015 1997-02-02 467149.67 320.000000000 +Customer#000064483 64483 2745894 1996-07-04 466991.35 304.000000000 +Customer#000136573 136573 2761378 1996-05-31 461282.73 301.000000000 +Customer#000016384 16384 502886 1994-04-12 458378.92 312.000000000 +Customer#000117919 117919 2869152 1996-06-20 456815.92 317.000000000 +Customer#000012251 12251 735366 1993-11-24 455107.26 309.000000000 +Customer#000120098 120098 1971680 1995-06-14 453451.23 308.000000000 +Customer#000066098 66098 5007490 1992-08-07 453436.16 304.000000000 +Customer#000117076 117076 4290656 1997-02-05 449545.85 301.000000000 +Customer#000129379 129379 4720454 1997-06-07 448665.79 303.000000000 +Customer#000126865 126865 4702759 1994-11-07 447606.65 320.000000000 +Customer#000088876 88876 983201 1993-12-30 446717.46 304.000000000 +Customer#000036619 36619 4806726 1995-01-17 446704.09 328.000000000 +Customer#000141823 141823 2806245 1996-12-29 446269.12 310.000000000 +Customer#000053029 53029 2662214 1993-08-13 446144.49 302.000000000 +Customer#000018188 18188 3037414 1995-01-25 443807.22 308.000000000 +Customer#000066533 66533 29158 1995-10-21 443576.50 305.000000000 +Customer#000037729 37729 4134341 1995-06-29 441082.97 309.000000000 +Customer#000003566 3566 2329187 1998-01-04 439803.36 304.000000000 +Customer#000045538 45538 4527553 1994-05-22 436275.31 305.000000000 +Customer#000081581 81581 4739650 1995-11-04 435405.90 305.000000000 +Customer#000119989 119989 1544643 1997-09-20 434568.25 320.000000000 +Customer#000003680 3680 3861123 1998-07-03 433525.97 301.000000000 +Customer#000113131 113131 967334 1995-12-15 432957.75 301.000000000 +Customer#000141098 141098 565574 1995-09-24 430986.69 301.000000000 +Customer#000093392 93392 5200102 1997-01-22 425487.51 304.000000000 +Customer#000015631 15631 1845057 1994-05-12 419879.59 302.000000000 +Customer#000112987 112987 4439686 1996-09-17 418161.49 305.000000000 +Customer#000012599 12599 4259524 1998-02-12 415200.61 304.000000000 +Customer#000105410 105410 4478371 1996-03-05 412754.51 302.000000000 +Customer#000149842 149842 5156581 1994-05-30 411329.35 302.000000000 +Customer#000010129 10129 5849444 1994-03-21 409129.85 309.000000000 +Customer#000069904 69904 1742403 1996-10-19 408513.00 305.000000000 +Customer#000017746 17746 6882 1997-04-09 408446.93 303.000000000 +Customer#000013072 13072 1481925 1998-03-15 399195.47 301.000000000 +Customer#000082441 82441 857959 1994-02-07 382579.74 305.000000000 +Customer#000088703 88703 2995076 1994-01-30 363812.12 302.000000000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q19.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q19.out index b8034b7d9cdcfd..44b1f599d23872 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q19.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q19.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q19 -- -3083843.0578 +3083843.057800000 diff --git a/regression-test/data/datev2/tpch_sf1_p2/sql/q22.out b/regression-test/data/datev2/tpch_sf1_p2/sql/q22.out index b5421f614ba754..83be7986e20c75 100644 --- a/regression-test/data/datev2/tpch_sf1_p2/sql/q22.out +++ b/regression-test/data/datev2/tpch_sf1_p2/sql/q22.out @@ -1,10 +1,10 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q22 -- -13 888 6737713.99 -17 861 6460573.72 -18 964 7236687.4 -23 892 6701457.95 -29 948 7158866.63 -30 909 6808436.13 -31 922 6806670.18 +13 888 6737713.990000000 +17 861 6460573.720000000 +18 964 7236687.400000000 +23 892 6701457.950000000 +29 948 7158866.630000000 +30 909 6808436.130000000 +31 922 6806670.180000000 diff --git a/regression-test/data/ddl_p0/test_ctas.out b/regression-test/data/ddl_p0/test_ctas.out index bde04638885291..cfd0fb911be457 100644 --- a/regression-test/data/ddl_p0/test_ctas.out +++ b/regression-test/data/ddl_p0/test_ctas.out @@ -1,12 +1,12 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -test_ctas1 CREATE TABLE `test_ctas1` (\n `test_varchar` varchar(65533) NULL,\n `test_text` text NULL,\n `test_datetime` datetime NULL,\n `test_default_timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP\n) ENGINE=OLAP\nDUPLICATE KEY(`test_varchar`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`test_varchar`) BUCKETS 10\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_ctas1 CREATE TABLE `test_ctas1` (\n `test_varchar` varchar(65533) NULL,\n `test_text` text NULL,\n `test_datetime` datetime NULL,\n `test_default_timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP\n) ENGINE=OLAP\nDUPLICATE KEY(`test_varchar`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`test_varchar`) BUCKETS 10\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- 2 -- !select -- -test_ctas2 CREATE TABLE `test_ctas2` (\n `test_varchar` varchar(65533) NULL,\n `test_text` text NULL,\n `test_datetime` datetime NULL,\n `test_default_timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP\n) ENGINE=OLAP\nDUPLICATE KEY(`test_varchar`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`test_varchar`) BUCKETS 10\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_ctas2 CREATE TABLE `test_ctas2` (\n `test_varchar` varchar(65533) NULL,\n `test_text` text NULL,\n `test_datetime` datetime NULL,\n `test_default_timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP\n) ENGINE=OLAP\nDUPLICATE KEY(`test_varchar`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`test_varchar`) BUCKETS 10\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- 2 diff --git a/regression-test/data/ddl_p0/test_ctl.out b/regression-test/data/ddl_p0/test_ctl.out index ae736d61cd8145..babb4fb3f03bca 100644 --- a/regression-test/data/ddl_p0/test_ctl.out +++ b/regression-test/data/ddl_p0/test_ctl.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -test_ctl1 CREATE TABLE `test_ctl1` (\n `test_varchar` varchar(150) NULL,\n `test_datetime` datetime NULL,\n `test_default_timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP\n) ENGINE=OLAP\nUNIQUE KEY(`test_varchar`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`test_varchar`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_ctl1 CREATE TABLE `test_ctl1` (\n `test_varchar` varchar(150) NULL,\n `test_datetime` datetime NULL,\n `test_default_timestamp` datetime NULL DEFAULT CURRENT_TIMESTAMP\n) ENGINE=OLAP\nUNIQUE KEY(`test_varchar`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`test_varchar`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); diff --git a/regression-test/data/ddl_p0/test_recover.out b/regression-test/data/ddl_p0/test_recover.out index 5dba5a568dea52..863c9a58bf4276 100644 --- a/regression-test/data/ddl_p0/test_recover.out +++ b/regression-test/data/ddl_p0/test_recover.out @@ -1,42 +1,42 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -94,7 +94,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -104,43 +104,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -198,7 +198,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -208,43 +208,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -302,7 +302,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -312,43 +312,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -406,7 +406,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -416,43 +416,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -510,7 +510,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -520,43 +520,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -614,7 +614,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -624,43 +624,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -718,7 +718,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb @@ -728,43 +728,43 @@ test_recover_tb_2 test_recover_tb_2 -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("1000"), ("2000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("2000"), ("3000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("3000"), ("4000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("3000"), ("4000")),\nPARTITION p2000 VALUES [("4000"), ("5000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- @@ -822,7 +822,7 @@ test_recover_db CREATE DATABASE `test_recover_db` test_recover_db_new CREATE DATABASE `test_recover_db_new` -- !select -- -test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_recover_tb CREATE TABLE `test_recover_tb` (\n `k1` int(11) NULL,\n `k2` datetime NULL\n) ENGINE=OLAP\nUNIQUE KEY(`k1`)\nCOMMENT 'OLAP'\nPARTITION BY RANGE(`k1`)\n(PARTITION p111 VALUES [("-1000"), ("111")),\nPARTITION p222 VALUES [("111"), ("222")),\nPARTITION p333 VALUES [("222"), ("333")),\nPARTITION p1000 VALUES [("333"), ("1000")))\nDISTRIBUTED BY HASH(`k1`) BUCKETS 3\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); -- !select -- test_recover_tb diff --git a/regression-test/data/decimalv3/test_decimalv3.out b/regression-test/data/decimalv3/test_decimalv3.out new file mode 100644 index 00000000000000..f8d56b4c41aafc --- /dev/null +++ b/regression-test/data/decimalv3/test_decimalv3.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !decimalv3 -- +100.000000000000000000 + +-- !decimalv3 -- +100.00000000000000000000 + diff --git a/regression-test/data/decimalv3/tpch_sf0.1_p1/sql/q01.out b/regression-test/data/decimalv3/tpch_sf0.1_p1/sql/q01.out index 8bce74780bcc47..dbfc153a72976d 100644 --- a/regression-test/data/decimalv3/tpch_sf0.1_p1/sql/q01.out +++ b/regression-test/data/decimalv3/tpch_sf0.1_p1/sql/q01.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q01 -- -A F 3774200.00 5320753880.69 5054096266.6828 5256751331.449234 25.53 36002.12 0.05 147790 -N F 95257.00 133737795.84 127132372.6512 132286291.229445 25.30 35521.32 0.04 3765 -N O 7459297.00 10512270008.90 9986238338.3847 10385578376.585467 25.54 36000.92 0.05 292000 -R F 3785523.00 5337950526.47 5071818532.9420 5274405503.049367 25.52 35994.02 0.04 148301 +A F 3774200.00 5320753880.69 5054096266.6828 5256751331.449234 25.5375 36002.1238 0.0501 147790 +N F 95257.00 133737795.84 127132372.6512 132286291.229445 25.3006 35521.3269 0.0493 3765 +N O 7459297.00 10512270008.90 9986238338.3847 10385578376.585467 25.5455 36000.9246 0.0500 292000 +R F 3785523.00 5337950526.47 5071818532.9420 5274405503.049367 25.5259 35994.0292 0.0499 148301 diff --git a/regression-test/data/decimalv3/tpch_sf1_p2/sql/q01.out b/regression-test/data/decimalv3/tpch_sf1_p2/sql/q01.out index 35ed472bd60e20..8274bd4987b650 100644 --- a/regression-test/data/decimalv3/tpch_sf1_p2/sql/q01.out +++ b/regression-test/data/decimalv3/tpch_sf1_p2/sql/q01.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !q01 -- -A F 37734107.00 56586554400.73 53758257134.8700 55909065222.827692 25.52 38273.12 0.04 1478493 -N F 991417.00 1487504710.38 1413082168.0541 1469649223.194375 25.51 38284.46 0.05 38854 -N O 74476040.00 111701729697.74 106118230307.6056 110367043872.497010 25.50 38249.11 0.04 2920374 -R F 37719753.00 56568041380.90 53741292684.6040 55889619119.831932 25.50 38250.85 0.05 1478870 +A F 37734107.00 56586554400.73 53758257134.8700 55909065222.827692 25.5220 38273.1297 0.0499 1478493 +N F 991417.00 1487504710.38 1413082168.0541 1469649223.194375 25.5164 38284.4677 0.0500 38854 +N O 74476040.00 111701729697.74 106118230307.6056 110367043872.497010 25.5022 38249.1179 0.0499 2920374 +R F 37719753.00 56568041380.90 53741292684.6040 55889619119.831932 25.5057 38250.8546 0.0500 1478870 diff --git a/regression-test/data/external_table_emr_p2/hive/test_external_yandex_nereids.out b/regression-test/data/external_table_emr_p2/hive/test_external_yandex_nereids.out new file mode 100644 index 00000000000000..dc56cd16a26c26 --- /dev/null +++ b/regression-test/data/external_table_emr_p2/hive/test_external_yandex_nereids.out @@ -0,0 +1,296 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !01 -- +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-17 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-18 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-19 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-20 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-21 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-22 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-barana.ru/traction.html#maybettaya 2014-03-23 http://auto.ru/chatay-barana.ru/traction.html#maybettaya +http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan 2014-03-17 http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan +http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan 2014-03-18 http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan +http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan 2014-03-19 http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan +http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan 2014-03-20 http://auto.ru/chatay-baranta_bound-in-tanks.ru/forumyazan +http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny 2014-03-17 http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny +http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny 2014-03-18 http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny +http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny 2014-03-19 http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny +http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny 2014-03-20 http://auto.ru/chatay-baranta_bound-in-thankYou=ru/tver/zhanny +http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta 2014-03-17 http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta +http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta 2014-03-18 http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta +http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta 2014-03-19 http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta +http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta 2014-03-20 http://auto.ru/chatay-baranta_bound-in-the-asfalt.ru/guru.app4smarta +http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe 2014-03-17 http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe +http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe 2014-03-18 http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe +http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe 2014-03-19 http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe +http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe 2014-03-20 http://auto.ru/chatay-baranta_bound-in-trannie/spb_eco_classnoe +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-17 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-18 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-19 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-20 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-21 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-22 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi 2014-03-23 http://auto.ru/chatay-bibolge.ru/yandex.ua/obyaschenshchennoktalahi +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-17 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-18 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-19 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-20 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-21 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-22 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx 2014-03-23 http://auto.ru/chatay-bit-gd-geli-bolshe__298682.13.xls&nails.aspx +http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet 2014-03-17 http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet +http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet 2014-03-18 http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet +http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet 2014-03-19 http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet +http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet 2014-03-20 http://auto.ru/chatay-bit-yz-odezhda/velik.hurriyet +http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u 2014-03-17 http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u +http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u 2014-03-18 http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u +http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u 2014-03-19 http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u +http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u 2014-03-20 http://auto.ru/chatay-bit-yz-odezhda/vereya/dlike4u +http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod 2014-03-17 http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod +http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod 2014-03-18 http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod +http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod 2014-03-19 http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod +http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod 2014-03-20 http://auto.ru/chatay-bit-yz-odezhda/verhnya/bankovod +http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego 2014-03-17 http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego +http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego 2014-03-18 http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego +http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego 2014-03-19 http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego +http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego 2014-03-20 http://auto.ru/chatay-bit-yz-odezhda/versonal/5/sego +http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede 2014-03-17 http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede +http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede 2014-03-18 http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede +http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede 2014-03-19 http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede +http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede 2014-03-20 http://auto.ru/chatay-john-Den-You-TheAgence=&commemchurkiyede +http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 2014-03-17 http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 +http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 2014-03-18 http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 +http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 2014-03-19 http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 +http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 2014-03-20 http://auto.ru/chatay-john-Den-You-TheAgents/c1303954 +http://auto.ru/chatay-john-Den-Yunan-rasskRollback 2014-03-17 http://auto.ru/chatay-john-Den-Yunan-rasskRollback +http://auto.ru/chatay-john-Den-Yunan-rasskRollback 2014-03-18 http://auto.ru/chatay-john-Den-Yunan-rasskRollback +http://auto.ru/chatay-john-Den-Yunan-rasskRollback 2014-03-19 http://auto.ru/chatay-john-Den-Yunan-rasskRollback +http://auto.ru/chatay-john-Den-Yunan-rasskRollback 2014-03-20 http://auto.ru/chatay-john-Den-Yunan-rasskRollback +http://auto.ru/chatay-john-Den-Yunanija.com%2F20 2014-03-22 http://auto.ru/chatay-john-Den-Yunanija.com%2F20 +http://auto.ru/chatay-john-Den-Yunanija.com%2F20 2014-03-23 http://auto.ru/chatay-john-Den-Yunanija.com%2F20 +http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback +http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback +http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback +http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.com.tr&callback +http://auto.ru/chatay-john-Den-Yunanija.com.tr&user 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.com.tr&user +http://auto.ru/chatay-john-Den-Yunanija.com.tr&user 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.com.tr&user +http://auto.ru/chatay-john-Den-Yunanija.com.tr&user 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.com.tr&user +http://auto.ru/chatay-john-Den-Yunanija.com.tr&user 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.com.tr&user +http://auto.ru/chatay-john-Den-Yunanija.com.tr&useriya 2014-03-23 http://auto.ru/chatay-john-Den-Yunanija.com.tr&useriya +http://auto.ru/chatay-john-Den-Yunanija.com.tr/oauth 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.com.tr/oauth +http://auto.ru/chatay-john-Den-Yunanija.com.tr/oauth 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.com.tr/oauth +http://auto.ru/chatay-john-Den-Yunanija.com.tr/oauth 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.com.tr/oauth +http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina +http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina +http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina +http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.com.ua/ukraina +http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex +http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex +http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex +http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.com.ua/yandex +http://auto.ru/chatay-john-Den-Yunanija.com/commetrovies 2014-03-23 http://auto.ru/chatay-john-Den-Yunanija.com/commetrovies +http://auto.ru/chatay-john-Den-Yunanija.com/obyavlenie 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.com/obyavlenie +http://auto.ru/chatay-john-Den-Yunanija.com/obyavlenie 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.com/obyavlenie +http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom +http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom +http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom +http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.html#medictengliyskom +http://auto.ru/chatay-john-Den-Yunanija.html/photos 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.html/photos +http://auto.ru/chatay-john-Den-Yunanija.html/photos 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.html/photos +http://auto.ru/chatay-john-Den-Yunanija.html/photos 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.html/photos +http://auto.ru/chatay-john-Den-Yunanija.html/photos 2014-03-21 http://auto.ru/chatay-john-Den-Yunanija.html/photos +http://auto.ru/chatay-john-Den-Yunanija.html/photos 2014-03-22 http://auto.ru/chatay-john-Den-Yunanija.html/photos +http://auto.ru/chatay-john-Den-Yunanija.html?area 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.html?area +http://auto.ru/chatay-john-Den-Yunanija.html?area 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.html?area +http://auto.ru/chatay-john-Den-Yunanija.html?area 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.html?area +http://auto.ru/chatay-john-Den-Yunanija.html?area 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.html?area +http://auto.ru/chatay-john-Den-Yunanija.html?area 2014-03-21 http://auto.ru/chatay-john-Den-Yunanija.html?area +http://auto.ru/chatay-john-Den-Yunanija.html?area 2014-03-22 http://auto.ru/chatay-john-Den-Yunanija.html?area +http://auto.ru/chatay-john-Den-Yunanija.html?period 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.html?period +http://auto.ru/chatay-john-Den-Yunanija.html?period 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.html?period +http://auto.ru/chatay-john-Den-Yunanija.html?period 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.html?period +http://auto.ru/chatay-john-Den-Yunanija.html?period 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.html?period +http://auto.ru/chatay-john-Den-Yunanija.html?pid 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.html?pid +http://auto.ru/chatay-john-Den-Yunanija.html?pid 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.html?pid +http://auto.ru/chatay-john-Den-Yunanija.html?pid 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.html?pid +http://auto.ru/chatay-john-Den-Yunanija.html?pid 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.html?pid +http://auto.ru/chatay-john-Den-Yunanija.html?rtn 2014-03-17 http://auto.ru/chatay-john-Den-Yunanija.html?rtn +http://auto.ru/chatay-john-Den-Yunanija.html?rtn 2014-03-18 http://auto.ru/chatay-john-Den-Yunanija.html?rtn +http://auto.ru/chatay-john-Den-Yunanija.html?rtn 2014-03-19 http://auto.ru/chatay-john-Den-Yunanija.html?rtn +http://auto.ru/chatay-john-Den-Yunanija.html?rtn 2014-03-20 http://auto.ru/chatay-john-Den-Yunanija.html?rtn +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-17 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-18 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-19 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-20 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-21 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-22 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com 2014-03-23 http://auto.ru/chatay-uchits/sem-yzyil-sony-osta.coccoc.com +http://auto.ru/chatay-uchits/thegames/page=http: 2014-03-17 http://auto.ru/chatay-uchits/thegames/page=http: +http://auto.ru/chatay-uchits/thegames/page=http: 2014-03-18 http://auto.ru/chatay-uchits/thegames/page=http: +http://auto.ru/chatay-uchits/thegames/page=http: 2014-03-19 http://auto.ru/chatay-uchits/thegames/page=http: +http://auto.ru/chatay-uchits/thegames/page=http: 2014-03-20 http://auto.ru/chatay-uchits/thegames/page=http: +http://auto.ru/chatay-uchits/thegames/page=https 2014-03-17 http://auto.ru/chatay-uchits/thegames/page=https +http://auto.ru/chatay-uchits/thegames/page=https 2014-03-18 http://auto.ru/chatay-uchits/thegames/page=https +http://auto.ru/chatay-uchits/thegames/page=https 2014-03-19 http://auto.ru/chatay-uchits/thegames/page=https +http://auto.ru/chatay-uchits/thegames/page=https 2014-03-20 http://auto.ru/chatay-uchits/thegames/page=https +http://auto.ru/chatay-uchits/thegames/pass.com.ua 2014-03-18 http://auto.ru/chatay-uchits/thegames/pass.com.ua +http://auto.ru/chatay-uchits/thegames/pass.com.ua 2014-03-19 http://auto.ru/chatay-uchits/thegames/pass.com.ua +http://auto.ru/chatay-uchits/thegames/pass.com.ua 2014-03-20 http://auto.ru/chatay-uchits/thegames/pass.com.ua +http://auto.ru/chatay-uchits/thegames/pass.com/effers 2014-03-17 http://auto.ru/chatay-uchits/thegames/pass.com/effers +http://auto.ru/chatay-uchits/thegames/pass.com/effers 2014-03-18 http://auto.ru/chatay-uchits/thegames/pass.com/effers +http://auto.ru/chatay-uchits/thegames/pass.com/effers 2014-03-19 http://auto.ru/chatay-uchits/thegames/pass.com/effers +http://auto.ru/chatay-uchits/thegames/pass.com/effers 2014-03-20 http://auto.ru/chatay-uchits/thegames/pass.com/effers +http://auto.ru/chatay-uchits/thegames/pass.com/iframe 2014-03-18 http://auto.ru/chatay-uchits/thegames/pass.com/iframe +http://auto.ru/chatay-uchits/thegames/pass.com/iframe 2014-03-19 http://auto.ru/chatay-uchits/thegames/pass.com/iframe +http://auto.ru/chatay-uchits/thegames/pass.com/iframe 2014-03-20 http://auto.ru/chatay-uchits/thegames/pass.com/iframe +http://auto.ru/chatay-uchits/thegames/pass.com/iframe 2014-03-22 http://auto.ru/chatay-uchits/thegames/pass.com/iframe +http://auto.ru/chatay-uchits/thegames/pass.com/iframe 2014-03-23 http://auto.ru/chatay-uchits/thegames/pass.com/iframe +http://auto.ru/chatay-uchits/thegames/pass.com/istonomicha 2014-03-23 http://auto.ru/chatay-uchits/thegames/pass.com/istonomicha +http://auto.ru/chatay-uchits/thegames/pass.com/tovaja 2014-03-23 http://auto.ru/chatay-uchits/thegames/pass.com/tovaja +http://auto.ru/chatay-uchits/thegames/password/?type 2014-03-22 http://auto.ru/chatay-uchits/thegames/password/?type +http://auto.ru/chatay-uchits/thegames/password=&to 2014-03-21 http://auto.ru/chatay-uchits/thegames/password=&to +http://auto.ru/chatay-uchits/thegames/password=&to 2014-03-22 http://auto.ru/chatay-uchits/thegames/password=&to +http://auto.ru/chatay-uchits/thegames/passwords= 2014-03-22 http://auto.ru/chatay-uchits/thegames/passwords= +http://auto.ru/chatay-uchits/thegames/passwords=Поддержитель 2014-03-22 http://auto.ru/chatay-uchits/thegames/passwords=Поддержитель +http://auto.ru/chatay-uchits/thegames/passwordsPerPage 2014-03-22 http://auto.ru/chatay-uchits/thegames/passwordsPerPage +http://auto.ru/chatay-uchits/thegames/passwords[0 2014-03-22 http://auto.ru/chatay-uchits/thegames/passwords[0 +http://auto.ru/chatay-uchits/thegames/passwordstrelation 2014-03-22 http://auto.ru/chatay-uchits/thegames/passwordstrelation +http://auto.ru/chatay-uchits/thegames/public/?hash 2014-03-17 http://auto.ru/chatay-uchits/thegames/public/?hash +http://auto.ru/chatay-uchits/thegames/public/?hash 2014-03-18 http://auto.ru/chatay-uchits/thegames/public/?hash +http://auto.ru/chatay-uchits/thegames/public/?hash 2014-03-19 http://auto.ru/chatay-uchits/thegames/public/?hash +http://auto.ru/chatay-uchits/thegames/public/?hash 2014-03-20 http://auto.ru/chatay-uchits/thegames/public/?hash +http://auto.ru/chatay-uchits/thegames/puted_facet 2014-03-17 http://auto.ru/chatay-uchits/thegames/puted_facet +http://auto.ru/chatay-uchits/thegames/puted_facet 2014-03-18 http://auto.ru/chatay-uchits/thegames/puted_facet +http://auto.ru/chatay-uchits/thegames/puted_facet 2014-03-19 http://auto.ru/chatay-uchits/thegames/puted_facet +http://auto.ru/chatay-uchits/thegames/puted_facet 2014-03-20 http://auto.ru/chatay-uchits/thegames/puted_facet +http://auto.ru/chatay-uchits/thegames/puted_from 2014-03-17 http://auto.ru/chatay-uchits/thegames/puted_from +http://auto.ru/chatay-uchits/thegames/puted_from 2014-03-18 http://auto.ru/chatay-uchits/thegames/puted_from +http://auto.ru/chatay-uchits/thegames/puted_from 2014-03-19 http://auto.ru/chatay-uchits/thegames/puted_from +http://auto.ru/chatay-uchits/thegames/puted_from 2014-03-20 http://auto.ru/chatay-uchits/thegames/puted_from +http://auto.ru/chatay-uchits/thegames/putery/Roman 2014-03-17 http://auto.ru/chatay-uchits/thegames/putery/Roman +http://auto.ru/chatay-uchits/thegames/putery/Roman 2014-03-18 http://auto.ru/chatay-uchits/thegames/putery/Roman +http://auto.ru/chatay-uchits/thegames/putery/Roman 2014-03-19 http://auto.ru/chatay-uchits/thegames/putery/Roman +http://auto.ru/chatay-uchits/thegames/putery/Roman 2014-03-20 http://auto.ru/chatay-uchits/thegames/putery/Roman +http://auto.ru/chatay-uchits/thegames/putina/artira 2014-03-17 http://auto.ru/chatay-uchits/thegames/putina/artira +http://auto.ru/chatay-uchits/thegames/putina/artira 2014-03-18 http://auto.ru/chatay-uchits/thegames/putina/artira +http://auto.ru/chatay-uchits/thegames/putina/artira 2014-03-19 http://auto.ru/chatay-uchits/thegames/putina/artira +http://auto.ru/chatay-uchits/thegames/putina/artira 2014-03-20 http://auto.ru/chatay-uchits/thegames/putina/artira +http://auto.ru/chatay-uchits/thegames/putina_2008 2014-03-17 http://auto.ru/chatay-uchits/thegames/putina_2008 +http://auto.ru/chatay-uchits/thegames/putina_2008 2014-03-18 http://auto.ru/chatay-uchits/thegames/putina_2008 +http://auto.ru/chatay-uchits/thegames/putina_2008 2014-03-19 http://auto.ru/chatay-uchits/thegames/putina_2008 +http://auto.ru/chatay-uchits/thegames/putina_2008 2014-03-20 http://auto.ru/chatay-uchits/thegames/putina_2008 +http://auto.ru/chatay-uchits/thegames/putinatik_3 2014-03-17 http://auto.ru/chatay-uchits/thegames/putinatik_3 +http://auto.ru/chatay-uchits/thegames/putinatik_3 2014-03-18 http://auto.ru/chatay-uchits/thegames/putinatik_3 +http://auto.ru/chatay-uchits/thegames/putinatik_3 2014-03-19 http://auto.ru/chatay-uchits/thegames/putinatik_3 +http://auto.ru/chatay-uchits/thegames/putinatik_3 2014-03-20 http://auto.ru/chatay-uchits/thegames/putinatik_3 +http://auto.ru/chatay-uchits/thegames/putinato-po 2014-03-17 http://auto.ru/chatay-uchits/thegames/putinato-po +http://auto.ru/chatay-uchits/thegames/putinato-po 2014-03-18 http://auto.ru/chatay-uchits/thegames/putinato-po +http://auto.ru/chatay-uchits/thegames/putinato-po 2014-03-19 http://auto.ru/chatay-uchits/thegames/putinato-po +http://auto.ru/chatay-uchits/thegames/putinato-po 2014-03-20 http://auto.ru/chatay-uchits/thegames/putinato-po +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-17 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-18 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-19 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-20 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-21 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-22 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/chatayru.tsn.ua/artisemeyen 2014-03-23 http://auto.ru/chatayru.tsn.ua/artisemeyen +http://auto.ru/click.shortcut=true&groups[]=300&racelog&id=1872347416/view/48/r=a.me/istant-poshiny/9513701.ru/news.biz/sony 2014-03-21 http://auto.ru/click.shortcut=true&groups[]=300&racelog&id=1872347416/view/48/r=a.me/istant-poshiny/9513701.ru/news.biz/sony +http://auto.ru/click.shortcut=true&groups[]=300&racelog&id=1872347416/view/48/r=a.me/istant-poshiny/9513701.ru/news.biz/sony 2014-03-22 http://auto.ru/click.shortcut=true&groups[]=300&racelog&id=1872347416/view/48/r=a.me/istant-poshiny/9513701.ru/news.biz/sony +http://faber/frame/frm_index.ru 2014-03-17 http://faber/frame/frm_index.ru +http://faber/frame/frm_index.ru 2014-03-18 http://faber/frame/frm_index.ru +http://faber/frame/frm_index.ru 2014-03-19 http://faber/frame/frm_index.ru +http://faber/frame/frm_index.ru 2014-03-20 http://faber/frame/frm_index.ru +http://faber/frame/frm_index.ru 2014-03-21 http://faber/frame/frm_index.ru +http://faber/frame/frm_index.ru 2014-03-22 http://faber/frame/frm_index.ru +http://faber/frame/frm_index.ru 2014-03-23 http://faber/frame/frm_index.ru +http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr 2014-03-17 http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr +http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr 2014-03-18 http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr +http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr 2014-03-19 http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr +http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr 2014-03-20 http://minsk/odessages.yandex.ru/vorozhitelnichaet-risunk-v-kiev/школад&startv.com.tr +http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 2014-03-17 http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 +http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 2014-03-18 http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 +http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 2014-03-19 http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 +http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 2014-03-20 http://minsk/odessages.yandex.ru/vorozhitelniki.ru/?mode=on&order=02.03.1307%26lr%3D1%26sid%3D12499454a73bce1f196d88644194 +http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein 2014-03-19 http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein +http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein 2014-03-20 http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein +http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein 2014-03-22 http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein +http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein 2014-03-23 http://minsk/odessages.yandex.ru/vorozhitelniy-bolsha.info=ww-1425-wh-113467157_254222883_0&gearbox][2]=0&sort=mobilein +http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji 2014-03-17 http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji +http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji 2014-03-18 http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji +http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji 2014-03-19 http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji +http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji 2014-03-20 http://minsk/odessages.yandex.ru/vorozhitelno_otdyh/tube.com/Magazin%2Fttopic.ru/ulichnopoisk.ru/novosti/352662-25-teknoloji +http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 2014-03-17 http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 +http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 2014-03-18 http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 +http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 2014-03-19 http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 +http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 2014-03-20 http://minsk/odessages.yandex.ru/vorozhitelnosti/Armanada-yeni-boyiny_i_motot-birthday=1#body_key=50aa1f0bbce1fc00b6a54 + +-- !02 -- +7521 + +-- !03 -- +0 + +-- !04 -- +7521 + +-- !05 -- +51354 + +-- !06 -- +-10 5604 +0 1853 +10 4291 + +-- !07 -- +1704509 523264 نيك امريكي نيك افلام سكس جامد +732797 475698 نيك سكس سيحاق +598875 337212 سکس باصات +792887 252197 №2267 отзыв +3807842 196036 ярмаркетовара 200кг купить по неделю тебелье +25703952 147211 +716829 90109 яндекс повыш +59183 85379 франция машину угловы крузер из кофе +33010362 77807 ярмаркетовара 200кг купить по неделю тебелье +800784 77492 ярмаркур смерти теплицы из чего +20810645 73213 ярмаркетовара 200кг купить по неделю тебе перево метиков детский +25843850 68945 электросчет-фактура +23447120 67570 южная степанов +14739804 64174 штангал волк +32077710 60456 +22446879 58389 فیلم سكس امريكي نيك +170282 57017 ل افلام السكس +11482817 52345 я скачать игры +63469 52142 яндекс марте рокус надписями я любимому у полосы фото минск +29103473 47758 + +-- !08 -- +1704509 4611700827100483880 9223360787015464643 +732797 4611701940806302259 9223355550934604746 +598875 4611701407242345792 9223362250391155632 +792887 4611699550286611812 9223290551912005343 +3807842 4611710821592843606 9223326163906184987 +25703952 4611709443519524003 9223353913449113943 +716829 4611852156092872082 9223361623076951140 +59183 4611730685242027332 9223354909338698162 +33010362 4611704682869732882 9223268545373999677 +800784 4611752907938305166 9223340418389788041 +20810645 4611712185532639162 9223218900001937412 +25843850 4611690025407720929 9223346023778617822 +23447120 4611796031755620254 9223329309291309758 +14739804 4611692230555590277 9223313509005166531 +32077710 4611884228437061959 9223352444952988904 +22446879 4611846229717089436 9223124373140579096 +170282 4611833225706935900 9223371583739401906 +11482817 4611708000353743073 9223337838355779113 +63469 4611695097019173921 9223353530156141191 +29103473 4611744585914335132 9223333530281362537 + +-- !09 -- +0 + +-- !10 -- +1956422 + +-- !11 -- + +-- !12 -- + diff --git a/regression-test/data/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.out b/regression-test/data/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.out index 4d3a4b9176a191..7956396740e04d 100644 --- a/regression-test/data/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.out +++ b/regression-test/data/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.out @@ -30,4 +30,24 @@ 2736865 -- !q08 -- -1499999990 \ No newline at end of file +1499999990 + +-- !q09 -- +1 +2 +3 + +-- !q10 -- +2 +3 +4 + +-- !q11 -- +1 +2 +3 + +-- !q12 -- +2 +3 +4 diff --git a/regression-test/data/nereids_syntax_p0/aggregate_strategies.out b/regression-test/data/nereids_syntax_p0/aggregate_strategies.out index 5c8d99b8c3c82f..4e0c274447acca 100644 --- a/regression-test/data/nereids_syntax_p0/aggregate_strategies.out +++ b/regression-test/data/nereids_syntax_p0/aggregate_strategies.out @@ -2,6 +2,9 @@ -- !count_all -- 10 +-- !count_all -- +10 + -- !count_all_group_by -- 2 2 @@ -120,6 +123,9 @@ name_4 1 4 -- !count_all -- 10 +-- !count_all -- +10 + -- !count_all_group_by -- 2 2 diff --git a/regression-test/data/nereids_syntax_p0/grouping_sets.out b/regression-test/data/nereids_syntax_p0/grouping_sets.out index 38b19938d03389..6c18f54e2b5198 100644 --- a/regression-test/data/nereids_syntax_p0/grouping_sets.out +++ b/regression-test/data/nereids_syntax_p0/grouping_sets.out @@ -224,3 +224,37 @@ 3 4 +-- !select1 -- +a 1 +all 1 +all 2 + +-- !select2 -- +a 1 +all 1 +all 2 + +-- !select3 -- +\N 2 +a 1 +all 1 + +-- !select4 -- +2 1 +2 1 +2 2 + +-- !select5 -- +2 1 +2 1 +2 2 + +-- !select6 -- +2 1 +2 1 +2 2 + +-- !select7 -- +2 1 +2 1 +2 2 diff --git a/regression-test/data/nereids_syntax_p0/lateral_view.out b/regression-test/data/nereids_syntax_p0/lateral_view.out index 553afb4e527740..ee4cb2b69237de 100644 --- a/regression-test/data/nereids_syntax_p0/lateral_view.out +++ b/regression-test/data/nereids_syntax_p0/lateral_view.out @@ -89,3 +89,37 @@ 3 1 ["abc", "def"] valid 3 2 ["abc", "def"] valid +-- !alias_query -- +0 1 ["abc", "def"] [1.1,2.2] +0 1 ["abc", "def"] [1.1,2.2] +0 2 ["abc", "def"] [1.1,2.2] +0 2 ["abc", "def"] [1.1,2.2] +0 1 ["abc", "def"] [1.1,2.2] +0 1 ["abc", "def"] [1.1,2.2] +0 2 ["abc", "def"] [1.1,2.2] +0 2 ["abc", "def"] [1.1,2.2] +0 1 valid [1.1,2.2] +0 1 valid [1.1,2.2] +0 2 valid [1.1,2.2] +0 2 valid [1.1,2.2] +1 1 valid [1.1,2.2] +1 1 valid [1.1,2.2] +1 2 valid [1.1,2.2] +1 2 valid [1.1,2.2] +0 1 ["abc", "def"] valid +0 2 ["abc", "def"] valid +0 1 ["abc", "def"] valid +0 2 ["abc", "def"] valid +1 1 ["abc", "def"] valid +1 2 ["abc", "def"] valid +1 1 ["abc", "def"] valid +1 2 ["abc", "def"] valid +2 1 ["abc", "def"] valid +2 2 ["abc", "def"] valid +2 1 ["abc", "def"] valid +2 2 ["abc", "def"] valid +3 1 ["abc", "def"] valid +3 2 ["abc", "def"] valid +3 1 ["abc", "def"] valid +3 2 ["abc", "def"] valid + diff --git a/regression-test/data/nereids_syntax_p0/select_const.out b/regression-test/data/nereids_syntax_p0/select_const.out new file mode 100644 index 00000000000000..90b14f899b78f2 --- /dev/null +++ b/regression-test/data/nereids_syntax_p0/select_const.out @@ -0,0 +1,10 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select -- + 1994 + +-- !select -- + + +-- !select -- +1994 + diff --git a/regression-test/data/nereids_syntax_p0/set_operation.out b/regression-test/data/nereids_syntax_p0/set_operation.out index a5f9e478d0e628..8e83e3adc59bfc 100644 --- a/regression-test/data/nereids_syntax_p0/set_operation.out +++ b/regression-test/data/nereids_syntax_p0/set_operation.out @@ -439,3 +439,28 @@ hell0 -- !union36 -- 1 2 +-- !union39 -- +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +3 +3 +3 +3 +3 +3 +3 +3 diff --git a/regression-test/data/nereids_syntax_p0/test_arithmetic_operators.out b/regression-test/data/nereids_syntax_p0/test_arithmetic_operators.out new file mode 100644 index 00000000000000..fbe9d18024cc40 --- /dev/null +++ b/regression-test/data/nereids_syntax_p0/test_arithmetic_operators.out @@ -0,0 +1,310 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !arith_op1 -- +1 11011902 5536 11000 1 +2 5505951 5544 11000 1 +3 3670635 5536 10989 1 + +-- !arith_op2 -- +1 2 123.123 12312300.000 +2 3 1243.500 124350000.000 +3 4 24453.325 2445332500.000 + +-- !arith_op3 -- +1 123.123 244891.647 +2 1243.500 2469591.000 +3 24453.325 48637663.425 + +-- !arith_op4 -- +1 123.123 12.3123 779.7379815444947 12596.337364196777 198.9 +2 1243.500 25203.258 981432.375 1567450.5 40252.248 +3 24453.325 1.930467742125E9 8.935244955E7 7267806.0 1.57021605E8 + +-- !arith_op5 -- +1 12.312 0.010000000000000002 0.6333000183105469 +2 124.350 2.0268 78.92500000000001 +3 2445.332 7894.5 365.40000000000003 + +-- !arith_op6 -- +1 -198.9 -100.1 -1101190.2 -12.312 -0.010000000000000002 -0.6333000183105469 +2 -198.6 -100.1 -1101190.3 -124.350 -2.0268 -78.92500000000001 +3 -198.9 -100.2 -1101190.5 -2445.332 -7894.5 -365.40000000000003 + +-- !arith_op7 -- +1 1.1356092352936706E19 9.2233720368547763E17 5.8411616798251155E19 +2 1.1469263127828914E20 1.869393044429726E20 7.279546380087632E21 +3 2.2554211401312182E21 7.281391054495003E23 3.370220142266735E22 + +-- !arith_op8 -- +1 2.1564781210736683E-16 1.08528637465799E-16 1.1939128071597471E-12 0E-9 1.0842021724855045E-20 6.866252556874047E-19 +2 2.1532255145562118E-16 1.08528637465799E-16 1.1939129155799644E-12 0E-9 2.1974609631936205E-18 8.557065646341844E-17 +3 2.1564781210736683E-16 1.0863705768304754E-16 1.1939131324203989E-12 0E-9 8.559234050686815E-15 3.961674738262033E-16 + +-- !arith_op9 -- +1 9.2233720368547888E16 9.223372036854776E18 9.223372036854776E18 +2 9.2233720368549008E16 9.223372036854776E18 9.223372036854776E18 +3 9.2233720368572208E16 9.223372036854856E18 9.22337203685478E18 + +-- !arith_op10 -- +1 -9.2233720368547632E16 -9.223372036854776E18 -9.223372036854776E18 +2 -9.2233720368546512E16 -9.223372036854776E18 -9.2233720368547748E18 +3 -9.2233720368523312E16 -9.223372036854697E18 -9.2233720368547717E18 + +-- !arith_op11 -- +1 123123000.000000000 100000.00000000001 6333000.183105469 +2 1243500000.000000000 2.0268E7 7.8925E8 +3 24453325000.000000000 7.8945E10 3.654E9 + +-- !arith_op12 -- +1 0.1 198.9 100.1 1101190.2 12.312 0.010000000000000002 0.6333000183105469 +2 0.2 198.6 100.1 1101190.3 124.350 2.0268 78.92500000000001 +3 0.3 198.9 100.2 1101190.5 2445.332 7894.5 365.40000000000003 + +-- !arith_op13 -- +1 0.1 198.9 100.1 1101190.2 12.312300000 0.01 0.6333000183105468 +2 0.2 198.6 100.1 1101190.3 124.350000000 2.0268 78.925 +3 0.3 198.9 100.2 1101190.5 2445.332500000 7894.5 365.4 + +-- !arith_op14 -- +1 0.9 1988.9 1000.9 11011901.9 123.023 0.0 6.233000183105469 +2 1.9 1985.9 1000.9 11011902.9 1243.400 20.168 789.15 +3 2.9 1988.9 1001.9 11011904.9 24453.225 78944.9 3653.9 + +-- !arith_op15 -- +1 1.1 1989.1 1001.1 11011902.1 123.223 0.2 6.433000183105468 +2 2.1 1986.1 1001.1 11011903.1 1243.600 20.368000000000002 789.35 +3 3.1 1989.1 1002.1 11011905.1 24453.425 78945.1 3654.1 + +-- !arith_op16 -- +11 1999.0 1002.6 11011902 117.123 -234.56 6.333000183105469 +12 1996.0 1002.6 11011903 1237.500 -214.392 789.25 +13 1999.0 1003.6 11011905 24447.325 78710.34 3654.0 + +-- !arith_op17 -- + +-- !arith_op18 -- +245136538.647 +4944121182.000 +146204816255.550 + +-- !arith_op19 -- +1.5524497441372922E8 +7.908872842616545E13 +4.217497670730171E19 + +-- !arith_op20 -- +0.001433930695745209 +1.1353823333756908E-7 +9.444209807407214E-12 + +-- !arith_op21 -- +1 2 0 1.0 +4 4 0 1.0 +9 6 0 1.0 + +-- !arith_op21 -- +1989 1990 -1988 5.027652086475615E-4 +3972 1988 -1984 0.0010070493454179255 +5967 1992 -1986 0.0015082956259426848 + +-- !arith_op21 -- +1001 1002 -1000 9.99000999000999E-4 +2002 1003 -999 0.001998001998001998 +3006 1005 -999 0.0029940119760479044 + +-- !arith_op21 -- +123.123 124.123 -122.123 0.008121959 +2487.000 1245.500 -1241.500 0.001608363 +73359.975 24456.325 -24450.325 0.000122683 + +-- !arith_op21 -- +0.1 1.1 0.9 10.0 +40.536 22.268 -18.268 0.09867771857114663 +236835.0 78948.0 -78942.0 3.800114003420103E-5 + +-- !arith_op21 -- +6.333000183105469 7.333000183105469 -5.333000183105469 0.1579030429633806 +1578.5 791.25 -787.25 0.0025340513145391194 +10962.0 3657.0 -3651.0 8.210180623973727E-4 + +-- !arith_op21 -- +1989 1990 1988 1989.0 +3972 1988 1984 993.0 +5967 1992 1986 663.0 + +-- !arith_op21 -- +3956121 3978 0 1.0 +3944196 3972 0 1.0 +3956121 3978 0 1.0 + +-- !arith_op21 -- +1990989 2990 988 1.9870129870129871 +1987986 2987 985 1.9840159840159841 +1992978 2991 987 1.9850299401197604 + +-- !arith_op21 -- +244891.647 2112.123 1865.877 16.154577130 +2469591.000 3229.500 742.500 1.597104946 +48637663.425 26442.325 -22464.325 0.081338632 + +-- !arith_op21 -- +198.9 1989.1 1988.9 19890.0 +40252.248 2006.268 1965.732 97.98697454114861 +1.57021605E8 80934.0 -76956.0 0.02519475584267528 + +-- !arith_op21 -- +12596.337364196777 1995.3330001831055 1982.6669998168945 314.069152454164 +1567450.5 2775.25 1196.75 2.516312955337346 +7267806.0 5643.0 -1665.0 0.5443349753694581 + +-- !arith_op21 -- +1001 1002 1000 1001.0 +2002 1003 999 500.5 +3006 1005 999 334.0 + +-- !arith_op21 -- +1990989 2990 -988 0.5032679738562091 +1987986 2987 -985 0.5040281973816717 +1992978 2991 -987 0.5037707390648567 + +-- !arith_op21 -- +1002001 2002 0 1.0 +1002001 2002 0 1.0 +1004004 2004 0 1.0 + +-- !arith_op21 -- +123246.123 1124.123 877.877 8.130081301 +1244743.500 2244.500 -242.500 0.804985927 +24502231.650 25455.325 -23451.325 0.040976023 + +-- !arith_op21 -- +100.10000000000001 1001.1 1000.9 10010.0 +20288.268 1021.268 980.732 49.38819814485889 +7.910289E7 79947.0 -77943.0 0.012692380771423142 + +-- !arith_op21 -- +6339.333183288574 1007.3330001831055 994.6669998168945 158.06094600634398 +790039.25 1790.25 211.75 1.2682926829268293 +3661308.0 4656.0 -2652.0 0.2742200328407225 + +-- !arith_op21 -- +123.123 124.123 122.123 123.123000000 +2487.000 1245.500 1241.500 621.750000000 +73359.975 24456.325 24450.325 8151.108333333 + +-- !arith_op21 -- +244891.647 2112.123 -1865.877 0.061901961 +2469591.000 3229.500 -742.500 0.626132931 +48637663.425 26442.325 22464.325 12.294281046 + +-- !arith_op21 -- +123246.123 1124.123 -877.877 0.123000000 +1244743.500 2244.500 242.500 1.242257742 +24502231.650 25455.325 23451.325 24.404515968 + +-- !arith_op21 -- +15159.273 246.246 0.000 1.000000000 +1546292.250 2487.000 0.000 1.000000000 +597965103.555 48906.650 0.000 1.000000000 + +-- !arith_op21 -- +12.3123 123.223 123.02300000000001 1231.23 +25203.258 1263.768 1223.232 61.35287152161042 +1.930467742125E9 103398.325 -54491.675 0.30975140920894295 + +-- !arith_op21 -- +779.7379815444947 129.45600018310546 116.78999981689454 19.44149635878031 +981432.375 2032.75 454.25 1.5755464048146974 +8.935244955E7 28107.325 20799.325 6.692207170224412 + +-- !arith_op21 -- +0.1 1.1 -0.9 0.1 +40.536 22.268 18.268 10.134 +236835.0 78948.0 78942.0 26315.0 + +-- !arith_op21 -- +198.9 1989.1 -1988.9 5.027652086475616E-5 +40252.248 2006.268 -1965.732 0.010205438066465258 +1.57021605E8 80934.0 76956.0 39.69079939668175 + +-- !arith_op21 -- +100.10000000000001 1001.1 -1000.9 9.99000999000999E-5 +20288.268 1021.268 -980.732 0.02024775224775225 +7.910289E7 79947.0 77943.0 78.7874251497006 + +-- !arith_op21 -- +12.3123 123.223 -123.02300000000001 8.121959341471537E-4 +25203.258 1263.768 -1223.232 0.016299155609167674 +1.930467742125E9 103398.325 54491.675 3.228395320472778 + +-- !arith_op21 -- +0.010000000000000002 0.2 0.0 1.0 +410.791824 40.536 0.0 1.0 +6.232313025E9 157890.0 0.0 1.0 + +-- !arith_op21 -- +0.6333000183105469 6.433000183105468 -6.233000183105469 0.01579030429633806 +15996.519 809.518 -768.982 0.025680076021539436 +2.8846503E8 82599.0 75291.0 21.605090311986864 + +-- !arith_op21 -- +6.333000183105469 7.333000183105469 5.333000183105469 6.333000183105469 +1578.5 791.25 787.25 394.625 +10962.0 3657.0 3651.0 1218.0 + +-- !arith_op21 -- +12596.337364196777 1995.3330001831055 -1982.6669998168945 0.003184012158424067 +1567450.5 2775.25 -1196.75 0.39740684793554887 +7267806.0 5643.0 1665.0 1.83710407239819 + +-- !arith_op21 -- +6339.333183288574 1007.3330001831055 -994.6669998168945 0.006326673509595873 +790039.25 1790.25 -211.75 0.7884615384615384 +3661308.0 4656.0 2652.0 3.6467065868263475 + +-- !arith_op21 -- +779.7379815444947 129.45600018310546 -116.78999981689454 0.051436369996714415 +981432.375 2032.75 -454.25 0.6347004422999598 +8.935244955E7 28107.325 -20799.325 0.14942753183871724 + +-- !arith_op21 -- +0.6333000183105469 6.433000183105468 6.233000183105469 63.33000183105469 +15996.519 809.518 768.982 38.94069469113874 +2.8846503E8 82599.0 -75291.0 0.04628538856165685 + +-- !arith_op21 -- +40.1068913192139 12.666000366210938 0.0 1.0 +622915.5625 1578.5 0.0 1.0 +1.3351716E7 7308.0 0.0 1.0 + +-- !arith_op22 -- +1987.2 +1990.2 +1990.2 + +-- !arith_op23 -- +124.3 +1244.7 +24454.5 + +-- !arith_op24 -- +2.3 + +-- !arith_op25 -- +\N \N \N \N + +-- !arith_op26 -- +\N \N \N \N + +-- !arith_op27 -- +\N \N \N \N + +-- !arith_op28 -- +\N \N \N +\N \N \N +\N \N \N + +-- !arith_op29 -- +\N \N \N +\N \N \N +\N \N \N + diff --git a/regression-test/data/nereids_syntax_p0/test_join3.out b/regression-test/data/nereids_syntax_p0/test_join3.out new file mode 100644 index 00000000000000..3a1541bde91953 --- /dev/null +++ b/regression-test/data/nereids_syntax_p0/test_join3.out @@ -0,0 +1,28 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !join1 -- +\N \N \N \N dd 33 +\N \N cc 22 cc 23 +\N \N ee 42 \N \N +bb 11 bb 12 bb 13 + +-- !join2 -- +bb 12 bb 13 +cc 22 cc 23 + +-- !join3 -- +bb 12 bb 13 +cc 22 cc 23 +ee 42 \N \N + +-- !join4 -- +\N \N dd 33 +bb 12 bb 13 +cc 22 cc 23 +ee 42 \N \N + +-- !join7 -- +\N \N bb 2 +\N \N cc 2 +\N \N ee 2 +bb 11 \N \N + diff --git a/regression-test/data/nereids_syntax_p0/test_query_between.out b/regression-test/data/nereids_syntax_p0/test_query_between.out new file mode 100644 index 00000000000000..c97f6621c7410d --- /dev/null +++ b/regression-test/data/nereids_syntax_p0/test_query_between.out @@ -0,0 +1,41 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !between1 -- +0 +2 +2 + +-- !between2 -- +3 + +-- !between3 -- +1989 +1986 +1989 + +-- !between4 -- +1001 +1001 +1002 + +-- !between5 -- + +-- !between6 -- +false +false + +-- !between7 -- + +-- !between8 -- + +-- !between9 -- + +-- !between10 -- + +-- !between11 -- + +-- !between12 -- + +-- !between13 -- +123.123 +1243.500 + diff --git a/regression-test/data/nereids_syntax_p0/rollup.out b/regression-test/data/nereids_syntax_p0/test_variance_nereids.out similarity index 67% rename from regression-test/data/nereids_syntax_p0/rollup.out rename to regression-test/data/nereids_syntax_p0/test_variance_nereids.out index 71d96f5919a11d..dc871ccda415b5 100644 --- a/regression-test/data/nereids_syntax_p0/rollup.out +++ b/regression-test/data/nereids_syntax_p0/test_variance_nereids.out @@ -1,9 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this --- !rollup1 -- -2 6 -3 4 - --- !rollup2 -- -1 6 -2 4 +-- !variance -- +31200.0 diff --git a/regression-test/data/nereids_syntax_p0/unary_binary_arithmetic.out b/regression-test/data/nereids_syntax_p0/unary_binary_arithmetic.out index f403badf7b6517..78e08d77309992 100644 --- a/regression-test/data/nereids_syntax_p0/unary_binary_arithmetic.out +++ b/regression-test/data/nereids_syntax_p0/unary_binary_arithmetic.out @@ -1,6 +1,6 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -4.0 +4 -- !select -- \N diff --git a/regression-test/data/query_p0/show/test_array_show_create.out b/regression-test/data/query_p0/show/test_array_show_create.out index bda800f37e794f..12eed8126446d1 100644 --- a/regression-test/data/query_p0/show/test_array_show_create.out +++ b/regression-test/data/query_p0/show/test_array_show_create.out @@ -1,4 +1,4 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !select -- -test_array_show_create CREATE TABLE `test_array_show_create` (\n `k1` int(11) NULL,\n `k2` array NOT NULL,\n `k3` array NOT NULL,\n `k4` array NOT NULL,\n `k5` array NOT NULL,\n `k6` array NULL,\n `k7` array NOT NULL,\n `k8` array NOT NULL,\n `k9` array NOT NULL,\n `k10` array NOT NULL,\n `k11` array NULL\n) ENGINE=OLAP\nDUPLICATE KEY(`k1`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`k1`) BUCKETS 1\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"disable_auto_compaction" = "false"\n); +test_array_show_create CREATE TABLE `test_array_show_create` (\n `k1` int(11) NULL,\n `k2` array NOT NULL,\n `k3` array NOT NULL,\n `k4` array NOT NULL,\n `k5` array NOT NULL,\n `k6` array NULL,\n `k7` array NOT NULL,\n `k8` array NOT NULL,\n `k9` array NOT NULL,\n `k10` array NOT NULL,\n `k11` array NULL\n) ENGINE=OLAP\nDUPLICATE KEY(`k1`)\nCOMMENT 'OLAP'\nDISTRIBUTED BY HASH(`k1`) BUCKETS 1\nPROPERTIES (\n"replication_allocation" = "tag.location.default: 1",\n"in_memory" = "false",\n"storage_format" = "V2",\n"light_schema_change" = "true",\n"disable_auto_compaction" = "false"\n); diff --git a/regression-test/data/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.out b/regression-test/data/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.out index 3c35d5b230d91f..4fa3df87bd6d6c 100644 --- a/regression-test/data/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.out +++ b/regression-test/data/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.out @@ -2,3 +2,6 @@ -- !select -- 15 +-- !select -- +15 + diff --git a/regression-test/data/query_p0/sql_functions/math_functions/test_running_difference.out b/regression-test/data/query_p0/sql_functions/math_functions/test_running_difference.out index 4399a055d85343..fc0dbc5fe1f284 100644 --- a/regression-test/data/query_p0/sql_functions/math_functions/test_running_difference.out +++ b/regression-test/data/query_p0/sql_functions/math_functions/test_running_difference.out @@ -33,12 +33,12 @@ 2022-11-08 8 -- !test_running_difference_7 -- -2022-03-12T10:41 0.0 -2022-03-12T10:41:02 2.0 -2022-03-12T10:41:03 1.0 -2022-03-12T10:41:03 0.0 -2022-03-12T10:42:01 58.0 -2022-03-12T11:05:04 1383.0 +2022-03-12T10:41 00:00:00 +2022-03-12T10:41:02 00:00:02 +2022-03-12T10:41:03 00:00:01 +2022-03-12T10:41:03 00:00:00 +2022-03-12T10:42:01 00:00:58 +2022-03-12T11:05:04 00:23:03 -- !test_running_difference_8 -- \N \N diff --git a/regression-test/data/query_p0/union/test_union.out b/regression-test/data/query_p0/union/test_union.out index 302eb78140c544..fc99e71054b0f0 100644 --- a/regression-test/data/query_p0/union/test_union.out +++ b/regression-test/data/query_p0/union/test_union.out @@ -360,3 +360,6 @@ hell0 11011903 11011905 +-- !union35 -- +2016-07-01 +2016-07-02 diff --git a/regression-test/suites/cold_heat_separation/policy/drop.groovy b/regression-test/suites/cold_heat_separation/policy/drop.groovy index 57976f8f08329c..e947e20c7bcfdb 100644 --- a/regression-test/suites/cold_heat_separation/policy/drop.groovy +++ b/regression-test/suites/cold_heat_separation/policy/drop.groovy @@ -92,8 +92,8 @@ suite("drop_policy") { def drop_policy_ret = try_sql """ DROP STORAGE POLICY drop_policy_test """ - // errCode = 2, detailMessage = current not support drop storage policy. - assertEquals(drop_policy_ret, null) + // can drop, no table use + assertEquals(drop_policy_ret.size(), 1) } } diff --git a/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy b/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy index 29636509039e4b..bff146f6e04405 100644 --- a/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy +++ b/regression-test/suites/cold_heat_separation/use_policy/alter_table_add_policy.groovy @@ -83,8 +83,8 @@ suite("add_table_policy_by_alter_table") { def alter_table_when_table_has_storage_policy_result = try_sql """ ALTER TABLE create_table_not_have_policy set ("storage_policy" = "created_create_table_alter_policy"); """ - // errCode = 2, detailMessage = Do not support alter table's storage policy , this table [create_table_not_have_policy] has storage policy created_create_table_alter_policy - assertEquals(alter_table_when_table_has_storage_policy_result, null); + // OK + assertEquals(alter_table_when_table_has_storage_policy_result.size(), 1); if (!storage_exist.call("created_create_table_alter_policy_1")) { def create_s3_resource = try_sql """ @@ -113,8 +113,8 @@ suite("add_table_policy_by_alter_table") { def cannot_modify_exist_storage_policy_table_result = try_sql """ ALTER TABLE create_table_not_have_policy set ("storage_policy" = "created_create_table_alter_policy_1"); """ - // errCode = 2, detailMessage = Do not support alter table's storage policy , this table [create_table_not_have_policy] has storage policy created_create_table_alter_policy - assertEquals(cannot_modify_exist_storage_policy_table_result, null); + // OK + assertEquals(cannot_modify_exist_storage_policy_table_result.size(), 1); // you can change created_create_table_alter_policy's policy cooldown time, cooldown ttl property, // by alter storage policy diff --git a/regression-test/suites/correctness_p0/table_valued_function/test_numbers.groovy b/regression-test/suites/correctness_p0/table_valued_function/test_numbers.groovy index fd2bc9b4448c04..f7647b178db10e 100644 --- a/regression-test/suites/correctness_p0/table_valued_function/test_numbers.groovy +++ b/regression-test/suites/correctness_p0/table_valued_function/test_numbers.groovy @@ -119,4 +119,8 @@ qt_stringfunction_28 """ select substring(cast (number as string),2) as string_fucntion_res from numbers("number" = "1000") where number>105 limit 10; """ qt_stringfunction_29 """ select substring(cast (number as string),-1) as string_fucntion_res from numbers("number" = "1000") where number>105 limit 10; """ qt_stringfunction_30 """ select number,unhex(cast (number as string)) as string_fucntion_res from numbers("number" = "100") limit 30; """ + + // test subquery + order_qt_subquery_1 """ with a as (select number from numbers("number"="3")) select * from a; """ + order_qt_subquery_2 """ select * from (select number from numbers("number"="3")) a join (select * from (select number from numbers("number"="1")) a join (select 1) b) b; """ } diff --git a/regression-test/suites/correctness_p0/test_bucket_join_with_colocate_table.groovy b/regression-test/suites/correctness_p0/test_bucket_join_with_colocate_table.groovy index 809f415d8141e3..3829b5d0a434a2 100644 --- a/regression-test/suites/correctness_p0/test_bucket_join_with_colocate_table.groovy +++ b/regression-test/suites/correctness_p0/test_bucket_join_with_colocate_table.groovy @@ -72,6 +72,6 @@ ; """ - order_qt_select """ select * from ${colocateTableName} right outer join ${rightTable} on ${colocateTableName}.c1 = ${rightTable}.k1; """ + order_qt_select """ select * from ${colocateTableName} right outer join ${rightTable} on ${colocateTableName}.c1 = ${rightTable}.k1 order by c1; """ } diff --git a/regression-test/suites/decimalv3/test_decimalv3.groovy b/regression-test/suites/decimalv3/test_decimalv3.groovy new file mode 100644 index 00000000000000..8b8b010240571b --- /dev/null +++ b/regression-test/suites/decimalv3/test_decimalv3.groovy @@ -0,0 +1,30 @@ +// 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. + +suite("test_decimalv3") { + def db = "test_decimalv3_db" + sql "CREATE DATABASE IF NOT EXISTS ${db}" + sql "use ${db}" + sql "drop table if exists test5" + sql '''CREATE TABLE test5 ( `a` decimalv3(38,18), `b` decimalv3(38,18) ) ENGINE=OLAP DUPLICATE KEY(`a`) COMMENT 'OLAP' DISTRIBUTED BY HASH(`a`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1" ) ''' + sql "insert into test5 values(50,2)" + sql "drop view if exists test5_v" + sql "create view test5_v (amout) as select cast(a*b as decimalv3(38,18)) from test5" + + qt_decimalv3 "select * from test5_v" + qt_decimalv3 "select cast(a as decimalv3(12,10)) * cast(b as decimalv3(18,10)) from test5" +} diff --git a/regression-test/suites/external_table_emr_p2/hive/test_external_yandex_nereids.groovy b/regression-test/suites/external_table_emr_p2/hive/test_external_yandex_nereids.groovy new file mode 100644 index 00000000000000..9f06df310056f3 --- /dev/null +++ b/regression-test/suites/external_table_emr_p2/hive/test_external_yandex_nereids.groovy @@ -0,0 +1,83 @@ +// 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. + +suite("test_external_yandex_nereids", "p2") { + + def formats = ["_parquet"] + def duplicateAggregationKeys = "SELECT URL, EventDate, max(URL) FROM hitsSUFFIX WHERE CounterID = 1704509 AND UserID = 4322253409885123546 GROUP BY URL, EventDate, EventDate ORDER BY URL, EventDate;" + def like1 = """SELECT count() FROM hitsSUFFIX WHERE URL LIKE '%/avtomobili_s_probegom/_%__%__%__%';""" + def like2 = """SELECT count() FROM hitsSUFFIX WHERE URL LIKE '/avtomobili_s_probegom/_%__%__%__%';""" + def like3 = """SELECT count() FROM hitsSUFFIX WHERE URL LIKE '%_/avtomobili_s_probegom/_%__%__%__%';""" + def like4 = """SELECT count() FROM hitsSUFFIX WHERE URL LIKE '%avtomobili%';""" + def loyalty = """SELECT loyalty, count() AS c + FROM + ( + SELECT UserID, CAST(((if(yandex > google, yandex / (yandex + google), 0 - google / (yandex + google))) * 10) AS TINYINT) AS loyalty + FROM + ( + SELECT UserID, sum(if(SearchEngineID = 2, 1, 0)) AS yandex, sum(if(SearchEngineID = 3, 1, 0)) AS google + FROM hitsSUFFIX + WHERE SearchEngineID = 2 OR SearchEngineID = 3 GROUP BY UserID HAVING yandex + google > 10 + ) t1 + ) t2 + GROUP BY loyalty + ORDER BY loyalty;""" + def maxStringIf = """SELECT CounterID, count(), max(if(SearchPhrase != "", SearchPhrase, "")) FROM hitsSUFFIX GROUP BY CounterID ORDER BY count() DESC LIMIT 20;""" + def minMax = """SELECT CounterID, min(WatchID), max(WatchID) FROM hitsSUFFIX GROUP BY CounterID ORDER BY count() DESC LIMIT 20;""" + def monotonicEvaluationSegfault = """SELECT max(0) FROM visitsSUFFIX WHERE (CAST(CAST(StartDate AS DATETIME) AS INT)) > 1000000000;""" + def subqueryInWhere = """SELECT count() FROM hitsSUFFIX WHERE UserID IN (SELECT UserID FROM hitsSUFFIX WHERE CounterID = 800784);""" + def where01 = """SELECT CounterID, count(distinct UserID) FROM hitsSUFFIX WHERE 0 != 0 GROUP BY CounterID;""" + def where02 = """SELECT CounterID, count(distinct UserID) FROM hitsSUFFIX WHERE CAST(0 AS BOOLEAN) AND CounterID = 1704509 GROUP BY CounterID;""" + + String enabled = context.config.otherConfigs.get("enableExternalHiveTest") + if (enabled != null && enabled.equalsIgnoreCase("true")) { + String extHiveHmsHost = context.config.otherConfigs.get("extHiveHmsHost") + String extHiveHmsPort = context.config.otherConfigs.get("extHiveHmsPort") + String catalog_name = "external_yandex_nereids" + + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + 'type'='hms', + 'hive.metastore.uris' = 'thrift://${extHiveHmsHost}:${extHiveHmsPort}' + ); + """ + logger.info("catalog " + catalog_name + " created") + sql """switch ${catalog_name};""" + logger.info("switched to catalog " + catalog_name) + sql """use multi_catalog;""" + logger.info("use multi_catalog") + sql """set enable_nereids_planner=true""" + + for (String format in formats) { + logger.info("Process format " + format) + qt_01 duplicateAggregationKeys.replace("SUFFIX", format) + qt_02 like1.replace("SUFFIX", format) + qt_03 like2.replace("SUFFIX", format) + qt_04 like3.replace("SUFFIX", format) + qt_05 like4.replace("SUFFIX", format) + qt_06 loyalty.replace("SUFFIX", format) + qt_07 maxStringIf.replace("SUFFIX", format) + qt_08 minMax.replace("SUFFIX", format) + qt_09 monotonicEvaluationSegfault.replace("SUFFIX", format) + qt_10 subqueryInWhere.replace("SUFFIX", format) + qt_11 where01.replace("SUFFIX", format) + qt_12 where02.replace("SUFFIX", format) + } + } +} + diff --git a/regression-test/suites/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.groovy b/regression-test/suites/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.groovy index 816e75b85e003b..a3a05116135ddc 100644 --- a/regression-test/suites/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.groovy +++ b/regression-test/suites/external_table_emr_p2/iceberg/test_external_catalog_icebergv2.groovy @@ -42,7 +42,15 @@ suite("test_external_catalog_icebergv2", "p2") { qt_q07 """ select o_orderkey from orders where o_custkey < 3357 limit 3""" qt_q08 """ select count(1) as c from customer;""" } + // test time travel stmt + def q02 = { + qt_q09 """ select c_custkey from customer for time as of '2022-12-27 10:21:36' limit 3 """ + qt_q10 """ select c_custkey from customer for time as of '2022-12-28 10:21:36' limit 3 """ + qt_q11 """ select c_custkey from customer for version as of 906874575350293177 limit 3 """ + qt_q12 """ select c_custkey from customer for version as of 6352416983354893547 limit 3 """ + } sql """ use `tpch_1000_icebergv2`; """ q01() + q02() } } diff --git a/regression-test/suites/nereids_syntax_p0/aggregate_strategies.groovy b/regression-test/suites/nereids_syntax_p0/aggregate_strategies.groovy index 977c51f0e44aa0..65aa1fe83863ca 100644 --- a/regression-test/suites/nereids_syntax_p0/aggregate_strategies.groovy +++ b/regression-test/suites/nereids_syntax_p0/aggregate_strategies.groovy @@ -45,6 +45,7 @@ suite("aggregate_strategies") { sql "SET enable_nereids_planner=true" sql "SET enable_fallback_to_original_planner=false" + order_qt_count_all "select count(ALL *) from $tableName" order_qt_count_all "select count(*) from $tableName" order_qt_count_all_group_by "select count(*) from $tableName group by id" order_qt_count_all_group_by_2 "select count(*) from $tableName group by id, name" diff --git a/regression-test/suites/nereids_syntax_p0/grouping_sets.groovy b/regression-test/suites/nereids_syntax_p0/grouping_sets.groovy index 5218a4215c181f..8e6cc6e5c74fe3 100644 --- a/regression-test/suites/nereids_syntax_p0/grouping_sets.groovy +++ b/regression-test/suites/nereids_syntax_p0/grouping_sets.groovy @@ -232,4 +232,32 @@ suite("test_nereids_grouping_sets") { ) T ) T2; """ + + order_qt_select1 """ + select coalesce(col1, 'all') as col1, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),()); + """ + + order_qt_select2 """ + select coalesce(col1, 'all') as col2, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),()); + """ + + order_qt_select3 """ + select coalesce(col1, 'all') as col2, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col2),()); + """ + + order_qt_select4 """ + select if(1 = null, 'all', 2) as col1, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),()); + """ + + order_qt_select5 """ + select if(col1 = null, 'all', 2) as col1, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),()); + """ + + order_qt_select6 """ + select if(1 = null, 'all', 2) as col2, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),()); + """ + + order_qt_select7 """ + select if(col1 = null, 'all', 2) as col2, count(*) as cnt from (select null as col1 union all select 'a' as col1 ) t group by grouping sets ((col1),()); + """ } diff --git a/regression-test/suites/nereids_syntax_p0/information_schema.groovy b/regression-test/suites/nereids_syntax_p0/information_schema.groovy new file mode 100644 index 00000000000000..44756adaf4a084 --- /dev/null +++ b/regression-test/suites/nereids_syntax_p0/information_schema.groovy @@ -0,0 +1,22 @@ +// 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. + +suite("information_schema") { + List> table = sql """ select * from information_schema.backends; """ + assertTrue(table.size() > 0) // row should > 0 + assertTrue(table[0].size == 23) // column should be 23 +} diff --git a/regression-test/suites/nereids_syntax_p0/lateral_view.groovy b/regression-test/suites/nereids_syntax_p0/lateral_view.groovy index af7410a3223dd8..2c1cd9f1f5d4b5 100644 --- a/regression-test/suites/nereids_syntax_p0/lateral_view.groovy +++ b/regression-test/suites/nereids_syntax_p0/lateral_view.groovy @@ -63,4 +63,12 @@ suite("nereids_lateral_view") { LATERAL VIEW explode_json_array_int(c3) lv3 AS clv3 LATERAL VIEW explode_json_array_double_outer(c4) lv4 AS clv4 """ + + qt_alias_query """ + SELECT clv1, clv3, c2, c4 FROM (SELECT * FROM nlv_test) tmp + LATERAL VIEW explode_numbers(c1) lv1 AS clv1 + LATERAL VIEW explode_json_array_string_outer(c2) lv2 AS clv2 + LATERAL VIEW explode_json_array_int(c3) lv3 AS clv3 + LATERAL VIEW explode_json_array_double_outer(c4) lv4 AS clv4 + """ } diff --git a/regression-test/suites/nereids_syntax_p0/rollup.groovy b/regression-test/suites/nereids_syntax_p0/rollup.groovy index b3b761d6932676..ae86ad5dc4f04d 100644 --- a/regression-test/suites/nereids_syntax_p0/rollup.groovy +++ b/regression-test/suites/nereids_syntax_p0/rollup.groovy @@ -82,9 +82,11 @@ suite("rollup") { contains("PREAGGREGATION: ON") } - order_qt_rollup1 "select k2, sum(v1) from rollup_t1 group by k2" + // TODO: add these qt tests back when nereids planner could get correct plan when + // light schema change is enabled. + // order_qt_rollup1 "select k2, sum(v1) from rollup_t1 group by k2" - order_qt_rollup2 "select k1, sum(v1) from rollup_t1 group by k1" + // order_qt_rollup2 "select k1, sum(v1) from rollup_t1 group by k1" explain { sql("select k1, max(v1) from rollup_t1 group by k1") diff --git a/regression-test/suites/nereids_syntax_p0/select_const.groovy b/regression-test/suites/nereids_syntax_p0/select_const.groovy new file mode 100644 index 00000000000000..fff8831c03c950 --- /dev/null +++ b/regression-test/suites/nereids_syntax_p0/select_const.groovy @@ -0,0 +1,50 @@ +// 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. + +suite("select_with_const") { + sql "SET enable_nereids_planner=true" + + sql """ + DROP TABLE IF EXISTS select_with_const + """ + + sql """CREATE TABLE IF NOT EXISTS select_with_const (col1 int not null, col2 int not null, col3 int not null) + DISTRIBUTED BY HASH(col3) + BUCKETS 1 + PROPERTIES( + "replication_num"="1" + ) + """ + + sql """ + insert into select_with_const values(1994, 1994, 1995) + """ + + sql "SET enable_fallback_to_original_planner=false" + + qt_select """ + select '' as 'b', col1 from select_with_const + """ + + qt_select """ + select '' as 'b' from select_with_const + """ + + qt_select """ + SELECT col1 AS 'str' FROM select_with_const + """ +} diff --git a/regression-test/suites/nereids_syntax_p0/set_operation.groovy b/regression-test/suites/nereids_syntax_p0/set_operation.groovy index 8edfaa33cb5d42..ee1915b9b0b67a 100644 --- a/regression-test/suites/nereids_syntax_p0/set_operation.groovy +++ b/regression-test/suites/nereids_syntax_p0/set_operation.groovy @@ -213,4 +213,5 @@ suite("test_nereids_set_operation") { logger.info(exception.message) } } + qt_union39 """(select k1 from setOperationTable order by k1) union all (select k1 from setOperationTableNotNullable order by k1) order by k1;""" } diff --git a/regression-test/suites/nereids_syntax_p0/test_arithmetic_operators.groovy b/regression-test/suites/nereids_syntax_p0/test_arithmetic_operators.groovy new file mode 100644 index 00000000000000..e7fe4a8c4a3390 --- /dev/null +++ b/regression-test/suites/nereids_syntax_p0/test_arithmetic_operators.groovy @@ -0,0 +1,80 @@ +// 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. + + +suite("nereids_test_arithmetic_operators", "query,p0") { + def tableName = "test" + + sql "use test_query_db" + sql "SET enable_vectorized_engine=true" + sql "SET enable_nereids_planner=true" + sql "SET enable_fallback_to_original_planner=false" + + qt_arith_op1 "select k1, k4 div k1, k4 div k2, k4 div k3, k4 div k4 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op2 "select k1, k1+ '1', k5,100000*k5 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op3 "select k1,k5,k2*k5 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op4 "select k1,k5,k8*k5,k5*k9,k2*k9,k2*k8 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op5 "select k1, k5*0.1, k8*0.1, k9*0.1 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op6 "select k1, k2*(-0.1), k3*(-0.1), k4*(-0.1), \ + k5*(-0.1), k8*(-0.1), k9*(-0.1) from ${tableName} order by k1, k2, k3, k4" + qt_arith_op7 "select k1, k5*(9223372036854775807/100), k8*9223372036854775807, \ + k9*9223372036854775807 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op8 "select k1, k2/9223372036854775807, k3/9223372036854775807, \ + k4/9223372036854775807,k5/9223372036854775807, \ + k8/9223372036854775807,k9/9223372036854775807 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op9 "select k1, k5+9223372036854775807/100, k8+9223372036854775807, \ + k9+9223372036854775807 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op10 "select k1, k5-9223372036854775807/100, k8-9223372036854775807, \ + k9-9223372036854775807 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op11 "select k1, k5/0.000001, k8/0.000001, \ + k9/0.000001 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op12 "select k1, k1*0.1, k2*0.1, k3*0.1, k4*0.1, k5*0.1, k8*0.1, k9*0.1 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op13 "select k1, k1/10, k2/10, k3/10, k4/10, k5/10, k8/10, k9/10 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op14 "select k1, k1-0.1, k2-0.1, k3-0.1, k4-0.1, k5-0.1, k8-0.1, k9-0.1 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op15 "select k1, k1+0.1, k2+0.1, k3+0.1, k4+0.1, k5+0.1, k8+0.1, k9+0.1 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op16 "select k1+10, k2+10.0, k3+1.6, k4*1, k5-6, k8-234.66, k9-0 \ + from ${tableName} order by k1, k2, k3, k4" + qt_arith_op17 "select * from ${tableName} where k1+k9<0 order by k1, k2, k3, k4" + qt_arith_op18 "select k1*k2*k3*k5 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op19 "select k1*k2*k3*k5*k8*k9 from ${tableName} order by k1, k2, k3, k4" + qt_arith_op20 "select k1*10000/k4/k8/k9 from ${tableName} order by k1, k2, k3, k4" + + for( i in [1, 2, 3, 5, 8, 9]) { + for( j in [1, 2, 3, 5, 8, 9]) { + qt_arith_op21 "select k${i}*k${j}, k${i}+k${j}, k${i}-k${j}, k${i}/k${j} from ${tableName} \ + where abs(k${i})<9223372036854775807 and k${j}<>0 and\ + abs(k${i})<922337203685477580 order by k1, k2, k3, k4" + } + } + + qt_arith_op22 "select 1.1*1.1 + k2 from ${tableName} order by 1 limit 10" + qt_arith_op23 "select 1.1*1.1 + k5 from ${tableName} order by 1 limit 10" + qt_arith_op24 "select 1.1*1.1+1.1" + + // divide mod zero + qt_arith_op25 "select 10.2 / 0.0, 10.2 / 0, 10.2 % 0.0, 10.2 % 0" + qt_arith_op26 "select 0.0 / 0.0, 0.0 / 0, 0.0 % 0.0, 0.0 % 0" + qt_arith_op27 "select -10.2 / 0.0, -10.2 / 0, -10.2 % 0.0, -10.2 % 0" + qt_arith_op28 "select k5 / 0, k8 / 0, k9 / 0 from ${tableName} order by k1,k2,k3,k4" + qt_arith_op29 "select k5 % 0, k8 % 0, k9 % 0 from ${tableName} order by k1,k2,k3,k4" +} diff --git a/regression-test/suites/nereids_syntax_p0/test_join3.groovy b/regression-test/suites/nereids_syntax_p0/test_join3.groovy new file mode 100644 index 00000000000000..17a0ad76c7ce3e --- /dev/null +++ b/regression-test/suites/nereids_syntax_p0/test_join3.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. + +suite("nereids_test_join3", "query,p0") { + + sql "SET enable_vectorized_engine=true" + sql "SET enable_nereids_planner=true" + sql "SET enable_fallback_to_original_planner=false" + + def DBname = "regression_test_join3" + sql "DROP DATABASE IF EXISTS ${DBname}" + sql "CREATE DATABASE IF NOT EXISTS ${DBname}" + sql "use ${DBname}" + + def tbName1 = "t1" + def tbName2 = "t2" + def tbName3 = "t3" + + sql """CREATE TABLE IF NOT EXISTS ${tbName1} (name varchar(255), n INTEGER) DISTRIBUTED BY HASH(name) properties("replication_num" = "1");""" + sql """CREATE TABLE IF NOT EXISTS ${tbName2} (name varchar(255), n INTEGER) DISTRIBUTED BY HASH(name) properties("replication_num" = "1");""" + sql """CREATE TABLE IF NOT EXISTS ${tbName3} (name varchar(255), n INTEGER) DISTRIBUTED BY HASH(name) properties("replication_num" = "1");""" + + sql "INSERT INTO ${tbName1} VALUES ( 'bb', 11 );" + sql "INSERT INTO ${tbName2} VALUES ( 'bb', 12 );" + sql "INSERT INTO ${tbName2} VALUES ( 'cc', 22 );" + sql "INSERT INTO ${tbName2} VALUES ( 'ee', 42 );" + sql "INSERT INTO ${tbName3} VALUES ( 'bb', 13 );" + sql "INSERT INTO ${tbName3} VALUES ( 'cc', 23 );" + sql "INSERT INTO ${tbName3} VALUES ( 'dd', 33 );" + + qt_join1 """ + SELECT * FROM ${tbName1} FULL JOIN ${tbName2} USING (name) FULL JOIN ${tbName3} USING (name) ORDER BY 1,2,3,4,5,6; + """ + qt_join2 """ + SELECT * FROM + (SELECT * FROM ${tbName2}) as s2 + INNER JOIN + (SELECT * FROM ${tbName3}) s3 + USING (name) + ORDER BY 1,2,3,4; + """ + qt_join3 """ + SELECT * FROM + (SELECT * FROM ${tbName2}) as s2 + LEFT JOIN + (SELECT * FROM ${tbName3}) s3 + USING (name) + ORDER BY 1,2,3,4; + """ + qt_join4 """ + SELECT * FROM + (SELECT * FROM ${tbName2}) as s2 + FULL JOIN + (SELECT * FROM ${tbName3}) s3 + USING (name) + ORDER BY 1,2,3,4; + """ + +// wait fix +// qt_join5 """ +// SELECT * FROM +// (SELECT name, n as s2_n, 2 as s2_2 FROM ${tbName2}) as s2 +// NATURAL INNER JOIN +// (SELECT name, n as s3_n, 3 as s3_2 FROM ${tbName3}) s3 +// ORDER BY 1,2,3,4; +// """ + +// qt_join6 """ +// SELECT * FROM +// (SELECT name, n as s1_n, 1 as s1_1 FROM ${tbName1}) as s1 +// NATURAL INNER JOIN +// (SELECT name, n as s2_n, 2 as s2_2 FROM ${tbName2}) as s2 +// NATURAL INNER JOIN +// (SELECT name, n as s3_n, 3 as s3_2 FROM ${tbName3}) s3; +// """ + + qt_join7 """ + SELECT * FROM + (SELECT name, n as s1_n FROM ${tbName1}) as s1 + FULL JOIN + (SELECT name, 2 as s2_n FROM ${tbName2}) as s2 + ON (s1_n = s2_n) + ORDER BY 1,2,3,4; + """ + + // sql "DROP DATABASE IF EXISTS ${DBname}" +} diff --git a/regression-test/suites/nereids_syntax_p0/test_query_between.groovy b/regression-test/suites/nereids_syntax_p0/test_query_between.groovy new file mode 100644 index 00000000000000..d3b4b183069830 --- /dev/null +++ b/regression-test/suites/nereids_syntax_p0/test_query_between.groovy @@ -0,0 +1,42 @@ +// 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. + +suite("nereids_test_query_between", "query,p0") { + sql"use test_query_db" + + sql "SET enable_vectorized_engine=true" + sql "SET enable_nereids_planner=true" + sql "SET enable_fallback_to_original_planner=false" + + def tableName = "test" + qt_between1 "select if(k1 between 1 and 2, 2, 0) as wj from ${tableName} order by wj" + qt_between2 "select k1 from ${tableName} where k1 between 3 and 4 order by k1, k2, k3, k4" + qt_between3 "select k2 from ${tableName} where k2 between 1980 and 1990 order by k1, k2, k3, k4" + qt_between4 "select k3 from ${tableName} where k3 between 1000 and 2000 order by k1, k2, k3, k4" + qt_between5 "select k4 from ${tableName} where k4 between -100000000 and 0 order by k1, k2, k3, k4" + qt_between6 "select k6 from ${tableName} where lower(k6) between 'f' and 'false' order by k1, k2, k3, k4" + qt_between7 "select k7 from ${tableName} where lower(k7) between 'a' and 'g' order by k1, k2, k3, k4" + qt_between8 "select k8 from ${tableName} where k8 between -2 and 0 order by k1, k2, k3, k4" + qt_between9 """select k10 from ${tableName} where k10 between \"2015-04-02 00:00:00\" + and \"9999-12-31 12:12:12\" order by k1, k2, k3, k4""" + qt_between10 """select k11 from ${tableName} where k11 between \"2015-04-02 00:00:00\" + and \"9999-12-31 12:12:12\" order by k1, k2, k3, k4""" + qt_between11 """select k10 from ${tableName} where k10 between \"2015-04-02\" + and \"9999-12-31\" order by k1, k2, k3, k4""" + qt_between12 "select k9 from ${tableName} where k9 between -1 and 6.333 order by k1, k2, k3, k4" + qt_between13 "select k5 from ${tableName} where k5 between 0 and 1243.5 order by k1, k2, k3, k4" +} diff --git a/regression-test/suites/nereids_syntax_p0/test_variance_nereids.groovy b/regression-test/suites/nereids_syntax_p0/test_variance_nereids.groovy new file mode 100644 index 00000000000000..a93db47e22ea15 --- /dev/null +++ b/regression-test/suites/nereids_syntax_p0/test_variance_nereids.groovy @@ -0,0 +1,23 @@ +// 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. + +suite("test_variance_nereids") { + sql "set enable_nereids_planner=true;" + sql "set enable_fallback_to_original_planner=false;" + + qt_variance "select variance(a) from (select 123 as a union select 423 as a union select 3 as a) t;" +} \ No newline at end of file diff --git a/regression-test/suites/nereids_syntax_p0/using_join.groovy b/regression-test/suites/nereids_syntax_p0/using_join.groovy index ecbc714d9ae005..d53d378650183b 100644 --- a/regression-test/suites/nereids_syntax_p0/using_join.groovy +++ b/regression-test/suites/nereids_syntax_p0/using_join.groovy @@ -66,11 +66,11 @@ suite("nereids_using_join") { sql """INSERT INTO t2 VALUES('6', 3, 1)""" sql """INSERT INTO t2 VALUES('7', 4, 1)""" - qt_sql """ + order_qt_sql """ SELECT t1.col1 FROM t1 JOIN t2 USING (col1) """ - qt_sql """ + order_qt_sql """ SELECT t1.col1 FROM t1 JOIN t2 USING (col1, col2) """ diff --git a/regression-test/suites/performance_p0/redundant_conjuncts.groovy b/regression-test/suites/performance_p0/redundant_conjuncts.groovy index d42eb037989fa4..ef0434aa07685d 100644 --- a/regression-test/suites/performance_p0/redundant_conjuncts.groovy +++ b/regression-test/suites/performance_p0/redundant_conjuncts.groovy @@ -35,7 +35,7 @@ suite("redundant_conjuncts") { EXPLAIN SELECT v1 FROM redundant_conjuncts WHERE k1 = 1 AND k1 = 1; """ - sql "set COMPACT_EQUAL_TO_IN_PREDICATE_THRESHOLD = 100" + sql "set REWRITE_OR_TO_IN_PREDICATE_THRESHOLD = 100" qt_redundant_conjuncts_gnerated_by_extract_common_filter """ EXPLAIN SELECT v1 FROM redundant_conjuncts WHERE k1 = 1 OR k1 = 2; """ diff --git a/regression-test/suites/primary_index/test_pk_uk_case.groovy b/regression-test/suites/primary_index/test_pk_uk_case.groovy index 9403d5e92c2660..1ae47e3b10aa7d 100644 --- a/regression-test/suites/primary_index/test_pk_uk_case.groovy +++ b/regression-test/suites/primary_index/test_pk_uk_case.groovy @@ -246,7 +246,7 @@ suite("test_pk_uk_case") { for (int i = 0; i < result0.size(); ++i) { for (j = 0; j < result0[0].size(); j++) { logger.info("result: " + result0[i][j] + "|" + result1[i][j]) - assertTrue(result0[0]==result1[0]) + assertTrue(result0[i][j]==result1[i][j]) } } diff --git a/regression-test/suites/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.groovy b/regression-test/suites/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.groovy index 2eb6fa449522e8..d966bb042c5566 100644 --- a/regression-test/suites/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.groovy +++ b/regression-test/suites/query_p0/sql_functions/aggregate_functions/test_approx_count_distinct.groovy @@ -17,4 +17,8 @@ suite("test_approx_count_distinct") { qt_select "select approx_count_distinct(k1) from test_query_db.baseall" + sql 'set enable_vectorized_engine=true;' + sql 'set enable_fallback_to_original_planner=false' + sql 'set enable_nereids_planner=true' + qt_select "select approx_count_distinct(k1) from test_query_db.baseall" } diff --git a/regression-test/suites/query_p0/union/test_union.groovy b/regression-test/suites/query_p0/union/test_union.groovy index ff856245f0e0bc..d8592596720d29 100644 --- a/regression-test/suites/query_p0/union/test_union.groovy +++ b/regression-test/suites/query_p0/union/test_union.groovy @@ -273,4 +273,9 @@ suite("test_union") { qt_union40 """(select k1 from ${new_union_table}) union (select k${idx} from ${tbName1}) order by k1""" } sql"""drop table ${new_union_table}""" + + sql 'set enable_vectorized_engine=true;' + sql 'set enable_fallback_to_original_planner=false' + sql 'set enable_nereids_planner=true' + qt_union35 """select cast("2016-07-01" as date) union (select cast("2016-07-02 1:10:0" as date)) order by 1""" } diff --git a/thirdparty/CHANGELOG.md b/thirdparty/CHANGELOG.md index b8ebc3ef15b581..91e08c0401785f 100644 --- a/thirdparty/CHANGELOG.md +++ b/thirdparty/CHANGELOG.md @@ -2,6 +2,9 @@ This file contains version of the third-party dependency libraries in the build-env image. The docker build-env image is apache/doris, and the tag is `build-env-${version}` +## v20221228 +- Modified: simdjson 1.0.2 -> 3.0.1 + ## v20221213 - Modified: protobuf 3.14.0 -> 3.15.0 diff --git a/thirdparty/build-thirdparty.sh b/thirdparty/build-thirdparty.sh index b5b2a996dc3ae9..774a5512bdcfba 100755 --- a/thirdparty/build-thirdparty.sh +++ b/thirdparty/build-thirdparty.sh @@ -49,6 +49,7 @@ usage() { Usage: $0 Optional options: -j build thirdparty parallel + --clean clean the extracted data " exit 1 } @@ -58,6 +59,7 @@ if ! OPTS="$(getopt \ -o '' \ -o 'h' \ -l 'help' \ + -l 'clean' \ -o 'j:' \ -- "$@")"; then usage @@ -88,6 +90,10 @@ if [[ "$#" -ne 1 ]]; then HELP=1 shift ;; + --clean) + CLEAN=1 + shift + ;; --) shift break @@ -102,11 +108,11 @@ fi if [[ "${HELP}" -eq 1 ]]; then usage - exit fi echo "Get params: PARALLEL -- ${PARALLEL} + CLEAN -- ${CLEAN} " if [[ ! -f "${TP_DIR}/download-thirdparty.sh" ]]; then @@ -123,6 +129,12 @@ fi cd "${TP_DIR}" +if [[ "${CLEAN}" -eq 1 ]] && [[ -d "${TP_SOURCE_DIR}" ]]; then + echo 'Clean the extracted data ...' + find "${TP_SOURCE_DIR}" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} \; + echo 'Success!' +fi + # Download thirdparties. "${TP_DIR}/download-thirdparty.sh" diff --git a/thirdparty/download-thirdparty.sh b/thirdparty/download-thirdparty.sh index 62422eb2490a60..6a2e99011fa24c 100755 --- a/thirdparty/download-thirdparty.sh +++ b/thirdparty/download-thirdparty.sh @@ -397,10 +397,10 @@ cd - echo "Finished patching ${BRPC_SOURCE}" # patch jemalloc, change simdjson::dom::element_type::BOOL to BOOLEAN to avoid conflict with odbc macro BOOL -if [[ "${SIMDJSON_SOURCE}" = "simdjson-1.0.2" ]]; then +if [[ "${SIMDJSON_SOURCE}" = "simdjson-3.0.1" ]]; then cd "${TP_SOURCE_DIR}/${SIMDJSON_SOURCE}" if [[ ! -f "${PATCHED_MARK}" ]]; then - patch -p1 <"${TP_PATCH_DIR}/simdjson-1.0.2.patch" + patch -p1 <"${TP_PATCH_DIR}/simdjson-3.0.1.patch" touch "${PATCHED_MARK}" fi cd - diff --git a/thirdparty/patches/simdjson-1.0.2.patch b/thirdparty/patches/simdjson-3.0.1.patch similarity index 65% rename from thirdparty/patches/simdjson-1.0.2.patch rename to thirdparty/patches/simdjson-3.0.1.patch index c2d1be717e41aa..d6145b19af601a 100644 --- a/thirdparty/patches/simdjson-1.0.2.patch +++ b/thirdparty/patches/simdjson-3.0.1.patch @@ -1,6 +1,6 @@ -diff -ur a/fuzz/fuzz_dump.cpp b/fuzz/fuzz_dump.cpp ---- a/fuzz/fuzz_dump.cpp 2021-10-28 07:29:42.000000000 +0800 -+++ b/fuzz/fuzz_dump.cpp 2022-12-20 21:20:13.068613831 +0800 +diff -Naur a/fuzz/fuzz_dump.cpp b/fuzz/fuzz_dump.cpp +--- a/fuzz/fuzz_dump.cpp 2022-11-23 23:59:48.000000000 +0800 ++++ b/fuzz/fuzz_dump.cpp 2022-12-27 17:59:16.614067037 +0800 @@ -48,7 +48,7 @@ case simdjson::dom::element_type::STRING: os << element.get_string().value_unsafe() << endl; @@ -10,9 +10,9 @@ diff -ur a/fuzz/fuzz_dump.cpp b/fuzz/fuzz_dump.cpp os << element.get_bool().value_unsafe() << endl; break; case simdjson::dom::element_type::NULL_VALUE: -diff -ur a/include/simdjson/dom/element.h b/include/simdjson/dom/element.h ---- a/include/simdjson/dom/element.h 2021-10-28 07:29:42.000000000 +0800 -+++ b/include/simdjson/dom/element.h 2022-12-20 21:19:28.213840603 +0800 +diff -Naur a/include/simdjson/dom/element.h b/include/simdjson/dom/element.h +--- a/include/simdjson/dom/element.h 2022-11-23 23:59:48.000000000 +0800 ++++ b/include/simdjson/dom/element.h 2022-12-27 17:59:16.614067037 +0800 @@ -27,7 +27,7 @@ UINT64 = 'u', ///< uint64_t: any integer that fits in uint64_t but *not* int64_t DOUBLE = 'd', ///< double: Any number with a "." or "e" that fits in double. @@ -22,19 +22,19 @@ diff -ur a/include/simdjson/dom/element.h b/include/simdjson/dom/element.h NULL_VALUE = 'n' ///< null }; -diff -ur a/include/simdjson/dom/element-inl.h b/include/simdjson/dom/element-inl.h ---- a/include/simdjson/dom/element-inl.h 2021-10-28 07:29:42.000000000 +0800 -+++ b/include/simdjson/dom/element-inl.h 2022-12-20 21:23:03.064754395 +0800 -@@ -187,7 +187,7 @@ - +diff -Naur a/include/simdjson/dom/element-inl.h b/include/simdjson/dom/element-inl.h +--- a/include/simdjson/dom/element-inl.h 2022-11-23 23:59:48.000000000 +0800 ++++ b/include/simdjson/dom/element-inl.h 2022-12-27 17:59:16.615067032 +0800 +@@ -188,7 +188,7 @@ inline element_type element::type() const noexcept { + SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914 auto tape_type = tape.tape_ref_type(); - return tape_type == internal::tape_type::FALSE_VALUE ? element_type::BOOL : static_cast(tape_type); + return tape_type == internal::tape_type::FALSE_VALUE ? element_type::BOOLEAN : static_cast(tape_type); } inline simdjson_result element::get_bool() const noexcept { -@@ -413,7 +413,7 @@ +@@ -425,7 +425,7 @@ return out << "double"; case element_type::STRING: return out << "string"; @@ -43,10 +43,10 @@ diff -ur a/include/simdjson/dom/element-inl.h b/include/simdjson/dom/element-inl return out << "bool"; case element_type::NULL_VALUE: return out << "null"; -diff -ur a/singleheader/simdjson.h b/singleheader/simdjson.h ---- a/singleheader/simdjson.h 2021-10-28 07:29:42.000000000 +0800 -+++ b/singleheader/simdjson.h 2022-12-20 21:19:55.295703686 +0800 -@@ -5167,7 +5167,7 @@ +diff -Naur a/singleheader/simdjson.h b/singleheader/simdjson.h +--- a/singleheader/simdjson.h 2022-11-23 23:59:48.000000000 +0800 ++++ b/singleheader/simdjson.h 2022-12-27 17:59:16.619067010 +0800 +@@ -5301,7 +5301,7 @@ UINT64 = 'u', ///< uint64_t: any integer that fits in uint64_t but *not* int64_t DOUBLE = 'd', ///< double: Any number with a "." or "e" that fits in double. STRING = '"', ///< std::string_view @@ -55,16 +55,16 @@ diff -ur a/singleheader/simdjson.h b/singleheader/simdjson.h NULL_VALUE = 'n' ///< null }; -@@ -7008,7 +7008,7 @@ - +@@ -7149,7 +7149,7 @@ inline element_type element::type() const noexcept { + SIMDJSON_DEVELOPMENT_ASSERT(tape.usable()); // https://github.com/simdjson/simdjson/issues/1914 auto tape_type = tape.tape_ref_type(); - return tape_type == internal::tape_type::FALSE_VALUE ? element_type::BOOL : static_cast(tape_type); + return tape_type == internal::tape_type::FALSE_VALUE ? element_type::BOOLEAN : static_cast(tape_type); } inline simdjson_result element::get_bool() const noexcept { -@@ -7234,7 +7234,7 @@ +@@ -7386,7 +7386,7 @@ return out << "double"; case element_type::STRING: return out << "string"; @@ -73,10 +73,10 @@ diff -ur a/singleheader/simdjson.h b/singleheader/simdjson.h return out << "bool"; case element_type::NULL_VALUE: return out << "null"; -diff -ur a/tests/dom/basictests.cpp b/tests/dom/basictests.cpp ---- a/tests/dom/basictests.cpp 2021-10-28 07:29:42.000000000 +0800 -+++ b/tests/dom/basictests.cpp 2022-12-20 21:18:54.684010105 +0800 -@@ -1499,7 +1499,7 @@ +diff -Naur a/tests/dom/basictests.cpp b/tests/dom/basictests.cpp +--- a/tests/dom/basictests.cpp 2022-11-23 23:59:48.000000000 +0800 ++++ b/tests/dom/basictests.cpp 2022-12-27 17:59:16.619067010 +0800 +@@ -1567,7 +1567,7 @@ simdjson_result result = parser.parse(ALL_TYPES_JSON)[key]; return true @@ -85,10 +85,10 @@ diff -ur a/tests/dom/basictests.cpp b/tests/dom/basictests.cpp && test_cast_error(result, INCORRECT_TYPE) && test_cast_error(result, INCORRECT_TYPE) && test_cast_error(result, INCORRECT_TYPE) -diff -ur a/tests/dom/readme_examples.cpp b/tests/dom/readme_examples.cpp ---- a/tests/dom/readme_examples.cpp 2021-10-28 07:29:42.000000000 +0800 -+++ b/tests/dom/readme_examples.cpp 2022-12-20 21:19:06.757949077 +0800 -@@ -204,7 +204,7 @@ +diff -Naur a/tests/dom/readme_examples.cpp b/tests/dom/readme_examples.cpp +--- a/tests/dom/readme_examples.cpp 2022-11-23 23:59:48.000000000 +0800 ++++ b/tests/dom/readme_examples.cpp 2022-12-27 17:59:16.619067010 +0800 +@@ -208,7 +208,7 @@ case dom::element_type::STRING: cout << std::string_view(element) << endl; break; diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh index 8f1164f05bc7c4..56cb26a828ad77 100644 --- a/thirdparty/vars.sh +++ b/thirdparty/vars.sh @@ -394,10 +394,10 @@ XSIMD_SOURCE=xsimd-aeec9c872c8b475dedd7781336710f2dd2666cb2 XSIMD_MD5SUM="d024855f71c0a2837a6918c0f8f66245" # simdjson -SIMDJSON_DOWNLOAD="https://github.com/simdjson/simdjson/archive/refs/tags/v1.0.2.tar.gz" -SIMDJSON_NAME=simdjson-1.0.2.tar.gz -SIMDJSON_SOURCE=simdjson-1.0.2 -SIMDJSON_MD5SUM="5bb34cca7087a99c450dbdfe406bdc7d" +SIMDJSON_DOWNLOAD="https://github.com/simdjson/simdjson/archive/refs/tags/v3.0.1.tar.gz" +SIMDJSON_NAME=simdjson-3.0.1.tar.gz +SIMDJSON_SOURCE=simdjson-3.0.1 +SIMDJSON_MD5SUM="993576b47249f2bade2bfb2552b2896a" # nlohmann_json NLOHMANN_JSON_DOWNLOAD="https://github.com/nlohmann/json/archive/refs/tags/v3.10.1.tar.gz" diff --git a/tools/clickbench-tools/run-clickbench-queries.sh b/tools/clickbench-tools/run-clickbench-queries.sh index 41a01269852839..45011ab20da9c7 100755 --- a/tools/clickbench-tools/run-clickbench-queries.sh +++ b/tools/clickbench-tools/run-clickbench-queries.sh @@ -102,7 +102,7 @@ pre_set() { } pre_set "set global parallel_fragment_exec_instance_num=8;" -pre_set "set global exec_mem_limit=8G;" +pre_set "set global exec_mem_limit=32G;" echo '============================================' pre_set "show variables" echo '============================================' diff --git a/tools/tpch-tools/queries/q18.sql b/tools/tpch-tools/queries/q18.sql index 23d151307605f5..ab1a081978bba5 100644 --- a/tools/tpch-tools/queries/q18.sql +++ b/tools/tpch-tools/queries/q18.sql @@ -17,7 +17,7 @@ -- Modified -select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=16, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=true, enable_projection=true) */ +select /*+SET_VAR(exec_mem_limit=16589934592, parallel_fragment_exec_instance_num=16, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=true, enable_projection=true) */ c_name, c_custkey, t3.o_orderkey, diff --git a/ui/src/components/table/index.less b/ui/src/components/table/index.less index a417c7d0a2e9a8..49db6dbb6490a7 100644 --- a/ui/src/components/table/index.less +++ b/ui/src/components/table/index.less @@ -33,3 +33,14 @@ under the License. */ position: absolute; } } +:table { + :global { + .ant-table-thead > tr > th { + background: #fff !important; + white-space: nowrap; + } + .ant-table-tbody >tr> td { + white-space: nowrap; + } + } + } diff --git a/ui/src/components/table/index.tsx b/ui/src/components/table/index.tsx index 5030b104be8f51..94afff63c31500 100644 --- a/ui/src/components/table/index.tsx +++ b/ui/src/components/table/index.tsx @@ -52,7 +52,7 @@ export default function SortFilterTable(props: any) {