[enhance](variant) typed_paths_to sparse column (#54078)
diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp
index d3cb443..85b9040 100644
--- a/be/src/olap/rowset/segment_v2/segment.cpp
+++ b/be/src/olap/rowset/segment_v2/segment.cpp
@@ -602,24 +602,44 @@
// Find the specific node within the variant structure using the relative path.
const auto* node = variant_reader->get_reader_by_path(relative_path);
+ if (relative_path.get_path() == SPARSE_COLUMN_PATH) {
+ return vectorized::DataTypeFactory::instance().create_data_type(column);
+ }
+
// Case 1: Node not found for the given path within the variant reader.
// If relative_path is empty, it means the original path pointed to the root
// of the variant column itself. We should return the Variant type.
if (node == nullptr || relative_path.empty()) {
- return vectorized::DataTypeFactory::instance().create_data_type(column);
+ if (column.is_nested_subcolumn()) {
+ return vectorized::DataTypeFactory::instance().create_data_type(column);
+ }
+ return column.is_nullable()
+ ? vectorized::make_nullable(std::make_shared<vectorized::DataTypeVariant>(
+ column.variant_max_subcolumns_count()))
+ : std::make_shared<vectorized::DataTypeVariant>(
+ column.variant_max_subcolumns_count());
}
bool exist_in_sparse = variant_reader->exist_in_sparse_column(relative_path);
bool is_physical_leaf = node->children.empty();
+ if (is_physical_leaf && column.is_nested_subcolumn()) {
+ return node->data.file_column_type;
+ }
+
// Condition to return the specific underlying type of the node:
// 1. We are reading flat leaves (ignoring hierarchy).
// 2. OR It's a leaf in the physical column structure AND it doesn't *also* exist
// in the sparse column (meaning it's purely a materialized leaf).
- if (read_flat_leaves || (is_physical_leaf && !exist_in_sparse)) {
+ if (read_flat_leaves || (is_physical_leaf && !exist_in_sparse &&
+ !variant_reader->is_exceeded_sparse_column_limit())) {
return node->data.file_column_type;
}
- return vectorized::DataTypeFactory::instance().create_data_type(column);
+ return column.is_nullable()
+ ? vectorized::make_nullable(std::make_shared<vectorized::DataTypeVariant>(
+ column.variant_max_subcolumns_count()))
+ : std::make_shared<vectorized::DataTypeVariant>(
+ column.variant_max_subcolumns_count());
}
Status Segment::_create_column_readers_once(OlapReaderStatistics* stats) {
diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp b/be/src/olap/rowset/segment_v2/segment_writer.cpp
index 0a9ff4d..6bb3dd2 100644
--- a/be/src/olap/rowset/segment_v2/segment_writer.cpp
+++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp
@@ -772,9 +772,17 @@
}
return Status::OK();
}
+ if (block->columns() < _column_writers.size()) {
+ return Status::InternalError(
+ "block->columns() < _column_writers.size(), block->columns()=" +
+ std::to_string(block->columns()) +
+ ", _column_writers.size()=" + std::to_string(_column_writers.size()) +
+ ", _tablet_schema->dump_structure()=" + _tablet_schema->dump_structure());
+ }
CHECK(block->columns() >= _column_writers.size())
<< ", block->columns()=" << block->columns()
- << ", _column_writers.size()=" << _column_writers.size();
+ << ", _column_writers.size()=" << _column_writers.size()
+ << ", _tablet_schema->dump_structure()=" << _tablet_schema->dump_structure();
// Row column should be filled here when it's a directly write from memtable
// or it's schema change write(since column data type maybe changed, so we should reubild)
if (_opts.write_type == DataWriteType::TYPE_DIRECT ||
diff --git a/be/src/olap/rowset/segment_v2/variant/variant_column_reader.cpp b/be/src/olap/rowset/segment_v2/variant/variant_column_reader.cpp
index cdd8252..0a3a1d6 100644
--- a/be/src/olap/rowset/segment_v2/variant/variant_column_reader.cpp
+++ b/be/src/olap/rowset/segment_v2/variant/variant_column_reader.cpp
@@ -72,6 +72,12 @@
return existed_in_sparse_column || prefix_existed_in_sparse_column;
}
+bool VariantColumnReader::is_exceeded_sparse_column_limit() const {
+ return !_statistics->sparse_column_non_null_size.empty() &&
+ _statistics->sparse_column_non_null_size.size() >=
+ config::variant_max_sparse_column_statistics_size;
+}
+
int64_t VariantColumnReader::get_metadata_size() const {
int64_t size = ColumnReader::get_metadata_size();
if (_statistics) {
@@ -205,10 +211,16 @@
RETURN_IF_ERROR(_create_sparse_merge_reader(iterator, opts, target_col, inner_iter));
return Status::OK();
}
+
+ if (target_col.is_nested_subcolumn()) {
+ // using the sibling of the nested column to fill the target nested column
+ RETURN_IF_ERROR(_new_default_iter_with_same_nested(iterator, target_col));
+ return Status::OK();
+ }
+
// If the path is typed, it means the path is not a sparse column, so we can't read the sparse column
// even if the sparse column size is reached limit
- if (existed_in_sparse_column ||
- (exceeded_sparse_column_limit && !relative_path.get_is_typed())) {
+ if (existed_in_sparse_column || exceeded_sparse_column_limit) {
// Sparse column exists or reached sparse size limit, read sparse column
ColumnIterator* inner_iter;
RETURN_IF_ERROR(_sparse_column_reader->new_iterator(&inner_iter, nullptr));
@@ -219,11 +231,7 @@
const_cast<StorageReadOptions*>(opts), target_col);
return Status::OK();
}
- if (target_col.is_nested_subcolumn()) {
- // using the sibling of the nested column to fill the target nested column
- RETURN_IF_ERROR(_new_default_iter_with_same_nested(iterator, target_col));
- return Status::OK();
- }
+
VLOG_DEBUG << "new_default_iter: " << target_col.path_info_ptr()->get_path();
std::unique_ptr<ColumnIterator> it;
RETURN_IF_ERROR(Segment::new_default_iterator(target_col, &it));
@@ -264,7 +272,7 @@
// Otherwise the prefix is not exist and the sparse column size is reached limit
// which means the path maybe exist in sparse_column
bool exceeded_sparse_column_limit = !_statistics->sparse_column_non_null_size.empty() &&
- _statistics->sparse_column_non_null_size.size() ==
+ _statistics->sparse_column_non_null_size.size() >=
config::variant_max_sparse_column_statistics_size;
// For compaction operations, read flat leaves, otherwise read hierarchical data
@@ -284,7 +292,7 @@
_statistics->sparse_column_non_null_size.end()) &&
_statistics->sparse_column_non_null_size.lower_bound(prefix)->first.starts_with(prefix);
// if prefix exists in sparse column, read sparse column with hierarchical reader
- if (prefix_existed_in_sparse_column) {
+ if (prefix_existed_in_sparse_column || exceeded_sparse_column_limit) {
// Example {"b" : {"c":456,"e":7.111}}
// b.c is sparse column, b.e is subcolumn, so b is both the prefix of sparse column and subcolumn
return _create_hierarchical_reader(iterator, relative_path, node, root);
@@ -317,9 +325,6 @@
RETURN_IF_ERROR(_create_hierarchical_reader(iterator, relative_path, node, root));
}
} else {
- if (exceeded_sparse_column_limit) {
- return _create_hierarchical_reader(iterator, relative_path, nullptr, root);
- }
// Sparse column not exists and not reached stats limit, then the target path is not exist, get a default iterator
std::unique_ptr<ColumnIterator> iter;
RETURN_IF_ERROR(Segment::new_default_iterator(*target_col, &iter));
@@ -444,11 +449,8 @@
std::unordered_map<vectorized::PathInData, vectorized::DataTypes,
vectorized::PathInData::Hash>* subcolumns_types) const {
for (const auto& subcolumn_reader : *_subcolumn_readers) {
- // no need typed path and root path
- if (!subcolumn_reader->path.get_is_typed() && !subcolumn_reader->path.empty()) {
- auto& path_types = (*subcolumns_types)[subcolumn_reader->path];
- path_types.push_back(subcolumn_reader->data.file_column_type);
- }
+ auto& path_types = (*subcolumns_types)[subcolumn_reader->path];
+ path_types.push_back(subcolumn_reader->data.file_column_type);
}
}
diff --git a/be/src/olap/rowset/segment_v2/variant/variant_column_reader.h b/be/src/olap/rowset/segment_v2/variant/variant_column_reader.h
index cb13b63..3577ce1 100644
--- a/be/src/olap/rowset/segment_v2/variant/variant_column_reader.h
+++ b/be/src/olap/rowset/segment_v2/variant/variant_column_reader.h
@@ -70,6 +70,8 @@
bool exist_in_sparse_column(const vectorized::PathInData& path) const;
+ bool is_exceeded_sparse_column_limit() const;
+
const SubcolumnColumnReaders* get_subcolumn_readers() const { return _subcolumn_readers.get(); }
void get_subcolumns_types(
diff --git a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
index 94c4a9c..12c345f 100644
--- a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
+++ b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
@@ -76,11 +76,11 @@
IndexFileWriter* inverted_index_file_writer,
std::unique_ptr<ColumnWriter>* writer,
TabletIndexes& subcolumn_indexes, ColumnWriterOptions* opt,
- int64_t none_null_value_size) {
+ int64_t none_null_value_size, bool need_record_none_null_value_size) {
_init_column_meta(opt->meta, cid, column, opt->compression_type);
// no need to record none null value size for typed column or nested column, since it's compaction stage
// will directly pick it as sub column
- if (!column.path_info_ptr()->get_is_typed() && !column.path_info_ptr()->has_nested_part()) {
+ if (need_record_none_null_value_size) {
// record none null value size for statistics
opt->meta->set_none_null_size(none_null_value_size);
}
@@ -265,32 +265,22 @@
// create subcolumn writer
int current_column_id = column_id++;
TabletColumn tablet_column;
- int64_t none_null_value_size = -1;
- vectorized::ColumnPtr current_column;
- vectorized::DataTypePtr current_type;
+ int64_t none_null_value_size = entry->data.get_non_null_value_size();
+ vectorized::ColumnPtr current_column = entry->data.get_finalized_column_ptr()->get_ptr();
+ vectorized::DataTypePtr current_type = entry->data.get_least_common_type();
if (auto current_path = entry->path.get_path();
_subcolumns_info.find(current_path) != _subcolumns_info.end()) {
tablet_column = std::move(_subcolumns_info[current_path].column);
- vectorized::DataTypePtr storage_type =
- vectorized::DataTypeFactory::instance().create_data_type(tablet_column);
- vectorized::DataTypePtr finalized_type = entry->data.get_least_common_type();
- current_column = entry->data.get_finalized_column_ptr()->get_ptr();
- if (!storage_type->equals(*finalized_type)) {
- RETURN_IF_ERROR(vectorized::schema_util::cast_column(
- {current_column, finalized_type, ""}, storage_type, ¤t_column));
- }
_subcolumns_indexes[current_column_id] =
std::move(_subcolumns_info[current_path].indexes);
- const auto& null_data = assert_cast<const vectorized::ColumnNullable&>(*current_column)
- .get_null_map_data();
- none_null_value_size =
- simd::count_zero_num((int8_t*)null_data.data(), null_data.size());
- current_type = storage_type;
+ if (auto storage_type =
+ vectorized::DataTypeFactory::instance().create_data_type(tablet_column);
+ !storage_type->equals(*current_type)) {
+ return Status::InvalidArgument("Storage type {} is not equal to current type {}",
+ storage_type->get_name(), current_type->get_name());
+ }
} else {
tablet_column = generate_column_info(entry);
- none_null_value_size = entry->data.get_non_null_value_size();
- current_column = entry->data.get_finalized_column_ptr()->get_ptr();
- current_type = entry->data.get_least_common_type();
}
ColumnWriterOptions opts;
opts.meta = _opts.footer->add_columns();
@@ -300,10 +290,16 @@
opts.file_writer = _opts.file_writer;
std::unique_ptr<ColumnWriter> writer;
vectorized::schema_util::inherit_column_attributes(*_tablet_column, tablet_column);
+
+ bool need_record_none_null_value_size =
+ (!tablet_column.path_info_ptr()->get_is_typed() ||
+ _tablet_column->variant_enable_typed_paths_to_sparse()) &&
+ !tablet_column.path_info_ptr()->has_nested_part();
+
RETURN_IF_ERROR(_create_column_writer(
current_column_id, tablet_column, _opts.rowset_ctx->tablet_schema,
_opts.index_file_writer, &writer, _subcolumns_indexes[current_column_id], &opts,
- none_null_value_size));
+ none_null_value_size, need_record_none_null_value_size));
_subcolumn_writers.push_back(std::move(writer));
_subcolumn_opts.push_back(opts);
_subcolumn_opts[current_column_id - 1].meta->set_num_rows(num_rows);
@@ -394,7 +390,10 @@
}
}
- RETURN_IF_ERROR(ptr->pick_subcolumns_to_sparse_column(_subcolumns_info));
+ RETURN_IF_ERROR(ptr->convert_typed_path_to_storage_type(_subcolumns_info));
+
+ RETURN_IF_ERROR(ptr->pick_subcolumns_to_sparse_column(
+ _subcolumns_info, _tablet_column->variant_enable_typed_paths_to_sparse()));
#ifndef NDEBUG
ptr->check_consistency();
@@ -542,7 +541,7 @@
//
_tablet_column = column;
_opts = opts;
- _column = vectorized::ColumnVariant::create(true);
+ _column = vectorized::ColumnVariant::create(0);
}
Status VariantSubcolumnWriter::init() {
@@ -575,34 +574,41 @@
const auto& parent_column =
_opts.rowset_ctx->tablet_schema->column_by_uid(_tablet_column->parent_unique_id());
+ TabletColumn flush_column;
+
+ auto path = _tablet_column->path_info_ptr()->copy_pop_front().get_path();
+
+ TabletSchema::SubColumnInfo sub_column_info;
if (ptr->get_subcolumns().get_root()->data.get_least_common_base_type_id() ==
PrimitiveType::INVALID_TYPE) {
auto flush_type = vectorized::DataTypeFactory::instance().create_data_type(
PrimitiveType::TYPE_TINYINT, true /* is_nullable */);
ptr->ensure_root_node_type(flush_type);
}
-
- TabletColumn flush_column = vectorized::schema_util::get_column_by_type(
+ flush_column = vectorized::schema_util::get_column_by_type(
ptr->get_root_type(), _tablet_column->name(),
vectorized::schema_util::ExtraInfo {
.unique_id = -1,
.parent_unique_id = _tablet_column->parent_unique_id(),
.path_info = *_tablet_column->path_info_ptr()});
+
int64_t none_null_value_size = ptr->get_subcolumns().get_root()->data.get_non_null_value_size();
+ bool need_record_none_null_value_size = (!flush_column.path_info_ptr()->get_is_typed()) &&
+ !flush_column.path_info_ptr()->has_nested_part();
ColumnWriterOptions opts = _opts;
// refresh opts and get writer with flush column
vectorized::schema_util::inherit_column_attributes(parent_column, flush_column);
RETURN_IF_ERROR(_create_column_writer(0, flush_column, _opts.rowset_ctx->tablet_schema,
_opts.index_file_writer, &_writer, _indexes, &opts,
- none_null_value_size));
+ none_null_value_size, need_record_none_null_value_size));
+
_opts = opts;
auto olap_data_convertor = std::make_unique<vectorized::OlapBlockDataConvertor>();
int column_id = 0;
RETURN_IF_ERROR(convert_and_write_column(olap_data_convertor.get(), flush_column,
ptr->get_root_type(), _writer.get(),
ptr->get_root()->get_ptr(), ptr->rows(), column_id));
-
_is_finalized = true;
return Status::OK();
}
diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp
index 5bae0de..a1c9436 100644
--- a/be/src/olap/tablet_meta.cpp
+++ b/be/src/olap/tablet_meta.cpp
@@ -471,6 +471,10 @@
column->set_pattern_type(PatternTypePB::MATCH_NAME_GLOB);
}
}
+ if (tcolumn.__isset.variant_enable_typed_paths_to_sparse) {
+ column->set_variant_enable_typed_paths_to_sparse(
+ tcolumn.variant_enable_typed_paths_to_sparse);
+ }
}
void TabletMeta::remove_rowset_delete_bitmap(const RowsetId& rowset_id, const Version& version) {
diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp
index 23966ca4..277fa49 100644
--- a/be/src/olap/tablet_schema.cpp
+++ b/be/src/olap/tablet_schema.cpp
@@ -137,6 +137,79 @@
}
}
+PrimitiveType TabletColumn::get_primitive_type_by_field_type(FieldType type) {
+ switch (type) {
+ case FieldType::OLAP_FIELD_TYPE_UNKNOWN:
+ return PrimitiveType::INVALID_TYPE;
+ case FieldType::OLAP_FIELD_TYPE_NONE:
+ return PrimitiveType::TYPE_NULL;
+ case FieldType::OLAP_FIELD_TYPE_BOOL:
+ return PrimitiveType::TYPE_BOOLEAN;
+ case FieldType::OLAP_FIELD_TYPE_TINYINT:
+ return PrimitiveType::TYPE_TINYINT;
+ case FieldType::OLAP_FIELD_TYPE_SMALLINT:
+ return PrimitiveType::TYPE_SMALLINT;
+ case FieldType::OLAP_FIELD_TYPE_INT:
+ return PrimitiveType::TYPE_INT;
+ case FieldType::OLAP_FIELD_TYPE_BIGINT:
+ return PrimitiveType::TYPE_BIGINT;
+ case FieldType::OLAP_FIELD_TYPE_LARGEINT:
+ return PrimitiveType::TYPE_LARGEINT;
+ case FieldType::OLAP_FIELD_TYPE_FLOAT:
+ return PrimitiveType::TYPE_FLOAT;
+ case FieldType::OLAP_FIELD_TYPE_DOUBLE:
+ return PrimitiveType::TYPE_DOUBLE;
+ case FieldType::OLAP_FIELD_TYPE_VARCHAR:
+ return PrimitiveType::TYPE_VARCHAR;
+ case FieldType::OLAP_FIELD_TYPE_STRING:
+ return PrimitiveType::TYPE_STRING;
+ case FieldType::OLAP_FIELD_TYPE_DATE:
+ return PrimitiveType::TYPE_DATE;
+ case FieldType::OLAP_FIELD_TYPE_DATETIME:
+ return PrimitiveType::TYPE_DATETIME;
+ case FieldType::OLAP_FIELD_TYPE_CHAR:
+ return PrimitiveType::TYPE_CHAR;
+ case FieldType::OLAP_FIELD_TYPE_STRUCT:
+ return PrimitiveType::TYPE_STRUCT;
+ case FieldType::OLAP_FIELD_TYPE_ARRAY:
+ return PrimitiveType::TYPE_ARRAY;
+ case FieldType::OLAP_FIELD_TYPE_MAP:
+ return PrimitiveType::TYPE_MAP;
+ case FieldType::OLAP_FIELD_TYPE_HLL:
+ return PrimitiveType::TYPE_HLL;
+ case FieldType::OLAP_FIELD_TYPE_BITMAP:
+ return PrimitiveType::TYPE_BITMAP;
+ case FieldType::OLAP_FIELD_TYPE_QUANTILE_STATE:
+ return PrimitiveType::TYPE_QUANTILE_STATE;
+ case FieldType::OLAP_FIELD_TYPE_DATEV2:
+ return PrimitiveType::TYPE_DATEV2;
+ case FieldType::OLAP_FIELD_TYPE_DATETIMEV2:
+ return PrimitiveType::TYPE_DATETIMEV2;
+ case FieldType::OLAP_FIELD_TYPE_TIMEV2:
+ return PrimitiveType::TYPE_TIMEV2;
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL32:
+ return PrimitiveType::TYPE_DECIMAL32;
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL64:
+ return PrimitiveType::TYPE_DECIMAL64;
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL128I:
+ return PrimitiveType::TYPE_DECIMAL128I;
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL256:
+ return PrimitiveType::TYPE_DECIMAL256;
+ case FieldType::OLAP_FIELD_TYPE_IPV4:
+ return PrimitiveType::TYPE_IPV4;
+ case FieldType::OLAP_FIELD_TYPE_IPV6:
+ return PrimitiveType::TYPE_IPV6;
+ case FieldType::OLAP_FIELD_TYPE_JSONB:
+ return PrimitiveType::TYPE_JSONB;
+ case FieldType::OLAP_FIELD_TYPE_VARIANT:
+ return PrimitiveType::TYPE_VARIANT;
+ case FieldType::OLAP_FIELD_TYPE_AGG_STATE:
+ return PrimitiveType::TYPE_AGG_STATE;
+ default:
+ return PrimitiveType::INVALID_TYPE;
+ }
+}
+
FieldType TabletColumn::get_field_type_by_string(const std::string& type_str) {
std::string upper_type_str = type_str;
std::transform(type_str.begin(), type_str.end(), upper_type_str.begin(),
@@ -617,6 +690,9 @@
if (column.has_pattern_type()) {
_pattern_type = column.pattern_type();
}
+ if (column.has_variant_enable_typed_paths_to_sparse()) {
+ _variant_enable_typed_paths_to_sparse = column.variant_enable_typed_paths_to_sparse();
+ }
}
TabletColumn TabletColumn::create_materialized_variant_column(
@@ -701,6 +777,7 @@
}
column->set_variant_max_subcolumns_count(_variant_max_subcolumns_count);
column->set_pattern_type(_pattern_type);
+ column->set_variant_enable_typed_paths_to_sparse(_variant_enable_typed_paths_to_sparse);
}
void TabletColumn::add_sub_column(TabletColumn& sub_column) {
diff --git a/be/src/olap/tablet_schema.h b/be/src/olap/tablet_schema.h
index a455617..feb5b70 100644
--- a/be/src/olap/tablet_schema.h
+++ b/be/src/olap/tablet_schema.h
@@ -166,6 +166,7 @@
static std::string get_string_by_aggregation_type(FieldAggregationMethod aggregation_type);
static FieldType get_field_type_by_string(const std::string& str);
static FieldType get_field_type_by_type(PrimitiveType type);
+ static PrimitiveType get_primitive_type_by_field_type(FieldType type);
static FieldAggregationMethod get_aggregation_type_by_string(const std::string& str);
static uint32_t get_field_length_by_type(TPrimitiveType::type type, uint32_t string_length);
bool is_row_store_column() const;
@@ -228,6 +229,14 @@
}
int32_t variant_max_subcolumns_count() const { return _variant_max_subcolumns_count; }
+ void set_variant_enable_typed_paths_to_sparse(bool variant_enable_typed_paths_to_sparse) {
+ _variant_enable_typed_paths_to_sparse = variant_enable_typed_paths_to_sparse;
+ }
+
+ bool variant_enable_typed_paths_to_sparse() const {
+ return _variant_enable_typed_paths_to_sparse;
+ }
+
private:
int32_t _unique_id = -1;
std::string _col_name;
@@ -279,6 +288,7 @@
size_t _num_sparse_columns = 0;
int32_t _variant_max_subcolumns_count = 0;
PatternTypePB _pattern_type = PatternTypePB::MATCH_NAME_GLOB;
+ bool _variant_enable_typed_paths_to_sparse = false;
};
bool operator==(const TabletColumn& a, const TabletColumn& b);
diff --git a/be/src/util/types.h b/be/src/util/types.h
index 7688dd6..4a26f28 100644
--- a/be/src/util/types.h
+++ b/be/src/util/types.h
@@ -43,5 +43,18 @@
memcpy(&value, address, sizeof(int128_t));
return value;
}
+struct PackedUInt128 {
+ // PackedInt128() : value(0) {}
+ PackedUInt128() = default;
+
+ PackedUInt128(const unsigned __int128& value_) { value = value_; }
+ PackedUInt128& operator=(const unsigned __int128& value_) {
+ value = value_;
+ return *this;
+ }
+ PackedUInt128& operator=(const PackedUInt128& rhs) = default;
+
+ uint128_t value;
+} __attribute__((packed));
} // namespace doris
diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp
index 8aa5421..6ac1462 100644
--- a/be/src/vec/columns/column_variant.cpp
+++ b/be/src/vec/columns/column_variant.cpp
@@ -40,6 +40,7 @@
#include <vector>
#include "common/compiler_util.h" // IWYU pragma: keep
+#include "common/config.h"
#include "common/exception.h"
#include "common/logging.h"
#include "common/status.h"
@@ -878,73 +879,159 @@
"Index ({}) for serialize to sparse column is out of range", row);
}
-const char* parse_binary_from_sparse_column(PrimitiveType type, const char* data, Field& res,
+const char* parse_binary_from_sparse_column(FieldType type, const char* data, Field& res,
FieldInfo& info_res) {
- info_res.scalar_type_id = type;
+ info_res.scalar_type_id = TabletColumn::get_primitive_type_by_field_type(type);
const char* end = data;
switch (type) {
- case PrimitiveType::TYPE_STRING: {
- const size_t size = *reinterpret_cast<const size_t*>(data);
+ case FieldType::OLAP_FIELD_TYPE_STRING: {
+ size_t size = *reinterpret_cast<const size_t*>(data);
data += sizeof(size_t);
res = Field::create_field<TYPE_STRING>(String(data, size));
end = data + size;
break;
}
- case PrimitiveType::TYPE_TINYINT: {
- res = Field::create_field<TYPE_TINYINT>(*reinterpret_cast<const Int8*>(data));
+ case FieldType::OLAP_FIELD_TYPE_TINYINT: {
+ res = Field::create_field<TYPE_TINYINT>(Int8(*reinterpret_cast<const Int8*>(data)));
end = data + sizeof(Int8);
break;
}
- case PrimitiveType::TYPE_SMALLINT: {
- res = Field::create_field<TYPE_SMALLINT>(*reinterpret_cast<const Int16*>(data));
+ case FieldType::OLAP_FIELD_TYPE_SMALLINT: {
+ res = Field::create_field<TYPE_SMALLINT>(Int16(*reinterpret_cast<const Int16*>(data)));
end = data + sizeof(Int16);
break;
}
- case PrimitiveType::TYPE_INT: {
- res = Field::create_field<TYPE_INT>(*reinterpret_cast<const Int32*>(data));
+ case FieldType::OLAP_FIELD_TYPE_INT: {
+ res = Field::create_field<TYPE_INT>(Int32(*reinterpret_cast<const Int32*>(data)));
end = data + sizeof(Int32);
break;
}
- case PrimitiveType::TYPE_BIGINT: {
- res = Field::create_field<TYPE_BIGINT>(*reinterpret_cast<const Int64*>(data));
+ case FieldType::OLAP_FIELD_TYPE_BIGINT: {
+ res = Field::create_field<TYPE_BIGINT>(Int64(*reinterpret_cast<const Int64*>(data)));
end = data + sizeof(Int64);
break;
}
- case PrimitiveType::TYPE_FLOAT: {
- res = Field::create_field<TYPE_FLOAT>(*reinterpret_cast<const Float32*>(data));
+ case FieldType::OLAP_FIELD_TYPE_LARGEINT: {
+ res = Field::create_field<TYPE_LARGEINT>(
+ Int128(reinterpret_cast<const PackedInt128*>(data)->value));
+ end = data + sizeof(PackedInt128);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_FLOAT: {
+ res = Field::create_field<TYPE_FLOAT>(Float32(*reinterpret_cast<const Float32*>(data)));
end = data + sizeof(Float32);
break;
}
- case PrimitiveType::TYPE_DOUBLE: {
- res = Field::create_field<TYPE_DOUBLE>(*reinterpret_cast<const Float64*>(data));
+ case FieldType::OLAP_FIELD_TYPE_DOUBLE: {
+ res = Field::create_field<TYPE_DOUBLE>(Float64(*reinterpret_cast<const Float64*>(data)));
end = data + sizeof(Float64);
break;
}
- case PrimitiveType::TYPE_JSONB: {
+ case FieldType::OLAP_FIELD_TYPE_JSONB: {
size_t size = *reinterpret_cast<const size_t*>(data);
data += sizeof(size_t);
res = Field::create_field<TYPE_JSONB>(JsonbField(data, size));
end = data + size;
break;
}
- case PrimitiveType::INVALID_TYPE: {
- res = Field();
- end = data;
- break;
- }
- case PrimitiveType::TYPE_ARRAY: {
+ case FieldType::OLAP_FIELD_TYPE_ARRAY: {
const size_t size = *reinterpret_cast<const size_t*>(data);
data += sizeof(size_t);
res = Field::create_field<TYPE_ARRAY>(Array(size));
auto& array = res.get<Array>();
info_res.num_dimensions++;
+ FieldType nested_filed_type = FieldType::OLAP_FIELD_TYPE_NONE;
for (size_t i = 0; i < size; ++i) {
Field nested_field;
const auto nested_type =
- static_cast<const PrimitiveType>(*reinterpret_cast<const uint8_t*>(data++));
+ static_cast<FieldType>(*reinterpret_cast<const uint8_t*>(data++));
data = parse_binary_from_sparse_column(nested_type, data, nested_field, info_res);
array[i] = std::move(nested_field);
+ if (nested_type != FieldType::OLAP_FIELD_TYPE_NONE) {
+ nested_filed_type = nested_type;
+ }
}
+ info_res.scalar_type_id = TabletColumn::get_primitive_type_by_field_type(nested_filed_type);
+ end = data;
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_IPV4: {
+ res = Field::create_field<TYPE_IPV4>(IPv4(*reinterpret_cast<const IPv4*>(data)));
+ end = data + sizeof(IPv4);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_IPV6: {
+ res = Field::create_field<TYPE_IPV6>(reinterpret_cast<const PackedUInt128*>(data)->value);
+ end = data + sizeof(PackedUInt128);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_DATEV2: {
+ res = Field::create_field<TYPE_DATEV2>(*reinterpret_cast<const UInt32*>(data));
+ end = data + sizeof(UInt32);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_DATETIMEV2: {
+ const uint8_t scale = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ res = Field::create_field<TYPE_DATETIMEV2>(*reinterpret_cast<const UInt64*>(data));
+ info_res.precision = -1;
+ info_res.scale = static_cast<int>(scale);
+ end = data + sizeof(UInt64);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL32: {
+ const uint8_t precision = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ const uint8_t scale = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ res = Field::create_field<TYPE_DECIMAL32>(Decimal32(*reinterpret_cast<const Int32*>(data)));
+ info_res.precision = static_cast<int>(precision);
+ info_res.scale = static_cast<int>(scale);
+ end = data + sizeof(Int32);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL64: {
+ const uint8_t precision = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ const uint8_t scale = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ res = Field::create_field<TYPE_DECIMAL64>(Decimal64(*reinterpret_cast<const Int64*>(data)));
+ info_res.precision = static_cast<int>(precision);
+ info_res.scale = static_cast<int>(scale);
+ end = data + sizeof(Int64);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL128I: {
+ const uint8_t precision = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ const uint8_t scale = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ res = Field::create_field<TYPE_DECIMAL128I>(
+ Decimal128V3(reinterpret_cast<const PackedInt128*>(data)->value));
+ info_res.precision = static_cast<int>(precision);
+ info_res.scale = static_cast<int>(scale);
+ end = data + sizeof(PackedInt128);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL256: {
+ const uint8_t precision = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ const uint8_t scale = *reinterpret_cast<const uint8_t*>(data);
+ data += sizeof(uint8_t);
+ res = Field::create_field<TYPE_DECIMAL256>(
+ Decimal256(*reinterpret_cast<const wide::Int256*>(data)));
+ info_res.precision = static_cast<int>(precision);
+ info_res.scale = static_cast<int>(scale);
+ end = data + sizeof(wide::Int256);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_BOOL: {
+ res = Field::create_field<TYPE_BOOLEAN>(*reinterpret_cast<const uint8_t*>(data));
+ end = data + sizeof(uint8_t);
+ break;
+ }
+ case FieldType::OLAP_FIELD_TYPE_NONE: {
+ res = Field();
end = data;
break;
}
@@ -960,16 +1047,18 @@
const auto& data_ref = value->get_data_at(row);
const char* data = data_ref.data;
DCHECK(data_ref.size > 1);
- const auto type = static_cast<const PrimitiveType>(*reinterpret_cast<const uint8_t*>(data++));
+ const FieldType type = static_cast<FieldType>(*reinterpret_cast<const uint8_t*>(data++));
Field res;
FieldInfo info_res = {
- .scalar_type_id = type,
+ .scalar_type_id = TabletColumn::get_primitive_type_by_field_type(type),
.have_nulls = false,
.need_convert = false,
.num_dimensions = 0,
};
const char* end = parse_binary_from_sparse_column(type, data, res, info_res);
- DCHECK_EQ(end - data_ref.data, data_ref.size);
+ DCHECK_EQ(end - data_ref.data, data_ref.size)
+ << "FieldType: " << (int)type << " data_ref.size: " << data_ref.size << " end: " << end
+ << " data: " << data;
return {std::move(res), std::move(info_res)};
}
@@ -1006,10 +1095,10 @@
for (size_t i = offset; i != end; ++i) {
const StringRef path_data = path->get_data_at(i);
auto data = ColumnVariant::deserialize_from_sparse_column(value, i);
- // TODO support decimal type or etc...
- object.try_emplace(PathInData(path_data), FieldWithDataType(std::move(data.first), -1, -1,
- data.second.scalar_type_id,
- data.second.num_dimensions));
+ object.try_emplace(
+ PathInData(path_data),
+ FieldWithDataType(std::move(data.first), data.second.precision, data.second.scale,
+ data.second.scalar_type_id, data.second.num_dimensions));
}
if (object.empty()) {
@@ -1078,14 +1167,14 @@
if (subcolumns.get_root() == nullptr || path.empty()) {
throw Exception(ErrorCode::INTERNAL_ERROR, "column object has no root or path is empty");
}
- if (path.get_is_typed()) {
+
+ if (path.get_is_typed() || path.has_nested_part()) {
return add_sub_column(path, num_rows);
}
- if (path.has_nested_part()) {
- return add_sub_column(path, num_rows);
- }
- if (!_max_subcolumns_count ||
- (subcolumns.size() - typed_path_count - nested_path_count) < _max_subcolumns_count + 1) {
+
+ // 1 for root, nested_path_count for nested path
+ int subcolumns_size = subcolumns.size() - nested_path_count - 1;
+ if (!_max_subcolumns_count || subcolumns_size < _max_subcolumns_count) {
return add_sub_column(path, num_rows);
}
@@ -1111,7 +1200,6 @@
DCHECK(subcolumn != nullptr);
subcolumn->insert_range_from(entry->data, start, length);
} else {
- CHECK(!entry->path.get_is_typed());
CHECK(!entry->path.has_nested_part());
src_path_and_subcoumn_for_sparse_column.emplace(entry->path.get_path(), entry->data);
}
@@ -1863,14 +1951,53 @@
ENABLE_CHECK_CONSISTENCY(this);
}
-Status ColumnVariant::pick_subcolumns_to_sparse_column(
+Status ColumnVariant::convert_typed_path_to_storage_type(
const std::unordered_map<std::string, TabletSchema::SubColumnInfo>& typed_paths) {
+ for (auto&& entry : subcolumns) {
+ if (auto it = typed_paths.find(entry->path.get_path()); it != typed_paths.end()) {
+ CHECK(entry->data.is_finalized());
+ vectorized::DataTypePtr storage_type =
+ vectorized::DataTypeFactory::instance().create_data_type(it->second.column);
+ vectorized::DataTypePtr finalized_type = entry->data.get_least_common_type();
+ auto current_column = entry->data.get_finalized_column_ptr()->get_ptr();
+ if (!storage_type->equals(*finalized_type)) {
+ RETURN_IF_ERROR(vectorized::schema_util::cast_column(
+ {current_column, finalized_type, ""}, storage_type, ¤t_column));
+ }
+ VLOG_DEBUG << "convert " << entry->path.get_path() << " from type"
+ << entry->data.get_least_common_type()->get_name() << " to "
+ << storage_type->get_name();
+ entry->data.data[0] = current_column;
+ entry->data.data_types[0] = storage_type;
+ entry->data.data_serdes[0] = Subcolumn::generate_data_serdes(storage_type, false);
+ entry->data.least_common_type = Subcolumn::LeastCommonType {storage_type, false};
+ }
+ }
+ return Status::OK();
+}
+
+Status ColumnVariant::pick_subcolumns_to_sparse_column(
+ const std::unordered_map<std::string, TabletSchema::SubColumnInfo>& typed_paths,
+ bool variant_enable_typed_paths_to_sparse) {
DCHECK(_max_subcolumns_count >= 0) << "max subcolumns count is: " << _max_subcolumns_count;
+ // no need to pick subcolumns to sparse column, all subcolumns will be picked
+ if (_max_subcolumns_count == 0) {
+ return Status::OK();
+ }
+
// root column must be exsit in subcolumns
- bool need_pick_subcolumn_to_sparse_column =
- (_max_subcolumns_count && (subcolumns.size() - typed_paths.size() - nested_path_count) >
- _max_subcolumns_count + 1);
+ // nested path count is the count of nested columns
+ int64_t current_subcolumns_count = subcolumns.size() - 1 - nested_path_count;
+
+ // 1000 count
+ // b : 1500 typed path + 700 subcolumns -> 1200 count ()
+ if (!variant_enable_typed_paths_to_sparse) {
+ current_subcolumns_count -= typed_paths.size();
+ }
+
+ bool need_pick_subcolumn_to_sparse_column = current_subcolumns_count > _max_subcolumns_count;
+
if (!need_pick_subcolumn_to_sparse_column) {
return Status::OK();
}
@@ -1893,8 +2020,8 @@
if (entry->data.is_root) {
continue;
}
- // typed column or nested column will be picked as sub column and ignore none null value size
- if (typed_paths.find(entry->path.get_path()) != typed_paths.end() ||
+ if ((!variant_enable_typed_paths_to_sparse &&
+ typed_paths.find(entry->path.get_path()) != typed_paths.end()) ||
entry->path.has_nested_part()) {
VLOG_DEBUG << "pick " << entry->path.get_path() << " as typed column";
new_subcolumns.add(entry->path, entry->data);
@@ -1928,7 +2055,6 @@
} else if (none_null_value_sizes.find(entry->path.get_path()) !=
none_null_value_sizes.end()) {
VLOG_DEBUG << "pick " << entry->path.get_path() << " as sparse column";
- CHECK(!entry->path.get_is_typed());
CHECK(!entry->path.has_nested_part());
remaing_subcolumns.emplace(entry->path.get_path(), entry->data);
}
diff --git a/be/src/vec/columns/column_variant.h b/be/src/vec/columns/column_variant.h
index c1f7441..e5550db 100644
--- a/be/src/vec/columns/column_variant.h
+++ b/be/src/vec/columns/column_variant.h
@@ -577,6 +577,10 @@
size_t row);
Status pick_subcolumns_to_sparse_column(
+ const std::unordered_map<std::string, TabletSchema::SubColumnInfo>& typed_paths,
+ bool variant_enable_typed_paths_to_sparse);
+
+ Status convert_typed_path_to_storage_type(
const std::unordered_map<std::string, TabletSchema::SubColumnInfo>& typed_paths);
void set_max_subcolumns_count(int32_t max_subcolumns_count) {
diff --git a/be/src/vec/common/schema_util.cpp b/be/src/vec/common/schema_util.cpp
index c160f4b..9cd8ae9 100644
--- a/be/src/vec/common/schema_util.cpp
+++ b/be/src/vec/common/schema_util.cpp
@@ -281,7 +281,7 @@
TabletSchemaSPtr& common_schema, bool update_sparse_column,
int32_t variant_col_unique_id,
const std::map<std::string, TabletColumnPtr>& typed_columns,
- std::set<PathInData>* path_set = nullptr) {
+ std::set<PathInData>* path_set) {
PathsInData tuple_paths;
DataTypes tuple_types;
CHECK(common_schema.use_count() == 1);
@@ -857,6 +857,9 @@
const TabletColumnPtr parent_column,
TabletSchemaSPtr& output_schema,
TabletSchema::PathsSetInfo& paths_set_info) {
+ if (parent_column->variant_enable_typed_paths_to_sparse()) {
+ return Status::OK();
+ }
for (const auto& path : typed_paths) {
TabletSchema::SubColumnInfo sub_column_info;
if (generate_sub_column_info(*target, parent_column->unique_id(), path, &sub_column_info)) {
@@ -926,9 +929,18 @@
// 1. this path has no data type in segments
// 2. this path is in sparse paths
// 3. the sparse paths are too much
- if (find_data_types == path_to_data_types.end() || find_data_types->second.empty() ||
- sparse_paths.find(std::string(subpath)) != sparse_paths.end() ||
- sparse_paths.size() >= config::variant_max_sparse_column_statistics_size) {
+ TabletSchema::SubColumnInfo sub_column_info;
+ if (parent_column->variant_enable_typed_paths_to_sparse() &&
+ generate_sub_column_info(*target, parent_column->unique_id(), std::string(subpath),
+ &sub_column_info)) {
+ vectorized::schema_util::inherit_column_attributes(*parent_column,
+ sub_column_info.column);
+ output_schema->append_column(sub_column_info.column);
+ paths_set_info.subcolumn_indexes.emplace(subpath, std::move(sub_column_info.indexes));
+ VLOG_DEBUG << "append typed column " << subpath;
+ } else if (find_data_types == path_to_data_types.end() || find_data_types->second.empty() ||
+ sparse_paths.find(std::string(subpath)) != sparse_paths.end() ||
+ sparse_paths.size() >= config::variant_max_sparse_column_statistics_size) {
TabletColumn subcolumn;
subcolumn.set_name(column_name);
subcolumn.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT);
@@ -937,6 +949,8 @@
subcolumn.set_aggregation_method(parent_column->aggregation());
subcolumn.set_variant_max_subcolumns_count(
parent_column->variant_max_subcolumns_count());
+ subcolumn.set_variant_enable_typed_paths_to_sparse(
+ parent_column->variant_enable_typed_paths_to_sparse());
subcolumn.set_is_nullable(true);
output_schema->append_column(subcolumn);
VLOG_DEBUG << "append sub column " << subpath << " data type "
@@ -992,7 +1006,6 @@
RETURN_IF_ERROR(get_compaction_typed_columns(
target, uid_to_variant_extended_info[column->unique_id()].typed_paths, column,
output_schema, uid_to_paths_set_info[column->unique_id()]));
-
// 2. append nested columns
RETURN_IF_ERROR(get_compaction_nested_columns(
uid_to_variant_extended_info[column->unique_id()].nested_paths,
@@ -1211,8 +1224,9 @@
to_column->set_name(parent_column.name_lower_case() + "." + path);
to_column->set_type(from_column.type());
to_column->set_parent_unique_id(parent_column.unique_id());
+ bool is_typed = parent_column.variant_enable_typed_paths_to_sparse() ? false : true;
to_column->set_path_info(
- PathInData(parent_column.name_lower_case() + "." + path, true));
+ PathInData(parent_column.name_lower_case() + "." + path, is_typed));
to_column->set_aggregation_method(parent_column.aggregation());
to_column->set_is_nullable(true);
to_column->set_precision(from_column.precision());
diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h
index c90794c..60740f4 100644
--- a/be/src/vec/common/schema_util.h
+++ b/be/src/vec/common/schema_util.h
@@ -114,11 +114,11 @@
// with a speicified variant column's unique id
void update_least_common_schema(const std::vector<TabletSchemaSPtr>& schemas,
TabletSchemaSPtr& common_schema, int32_t variant_col_unique_id,
- std::unordered_set<PathInData, PathInData::Hash>* path_set);
+ std::set<PathInData>* path_set);
void update_least_sparse_column(const std::vector<TabletSchemaSPtr>& schemas,
TabletSchemaSPtr& common_schema, int32_t variant_col_unique_id,
- const std::unordered_set<PathInData, PathInData::Hash>& path_set);
+ const std::set<PathInData>& path_set);
// inherit attributes like index/agg info from it's parent column
void inherit_column_attributes(TabletSchemaSPtr& schema);
@@ -185,4 +185,28 @@
bool inherit_index(const std::vector<const TabletIndex*>& parent_indexes,
TabletIndexes& sub_column_indexes, const segment_v2::ColumnMetaPB& column_pb);
+void get_compaction_subcolumns(TabletSchema::PathsSetInfo& paths_set_info,
+ const TabletColumnPtr parent_column, const TabletSchemaSPtr& target,
+ const PathToDataTypes& path_to_data_types,
+ const std::unordered_set<std::string>& sparse_paths,
+ TabletSchemaSPtr& output_schema);
+
+void update_least_schema_internal(const std::map<PathInData, DataTypes>& subcolumns_types,
+ TabletSchemaSPtr& common_schema, bool update_sparse_column,
+ int32_t variant_col_unique_id,
+ const std::map<std::string, TabletColumnPtr>& typed_columns,
+ std::set<PathInData>* path_set = nullptr);
+
+Status get_compaction_typed_columns(const TabletSchemaSPtr& target,
+ const std::unordered_set<std::string>& typed_paths,
+ const TabletColumnPtr parent_column,
+ TabletSchemaSPtr& output_schema,
+ TabletSchema::PathsSetInfo& paths_set_info);
+
+Status get_compaction_nested_columns(
+ const std::unordered_set<vectorized::PathInData, vectorized::PathInData::Hash>&
+ nested_paths,
+ const PathToDataTypes& path_to_data_types, const TabletColumnPtr parent_column,
+ TabletSchemaSPtr& output_schema, TabletSchema::PathsSetInfo& paths_set_info);
+
} // namespace doris::vectorized::schema_util
diff --git a/be/src/vec/core/field.h b/be/src/vec/core/field.h
index 32a7511..2a18120 100644
--- a/be/src/vec/core/field.h
+++ b/be/src/vec/core/field.h
@@ -648,11 +648,18 @@
using Type = Int128;
};
+template <>
+struct NearestFieldTypeImpl<PackedUInt128> {
+ using Type = IPv6;
+};
+
template <typename T>
decltype(auto) cast_to_nearest_field_type(T&& x) {
using U = NearestFieldType<std::decay_t<T>>;
if constexpr (std::is_same_v<PackedInt128, std::decay_t<T>>) {
return U(x.value);
+ } else if constexpr (std::is_same_v<PackedUInt128, std::decay_t<T>>) {
+ return U(x.value);
} else if constexpr (std::is_same_v<std::decay_t<T>, U>) {
return std::forward<T>(x);
} else {
diff --git a/be/src/vec/data_types/data_type_variant.cpp b/be/src/vec/data_types/data_type_variant.cpp
index bcbf21c..12b8592 100644
--- a/be/src/vec/data_types/data_type_variant.cpp
+++ b/be/src/vec/data_types/data_type_variant.cpp
@@ -52,14 +52,9 @@
: _max_subcolumns_count(max_subcolumns_count) {
name = fmt::format("Variant(max subcolumns count = {})", max_subcolumns_count);
}
+
bool DataTypeVariant::equals(const IDataType& rhs) const {
auto rhs_type = typeid_cast<const DataTypeVariant*>(&rhs);
- if (rhs_type && _max_subcolumns_count != rhs_type->variant_max_subcolumns_count()) {
- VLOG_DEBUG << "_max_subcolumns_count is" << _max_subcolumns_count
- << "rhs_type->variant_max_subcolumns_count()"
- << rhs_type->variant_max_subcolumns_count();
- return false;
- }
return rhs_type && _max_subcolumns_count == rhs_type->variant_max_subcolumns_count();
}
diff --git a/be/src/vec/data_types/serde/data_type_array_serde.cpp b/be/src/vec/data_types/serde/data_type_array_serde.cpp
index 2df9cd7..04237aa 100644
--- a/be/src/vec/data_types/serde/data_type_array_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_array_serde.cpp
@@ -429,7 +429,7 @@
void DataTypeArraySerDe::write_one_cell_to_binary(const IColumn& src_column,
ColumnString::Chars& chars,
int64_t row_num) const {
- const auto type = static_cast<uint8_t>(PrimitiveType::TYPE_ARRAY);
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_ARRAY);
const size_t old_size = chars.size();
const size_t new_size = old_size + sizeof(uint8_t) + sizeof(size_t);
chars.resize(new_size);
diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
index d627302..40e185f 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
@@ -1208,6 +1208,25 @@
UInt64 val = col.get_element(sz - 1);
col.insert_many_vals(val, times);
}
+
+void DataTypeDateTimeV2SerDe::write_one_cell_to_binary(const IColumn& src_column,
+ ColumnString::Chars& chars,
+ int64_t row_num) const {
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_DATETIMEV2);
+ const auto& data_ref =
+ assert_cast<const ColumnVector<TYPE_DATETIMEV2>&>(src_column).get_data_at(row_num);
+ const uint8_t sc = static_cast<uint8_t>(_scale);
+
+ const size_t old_size = chars.size();
+ const size_t new_size = old_size + sizeof(uint8_t) + sizeof(uint8_t) + data_ref.size;
+ chars.resize(new_size);
+ memcpy(chars.data() + old_size, reinterpret_cast<const char*>(&type), sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t), reinterpret_cast<const char*>(&sc),
+ sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t) + sizeof(uint8_t), data_ref.data,
+ data_ref.size);
+}
+
// NOLINTEND(readability-function-cognitive-complexity)
// NOLINTEND(readability-function-size)
@@ -1260,5 +1279,4 @@
const DataTypeDecimal128::ColumnType& decimal_col, IColumn& target_col) const;
template Status DataTypeDateTimeV2SerDe::from_decimal_strict_mode_batch<DataTypeDecimal256>(
const DataTypeDecimal256::ColumnType& decimal_col, IColumn& target_col) const;
-
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.h b/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
index aa2c646..5f87a06 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
@@ -101,6 +101,9 @@
const FormatOptions& options) const override;
void insert_column_last_value_multiple_times(IColumn& column, uint64_t times) const override;
+ void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
+ int64_t row_num) const override;
+
private:
template <bool is_binary_format>
Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
diff --git a/be/src/vec/data_types/serde/data_type_datev2_serde.cpp b/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
index 86f158f..7f98343 100644
--- a/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
@@ -208,6 +208,21 @@
col.insert_many_vals(val, times);
}
+void DataTypeDateV2SerDe::write_one_cell_to_binary(const IColumn& src_column,
+ ColumnString::Chars& chars,
+ int64_t row_num) const {
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_DATEV2);
+ const auto& data_ref =
+ assert_cast<const ColumnVector<TYPE_DATEV2>&>(src_column).get_data_at(row_num);
+
+ const size_t old_size = chars.size();
+ const size_t new_size = old_size + sizeof(uint8_t) + data_ref.size;
+ chars.resize(new_size);
+
+ memcpy(chars.data() + old_size, reinterpret_cast<const char*>(&type), sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t), data_ref.data, data_ref.size);
+}
+
// NOLINTBEGIN(readability-function-size)
// NOLINTBEGIN(readability-function-cognitive-complexity)
Status DataTypeDateV2SerDe::from_string_batch(const ColumnString& col_str, ColumnNullable& col_res,
diff --git a/be/src/vec/data_types/serde/data_type_datev2_serde.h b/be/src/vec/data_types/serde/data_type_datev2_serde.h
index 73e3df5..da89d83 100644
--- a/be/src/vec/data_types/serde/data_type_datev2_serde.h
+++ b/be/src/vec/data_types/serde/data_type_datev2_serde.h
@@ -99,6 +99,9 @@
void insert_column_last_value_multiple_times(IColumn& column, uint64_t times) const override;
+ void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
+ int64_t row_num) const override;
+
private:
template <bool is_binary_format>
Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
index 70d2e9c..d72d47f 100644
--- a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
@@ -24,6 +24,7 @@
#include "arrow/type.h"
#include "common/consts.h"
+#include "olap/tablet_schema.h"
#include "util/jsonb_document.h"
#include "util/jsonb_writer.h"
#include "vec/columns/column.h"
@@ -548,6 +549,31 @@
}
}
+template <PrimitiveType T>
+void DataTypeDecimalSerDe<T>::write_one_cell_to_binary(const IColumn& src_column,
+ ColumnString::Chars& chars,
+ int64_t row_num) const {
+ const uint8_t type = (const uint8_t)TabletColumn::get_field_type_by_type(T);
+ const auto& data_ref = assert_cast<const ColumnDecimal<T>&>(src_column).get_data_at(row_num);
+ const auto& prec = static_cast<uint8_t>(precision);
+ const auto& sc = static_cast<uint8_t>(scale);
+
+ const size_t old_size = chars.size();
+ // FieldType + precision + scale + value
+ const size_t new_size =
+ old_size + sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint8_t) + data_ref.size;
+ chars.resize(new_size);
+
+ // FieldType + precision + scale + value
+ memcpy(chars.data() + old_size, reinterpret_cast<const char*>(&type), sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t), reinterpret_cast<const char*>(&prec),
+ sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t) + sizeof(uint8_t),
+ reinterpret_cast<const char*>(&sc), sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint8_t),
+ data_ref.data, data_ref.size);
+}
+
template class DataTypeDecimalSerDe<TYPE_DECIMAL32>;
template class DataTypeDecimalSerDe<TYPE_DECIMAL64>;
template class DataTypeDecimalSerDe<TYPE_DECIMAL128I>;
diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.h b/be/src/vec/data_types/serde/data_type_decimal_serde.h
index 8bdbccd..3cc2afc 100644
--- a/be/src/vec/data_types/serde/data_type_decimal_serde.h
+++ b/be/src/vec/data_types/serde/data_type_decimal_serde.h
@@ -112,6 +112,9 @@
void insert_column_last_value_multiple_times(IColumn& column, uint64_t times) const override;
+ void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
+ int64_t row_num) const override;
+
private:
template <bool is_binary_format>
Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
diff --git a/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp b/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
index 463c91f..bf5d2cd 100644
--- a/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
@@ -148,4 +148,19 @@
col_data.insert(raw_data, raw_data + row_count);
return Status::OK();
}
+
+void DataTypeIPv4SerDe::write_one_cell_to_binary(const IColumn& src_column,
+ ColumnString::Chars& chars,
+ int64_t row_num) const {
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_IPV4);
+ const auto& data_ref = assert_cast<const ColumnIPv4&>(src_column).get_data_at(row_num);
+
+ const size_t old_size = chars.size();
+ const size_t new_size = old_size + sizeof(uint8_t) + data_ref.size;
+ chars.resize(new_size);
+
+ memcpy(chars.data() + old_size, reinterpret_cast<const char*>(&type), sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t), data_ref.data, data_ref.size);
+}
+
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_ipv4_serde.h b/be/src/vec/data_types/serde/data_type_ipv4_serde.h
index 24cc66f..f03e06b 100644
--- a/be/src/vec/data_types/serde/data_type_ipv4_serde.h
+++ b/be/src/vec/data_types/serde/data_type_ipv4_serde.h
@@ -59,6 +59,9 @@
Status read_column_from_arrow(IColumn& column, const arrow::Array* arrow_array, int64_t start,
int64_t end, const cctz::time_zone& ctz) const override;
+ void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
+ int64_t row_num) const override;
+
private:
template <bool is_binary_format>
Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
diff --git a/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp b/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
index 656897f..cc9ca27 100644
--- a/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
@@ -250,4 +250,18 @@
return Status::OK();
}
+void DataTypeIPv6SerDe::write_one_cell_to_binary(const IColumn& src_column,
+ ColumnString::Chars& chars,
+ int64_t row_num) const {
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_IPV6);
+ const auto& data_ref = assert_cast<const ColumnIPv6&>(src_column).get_data_at(row_num);
+
+ const size_t old_size = chars.size();
+ const size_t new_size = old_size + sizeof(uint8_t) + data_ref.size;
+ chars.resize(new_size);
+
+ memcpy(chars.data() + old_size, reinterpret_cast<const char*>(&type), sizeof(uint8_t));
+ memcpy(chars.data() + old_size + sizeof(uint8_t), data_ref.data, data_ref.size);
+}
+
} // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_ipv6_serde.h b/be/src/vec/data_types/serde/data_type_ipv6_serde.h
index 85e2f81..9895b75 100644
--- a/be/src/vec/data_types/serde/data_type_ipv6_serde.h
+++ b/be/src/vec/data_types/serde/data_type_ipv6_serde.h
@@ -69,6 +69,9 @@
void write_one_cell_to_jsonb(const IColumn& column, JsonbWriterT<JsonbOutStream>& result,
Arena& mem_pool, int unique_id, int64_t row_num) const override;
+ void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
+ int64_t row_num) const override;
+
private:
template <bool is_binary_format>
Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
index 4d1a3d4..447bf5f 100644
--- a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
@@ -287,7 +287,7 @@
void DataTypeJsonbSerDe::write_one_cell_to_binary(const IColumn& src_column,
ColumnString::Chars& chars,
int64_t row_num) const {
- const uint8_t type = static_cast<uint8_t>(PrimitiveType::TYPE_JSONB);
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_JSONB);
const auto& col = assert_cast<const ColumnString&>(src_column);
const auto& data_ref = col.get_data_at(row_num);
size_t data_size = data_ref.size;
diff --git a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
index 387ab4f..c684e10 100644
--- a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
@@ -385,7 +385,7 @@
int64_t row_num) const {
auto& col = assert_cast<const ColumnNullable&>(src_column);
if (col.is_null_at(row_num)) [[unlikely]] {
- const uint8_t type = static_cast<uint8_t>(PrimitiveType::INVALID_TYPE);
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_NONE);
const size_t old_size = chars.size();
const size_t new_size = old_size + sizeof(uint8_t);
chars.resize(new_size);
diff --git a/be/src/vec/data_types/serde/data_type_number_serde.cpp b/be/src/vec/data_types/serde/data_type_number_serde.cpp
index 5c2273c..82a9eb4 100644
--- a/be/src/vec/data_types/serde/data_type_number_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_number_serde.cpp
@@ -22,6 +22,7 @@
#include "common/exception.h"
#include "common/status.h"
#include "gutil/strings/numbers.h"
+#include "olap/tablet_schema.h"
#include "util/jsonb_document.h"
#include "util/jsonb_writer.h"
#include "util/mysql_global.h"
@@ -664,7 +665,7 @@
void DataTypeNumberSerDe<T>::write_one_cell_to_binary(const IColumn& src_column,
ColumnString::Chars& chars,
int64_t row_num) const {
- const auto type = static_cast<uint8_t>(T);
+ const uint8_t type = (const uint8_t)TabletColumn::get_field_type_by_type(T);
const auto& data_ref = assert_cast<const ColumnType&>(src_column).get_data_at(row_num);
const size_t old_size = chars.size();
diff --git a/be/src/vec/data_types/serde/data_type_string_serde.h b/be/src/vec/data_types/serde/data_type_string_serde.h
index 7d0cf20..4119c7b 100644
--- a/be/src/vec/data_types/serde/data_type_string_serde.h
+++ b/be/src/vec/data_types/serde/data_type_string_serde.h
@@ -210,7 +210,7 @@
void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
int64_t row_num) const override {
- const uint8_t type = static_cast<uint8_t>(PrimitiveType::TYPE_STRING);
+ const uint8_t type = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_STRING);
const auto& col = assert_cast<const ColumnType&>(src_column);
const auto& data_ref = col.get_data_at(row_num);
const size_t data_size = data_ref.size;
diff --git a/be/src/vec/exprs/vmatch_predicate.cpp b/be/src/vec/exprs/vmatch_predicate.cpp
index cfa99cf..b1d68fc 100644
--- a/be/src/vec/exprs/vmatch_predicate.cpp
+++ b/be/src/vec/exprs/vmatch_predicate.cpp
@@ -69,6 +69,7 @@
_inverted_index_ctx->lower_case = INVERTED_INDEX_PARSER_FALSE;
}
_inverted_index_ctx->stop_words = node.match_predicate.parser_stopwords;
+ _inverted_index_ctx->custom_analyzer = node.match_predicate.custom_analyzer;
_analyzer = inverted_index::InvertedIndexAnalyzer::create_analyzer(_inverted_index_ctx.get());
_inverted_index_ctx->analyzer = _analyzer.get();
}
diff --git a/be/test/expected_result/vec/data_types/column_object_to_string.out b/be/test/expected_result/vec/data_types/column_object_to_string.out
index e301e6e..25e73c5 100644
--- a/be/test/expected_result/vec/data_types/column_object_to_string.out
+++ b/be/test/expected_result/vec/data_types/column_object_to_string.out
@@ -9,8 +9,8 @@
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 8
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 9
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 10
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 11
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 12
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 13
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 14
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}}
\ No newline at end of file
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 11
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 12
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 13
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 14
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}}
\ No newline at end of file
diff --git a/be/test/expected_result/vec/data_types/column_object_to_string_batch.out b/be/test/expected_result/vec/data_types/column_object_to_string_batch.out
index e301e6e..25e73c5 100644
--- a/be/test/expected_result/vec/data_types/column_object_to_string_batch.out
+++ b/be/test/expected_result/vec/data_types/column_object_to_string_batch.out
@@ -9,8 +9,8 @@
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 8
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 9
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 10
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 11
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 12
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 13
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 14
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}}
\ No newline at end of file
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 11
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 12
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 13
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 14
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}}
\ No newline at end of file
diff --git a/be/test/expected_result/vec/data_types/column_object_to_string_with_buffer.out b/be/test/expected_result/vec/data_types/column_object_to_string_with_buffer.out
index e301e6e..25e73c5 100644
--- a/be/test/expected_result/vec/data_types/column_object_to_string_with_buffer.out
+++ b/be/test/expected_result/vec/data_types/column_object_to_string_with_buffer.out
@@ -9,8 +9,8 @@
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 8
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 9
{"v":{"a":20,"b":"str","b":{"d":[20, 20]},"c":[20, 20],"c":{"d":"str"},"d":{"d":[20, 20]},"e":"str","f":["str", "str"]}};variant in row: 10
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 11
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 12
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 13
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}};variant in row: 14
-{"v":{"a":20,"b":20,"b":{"d":["str", "str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str", "str"]},"e":"str","f":["str", "str"]}}
\ No newline at end of file
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 11
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 12
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 13
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}};variant in row: 14
+{"v":{"a":20,"b":20,"b":{"d":["str","str"]},"c":[20, 20],"c":{"d":20},"d":{"d":["str","str"]},"e":"str","f":["str", "str"]}}
\ No newline at end of file
diff --git a/be/test/olap/rowset/segment_v2/variant_column_writer_reader_test.cpp b/be/test/olap/rowset/segment_v2/variant_column_writer_reader_test.cpp
index bf78fdc..e40bec1 100644
--- a/be/test/olap/rowset/segment_v2/variant_column_writer_reader_test.cpp
+++ b/be/test/olap/rowset/segment_v2/variant_column_writer_reader_test.cpp
@@ -263,7 +263,7 @@
st = it->init(column_iter_opts);
EXPECT_TRUE(st.ok()) << st.msg();
- MutableColumnPtr new_column_object = ColumnObject::create(3);
+ MutableColumnPtr new_column_object = ColumnObject::create(3, false);
size_t nrows = 1000;
st = it->seek_to_ordinal(0);
EXPECT_TRUE(st.ok()) << st.msg();
@@ -310,7 +310,7 @@
row_ids.push_back(i);
}
}
- new_column_object = ColumnObject::create(3);
+ new_column_object = ColumnObject::create(3, false);
st = it->read_by_rowids(row_ids.data(), row_ids.size(), new_column_object);
EXPECT_TRUE(st.ok()) << st.msg();
for (int i = 0; i < row_ids.size(); ++i) {
@@ -320,7 +320,7 @@
}
auto read_to_column_object = [&](ColumnIterator* it) {
- new_column_object = ColumnObject::create(3);
+ new_column_object = ColumnObject::create(3, false);
nrows = 1000;
st = it->seek_to_ordinal(0);
EXPECT_TRUE(st.ok()) << st.msg();
@@ -448,6 +448,7 @@
}
EXPECT_TRUE(variant_stats->sparse_column_non_null_size.size() ==
config::variant_max_sparse_column_statistics_size);
+ EXPECT_TRUE(variant_column_reader->is_exceeded_sparse_column_limit());
delete (it1);
ColumnIterator* it2;
diff --git a/be/test/vec/columns/column_object_test.cpp b/be/test/vec/columns/column_object_test.cpp
new file mode 100644
index 0000000..4b048e7
--- /dev/null
+++ b/be/test/vec/columns/column_object_test.cpp
@@ -0,0 +1,1495 @@
+// 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 "vec/columns/column_object.h"
+
+#include <gmock/gmock-more-matchers.h>
+#include <gtest/gtest-message.h>
+#include <gtest/gtest-test-part.h>
+#include <gtest/gtest.h>
+#include <rapidjson/prettywriter.h>
+#include <stdio.h>
+
+#include "common/cast_set.h"
+#include "common/exception.h"
+#include "runtime/jsonb_value.h"
+#include "testutil/variant_util.h"
+#include "vec/columns/common_column_test.h"
+#include "vec/common/string_ref.h"
+#include "vec/core/field.h"
+#include "vec/core/types.h"
+#include "vec/data_types/data_type_array.h"
+#include "vec/data_types/data_type_factory.hpp"
+
+namespace doris::vectorized {
+
+class ColumnObjectTest : public ::testing::Test {};
+
+void convert_field_to_rapidjson(const vectorized::Field& field, rapidjson::Value& target,
+ rapidjson::Document::AllocatorType& allocator) {
+ switch (field.get_type()) {
+ case vectorized::Field::Types::Null:
+ target.SetNull();
+ break;
+ case vectorized::Field::Types::Int64:
+ target.SetInt64(field.get<Int64>());
+ break;
+ case vectorized::Field::Types::Float64:
+ target.SetDouble(field.get<Float64>());
+ break;
+ case vectorized::Field::Types::JSONB: {
+ const auto& val = field.get<JsonbField>();
+ JsonbValue* json_val = JsonbDocument::createValue(val.get_value(), val.get_size());
+ convert_jsonb_to_rapidjson(*json_val, target, allocator);
+ break;
+ }
+ case vectorized::Field::Types::String: {
+ const String& val = field.get<String>();
+ target.SetString(val.data(), cast_set<rapidjson::SizeType>(val.size()));
+ break;
+ }
+ case vectorized::Field::Types::Array: {
+ const vectorized::Array& array = field.get<Array>();
+ target.SetArray();
+ for (const vectorized::Field& item : array) {
+ rapidjson::Value val;
+ convert_field_to_rapidjson(item, val, allocator);
+ target.PushBack(val, allocator);
+ }
+ break;
+ }
+ case vectorized::Field::Types::VariantMap: {
+ const vectorized::VariantMap& map = field.get<VariantMap>();
+ target.SetObject();
+ for (const auto& item : map) {
+ if (item.second.is_null()) {
+ continue;
+ }
+ rapidjson::Value key;
+ key.SetString(item.first.get_path().data(),
+ cast_set<rapidjson::SizeType>(item.first.get_path().size()));
+ rapidjson::Value val;
+ convert_field_to_rapidjson(item.second, val, allocator);
+ if (val.IsNull() && item.first.empty()) {
+ // skip null value with empty key, indicate the null json value of root in variant map,
+ // usally padding in nested arrays
+ continue;
+ }
+ target.AddMember(key, val, allocator);
+ }
+ break;
+ }
+ default:
+ throw doris::Exception(ErrorCode::INTERNAL_ERROR, "unkown field type: {}",
+ field.get_type_name());
+ break;
+ }
+}
+
+void convert_variant_map_to_rapidjson(const vectorized::VariantMap& map, rapidjson::Value& target,
+ rapidjson::Document::AllocatorType& allocator) {
+ target.SetObject();
+ for (const auto& item : map) {
+ if (item.second.is_null()) {
+ continue;
+ }
+ rapidjson::Value key;
+ key.SetString(item.first.get_path().data(),
+ cast_set<rapidjson::SizeType>(item.first.get_path().size()));
+ rapidjson::Value val;
+ convert_field_to_rapidjson(item.second, val, allocator);
+ if (val.IsNull() && item.first.empty()) {
+ // skip null value with empty key, indicate the null json value of root in variant map,
+ // usally padding in nested arrays
+ continue;
+ }
+ target.AddMember(key, val, allocator);
+ }
+}
+
+void convert_array_to_rapidjson(const vectorized::Array& array, rapidjson::Value& target,
+ rapidjson::Document::AllocatorType& allocator) {
+ target.SetArray();
+ for (const vectorized::Field& item : array) {
+ rapidjson::Value val;
+ convert_field_to_rapidjson(item, val, allocator);
+ target.PushBack(val, allocator);
+ }
+}
+
+TEST(ColumnVariantTest, insert_try_insert) {
+ auto v = VariantUtil::construct_dst_varint_column();
+ FieldInfo info;
+ info.scalar_type_id = TypeIndex::Nothing;
+ info.num_dimensions = 0;
+ PathInData path("v.f");
+ auto sub = v->get_subcolumn(path);
+ Int64 value = 43000000;
+
+ try {
+ sub->insert(value, info);
+ info.num_dimensions = 1;
+ sub->insert(value, info);
+
+ info.num_dimensions = 2;
+ sub->insert(value, info);
+ } catch (const doris::Exception& e) {
+ std::cout << "encounter exception: " << e.what() << std::endl;
+ }
+}
+
+TEST(ColumnVariantTest, basic_finalize) {
+ auto variant = VariantUtil::construct_basic_varint_column();
+ // 4. finalize
+ EXPECT_TRUE(variant->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(variant->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(variant->size(), 10);
+
+ // check finalized subcolumn
+ // 5 subcolumn + 1 root
+ EXPECT_EQ(variant->subcolumns.size(), 6);
+ for (const auto& column : variant->subcolumns) {
+ if (column->data.is_root) {
+ continue;
+ }
+ EXPECT_EQ(column->data.data.size(), 1);
+ }
+
+ // check sparse column
+ const auto& offsets = variant->serialized_sparse_column_offsets();
+ for (int row = 0; row < 5; ++row) {
+ EXPECT_EQ(offsets[row], 0);
+ }
+ for (int row = 5; row < 10; ++row) {
+ EXPECT_EQ(offsets[row] - offsets[row - 1], 3);
+ }
+}
+
+TEST(ColumnVariantTest, basic_deserialize) {
+ auto variant = VariantUtil::construct_basic_varint_column();
+
+ // 4. finalize
+ EXPECT_TRUE(variant->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(variant->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(variant->size(), 10);
+
+ const auto& [path, value] = variant->get_sparse_data_paths_and_values();
+ const auto& offsets = variant->serialized_sparse_column_offsets();
+ for (size_t row = 5; row < 10; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.b.d", 5));
+ auto pair = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int64>(), 30);
+
+ auto data2 = path->get_data_at(start);
+ auto pair2 = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data2, StringRef("v.c.d", 5));
+ EXPECT_EQ(pair2.first.get<Int64>(), 30);
+
+ auto data3 = path->get_data_at(start);
+ auto pair3 = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ EXPECT_EQ(pair3.first.get<String>(), "50");
+ EXPECT_EQ(start, end);
+ }
+}
+
+// test ColumnVariant with ColumnNothing using update_hash_with_value
+TEST(ColumnVariantTest, updateHashValueWithColumnNothingTest) {
+ // Create a ColumnObject with a subcolumn that contains ColumnNothing
+ auto variant = ColumnObject::create(3, 3);
+
+ // Create a subcolumn with ColumnNothing type
+ PathInData path("v.nothing");
+ auto type = DataTypeFactory::instance().create_data_type(TypeIndex::Nothing);
+ auto column = type->create_column();
+ column->insert_many_defaults(3);
+ variant->add_sub_column(path, std::move(column), type);
+
+ // Finalize the variant column to ensure proper structure
+ // EXPECT_TRUE(variant->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ // EXPECT_TRUE(variant->pick_subcolumns_to_sparse_column({}).ok());
+ EXPECT_EQ(variant->size(), 3);
+
+ // Test update_hash_with_value with ColumnNothing
+ SipHash hash1, hash2, hash3;
+
+ // Test that update_hash_with_value doesn't crash with ColumnNothing
+ EXPECT_NO_THROW(variant->update_hash_with_value(0, hash1));
+ EXPECT_NO_THROW(variant->update_hash_with_value(1, hash2));
+ EXPECT_NO_THROW(variant->update_hash_with_value(2, hash3));
+
+ // For ColumnNothing, the hash should be consistent since it doesn't contain actual data
+ // However, the hash might include structural information, so we just verify it doesn't crash
+ // and produces some hash value
+ EXPECT_NE(hash1.get64(), 0);
+ EXPECT_NE(hash2.get64(), 0);
+ EXPECT_NE(hash3.get64(), 0);
+
+ // Test update_hashes_with_value with ColumnNothing
+ std::vector<uint64_t> hashes(3, 0);
+ EXPECT_NO_THROW(variant->update_hashes_with_value(hashes.data()));
+
+ // Verify that hashes are computed (non-zero)
+ EXPECT_NE(hashes[0], 0);
+ EXPECT_NE(hashes[1], 0);
+ EXPECT_NE(hashes[2], 0);
+
+ // Test update_xxHash_with_value with ColumnNothing
+ uint64_t xxhash = 0;
+ EXPECT_NO_THROW(variant->update_xxHash_with_value(0, 3, xxhash, nullptr));
+ EXPECT_NE(xxhash, 0);
+
+ // Test update_crc_with_value with ColumnNothing
+ uint32_t crc_hash = 0;
+ EXPECT_NO_THROW(variant->update_crc_with_value(0, 3, crc_hash, nullptr));
+ EXPECT_NE(crc_hash, 0);
+
+ // Test with null map
+ std::vector<uint8_t> null_map(3, 0);
+ null_map[1] = 1; // Mark second row as null
+
+ std::vector<uint64_t> hashes_with_null(3, 0);
+ EXPECT_NO_THROW(variant->update_hashes_with_value(hashes_with_null.data(), null_map.data()));
+
+ uint64_t xxhash_with_null = 0;
+ EXPECT_NO_THROW(variant->update_xxHash_with_value(0, 3, xxhash_with_null, null_map.data()));
+
+ uint32_t crc_hash_with_null = 0;
+ EXPECT_NO_THROW(variant->update_crc_with_value(0, 3, crc_hash_with_null, null_map.data()));
+}
+
+TEST(ColumnVariantTest, basic_inset_range_from) {
+ auto src = VariantUtil::construct_basic_varint_column();
+ EXPECT_TRUE(src->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(src->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(src->size(), 10);
+
+ // dst is an empty column, has 5 subcolumn + 1 root
+ auto dst = VariantUtil::construct_dst_varint_column();
+
+ // subcolumn->subcolumn v.b v.f v.e
+ // subcolumn->sparse_column v.a v.c
+ // sparse_column->subcolumn v.b.d v.c.d
+ // sparse_column->sparse_column v.d.d
+ dst->insert_range_from(*src, 0, 10);
+ dst->finalize();
+ EXPECT_EQ(dst->size(), 10);
+
+ // 5 subcolumn
+ EXPECT_EQ(dst->subcolumns.size(), 6);
+ ColumnObject::Subcolumns dst_subcolumns = dst->subcolumns;
+ std::sort(
+ dst_subcolumns.begin(), dst_subcolumns.end(),
+ [](const auto& lhsItem, const auto& rhsItem) { return lhsItem->path < rhsItem->path; });
+
+ for (const auto& column : dst_subcolumns) {
+ if (column->data.is_root) {
+ continue;
+ }
+ EXPECT_EQ(column->data.data.size(), 1);
+ EXPECT_EQ(column->data.data[0]->size(), 10);
+ if (column->path.get_path().size() == 3) {
+ EXPECT_EQ(column->data.get_non_null_value_size(), 10);
+ } else {
+ EXPECT_EQ(column->path.get_path().size(), 5);
+ EXPECT_EQ(column->data.get_non_null_value_size(), 5);
+ for (size_t row = 0; row != 5; ++row) {
+ EXPECT_TRUE(column->data.data[0]->is_null_at(row));
+ }
+ for (size_t row = 5; row != 10; ++row) {
+ EXPECT_EQ((*column->data.data[0])[row].get<Int64>(), 30);
+ }
+ }
+ }
+
+ // check sparse column
+ const auto& [path, value] = dst->get_sparse_data_paths_and_values();
+ const auto& offsets = dst->serialized_sparse_column_offsets();
+
+ // v.a v.c
+ for (int row = 0; row < 5; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.a", 3));
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int64>(), 20);
+
+ auto data2 = path->get_data_at(start);
+ EXPECT_EQ(data2, StringRef("v.c", 3));
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair2.first.get<Int64>(), 20);
+
+ EXPECT_EQ(start, end);
+ }
+
+ // v.a v.c v.d.d
+ for (int row = 5; row < 10; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.a", 3));
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int64>(), 20);
+
+ auto data2 = path->get_data_at(start);
+ EXPECT_EQ(data2, StringRef("v.c", 3));
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair2.first.get<Int64>(), 20);
+
+ auto data3 = path->get_data_at(start);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ auto pair3 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair3.first.get<String>(), "50");
+
+ EXPECT_EQ(start, end);
+ }
+}
+
+auto convert_to_jsonb_field(auto serde, auto& column) {
+ vectorized::DataTypeSerDe::FormatOptions options;
+ options.escape_char = '\\';
+ auto tmp_col = ColumnString::create();
+ VectorBufferWriter write_buffer(*tmp_col.get());
+ EXPECT_TRUE(serde->serialize_column_to_json(column, 0, 1, write_buffer, options).ok());
+
+ write_buffer.commit();
+ auto str_ref = tmp_col->get_data_at(0);
+ Slice data((char*)(str_ref.data), str_ref.size);
+
+ auto jsonb_type = doris::vectorized::DataTypeFactory::instance().create_data_type(
+ TypeIndex::JSONB, false);
+ auto jsonb_serde = jsonb_type->get_serde();
+ auto jsonb_column = jsonb_type->create_column();
+
+ DataTypeSerDe::FormatOptions format_options;
+ format_options.converted_from_string = true;
+ EXPECT_TRUE(
+ jsonb_serde->deserialize_one_cell_from_json(*jsonb_column, data, format_options).ok());
+ auto res = jsonb_column->get_data_at(0);
+ return JsonbField(res.data, res.size);
+}
+
+auto convert_string_to_jsonb_field(auto& column) {
+ auto str_ref = column.get_data_at(0);
+ Slice data((char*)(str_ref.data), str_ref.size);
+
+ auto jsonb_type = doris::vectorized::DataTypeFactory::instance().create_data_type(
+ TypeIndex::JSONB, false);
+ auto jsonb_serde = jsonb_type->get_serde();
+ auto jsonb_column = jsonb_type->create_column();
+ DataTypeSerDe::FormatOptions format_options;
+ format_options.converted_from_string = true;
+ format_options.escape_char = '\\';
+
+ EXPECT_TRUE(
+ jsonb_serde->deserialize_one_cell_from_json(*jsonb_column, data, format_options).ok());
+ auto res = jsonb_column->get_data_at(0);
+ return JsonbField(res.data, res.size);
+}
+
+doris::vectorized::Field get_jsonb_field(std::string_view type) {
+ static std::unordered_map<std::string_view, doris::vectorized::Field> field_map;
+ if (field_map.empty()) {
+ DataTypePtr data_type_int = doris::vectorized::DataTypeFactory::instance().create_data_type(
+ TypeIndex::Int8, false);
+ DataTypePtr data_type_array_int =
+ std::make_shared<doris::vectorized::DataTypeArray>(data_type_int);
+ auto array_column_int = data_type_array_int->create_column();
+ array_column_int->insert(VariantUtil::get_field("array_int"));
+ auto array_serde_int = data_type_array_int->get_serde();
+ field_map["array_int"] = convert_to_jsonb_field(array_serde_int, *array_column_int);
+
+ DataTypePtr data_type_str = doris::vectorized::DataTypeFactory::instance().create_data_type(
+ TypeIndex::String, false);
+ DataTypePtr data_type_array_str =
+ std::make_shared<doris::vectorized::DataTypeArray>(data_type_str);
+ auto array_column_str = data_type_array_str->create_column();
+ array_column_str->insert(VariantUtil::get_field("array_str"));
+ auto array_serde_str = data_type_array_str->get_serde();
+ field_map["array_str"] = convert_to_jsonb_field(array_serde_str, *array_column_str);
+
+ auto column_int = data_type_int->create_column();
+ column_int->insert(VariantUtil::get_field("int"));
+ auto serde_int = data_type_int->get_serde();
+ field_map["int"] = convert_to_jsonb_field(serde_int, *column_int);
+
+ // auto column_str = data_type_str->create_column();
+ // column_str->insert(VariantUtil::get_field("string"));
+ // field_map["string"] = convert_string_to_jsonb_field(*column_str);
+ }
+ return field_map[type];
+}
+
+// std::string convert_jsonb_field_to_string(doris::vectorized::Field jsonb) {
+// const auto& val = jsonb.get<JsonbField>();
+// const JsonbValue* json_val = JsonbDocument::createValue(val.get_value(), val.get_size());
+
+// rapidjson::Document doc;
+// doc.SetObject();
+// rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
+// rapidjson::Value json_value;
+// convert_jsonb_to_rapidjson(*json_val, json_value, allocator);
+// doc.AddMember("value", json_value, allocator);
+// rapidjson::StringBuffer buffer;
+// rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
+// doc.Accept(writer);
+// return std::string(buffer.GetString());
+// }
+
+std::string convert_field_to_string(doris::vectorized::Field array) {
+ rapidjson::Document doc;
+ doc.SetObject();
+ rapidjson::Document::AllocatorType& allocator = doc.GetAllocator();
+ rapidjson::Value json_value;
+ // DataTypeSerDe::convert_field_to_rapidjson(array, json_value, allocator);
+ doc.AddMember("value", json_value, allocator);
+ rapidjson::StringBuffer buffer;
+ rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
+ doc.Accept(writer);
+ return std::string(buffer.GetString());
+}
+
+TEST(ColumnVariantTest, is_null_at) {
+ auto v = VariantUtil::construct_dst_varint_column();
+ PathInData path("v.f");
+ auto sub = v->get_subcolumn(path);
+ std::cout << sub->get_least_common_typeBase()->get_name() << std::endl;
+ EXPECT_TRUE(sub->is_null_at(0));
+
+ auto v1 = VariantUtil::construct_advanced_varint_column();
+ PathInData path1("v.b.d");
+ auto sub1 = v1->get_subcolumn(path1);
+ EXPECT_TRUE(sub1->is_null_at(2));
+ EXPECT_ANY_THROW(sub1->is_null_at(16));
+ vectorized::Field f;
+ EXPECT_ANY_THROW(sub1->get(16, f));
+ std::cout << sub1->num_rows << std::endl;
+ EXPECT_NO_THROW(sub1->resize(sub1->num_rows));
+
+ auto [sparse_column_keys, sparse_column_values] = v1->get_sparse_data_paths_and_values();
+ std::string_view pa("v.a");
+ EXPECT_NO_THROW(
+ sub1->serialize_to_sparse_column(sparse_column_keys, pa, sparse_column_values, 2));
+ EXPECT_ANY_THROW(
+ sub1->serialize_to_sparse_column(sparse_column_keys, pa, sparse_column_values, 16));
+}
+
+TEST(ColumnVariantTest, advanced_finalize) {
+ auto variant = VariantUtil::construct_advanced_varint_column();
+
+ // 4. finalize
+ EXPECT_TRUE(variant->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(variant->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(variant->size(), 15);
+
+ // check finalized subcolumn
+ // 5 subcolumn + 1 root
+ EXPECT_EQ(variant->subcolumns.size(), 6);
+ for (const auto& column : variant->subcolumns) {
+ if (column->data.is_root) {
+ continue;
+ }
+ EXPECT_EQ(column->data.data.size(), 1);
+ }
+
+ // check sparse column
+ const auto& offsets = variant->serialized_sparse_column_offsets();
+ for (int row = 0; row < 5; ++row) {
+ EXPECT_EQ(offsets[row] - offsets[row - 1], 0);
+ }
+ for (int row = 5; row < 15; ++row) {
+ EXPECT_EQ(offsets[row] - offsets[row - 1], 3);
+ }
+
+ {
+ // Test fill_path_column_from_sparse_data
+ auto map = std::make_unique<NullMap>(15, 0);
+ vectorized::ColumnObject::fill_path_column_from_sparse_data(
+ *variant->get_subcolumn({}) /*root*/, map.get(), StringRef {"array"},
+ variant->get_sparse_column(), 0, 5);
+ vectorized::ColumnObject::fill_path_column_from_sparse_data(
+ *variant->get_subcolumn({}) /*root*/, map.get(), StringRef {"array"},
+ variant->get_sparse_column(), 5, 15);
+ }
+}
+
+TEST(ColumnVariantTest, advanced_deserialize) {
+ auto variant = VariantUtil::construct_advanced_varint_column();
+
+ // 4. finalize
+ EXPECT_TRUE(variant->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(variant->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(variant->size(), 15);
+
+ const auto& [path, value] = variant->get_sparse_data_paths_and_values();
+ const auto& offsets = variant->serialized_sparse_column_offsets();
+ for (size_t row = 5; row < 10; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ auto pair = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data, StringRef("v.b.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair.first),
+ convert_field_to_string(get_jsonb_field("array_int")));
+
+ auto data2 = path->get_data_at(start);
+ auto pair2 = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data2, StringRef("v.c.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair2.first),
+ convert_field_to_string(VariantUtil::get_field("string")));
+
+ auto data3 = path->get_data_at(start);
+ auto pair3 = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair3.first),
+ convert_field_to_string(get_jsonb_field("array_int")));
+ EXPECT_EQ(start, end);
+ }
+
+ for (size_t row = 10; row < 15; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ auto pair = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data, StringRef("v.b.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair.first),
+ convert_field_to_string(get_jsonb_field("array_str")));
+
+ auto data2 = path->get_data_at(start);
+ auto pair2 = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data2, StringRef("v.c.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair2.first),
+ convert_field_to_string(get_jsonb_field("int")));
+
+ auto data3 = path->get_data_at(start);
+ auto pair3 = variant->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair3.first),
+ convert_field_to_string(get_jsonb_field("array_str")));
+ EXPECT_EQ(start, end);
+ }
+}
+
+TEST(ColumnVariantTest, advanced_insert_range_from) {
+ auto src = VariantUtil::construct_advanced_varint_column();
+ EXPECT_TRUE(src->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(src->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(src->size(), 15);
+
+ auto dst = VariantUtil::construct_dst_varint_column();
+
+ // subcolumn->subcolumn v.b v.f v.e
+ // subcolumn->sparse_column v.a v.c
+ // sparse_column->subcolumn v.b.d v.c.d
+ // sparse_column->sparse_column v.d.d
+ dst->insert_range_from(*src, 0, src->size());
+ dst->finalize();
+ EXPECT_EQ(dst->size(), 15);
+
+ EXPECT_EQ(dst->subcolumns.size(), 6);
+ ColumnObject::Subcolumns dst_subcolumns = dst->subcolumns;
+
+ std::sort(
+ dst_subcolumns.begin(), dst_subcolumns.end(),
+ [](const auto& lhsItem, const auto& rhsItem) { return lhsItem->path < rhsItem->path; });
+
+ // subcolumns
+ for (const auto& column : dst_subcolumns) {
+ if (column->data.is_root) {
+ continue;
+ }
+ EXPECT_EQ(column->data.data.size(), 1);
+ EXPECT_EQ(column->data.data[0]->size(), 15);
+
+ if (column->path.get_path().size() == 3) {
+ EXPECT_EQ(column->data.get_non_null_value_size(), 15);
+ if (column->path.get_path() == "v.b") {
+ EXPECT_EQ(assert_cast<const DataTypeNullable*>(column->data.data_types[0].get())
+ ->get_nested_type()
+ ->get_type_id(),
+ TypeIndex::JSONB);
+ }
+ } else if (column->path.get_path().size() == 5) {
+ EXPECT_EQ(column->data.get_non_null_value_size(), 10);
+ EXPECT_EQ(assert_cast<const DataTypeNullable*>(column->data.data_types[0].get())
+ ->get_nested_type()
+ ->get_type_id(),
+ TypeIndex::JSONB);
+ for (size_t row = 0; row < 5; ++row) {
+ EXPECT_TRUE(column->data.data[0]->is_null_at(row));
+ }
+ }
+ }
+
+ // sparse columns
+ const auto& [path, value] = dst->get_sparse_data_paths_and_values();
+ const auto& offsets = dst->serialized_sparse_column_offsets();
+
+ // v.a v.c
+ for (int row = 0; row < 5; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.a", 3));
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int64>(), 20);
+
+ auto data2 = path->get_data_at(start);
+ EXPECT_EQ(data2, StringRef("v.c", 3));
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(convert_field_to_string(pair2.first),
+ convert_field_to_string(VariantUtil::get_field("array_int")));
+
+ EXPECT_EQ(start, end);
+ }
+
+ for (int row = 5; row < 10; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data, StringRef("v.a", 3));
+ EXPECT_EQ(pair.first.get<Int64>(), 20);
+
+ auto data2 = path->get_data_at(start);
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data2, StringRef("v.c", 3));
+ EXPECT_EQ(convert_field_to_string(pair2.first),
+ convert_field_to_string(VariantUtil::get_field("array_int")));
+
+ auto data3 = path->get_data_at(start);
+ auto pair3 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair3.first),
+ convert_field_to_string(get_jsonb_field("array_int")));
+
+ EXPECT_EQ(start, end);
+ }
+
+ for (int row = 10; row < 15; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data, StringRef("v.a", 3));
+ EXPECT_EQ(pair.first.get<Int64>(), 20);
+
+ auto data2 = path->get_data_at(start);
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data2, StringRef("v.c", 3));
+ EXPECT_EQ(convert_field_to_string(pair2.first),
+ convert_field_to_string(VariantUtil::get_field("array_int")));
+
+ auto data3 = path->get_data_at(start);
+ auto pair3 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ EXPECT_EQ(convert_field_to_string(pair3.first),
+ convert_field_to_string(get_jsonb_field("array_str")));
+
+ EXPECT_EQ(start, end);
+ }
+}
+
+TEST(ColumnVariantTest, empty_inset_range_from) {
+ auto src = VariantUtil::construct_varint_column_only_subcolumns();
+ EXPECT_TRUE(src->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(src->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(src->size(), 6);
+
+ // dst is an empty column
+ auto dst = ColumnObject::create(5);
+
+ // subcolumn->subcolumn v.a v.b v.c v.f v.e
+ dst->insert_range_from(*src, 0, 6);
+ EXPECT_EQ(dst->size(), 6);
+
+ // 5 subcolumn
+ EXPECT_EQ(dst->subcolumns.size(), 6);
+
+ for (const auto& column : dst->subcolumns) {
+ if (column->data.is_root) {
+ EXPECT_EQ(column->data.data.size(), 1);
+ EXPECT_EQ(column->data.data[0]->size(), 6);
+ EXPECT_EQ(column->data.get_non_null_value_size(), 1);
+ continue;
+ }
+ EXPECT_EQ(column->data.data.size(), 1);
+ EXPECT_EQ(column->data.data[0]->size(), 6);
+ EXPECT_EQ(column->data.get_non_null_value_size(), 5);
+ }
+
+ // empty sparse column
+ const auto& [path, value] = dst->get_sparse_data_paths_and_values();
+ const auto& offsets = dst->serialized_sparse_column_offsets();
+ EXPECT_EQ(offsets[4], offsets[-1]);
+ EXPECT_EQ(path->size(), value->size());
+
+ auto src_contains_seven_subcolumns = VariantUtil::construct_varint_column_more_subcolumns();
+
+ EXPECT_TRUE(
+ src_contains_seven_subcolumns->finalize(ColumnObject::FinalizeMode::WRITE_MODE).ok());
+ EXPECT_TRUE(src_contains_seven_subcolumns->pick_subcolumns_to_sparse_column({}, false).ok());
+ EXPECT_EQ(src_contains_seven_subcolumns->size(), 5);
+
+ // subcolumn->subcolumn v.a v.b v.c v.f v.e
+ // add sprase columns v.s v.x v.y v.z
+ dst->insert_range_from(*src_contains_seven_subcolumns, 0, 5);
+ EXPECT_EQ(dst->size(), 11);
+
+ // 5 subcolumn
+ EXPECT_EQ(dst->subcolumns.size(), 6);
+
+ for (int row = 0; row < 6; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ EXPECT_EQ(start, end);
+ }
+
+ // v.s v.x v.y v.z
+ for (int row = 6; row < 11; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data0 = path->get_data_at(start);
+ EXPECT_EQ(data0, StringRef("v.s", 3));
+ auto pair0 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(convert_field_to_string(pair0.first),
+ convert_field_to_string(VariantUtil::get_field("string")));
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.x", 3));
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int16>(), std::numeric_limits<Int16>::max());
+
+ auto data2 = path->get_data_at(start);
+ EXPECT_EQ(data2, StringRef("v.y", 3));
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair2.first.get<Int32>(), std::numeric_limits<Int32>::max());
+
+ auto data3 = path->get_data_at(start);
+ EXPECT_EQ(data3, StringRef("v.z", 3));
+ auto pair3 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair3.first.get<Int64>(),
+ Int64(static_cast<Int64>(std::numeric_limits<Int32>::max()) + 1));
+
+ EXPECT_EQ(start, end);
+ }
+
+ auto src_contains_subcoumns_and_sparse_columns = VariantUtil::construct_basic_varint_column();
+ EXPECT_TRUE(src_contains_subcoumns_and_sparse_columns
+ ->finalize(ColumnObject::FinalizeMode::WRITE_MODE)
+ .ok());
+ EXPECT_TRUE(
+ src_contains_subcoumns_and_sparse_columns->pick_subcolumns_to_sparse_column({}, false)
+ .ok());
+ EXPECT_EQ(src_contains_subcoumns_and_sparse_columns->size(), 10);
+
+ // subcolumn->subcolumn v.a v.b v.c v.f v.e
+ // add sprase columns v.s v.x v.y v.b.d v.c.d v.d.d
+ dst->insert_range_from(*src_contains_subcoumns_and_sparse_columns, 0, 10);
+ EXPECT_EQ(dst->size(), 21);
+
+ // 5 subcolumn
+ EXPECT_EQ(dst->subcolumns.size(), 6);
+
+ for (int row = 0; row < 6; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ EXPECT_EQ(start, end);
+ }
+
+ // v.x v.y
+ for (int row = 6; row < 11; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data0 = path->get_data_at(start);
+ EXPECT_EQ(data0, StringRef("v.s", 3));
+ auto pair0 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(convert_field_to_string(pair0.first),
+ convert_field_to_string(VariantUtil::get_field("string")));
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.x", 3));
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int16>(), std::numeric_limits<Int16>::max());
+
+ auto data2 = path->get_data_at(start);
+ EXPECT_EQ(data2, StringRef("v.y", 3));
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair2.first.get<Int32>(), std::numeric_limits<Int32>::max());
+
+ auto data3 = path->get_data_at(start);
+ EXPECT_EQ(data3, StringRef("v.z", 3));
+ auto pair3 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair3.first.get<Int64>(),
+ Int64(static_cast<Int64>(std::numeric_limits<Int32>::max()) + 1));
+
+ EXPECT_EQ(start, end);
+ }
+
+ for (int row = 11; row < 16; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ EXPECT_EQ(start, end);
+ }
+
+ //v.b.d v.c.d v.d.d
+ for (int row = 16; row < 21; ++row) {
+ size_t start = offsets[row - 1];
+ size_t end = offsets[row];
+
+ auto data = path->get_data_at(start);
+ EXPECT_EQ(data, StringRef("v.b.d", 5));
+ auto pair = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(pair.first.get<Int64>(), 30);
+
+ auto data2 = path->get_data_at(start);
+ auto pair2 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data2, StringRef("v.c.d", 5));
+ EXPECT_EQ(pair2.first.get<Int64>(), 30);
+
+ auto data3 = path->get_data_at(start);
+ auto pair3 = dst->deserialize_from_sparse_column(value, start++);
+ EXPECT_EQ(data3, StringRef("v.d.d", 5));
+ EXPECT_EQ(pair3.first.get<String>(), "50");
+ EXPECT_EQ(start, end);
+ }
+}
+
+TEST(ColumnVariantTest, insert_null_to_decimal_column) {
+ ColumnObject::Subcolumn subcolumn(0, true /* is_nullable */, false /* is_root */);
+ Field null_field;
+ subcolumn.insert(null_field);
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.data.size(), 1);
+ EXPECT_EQ(subcolumn.data[0]->size(), 1);
+ EXPECT_EQ(subcolumn.data_types.size(), 1);
+ EXPECT_EQ(subcolumn.least_common_type.get_base_type_id(), TypeIndex::Nothing);
+ Field decimal_field(DecimalField<Decimal128V2>(10, 2));
+ subcolumn.insert(decimal_field);
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.get_non_null_value_size(), 1);
+ EXPECT_EQ(subcolumn.data.size(), 1);
+ EXPECT_EQ(subcolumn.data[0]->size(), 2);
+ EXPECT_EQ(subcolumn.data[0]->is_null_at(0), true);
+ EXPECT_EQ(subcolumn.data[0]->is_null_at(1), false);
+ EXPECT_EQ(subcolumn.data_types.size(), 1);
+ EXPECT_EQ(subcolumn.least_common_type.get_base_type_id(), TypeIndex::Decimal128V2);
+}
+
+TEST(ColumnVariantTest, subcolumn_insert_range_from_test) {
+ ColumnObject::Subcolumn subcolumn(0, true /* is_nullable */, false /* is_root */);
+ Field int_field(20);
+ Field string_field("hello");
+ Field array_int_field = Array(2);
+ auto& array_int = array_int_field.get<Array>();
+ array_int[0] = int_field;
+ array_int[1] = int_field;
+ ColumnObject::Subcolumn subcolumn2(0, true /* is_nullable */, false /* is_root */);
+ subcolumn2.insert(array_int_field);
+ subcolumn2.finalize();
+
+ Field array_string_field = Array(2);
+ auto& array_string = array_string_field.get<Array>();
+ array_string[0] = string_field;
+ array_string[1] = string_field;
+ ColumnObject::Subcolumn subcolumn3(0, true /* is_nullable */, false /* is_root */);
+ subcolumn3.insert(array_string_field);
+ subcolumn3.finalize();
+
+ subcolumn.insert_range_from(subcolumn2, 0, 1);
+ subcolumn.insert_range_from(subcolumn3, 0, 1);
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.data.size(), 1);
+ ColumnObject::Subcolumn subcolumn4(0, true /* is_nullable */, false /* is_root */);
+ subcolumn4.insert(int_field);
+ subcolumn4.finalize();
+
+ ColumnObject::Subcolumn subcolumn5(0, true /* is_nullable */, false /* is_root */);
+ subcolumn5.insert(string_field);
+ subcolumn5.finalize();
+
+ subcolumn.insert_range_from(subcolumn4, 0, 1);
+ subcolumn.insert_range_from(subcolumn5, 0, 1);
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.data.size(), 1);
+}
+
+TEST(ColumnVariantTest, subcolumn_insert_range_fromtest_variant_field) {
+ std::vector<Field> fields;
+ fields.emplace_back(
+ VariantField(DecimalField<Decimal32>(Decimal32(1234), 2), TypeIndex::Decimal32, 6, 2));
+ fields.emplace_back(
+ VariantField(DecimalField<Decimal64>(Decimal64(5678), 2), TypeIndex::Decimal64, 8, 2));
+ fields.emplace_back(VariantField(DecimalField<Decimal128V2>(Decimal128V2(91011), 2),
+ TypeIndex::Decimal128V2, 16, 2));
+ fields.emplace_back(VariantField(DecimalField<Decimal128V3>(Decimal128V3(121314), 2),
+ TypeIndex::Decimal128V3, 18, 2));
+ fields.emplace_back(VariantField(DecimalField<Decimal256>(Decimal256(151617), 2),
+ TypeIndex::Decimal256, 32, 2));
+ Array arr_decimal32;
+ arr_decimal32.push_back(Field(VariantField(DecimalField<Decimal32>(Decimal32(12345678), 2),
+ TypeIndex::Decimal32, 6, 2)));
+ arr_decimal32.push_back(Field(VariantField(DecimalField<Decimal32>(Decimal32(87654321), 2),
+ TypeIndex::Decimal32, 6, 2)));
+ fields.emplace_back(VariantField(arr_decimal32, TypeIndex::Array));
+
+ Array arr_decimal64;
+ arr_decimal64.push_back(Field(VariantField(
+ DecimalField<Decimal64>(Decimal64(123456789012345), 2), TypeIndex::Decimal64, 18, 2)));
+ arr_decimal64.push_back(Field(VariantField(
+ DecimalField<Decimal64>(Decimal64(987654321098765), 2), TypeIndex::Decimal64, 18, 2)));
+ fields.emplace_back(VariantField(arr_decimal64, TypeIndex::Array));
+
+ Array arr_decimal128v2;
+ arr_decimal128v2.push_back(
+ Field(VariantField(DecimalField<Decimal128V2>(Decimal128V2(1234567890), 2),
+ TypeIndex::Decimal128V2, 16, 2)));
+ arr_decimal128v2.push_back(
+ Field(VariantField(DecimalField<Decimal128V2>(Decimal128V2(9876543210), 2),
+ TypeIndex::Decimal128V2, 16, 2)));
+ fields.emplace_back(VariantField(arr_decimal128v2, TypeIndex::Array));
+
+ Array arr_decimal128v3;
+ arr_decimal128v3.push_back(
+ Field(VariantField(DecimalField<Decimal128V3>(Decimal128V3(1234567890), 2),
+ TypeIndex::Decimal128V3, 18, 2)));
+ arr_decimal128v3.push_back(
+ Field(VariantField(DecimalField<Decimal128V3>(Decimal128V3(9876543210), 2),
+ TypeIndex::Decimal128V3, 18, 2)));
+ fields.emplace_back(VariantField(arr_decimal128v3, TypeIndex::Array));
+
+ Array arr_decimal256;
+ arr_decimal256.push_back(Field(VariantField(DecimalField<Decimal256>(Decimal256(1234567890), 2),
+ TypeIndex::Decimal256, 32, 2)));
+ arr_decimal256.push_back(Field(VariantField(DecimalField<Decimal256>(Decimal256(9876543210), 2),
+ TypeIndex::Decimal256, 32, 2)));
+ fields.emplace_back(VariantField(arr_decimal256, TypeIndex::Array));
+
+ std::random_device rd;
+ std::mt19937 g(rd());
+ for (int i = 0; i < 10000; i++) {
+ std::vector<Field> fields_copy;
+ fields_copy.emplace_back(Field::Types::Null);
+ fields_copy.emplace_back(Field::Types::Null);
+ std::shuffle(fields.begin(), fields.end(), g);
+ fields_copy.emplace_back(fields[0]);
+ fields_copy.emplace_back(fields[0]);
+ std::shuffle(fields_copy.begin(), fields_copy.end(), g);
+ auto subcolumn = ColumnObject::Subcolumn(0, true, false);
+ for (const auto& field : fields_copy) {
+ auto subcolumn_tmp = ColumnObject::Subcolumn(0, true, false);
+ subcolumn_tmp.insert(field);
+ subcolumn.insert_range_from(subcolumn_tmp, 0, 1);
+ }
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.data.size(), 1);
+ EXPECT_EQ(subcolumn.data[0]->size(), 4);
+ auto& variant_field = fields[0].get<VariantField>();
+ EXPECT_EQ(remove_nullable(subcolumn.get_least_common_type())->get_type_id(),
+ variant_field.get_type_id());
+ }
+}
+
+TEST(ColumnVariantTest, subcolumn_insert_range_from_test_advanced) {
+ std::vector<Field> fields;
+
+ fields.emplace_back(Field::Types::Null);
+
+ fields.emplace_back(Int8(100));
+
+ fields.emplace_back(Int16(10000));
+
+ fields.emplace_back(Int32(1000000000));
+
+ fields.emplace_back(Int64(922337203685477588));
+
+ fields.emplace_back(Float32(3.14159f));
+
+ fields.emplace_back(Float64(3.14159265359));
+
+ fields.emplace_back(String("hello world"));
+
+ Array arr_int8;
+ arr_int8.push_back(Field(Int8(1)));
+ arr_int8.push_back(Field(Int8(2)));
+ fields.emplace_back(arr_int8);
+
+ Array arr_int16;
+ arr_int16.push_back(Field(Int16(12323)));
+ arr_int16.push_back(Field(Int16(23232)));
+ fields.emplace_back(arr_int16);
+
+ Array arr_int32;
+ arr_int32.push_back(Field(Int32(123232323)));
+ arr_int32.push_back(Field(Int32(232323232)));
+ fields.emplace_back(arr_int32);
+
+ Array arr_int64;
+ arr_int64.push_back(Field(Int64(1232323232323232323)));
+ arr_int64.push_back(Field(Int64(2323232323232323232)));
+ fields.emplace_back(arr_int64);
+
+ Array arr_float32;
+ arr_float32.push_back(Field(Float32(1.1f)));
+ arr_float32.push_back(Field(Float32(2.2f)));
+ fields.emplace_back(arr_float32);
+
+ Array arr_float;
+ arr_float.push_back(Field(Float64(1.1)));
+ arr_float.push_back(Field(Float64(2.2)));
+ fields.emplace_back(arr_float);
+
+ Array arr_string;
+ arr_string.push_back(Field(String("one")));
+ arr_string.push_back(Field(String("two")));
+ fields.emplace_back(arr_string);
+
+ std::random_device rd;
+ std::mt19937 g(rd());
+
+ for (int i = 0; i < 10000; i++) {
+ std::shuffle(fields.begin(), fields.end(), g);
+ auto subcolumn = ColumnObject::Subcolumn(0, true, false);
+
+ for (const auto& field : fields) {
+ auto subcolumn_tmp = ColumnObject::Subcolumn(0, true, false);
+ subcolumn_tmp.insert(field);
+ subcolumn.insert_range_from(subcolumn_tmp, 0, 1);
+ }
+
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.data.size(), 1);
+ // std::cout << "least common type: " << subcolumn.get_least_common_type()->get_name() << std::endl;
+ EXPECT_EQ(subcolumn.get_least_common_base_type_id(), TypeIndex::JSONB);
+
+ for (const auto& field : fields) {
+ subcolumn.insert(field);
+ }
+ EXPECT_EQ(subcolumn.get_least_common_base_type_id(), TypeIndex::JSONB);
+
+ if (i % 1000 == 0) {
+ std::cout << "insert count " << i << std::endl;
+ }
+ }
+}
+
+TEST(ColumnVariantTest, test_serialize_to_sparse_column_and_deserialize) {
+ Field decimal32_field = VariantField(DecimalField<Decimal32>(Decimal32(1234567890), 2),
+ TypeIndex::Decimal32, 6, 2);
+ Field decimal64_field = VariantField(DecimalField<Decimal64>(Decimal64(1234567890), 3),
+ TypeIndex::Decimal64, 16, 3);
+ Field decimal128v3_field = VariantField(DecimalField<Decimal128V3>(Decimal128V3(1234567890), 4),
+ TypeIndex::Decimal128V3, 28, 4);
+ Field decimal256_field = VariantField(DecimalField<Decimal256>(Decimal256(1234567890), 5),
+ TypeIndex::Decimal256, 56, 5);
+
+ ColumnObject::Subcolumn decimal32_subcolumn(0, true, false);
+ decimal32_subcolumn.insert(decimal32_field);
+ ColumnObject::Subcolumn decimal64_subcolumn(0, true, false);
+ decimal64_subcolumn.insert(decimal64_field);
+ ColumnObject::Subcolumn decimal128v3_subcolumn(0, true, false);
+ decimal128v3_subcolumn.insert(decimal128v3_field);
+ ColumnObject::Subcolumn decimal256_subcolumn(0, true, false);
+ decimal256_subcolumn.insert(decimal256_field);
+
+ auto serialized_sparse_column = ColumnMap::create(
+ ColumnString::create(), ColumnString::create(), ColumnArray::ColumnOffsets::create());
+ auto& column_map = assert_cast<ColumnMap&>(*serialized_sparse_column);
+ auto& sparse_column_keys = assert_cast<ColumnString&>(column_map.get_keys());
+ auto& sparse_column_values = assert_cast<ColumnString&>(column_map.get_values());
+
+ decimal32_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "decimal32",
+ &sparse_column_values, 0);
+ decimal64_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "decimal64",
+ &sparse_column_values, 0);
+ decimal128v3_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "decimal128v3",
+ &sparse_column_values, 0);
+ decimal256_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "decimal256",
+ &sparse_column_values, 0);
+
+ auto column_object = ColumnObject::create(0);
+ const auto& [field, field_info] =
+ column_object->deserialize_from_sparse_column(&sparse_column_values, 0);
+ EXPECT_EQ(field_info.scalar_type_id, TypeIndex::Decimal32);
+ EXPECT_EQ(field_info.have_nulls, false);
+ EXPECT_EQ(field_info.need_convert, false);
+ EXPECT_EQ(field_info.num_dimensions, 0);
+ EXPECT_EQ(field_info.scale, 2);
+
+ const auto& [field2, field_info2] =
+ column_object->deserialize_from_sparse_column(&sparse_column_values, 1);
+ EXPECT_EQ(field_info2.scalar_type_id, TypeIndex::Decimal64);
+ EXPECT_EQ(field_info2.have_nulls, false);
+ EXPECT_EQ(field_info2.need_convert, false);
+ EXPECT_EQ(field_info2.num_dimensions, 0);
+ EXPECT_EQ(field_info2.scale, 3);
+
+ const auto& [field3, field_info3] =
+ column_object->deserialize_from_sparse_column(&sparse_column_values, 2);
+ EXPECT_EQ(field_info3.scalar_type_id, TypeIndex::Decimal128V3);
+ EXPECT_EQ(field_info3.have_nulls, false);
+ EXPECT_EQ(field_info3.need_convert, false);
+ EXPECT_EQ(field_info3.num_dimensions, 0);
+ EXPECT_EQ(field_info3.scale, 4);
+
+ const auto& [field4, field_info4] =
+ column_object->deserialize_from_sparse_column(&sparse_column_values, 3);
+ EXPECT_EQ(field_info4.scalar_type_id, TypeIndex::Decimal256);
+ EXPECT_EQ(field_info4.have_nulls, false);
+ EXPECT_EQ(field_info4.need_convert, false);
+ EXPECT_EQ(field_info4.num_dimensions, 0);
+ EXPECT_EQ(field_info4.scale, 5);
+
+ decimal32_subcolumn.insert(field, field_info);
+ decimal32_subcolumn.finalize();
+ EXPECT_EQ(decimal32_subcolumn.data.size(), 1);
+ EXPECT_EQ(decimal32_subcolumn.data[0]->size(), 2);
+ auto tmp_col = ColumnString::create();
+ VectorBufferWriter write_buffer(*tmp_col.get());
+ decimal32_subcolumn.serialize_text_json(0, write_buffer);
+ write_buffer.commit();
+ EXPECT_EQ(tmp_col->get_data_at(0), StringRef("12345678.9", 11));
+ decimal32_subcolumn.serialize_text_json(1, write_buffer);
+ write_buffer.commit();
+ EXPECT_EQ(tmp_col->get_data_at(1), StringRef("12345678.9", 11));
+
+ decimal64_subcolumn.insert(field2, field_info2);
+ decimal64_subcolumn.finalize();
+ EXPECT_EQ(decimal64_subcolumn.data.size(), 1);
+ EXPECT_EQ(decimal64_subcolumn.data[0]->size(), 2);
+ auto tmp_col2 = ColumnString::create();
+ VectorBufferWriter write_buffer2(*tmp_col2.get());
+ decimal64_subcolumn.serialize_text_json(0, write_buffer2);
+ write_buffer2.commit();
+ EXPECT_EQ(tmp_col2->get_data_at(0), StringRef("1234567.890", 11));
+ decimal64_subcolumn.serialize_text_json(1, write_buffer2);
+ write_buffer2.commit();
+ EXPECT_EQ(tmp_col2->get_data_at(1), StringRef("1234567.890", 11));
+
+ decimal128v3_subcolumn.insert(field3, field_info3);
+ decimal128v3_subcolumn.finalize();
+ EXPECT_EQ(decimal128v3_subcolumn.data.size(), 1);
+ EXPECT_EQ(decimal128v3_subcolumn.data[0]->size(), 2);
+ auto tmp_col3 = ColumnString::create();
+ VectorBufferWriter write_buffer3(*tmp_col3.get());
+ decimal128v3_subcolumn.serialize_text_json(0, write_buffer3);
+ write_buffer3.commit();
+ EXPECT_EQ(tmp_col3->get_data_at(0), StringRef("123456.7890", 11));
+ decimal128v3_subcolumn.serialize_text_json(1, write_buffer3);
+ write_buffer3.commit();
+ EXPECT_EQ(tmp_col3->get_data_at(1), StringRef("123456.7890", 11));
+
+ decimal256_subcolumn.insert(field4, field_info4);
+ decimal256_subcolumn.finalize();
+ EXPECT_EQ(decimal256_subcolumn.data.size(), 1);
+ EXPECT_EQ(decimal256_subcolumn.data[0]->size(), 2);
+ auto tmp_col4 = ColumnString::create();
+ VectorBufferWriter write_buffer4(*tmp_col4.get());
+ decimal256_subcolumn.serialize_text_json(0, write_buffer4);
+ write_buffer4.commit();
+ EXPECT_EQ(tmp_col4->get_data_at(0), StringRef("12345.67890", 11));
+ decimal256_subcolumn.serialize_text_json(1, write_buffer4);
+ write_buffer4.commit();
+ EXPECT_EQ(tmp_col4->get_data_at(1), StringRef("12345.67890", 11));
+
+ Field string_ipv4_field("192.168.1.1");
+ Field string_ipv6_field("2001:db8:85a3:85a2:85a1:8a2e:370:7334");
+ Field string_date_field("2021-01-01");
+ Field string_datetime_field("2021-01-01 02:09:10");
+
+ vectorized::DataTypePtr data_type_string =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::String,
+ true, 0, 0);
+ vectorized::DataTypePtr data_type_ipv4 =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::IPv4,
+ true, 0, 0);
+ vectorized::DataTypePtr data_type_ipv6 =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::IPv6,
+ true, 0, 0);
+ vectorized::DataTypePtr data_type_date =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::DateV2,
+ true, 0, 0);
+ vectorized::DataTypePtr data_type_datetime =
+ vectorized::DataTypeFactory::instance().create_data_type(
+ vectorized::TypeIndex::DateTimeV2, true, 0, 6);
+
+ ColumnPtr column_string_ipv4 = data_type_string->create_column();
+ ColumnPtr column_string_ipv6 = data_type_string->create_column();
+ ColumnPtr column_string_date = data_type_string->create_column();
+ ColumnPtr column_string_datetime = data_type_string->create_column();
+
+ auto column_nullable_ipv4 = assert_cast<ColumnNullable&>(*column_string_ipv4->assume_mutable());
+ auto column_nullable_ipv6 = assert_cast<ColumnNullable&>(*column_string_ipv6->assume_mutable());
+ auto column_nullable_date = assert_cast<ColumnNullable&>(*column_string_date->assume_mutable());
+ auto column_nullable_datetime =
+ assert_cast<ColumnNullable&>(*column_string_datetime->assume_mutable());
+
+ column_nullable_ipv4.insert(string_ipv4_field);
+ column_nullable_ipv6.insert(string_ipv6_field);
+ column_nullable_date.insert(string_date_field);
+ column_nullable_datetime.insert(string_datetime_field);
+
+ vectorized::ColumnPtr expected_ipv4;
+ auto status = schema_util::cast_column({column_string_ipv4, data_type_string, ""},
+ data_type_ipv4, &expected_ipv4);
+ EXPECT_TRUE(status.ok());
+ vectorized::ColumnPtr expected_ipv6;
+ status = schema_util::cast_column({column_string_ipv6, data_type_string, ""}, data_type_ipv6,
+ &expected_ipv6);
+ EXPECT_TRUE(status.ok());
+ vectorized::ColumnPtr expected_date;
+ status = schema_util::cast_column({column_string_date, data_type_string, ""}, data_type_date,
+ &expected_date);
+ EXPECT_TRUE(status.ok());
+ vectorized::ColumnPtr expected_datetime;
+ status = schema_util::cast_column({column_string_datetime, data_type_string, ""},
+ data_type_datetime, &expected_datetime);
+ EXPECT_TRUE(status.ok());
+
+ ColumnObject::Subcolumn ipv4_subcolumn(expected_ipv4->assume_mutable(), data_type_ipv4, true,
+ false);
+ ColumnObject::Subcolumn ipv6_subcolumn(expected_ipv6->assume_mutable(), data_type_ipv6, true,
+ false);
+ ColumnObject::Subcolumn date_subcolumn(expected_date->assume_mutable(), data_type_date, true,
+ false);
+ ColumnObject::Subcolumn datetime_subcolumn(expected_datetime->assume_mutable(),
+ data_type_datetime, true, false);
+
+ ipv4_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "ipv4", &sparse_column_values,
+ 0);
+ ipv6_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "ipv6", &sparse_column_values,
+ 0);
+ date_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "date", &sparse_column_values,
+ 0);
+ datetime_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "datetime",
+ &sparse_column_values, 0);
+
+ auto column_object2 = ColumnObject::create(0);
+ const auto& [field5, field_info5] =
+ column_object2->deserialize_from_sparse_column(&sparse_column_values, 4);
+ EXPECT_EQ(field_info5.scalar_type_id, TypeIndex::IPv4);
+ EXPECT_EQ(field_info5.have_nulls, false);
+ EXPECT_EQ(field_info5.need_convert, false);
+ EXPECT_EQ(field_info5.num_dimensions, 0);
+
+ const auto& [field6, field_info6] =
+ column_object2->deserialize_from_sparse_column(&sparse_column_values, 5);
+ EXPECT_EQ(field_info6.scalar_type_id, TypeIndex::IPv6);
+ EXPECT_EQ(field_info6.have_nulls, false);
+ EXPECT_EQ(field_info6.need_convert, false);
+ EXPECT_EQ(field_info6.num_dimensions, 0);
+
+ const auto& [field7, field_info7] =
+ column_object2->deserialize_from_sparse_column(&sparse_column_values, 6);
+ EXPECT_EQ(field_info7.scalar_type_id, TypeIndex::DateV2);
+ EXPECT_EQ(field_info7.have_nulls, false);
+ EXPECT_EQ(field_info7.need_convert, false);
+ EXPECT_EQ(field_info7.num_dimensions, 0);
+
+ const auto& [field8, field_info8] =
+ column_object2->deserialize_from_sparse_column(&sparse_column_values, 7);
+ EXPECT_EQ(field_info8.scalar_type_id, TypeIndex::DateTimeV2);
+ EXPECT_EQ(field_info8.have_nulls, false);
+ EXPECT_EQ(field_info8.need_convert, false);
+ EXPECT_EQ(field_info8.num_dimensions, 0);
+ EXPECT_EQ(field_info8.scale, 6);
+
+ ipv4_subcolumn.insert(field5, field_info5);
+ ipv4_subcolumn.finalize();
+ EXPECT_EQ(ipv4_subcolumn.data.size(), 1);
+ EXPECT_EQ(ipv4_subcolumn.data[0]->size(), 2);
+ auto tmp_col5 = ColumnString::create();
+ VectorBufferWriter write_buffer5(*tmp_col5.get());
+ ipv4_subcolumn.serialize_text_json(0, write_buffer5);
+ write_buffer5.commit();
+ EXPECT_EQ(tmp_col5->get_data_at(0), StringRef("\"192.168.1.1\"", 13));
+ ipv4_subcolumn.serialize_text_json(1, write_buffer5);
+ write_buffer5.commit();
+ EXPECT_EQ(tmp_col5->get_data_at(1), StringRef("\"192.168.1.1\"", 13));
+
+ ipv6_subcolumn.insert(field6, field_info6);
+ ipv6_subcolumn.finalize();
+ EXPECT_EQ(ipv6_subcolumn.data.size(), 1);
+ EXPECT_EQ(ipv6_subcolumn.data[0]->size(), 2);
+ auto tmp_col6 = ColumnString::create();
+ VectorBufferWriter write_buffer6(*tmp_col6.get());
+ ipv6_subcolumn.serialize_text_json(0, write_buffer6);
+ write_buffer6.commit();
+ EXPECT_EQ(tmp_col6->get_data_at(0), StringRef("\"2001:db8:85a3:85a2:85a1:8a2e:370:7334\"", 39));
+ ipv6_subcolumn.serialize_text_json(1, write_buffer6);
+ write_buffer6.commit();
+ EXPECT_EQ(tmp_col6->get_data_at(1), StringRef("\"2001:db8:85a3:85a2:85a1:8a2e:370:7334\"", 39));
+
+ date_subcolumn.insert(field7, field_info7);
+ date_subcolumn.finalize();
+ EXPECT_EQ(date_subcolumn.data.size(), 1);
+ EXPECT_EQ(date_subcolumn.data[0]->size(), 2);
+ auto tmp_col7 = ColumnString::create();
+ VectorBufferWriter write_buffer7(*tmp_col7.get());
+ date_subcolumn.serialize_text_json(0, write_buffer7);
+ write_buffer7.commit();
+ EXPECT_EQ(tmp_col7->get_data_at(0), StringRef("\"2021-01-01\"", 12));
+ date_subcolumn.serialize_text_json(1, write_buffer7);
+ write_buffer7.commit();
+ EXPECT_EQ(tmp_col7->get_data_at(1), StringRef("\"2021-01-01\"", 12));
+
+ datetime_subcolumn.insert(field8, field_info8);
+ datetime_subcolumn.finalize();
+ EXPECT_EQ(datetime_subcolumn.data.size(), 1);
+ EXPECT_EQ(datetime_subcolumn.data[0]->size(), 2);
+ auto tmp_col8 = ColumnString::create();
+ VectorBufferWriter write_buffer8(*tmp_col8.get());
+ datetime_subcolumn.serialize_text_json(0, write_buffer8);
+ write_buffer8.commit();
+ EXPECT_EQ(tmp_col8->get_data_at(0), StringRef("\"2021-01-01 02:09:10\"", 21));
+ datetime_subcolumn.serialize_text_json(1, write_buffer8);
+ write_buffer8.commit();
+ EXPECT_EQ(tmp_col8->get_data_at(1), StringRef("\"2021-01-01 02:09:10\"", 21));
+
+ Field largeint_field = 1289;
+ Field true_field = 1;
+
+ vectorized::DataTypePtr data_type_int =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::Int32,
+ true, 0, 0);
+ vectorized::DataTypePtr data_type_bool =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::UInt8,
+ true, 0, 0);
+ vectorized::DataTypePtr data_type_largeint =
+ vectorized::DataTypeFactory::instance().create_data_type(vectorized::TypeIndex::Int128,
+ true, 0, 0);
+
+ ColumnPtr column_int_largeint = data_type_int->create_column();
+ ColumnPtr column_int_bool = data_type_int->create_column();
+
+ auto column_nullable_int_largeint =
+ assert_cast<ColumnNullable&>(*column_int_largeint->assume_mutable());
+ auto column_nullable_int_bool =
+ assert_cast<ColumnNullable&>(*column_int_bool->assume_mutable());
+
+ column_nullable_int_largeint.insert(largeint_field);
+ column_nullable_int_bool.insert(true_field);
+
+ vectorized::ColumnPtr expected_largeint;
+ status = schema_util::cast_column({column_int_largeint, data_type_int, ""}, data_type_largeint,
+ &expected_largeint);
+ EXPECT_TRUE(status.ok());
+
+ vectorized::ColumnPtr expected_bool;
+ status = schema_util::cast_column({column_int_bool, data_type_int, ""}, data_type_bool,
+ &expected_bool);
+ EXPECT_TRUE(status.ok());
+
+ ColumnObject::Subcolumn largeint_subcolumn(expected_largeint->assume_mutable(),
+ data_type_largeint, true, false);
+ ColumnObject::Subcolumn bool_subcolumn(expected_bool->assume_mutable(), data_type_bool, true,
+ false);
+
+ largeint_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "largeint",
+ &sparse_column_values, 0);
+ bool_subcolumn.serialize_to_sparse_column(&sparse_column_keys, "bool", &sparse_column_values,
+ 0);
+
+ auto column_object3 = ColumnObject::create(0);
+ const auto& [field9, field_info9] =
+ column_object3->deserialize_from_sparse_column(&sparse_column_values, 8);
+ EXPECT_EQ(field_info9.scalar_type_id, TypeIndex::Int128);
+ EXPECT_EQ(field_info9.have_nulls, false);
+ EXPECT_EQ(field_info9.need_convert, false);
+ EXPECT_EQ(field_info9.num_dimensions, 0);
+
+ const auto& [field10, field_info10] =
+ column_object3->deserialize_from_sparse_column(&sparse_column_values, 9);
+ EXPECT_EQ(field_info10.scalar_type_id, TypeIndex::UInt8);
+ EXPECT_EQ(field_info10.have_nulls, false);
+ EXPECT_EQ(field_info10.need_convert, false);
+ EXPECT_EQ(field_info10.num_dimensions, 0);
+
+ largeint_subcolumn.insert(field9, field_info9);
+ largeint_subcolumn.finalize();
+ EXPECT_EQ(largeint_subcolumn.data.size(), 1);
+ EXPECT_EQ(largeint_subcolumn.data[0]->size(), 2);
+ auto tmp_col9 = ColumnString::create();
+ VectorBufferWriter write_buffer9(*tmp_col9.get());
+ largeint_subcolumn.serialize_text_json(0, write_buffer9);
+ write_buffer9.commit();
+ EXPECT_EQ(tmp_col9->get_data_at(0), StringRef("1289", 4));
+ largeint_subcolumn.serialize_text_json(1, write_buffer9);
+ write_buffer9.commit();
+ EXPECT_EQ(tmp_col9->get_data_at(1), StringRef("1289", 4));
+
+ bool_subcolumn.insert(field10, field_info10);
+ bool_subcolumn.finalize();
+ EXPECT_EQ(bool_subcolumn.data.size(), 1);
+ EXPECT_EQ(bool_subcolumn.data[0]->size(), 2);
+ auto tmp_col10 = ColumnString::create();
+ VectorBufferWriter write_buffer10(*tmp_col10.get());
+ bool_subcolumn.serialize_text_json(0, write_buffer10);
+ write_buffer10.commit();
+ EXPECT_EQ(tmp_col10->get_data_at(0), StringRef("1", 1));
+ bool_subcolumn.serialize_text_json(1, write_buffer10);
+ write_buffer10.commit();
+ EXPECT_EQ(tmp_col10->get_data_at(1), StringRef("1", 1));
+}
+
+TEST(ColumnVariantTest, test_array_field_contains_null_field) {
+ ColumnObject::Subcolumn subcolumn(0, true /* is_nullable */, false /* is_root */);
+ Field null_field = Field();
+ Field int_field = Field(1);
+ Field array_field = Array(2);
+ auto& array = array_field.get<Array>();
+ array[0] = int_field;
+ array[1] = null_field;
+ subcolumn.insert(array_field);
+ subcolumn.finalize();
+ EXPECT_EQ(subcolumn.data.size(), 1);
+ EXPECT_EQ(subcolumn.data[0]->size(), 1);
+
+ auto serialized_sparse_column = ColumnMap::create(
+ ColumnString::create(), ColumnString::create(), ColumnArray::ColumnOffsets::create());
+ auto& column_map = assert_cast<ColumnMap&>(*serialized_sparse_column);
+ auto& sparse_column_keys = assert_cast<ColumnString&>(column_map.get_keys());
+ auto& sparse_column_values = assert_cast<ColumnString&>(column_map.get_values());
+ subcolumn.serialize_to_sparse_column(&sparse_column_keys, "array", &sparse_column_values, 0);
+
+ auto column_object3 = ColumnObject::create(0);
+ const auto& [field, field_info] =
+ column_object3->deserialize_from_sparse_column(&sparse_column_values, 0);
+ EXPECT_EQ(field.get<Array>().size(), 2);
+ EXPECT_EQ(field.get<Array>()[0].get<Field>(), int_field);
+ EXPECT_EQ(field.get<Array>()[1].get<Field>(), null_field);
+ EXPECT_EQ(field_info.scalar_type_id, TypeIndex::Int8);
+}
+
+} // namespace doris::vectorized
diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp
index d1d7845..01eda5b 100644
--- a/be/test/vec/columns/column_variant_test.cpp
+++ b/be/test/vec/columns/column_variant_test.cpp
@@ -3492,7 +3492,8 @@
memcpy(binary_data.data(), &str_size, sizeof(size_t));
memcpy(binary_data.data() + sizeof(size_t), test_str.data(), test_str.size());
const char* data = binary_data.data();
- parse_binary_from_sparse_column(TypeIndex::String, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_STRING, data, res,
+ field_info);
EXPECT_EQ(res.get<String>(), "test_data");
}
@@ -3500,28 +3501,31 @@
{
Int8 int8_val = 42;
const char* data = reinterpret_cast<const char*>(&int8_val);
- parse_binary_from_sparse_column(TypeIndex::Int8, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_TINYINT, data, res,
+ field_info);
EXPECT_EQ(res.get<Int8>(), 42);
}
{
Int16 int16_val = 12345;
const char* data = reinterpret_cast<const char*>(&int16_val);
- parse_binary_from_sparse_column(TypeIndex::Int16, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_SMALLINT, data, res,
+ field_info);
EXPECT_EQ(res.get<Int16>(), 12345);
}
{
Int32 int32_val = 123456789;
const char* data = reinterpret_cast<const char*>(&int32_val);
- parse_binary_from_sparse_column(TypeIndex::Int32, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_INT, data, res, field_info);
EXPECT_EQ(res.get<Int32>(), 123456789);
}
{
Int64 int64_val = 1234567890123456789LL;
const char* data = reinterpret_cast<const char*>(&int64_val);
- parse_binary_from_sparse_column(TypeIndex::Int64, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_BIGINT, data, res,
+ field_info);
EXPECT_EQ(res.get<Int64>(), 1234567890123456789LL);
}
@@ -3529,14 +3533,16 @@
{
Float32 float32_val = 3.1415901f;
const char* data = reinterpret_cast<const char*>(&float32_val);
- parse_binary_from_sparse_column(TypeIndex::Float32, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_FLOAT, data, res,
+ field_info);
EXPECT_FLOAT_EQ(res.get<Float32>(), 0);
}
{
Float64 float64_val = 3.141592653589793;
const char* data = reinterpret_cast<const char*>(&float64_val);
- parse_binary_from_sparse_column(TypeIndex::Float64, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_DOUBLE, data, res,
+ field_info);
EXPECT_DOUBLE_EQ(res.get<Float64>(), 3.141592653589793);
}
@@ -3549,14 +3555,8 @@
memcpy(binary_data.data(), &json_size, sizeof(size_t));
memcpy(binary_data.data() + sizeof(size_t), json_str.data(), json_str.size());
const char* data = binary_data.data();
- parse_binary_from_sparse_column(TypeIndex::JSONB, data, res, field_info);
- }
-
- // Test Nothing type
- {
- const char* data = nullptr;
- parse_binary_from_sparse_column(TypeIndex::Nothing, data, res, field_info);
- EXPECT_TRUE(res.is_null());
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_JSONB, data, res,
+ field_info);
}
// Test Array type
@@ -3571,48 +3571,24 @@
data_ptr += sizeof(size_t);
// Write first element (Int32)
- *data_ptr++ = static_cast<uint8_t>(TypeIndex::Int32);
+ *data_ptr++ = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_INT);
Int32 val1 = 42;
memcpy(data_ptr, &val1, sizeof(Int32));
data_ptr += sizeof(Int32);
// Write second element (Int32)
- *data_ptr++ = static_cast<uint8_t>(TypeIndex::Int32);
+ *data_ptr++ = static_cast<uint8_t>(FieldType::OLAP_FIELD_TYPE_INT);
Int32 val2 = 43;
memcpy(data_ptr, &val2, sizeof(Int32));
const char* data = binary_data.data();
- parse_binary_from_sparse_column(TypeIndex::Array, data, res, field_info);
+ parse_binary_from_sparse_column(FieldType::OLAP_FIELD_TYPE_ARRAY, data, res,
+ field_info);
const Array& array = res.get<Array>();
EXPECT_EQ(array.size(), 2);
EXPECT_EQ(array[0].get<Int32>(), 42);
EXPECT_EQ(array[1].get<Int32>(), 43);
}
-
- // Test unsupported types - these should throw exceptions
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::UInt8, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::UInt16, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::UInt32, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::UInt64, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::Date, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::DateTime, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::Decimal32, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::Decimal64, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::Decimal128V2, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::Tuple, nullptr, res, field_info));
- EXPECT_ANY_THROW(parse_binary_from_sparse_column(TypeIndex::Map, nullptr, res, field_info));
- EXPECT_ANY_THROW(
- parse_binary_from_sparse_column(TypeIndex::VARIANT, nullptr, res, field_info));
}
// Test add_sub_column
diff --git a/be/test/vec/common/schema_util_rowset_test.cpp b/be/test/vec/common/schema_util_rowset_test.cpp
index a7a604c..6833fc8 100644
--- a/be/test/vec/common/schema_util_rowset_test.cpp
+++ b/be/test/vec/common/schema_util_rowset_test.cpp
@@ -535,3 +535,124 @@
// write null data
EXPECT_TRUE(variant_subcolumn_writer->write_data().ok());
}
+
+TEST_F(SchemaUtilRowsetTest, typed_path_to_sparse_column) {
+ all_path_stats.clear();
+ // 1.create tablet schema
+ TabletSchemaPB schema_pb;
+ construct_column(schema_pb.add_column(), 0, "INT", "key", true);
+ construct_column(schema_pb.add_column(), 1, "VARIANT", "v1");
+ construct_column(schema_pb.add_column(), 2, "STRING", "v2");
+ construct_column(schema_pb.add_column(), 3, "VARIANT", "v3");
+ construct_column(schema_pb.add_column(), 4, "INT", "v4");
+ TabletSchemaSPtr tablet_schema = std::make_shared<TabletSchema>();
+ tablet_schema->init_from_pb(schema_pb);
+
+ // 2. create tablet
+ TabletMetaSharedPtr tablet_meta(new TabletMeta(tablet_schema));
+ _tablet = std::make_shared<Tablet>(*_engine_ref, tablet_meta, _data_dir.get());
+ EXPECT_TRUE(_tablet->init().ok());
+ EXPECT_TRUE(io::global_local_filesystem()->create_directory(_tablet->tablet_path()).ok());
+
+ // 3. create rowset
+ std::vector<RowsetSharedPtr> rowsets;
+ for (int i = 0; i < 5; i++) {
+ const auto& res = RowsetFactory::create_rowset_writer(
+ *_engine_ref,
+ rowset_writer_context(_data_dir, tablet_schema, _tablet->tablet_path()), false);
+ EXPECT_TRUE(res.has_value()) << res.error();
+ const auto& rowset_writer = res.value();
+ auto rowset = create_rowset(rowset_writer, tablet_schema);
+ EXPECT_TRUE(_tablet->add_rowset(rowset).ok());
+ rowsets.push_back(rowset);
+ }
+
+ std::unordered_map<int32_t, schema_util::PathToNoneNullValues> path_stats;
+ for (const auto& rowset : rowsets) {
+ auto st = schema_util::aggregate_path_to_stats(rowset, &path_stats);
+ EXPECT_TRUE(st.ok()) << st.msg();
+ }
+
+ for (const auto& [uid, path_stats] : path_stats) {
+ for (const auto& [path, size] : path_stats) {
+ EXPECT_EQ(all_path_stats[uid][path], size);
+ }
+ }
+
+ // 4. get compaction schema
+ TabletSchemaSPtr compaction_schema = tablet_schema;
+ auto st = schema_util::get_compaction_schema(rowsets, compaction_schema);
+
+ for (const auto& column : compaction_schema->columns()) {
+ if (column->is_extracted_column()) {
+ EXPECT_FALSE(column->is_variant_type());
+ }
+ }
+ EXPECT_TRUE(st.ok()) << st.msg();
+
+ // 5. check compaction schema
+ std::unordered_map<int32_t, std::vector<std::string>> compaction_schema_map;
+ for (const auto& column : compaction_schema->columns()) {
+ if (column->parent_unique_id() > 0) {
+ compaction_schema_map[column->parent_unique_id()].push_back(column->name());
+ }
+ }
+ for (auto& [uid, paths] : compaction_schema_map) {
+ EXPECT_EQ(paths.size(), 4);
+ std::sort(paths.begin(), paths.end());
+ EXPECT_TRUE(paths[0].ends_with("__DORIS_VARIANT_SPARSE__"));
+ EXPECT_TRUE(paths[1].ends_with("key0"));
+ EXPECT_TRUE(paths[2].ends_with("key1"));
+ EXPECT_TRUE(paths[3].ends_with("key2"));
+ }
+
+ // 6.compaction for output rs
+ // create input rowset reader
+ vector<RowsetReaderSharedPtr> input_rs_readers;
+ for (auto& rowset : rowsets) {
+ RowsetReaderSharedPtr rs_reader;
+ ASSERT_TRUE(rowset->create_reader(&rs_reader).ok());
+ input_rs_readers.push_back(std::move(rs_reader));
+ }
+
+ auto sc = schema_util::calculate_variant_extended_schema(rowsets, tablet_schema);
+ std::cout << sc->columns().size() << std::endl;
+
+ // create output rowset writer
+ auto create_rowset_writer_context = [this](TabletSchemaSPtr tablet_schema,
+ const SegmentsOverlapPB& overlap,
+ uint32_t max_rows_per_segment, Version version) {
+ static int64_t inc_id = 1000;
+ RowsetWriterContext rowset_writer_context;
+ RowsetId rowset_id;
+ rowset_id.init(inc_id);
+ rowset_writer_context.rowset_id = rowset_id;
+ rowset_writer_context.rowset_type = BETA_ROWSET;
+ rowset_writer_context.rowset_state = VISIBLE;
+ rowset_writer_context.tablet_schema = tablet_schema;
+ rowset_writer_context.tablet_path = _absolute_dir + "/../";
+ rowset_writer_context.version = version;
+ rowset_writer_context.segments_overlap = overlap;
+ rowset_writer_context.max_rows_per_segment = max_rows_per_segment;
+ inc_id++;
+ return rowset_writer_context;
+ };
+ auto writer_context = create_rowset_writer_context(tablet_schema, NONOVERLAPPING, 3456,
+ {0, rowsets.back()->end_version()});
+ auto res_ = RowsetFactory::create_rowset_writer(*_engine_ref, writer_context, true);
+ ASSERT_TRUE(res_.has_value()) << res_.error();
+ auto output_rs_writer = std::move(res_).value();
+ Merger::Statistics stats;
+ RowIdConversion rowid_conversion;
+ stats.rowid_conversion = &rowid_conversion;
+ auto s = Merger::vertical_merge_rowsets(_tablet, ReaderType::READER_BASE_COMPACTION,
+ *tablet_schema, input_rs_readers,
+ output_rs_writer.get(), 100, 5, &stats);
+ ASSERT_TRUE(s.ok()) << s;
+ RowsetSharedPtr out_rowset;
+ EXPECT_EQ(Status::OK(), output_rs_writer->build(out_rowset));
+ ASSERT_TRUE(out_rowset);
+
+ // 7. check output rowset
+ EXPECT_TRUE(schema_util::check_path_stats(rowsets, out_rowset, _tablet).ok());
+}
diff --git a/be/test/vec/common/schema_util_test.cpp b/be/test/vec/common/schema_util_test.cpp
index 9214daa..1835d03 100644
--- a/be/test/vec/common/schema_util_test.cpp
+++ b/be/test/vec/common/schema_util_test.cpp
@@ -20,15 +20,17 @@
#include <gmock/gmock-more-matchers.h>
#include <gtest/gtest.h>
+#include "olap/rowset/beta_rowset.h"
#include "olap/rowset/rowset_fwd.h"
#include "olap/rowset/segment_v2/variant/variant_column_writer_impl.h"
#include "testutil/variant_util.h"
#include "vec/columns/column_nothing.h"
#include "vec/columns/column_object.h"
-#include "vec/common/schema_util.cpp"
+#include "vec/common/schema_util.h"
#include "vec/data_types/data_type_array.h"
#include "vec/data_types/data_type_date_time.h"
#include "vec/data_types/data_type_decimal.h"
+#include "vec/data_types/data_type_ipv4.h"
#include "vec/data_types/data_type_nothing.h"
#include "vec/data_types/data_type_time_v2.h"
#include "vec/data_types/data_type_variant.h"
@@ -1791,3 +1793,99 @@
EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_VARIANT);
}
}
+
+TEST_F(SchemaUtilTest, get_compaction_subcolumns_advanced) {
+ TabletColumn variant;
+ variant.set_unique_id(30);
+ variant.set_variant_max_subcolumns_count(3);
+ variant.set_aggregation_method(FieldAggregationMethod::OLAP_FIELD_AGGREGATION_NONE);
+ variant.set_variant_enable_typed_paths_to_sparse(true);
+ TabletColumn subcolumn;
+ subcolumn.set_name("c");
+ subcolumn.set_type(FieldType::OLAP_FIELD_TYPE_DATEV2);
+ variant.add_sub_column(subcolumn);
+ TabletColumn subcolumn2;
+ subcolumn2.set_name("d");
+ subcolumn2.set_type(FieldType::OLAP_FIELD_TYPE_DATEV2);
+ variant.add_sub_column(subcolumn2);
+
+ TabletSchemaSPtr schema = std::make_shared<TabletSchema>();
+ schema->append_column(variant);
+
+ TabletColumnPtr parent_column = std::make_shared<TabletColumn>(variant);
+
+ TabletSchema::PathsSetInfo paths_set_info;
+ paths_set_info.sub_path_set.insert("a");
+ paths_set_info.sub_path_set.insert("b");
+ paths_set_info.sub_path_set.insert("c");
+ paths_set_info.sub_path_set.insert("d");
+ doris::vectorized::schema_util::PathToDataTypes path_to_data_types;
+ std::unordered_set<std::string> sparse_paths;
+ TabletSchemaSPtr output_schema = std::make_shared<TabletSchema>();
+
+ schema_util::get_compaction_subcolumns(paths_set_info, parent_column, schema,
+ path_to_data_types, sparse_paths, output_schema);
+ EXPECT_EQ(output_schema->num_columns(), 4);
+ for (const auto& column : output_schema->columns()) {
+ if (column->name().ends_with("a") || column->name().ends_with("b")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_VARIANT);
+ } else if (column->name().ends_with("c") || column->name().ends_with("d")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_DATEV2);
+ }
+ }
+
+ output_schema = std::make_shared<TabletSchema>();
+ path_to_data_types.clear();
+ path_to_data_types[vectorized::PathInData("a")] = {
+ std::make_shared<vectorized::DataTypeInt32>()};
+ path_to_data_types[vectorized::PathInData("b")] = {
+ std::make_shared<vectorized::DataTypeString>()};
+ schema_util::get_compaction_subcolumns(paths_set_info, parent_column, schema,
+ path_to_data_types, sparse_paths, output_schema);
+ EXPECT_EQ(output_schema->num_columns(), 4);
+ bool found_int = false, found_str = false;
+ for (const auto& column : output_schema->columns()) {
+ if (column->name().ends_with("a")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_INT);
+ found_int = true;
+ } else if (column->name().ends_with("b")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_STRING);
+ found_str = true;
+ } else if (column->name().ends_with("c") || column->name().ends_with("d")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_DATEV2);
+ }
+ }
+ EXPECT_TRUE(found_int && found_str);
+
+ output_schema = std::make_shared<TabletSchema>();
+ sparse_paths.insert("a");
+ schema_util::get_compaction_subcolumns(paths_set_info, parent_column, schema,
+ path_to_data_types, sparse_paths, output_schema);
+ EXPECT_EQ(output_schema->num_columns(), 4);
+ for (const auto& column : output_schema->columns()) {
+ if (column->name().ends_with("a")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_VARIANT);
+ } else if (column->name().ends_with("b")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_STRING);
+ } else if (column->name().ends_with("c") || column->name().ends_with("d")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_DATEV2);
+ }
+ }
+
+ output_schema = std::make_shared<TabletSchema>();
+ sparse_paths.clear();
+
+ for (int i = 0; i < config::variant_max_sparse_column_statistics_size + 1; ++i) {
+ sparse_paths.insert("dummy" + std::to_string(i));
+ }
+ schema_util::get_compaction_subcolumns(paths_set_info, parent_column, schema,
+ path_to_data_types, sparse_paths, output_schema);
+ EXPECT_EQ(output_schema->num_columns(), 4);
+ for (const auto& column : output_schema->columns()) {
+ if (column->name().ends_with("a") || column->name().ends_with("b")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_VARIANT);
+ } else if (column->name().ends_with("c") || column->name().ends_with("d")) {
+ EXPECT_EQ(column->type(), FieldType::OLAP_FIELD_TYPE_DATEV2);
+ }
+ }
+}
diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
index 51f8f9c..7bd49d2 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
@@ -1213,4 +1213,18 @@
result = 31 * result + scale;
return result;
}
+
+ public int getVariantMaxSubcolumnsCount() {
+ if (this instanceof VariantType) {
+ return ((VariantType) this).getVariantMaxSubcolumnsCount();
+ }
+ return 0;
+ }
+
+ public boolean getVariantEnableTypedPathsToSparse() {
+ if (this instanceof VariantType) {
+ return ((VariantType) this).getEnableTypedPathsToSparse();
+ }
+ return false;
+ }
}
diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantField.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantField.java
index f300916..52d5e60 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantField.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantField.java
@@ -67,15 +67,15 @@
}
public String toSql(int depth) {
- String typeSql;
- if (depth < Type.MAX_NESTING_DEPTH) {
- typeSql = type.toSql(depth + 1);
- } else {
- typeSql = "...";
+ StringBuilder sb = new StringBuilder();
+ if (patternType == TPatternType.MATCH_NAME) {
+ sb.append(patternType.toString()).append(" ");
}
- StringBuilder sb = new StringBuilder(patternType.toString() + " '");
- if (type != null) {
- sb.append(pattern).append("':").append(typeSql);
+
+ sb.append("'").append(pattern).append("'");
+ sb.append(":").append(type.toSql(depth + 1));
+ if (!comment.isEmpty()) {
+ sb.append(" COMMENT '").append(comment).append("'");
}
return sb.toString();
}
diff --git a/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java b/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
index a173cf8..29342d7 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
@@ -19,7 +19,6 @@
import org.apache.doris.thrift.TTypeDesc;
-import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -29,7 +28,9 @@
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Map;
import java.util.Objects;
+import java.util.stream.Collectors;
public class VariantType extends ScalarType {
private static final Logger LOG = LogManager.getLogger(VariantType.class);
@@ -40,11 +41,18 @@
private final ArrayList<VariantField> predefinedFields;
@SerializedName(value = "variantMaxSubcolumnsCount")
- private int variantMaxSubcolumnsCount;
+ private int variantMaxSubcolumnsCount = 0;
+
+ @SerializedName(value = "enableTypedPathsToSparse")
+ private boolean enableTypedPathsToSparse = false;
+
+ private Map<String, String> properties = Maps.newHashMap();
public VariantType() {
super(PrimitiveType.VARIANT);
this.predefinedFields = Lists.newArrayList();
+ this.variantMaxSubcolumnsCount = 0;
+ this.enableTypedPathsToSparse = false;
}
public VariantType(ArrayList<VariantField> fields) {
@@ -56,19 +64,67 @@
}
}
+ public VariantType(Map<String, String> properties) {
+ super(PrimitiveType.VARIANT);
+ this.predefinedFields = Lists.newArrayList();
+ this.properties = properties;
+ }
+
+ public VariantType(ArrayList<VariantField> fields, Map<String, String> properties) {
+ super(PrimitiveType.VARIANT);
+ Preconditions.checkNotNull(fields);
+ this.predefinedFields = fields;
+ for (VariantField predefinedField : this.predefinedFields) {
+ fieldMap.put(predefinedField.getPattern(), predefinedField);
+ }
+ this.properties = properties;
+ }
+
+ public VariantType(ArrayList<VariantField> fields, int variantMaxSubcolumnsCount,
+ boolean enableTypedPathsToSparse) {
+ super(PrimitiveType.VARIANT);
+ Preconditions.checkNotNull(fields);
+ this.predefinedFields = fields;
+ for (VariantField predefinedField : this.predefinedFields) {
+ fieldMap.put(predefinedField.getPattern(), predefinedField);
+ }
+ this.variantMaxSubcolumnsCount = variantMaxSubcolumnsCount;
+ this.enableTypedPathsToSparse = enableTypedPathsToSparse;
+ }
+
@Override
public String toSql(int depth) {
- if (predefinedFields.isEmpty()) {
+ if (predefinedFields.isEmpty() && variantMaxSubcolumnsCount == 0) {
return "variant";
}
- if (depth >= MAX_NESTING_DEPTH) {
- return "variant<...>";
+ StringBuilder sb = new StringBuilder();
+ sb.append("variant");
+ sb.append("<");
+ if (!predefinedFields.isEmpty()) {
+ sb.append(predefinedFields.stream()
+ .map(variantField -> variantField.toSql(depth)).collect(Collectors.joining(",")));
+ if (variantMaxSubcolumnsCount == 0 && !enableTypedPathsToSparse) {
+ sb.append(">");
+ return sb.toString();
+ } else {
+ sb.append(",");
+ }
}
- ArrayList<String> fieldsSql = Lists.newArrayList();
- for (VariantField f : predefinedFields) {
- fieldsSql.add(f.toSql(depth + 1));
+
+ sb.append("PROPERTIES (");
+ if (variantMaxSubcolumnsCount != 0) {
+ sb.append("\"variant_max_subcolumns_count\" = \"")
+ .append(String.valueOf(variantMaxSubcolumnsCount)).append("\"");
}
- return String.format("variant<%s>", Joiner.on(",").join(fieldsSql));
+ if (variantMaxSubcolumnsCount != 0 && enableTypedPathsToSparse) {
+ sb.append(",");
+ }
+ if (enableTypedPathsToSparse) {
+ sb.append("\"variant_enable_typed_paths_to_sparse\" = \"")
+ .append(String.valueOf(enableTypedPathsToSparse)).append("\"");
+ }
+ sb.append(")>");
+ return sb.toString();
}
public ArrayList<VariantField> getPredefinedFields() {
@@ -120,4 +176,16 @@
public int getVariantMaxSubcolumnsCount() {
return variantMaxSubcolumnsCount;
}
+
+ public boolean getEnableTypedPathsToSparse() {
+ return enableTypedPathsToSparse;
+ }
+
+ public Map<String, String> getProperties() {
+ return properties;
+ }
+
+ public void setEnableTypedPathsToSparse(boolean enableTypedPathsToSparse) {
+ this.enableTypedPathsToSparse = enableTypedPathsToSparse;
+ }
}
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 db8843a..bf34640 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
@@ -1707,7 +1707,7 @@
: complex=ARRAY LT dataType GT #complexDataType
| complex=MAP LT dataType COMMA dataType GT #complexDataType
| complex=STRUCT LT complexColTypeList GT #complexDataType
- | VARIANT LT variantSubColTypeList GT #variantPredefinedFields
+ | complex=variantTypeDefinitions #variantPredefinedFields
| AGG_STATE LT functionNameIdentifier
LEFT_PAREN dataTypes+=dataTypeWithNullable
(COMMA dataTypes+=dataTypeWithNullable)* RIGHT_PAREN GT #aggStateDataType
@@ -1746,7 +1746,6 @@
| type=DECIMALV3
| type=IPV4
| type=IPV6
- | type=VARIANT
| type=ALL
;
@@ -1758,6 +1757,13 @@
: identifier COLON dataType commentSpec?
;
+variantTypeDefinitions
+ : VARIANT LT variantSubColTypeList COMMA properties=propertyClause GT #variantWithFieldsAndProps
+ | VARIANT LT variantSubColTypeList GT #variantWithOnlyFields
+ | VARIANT LT properties=propertyClause GT #variantWithOnlyProps
+ | VARIANT #variant
+ ;
+
variantSubColTypeList
: variantSubColType (COMMA variantSubColType)*
;
diff --git a/fe/fe-core/src/main/cup/sql_parser.cup b/fe/fe-core/src/main/cup/sql_parser.cup
index 830f0e4..6d61c85 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -853,7 +853,7 @@
nonterminal List<WorkloadActionMeta> workload_policy_action_list, opt_actions, actions;
nonterminal Map<String, String> key_value_map, opt_key_value_map, opt_key_value_map_in_paren, opt_properties,
- opt_ext_properties, opt_enable_feature_properties, properties;
+ opt_ext_properties, opt_enable_feature_properties, properties, type_opt_properties;
nonterminal ColumnDef column_definition;
nonterminal IndexDef index_definition;
nonterminal ArrayList<ColumnDef> column_definition_list;
@@ -3135,6 +3135,13 @@
:}
;
+type_opt_properties ::=
+ COMMA opt_properties:type_properties
+ {: RESULT = type_properties; :}
+ | /* empty */
+ {: RESULT = Maps.newHashMap(); :}
+ ;
+
opt_properties ::=
{:
RESULT = Maps.newHashMap();
@@ -5273,8 +5280,10 @@
{: RESULT = new MapType(key_type,value_type); :}
| KW_STRUCT LESSTHAN struct_field_list:fields GREATERTHAN
{: RESULT = new StructType(fields); :}
- | KW_VARIANT LESSTHAN variant_field_list:fields GREATERTHAN
- {: RESULT = new VariantType(fields); :}
+ | KW_VARIANT LESSTHAN variant_field_list:fields type_opt_properties:prop GREATERTHAN
+ {: RESULT = new VariantType(fields, prop); :}
+ | KW_VARIANT LESSTHAN properties:prop GREATERTHAN
+ {: RESULT = new VariantType(prop); :}
| KW_CHAR LPAREN INTEGER_LITERAL:len RPAREN
{: ScalarType type = ScalarType.createCharType(len.intValue());
RESULT = type;
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 024e7e1..140a0b5 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
@@ -66,7 +66,6 @@
import org.apache.doris.catalog.Tablet;
import org.apache.doris.catalog.TabletMeta;
import org.apache.doris.catalog.Type;
-import org.apache.doris.catalog.VariantType;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.Config;
import org.apache.doris.common.DdlException;
@@ -688,8 +687,9 @@
if (modColumn.getChildren().size() > 0 || oriColumn.getChildren().size() > 0) {
throw new DdlException("Can not modify variant column with children");
}
- VariantType scType = (VariantType) type;
- scType.setVariantMaxSubcolumnsCount(olapTable.getVariantMaxSubcolumnsCount());
+ if (modColumn.getVariantMaxSubcolumnsCount() != oriColumn.getVariantMaxSubcolumnsCount()) {
+ throw new DdlException("Can not modify variant column property variant max subcolumns count");
+ }
}
if (!modColumn.equals(oriColumn) && oriColumn.isAutoInc() != modColumn.isAutoInc()) {
@@ -1037,11 +1037,6 @@
lightSchemaChange = false;
}
- Type type = newColumn.getType();
- if (type.isVariantType()) {
- VariantType scType = (VariantType) type;
- scType.setVariantMaxSubcolumnsCount(olapTable.getVariantMaxSubcolumnsCount());
- }
// check if the new column already exist in base schema.
// do not support adding new column which already exist in base schema.
List<Column> baseSchema = olapTable.getBaseSchema(true);
@@ -1074,6 +1069,16 @@
throw new DdlException("Not supporting alter table add generated columns.");
}
+ if (newColumn.getType().isVariantType() && olapTable.hasVariantColumns()) {
+ Pair<Integer, Integer> res = olapTable.getMinMaxVariantSubcolumnsCount();
+ int currentCount = newColumn.getVariantMaxSubcolumnsCount();
+ if ((currentCount == 0 && (res.key() != 0 || res.value() != 0))
+ || (currentCount > 0 && (res.key() == 0 && res.value() == 0))) {
+ throw new DdlException("The variant_max_subcolumns_count must either be 0 in all columns"
+ + " or greater than 0 in all columns");
+ }
+ }
+
/*
* add new column to indexes.
* UNIQUE:
@@ -2778,7 +2783,7 @@
.compareTo(TInvertedIndexFileStorageFormat.V2) >= 0) {
String columnName = indexDef.getColumns().get(0);
Column column = olapTable.getColumn(columnName);
- if (column != null && column.getType().isStringType()) {
+ if (column != null && (column.getType().isStringType() || column.getType().isVariantType())) {
boolean isExistingIndexAnalyzer = index.isAnalyzedInvertedIndex();
boolean isNewIndexAnalyzer = indexDef.isAnalyzedInvertedIndex();
if (isExistingIndexAnalyzer == isNewIndexAnalyzer) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/InvertedIndexUtil.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/InvertedIndexUtil.java
index c1c8a90..149e1e0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/InvertedIndexUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/InvertedIndexUtil.java
@@ -83,6 +83,16 @@
return fieldPattern != null ? fieldPattern : "";
}
+ public static boolean getInvertedIndexSupportPhrase(Map<String, String> properties) {
+ String supportPhrase = properties == null ? null : properties.get(INVERTED_INDEX_SUPPORT_PHRASE_KEY);
+ return supportPhrase != null ? Boolean.parseBoolean(supportPhrase) : true;
+ }
+
+ public static String getCustomAnalyzer(Map<String, String> properties) {
+ String customAnalyzer = properties == null ? null : properties.get(INVERTED_INDEX_CUSTOM_ANALYZER_KEY);
+ return customAnalyzer != null ? customAnalyzer : "";
+ }
+
public static String getInvertedIndexParserMode(Map<String, String> properties) {
String mode = properties == null ? null : properties.get(INVERTED_INDEX_PARSER_MODE_KEY);
// default is "none" if not set
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/MVColumnItem.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/MVColumnItem.java
index ee21e0d..d915d74 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/MVColumnItem.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/MVColumnItem.java
@@ -25,7 +25,6 @@
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.catalog.Table;
import org.apache.doris.catalog.Type;
-import org.apache.doris.catalog.VariantType;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.DdlException;
@@ -195,12 +194,6 @@
result.setIsAllowNull(defineExpr.isNullable());
}
}
- if (result.getType().isVariantType()) {
- VariantType variantType = (VariantType) this.getType();
- if (variantType.getVariantMaxSubcolumnsCount() != olapTable.getVariantMaxSubcolumnsCount()) {
- throw new DdlException("MVColumnItem variantType is error");
- }
- }
result.setName(name);
result.setAggregationType(aggregationType, isAggregationTypeImplicit);
result.setDefineExpr(defineExpr);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java
index 9bde8ed..f77fc72 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/TypeDef.java
@@ -27,7 +27,10 @@
import org.apache.doris.catalog.StructField;
import org.apache.doris.catalog.StructType;
import org.apache.doris.catalog.Type;
+import org.apache.doris.catalog.VariantType;
import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.util.PropertyAnalyzer;
+import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.SessionVariable;
import org.apache.doris.thrift.TColumnDesc;
import org.apache.doris.thrift.TPrimitiveType;
@@ -333,6 +336,32 @@
}
break;
}
+ case VARIANT: {
+ // Configure VariantType parameters by merging session variables with user-specified properties.
+ // Supported properties: variant_max_subcolumns_count, variant_enable_typed_paths_to_sparse
+ VariantType variantType = (VariantType) scalarType;
+ int variantMaxSubcolumnsCount = ConnectContext.get() == null ? 0 :
+ ConnectContext.get().getSessionVariable().getGlobalVariantMaxSubcolumnsCount();
+ boolean enableTypedPathsToSparse = ConnectContext.get() == null ? false :
+ ConnectContext.get().getSessionVariable().getGlobalEnableTypedPathsToSparse();
+ try {
+ variantMaxSubcolumnsCount = PropertyAnalyzer
+ .analyzeVariantMaxSubcolumnsCount(variantType.getProperties(), variantMaxSubcolumnsCount);
+ enableTypedPathsToSparse = PropertyAnalyzer
+ .analyzeEnableTypedPathsToSparse(variantType.getProperties(), enableTypedPathsToSparse);
+ } catch (org.apache.doris.common.AnalysisException e) {
+ throw new AnalysisException(e.getMessage());
+ }
+ variantType.setVariantMaxSubcolumnsCount(variantMaxSubcolumnsCount);
+ variantType.setEnableTypedPathsToSparse(enableTypedPathsToSparse);
+
+ if (!variantType.getProperties().isEmpty()) {
+ throw new AnalysisException("variant type only support for "
+ + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE
+ + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT);
+ }
+ break;
+ }
case INVALID_TYPE:
throw new AnalysisException("Invalid type.");
default: break;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
index 82ad2dd..ffa2a78 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
@@ -348,7 +348,7 @@
c.setIsAllowNull(field.getContainsNull());
column.addChildrenColumn(c);
}
- } else if (type.isVariantType()) {
+ } else if (type.isVariantType() && type instanceof VariantType) {
// variant may contain predefined structured fields
ArrayList<VariantField> fields = ((VariantType) type).getPredefinedFields();
for (VariantField field : fields) {
@@ -517,6 +517,14 @@
return type instanceof ScalarType ? ((ScalarType) type).getScalarScale() : -1;
}
+ public int getVariantMaxSubcolumnsCount() {
+ return type.isVariantType() ? ((ScalarType) type).getVariantMaxSubcolumnsCount() : -1;
+ }
+
+ public boolean getVariantEnableTypedPathsToSparse() {
+ return type.isVariantType() ? ((ScalarType) type).getVariantEnableTypedPathsToSparse() : false;
+ }
+
public AggregateType getAggregationType() {
return this.aggregationType;
}
@@ -562,6 +570,10 @@
fieldPatternType = type;
}
+ public TPatternType getFieldPatternType() {
+ return fieldPatternType;
+ }
+
public String getDefaultValue() {
return this.defaultValue;
}
@@ -632,12 +644,9 @@
tColumnType.setLen(this.getStrLen());
tColumnType.setPrecision(this.getPrecision());
tColumnType.setScale(this.getScale());
+ tColumnType.setVariantMaxSubcolumnsCount(this.getVariantMaxSubcolumnsCount());
tColumnType.setIndexLen(this.getOlapColumnIndexSize());
- if (this.getType().isVariantType()) {
- VariantType variantType = (VariantType) this.getType();
- tColumnType.setVariantMaxSubcolumnsCount(variantType.getVariantMaxSubcolumnsCount());
- }
tColumn.setColumnType(tColumnType);
if (null != this.aggregationType) {
@@ -667,6 +676,7 @@
tColumn.setBeExecVersion(Config.be_exec_version);
}
tColumn.setClusterKeyId(this.clusterKeyId);
+ tColumn.setVariantEnableTypedPathsToSparse(this.getVariantEnableTypedPathsToSparse());
// ATTN:
// Currently, this `toThrift()` method is only used from CreateReplicaTask.
// And CreateReplicaTask does not need `defineExpr` field.
@@ -881,8 +891,8 @@
builder.addChildrenColumns(c.toPb(Sets.newHashSet(), Lists.newArrayList()));
}
} else if (this.type.isVariantType()) {
- VariantType variantType = (VariantType) this.getType();
- builder.setVariantMaxSubcolumnsCount(variantType.getVariantMaxSubcolumnsCount());
+ builder.setVariantMaxSubcolumnsCount(this.getVariantMaxSubcolumnsCount());
+ builder.setVariantEnableTypedPathsToSparse(this.getVariantEnableTypedPathsToSparse());
// variant may contain predefined structured fields
addChildren(builder);
}
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 f1f70ad..fd01411 100644
--- 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
@@ -3870,12 +3870,6 @@
sb.append(olapTable.variantEnableFlattenNested()).append("\"");
}
- // variant max subcolumns count
- if (olapTable.getVariantMaxSubcolumnsCount() != 0) {
- sb.append(",\n\"").append(PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT).append("\" = \"");
- sb.append(olapTable.getVariantMaxSubcolumnsCount()).append("\"");
- }
-
// binlog
if (Config.enable_feature_binlog) {
BinlogConfig binlogConfig = olapTable.getBinlogConfig();
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 8dd587c..f25eb2c 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
@@ -173,7 +173,14 @@
return InvertedIndexUtil.getInvertedIndexParserStopwords(properties);
}
- // Whether the index can be changed in light mode
+ public String getInvertedIndexFieldPattern() {
+ return InvertedIndexUtil.getInvertedIndexFieldPattern(properties);
+ }
+
+ public boolean getInvertedIndexSupportPhrase() {
+ return InvertedIndexUtil.getInvertedIndexSupportPhrase(properties);
+ }
+
public boolean isLightIndexChangeSupported() {
return indexType == IndexDef.IndexType.INVERTED;
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 457f1b9..957653d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -84,6 +84,7 @@
import org.apache.doris.thrift.TNodeInfo;
import org.apache.doris.thrift.TOlapTable;
import org.apache.doris.thrift.TPaloNodesInfo;
+import org.apache.doris.thrift.TPatternType;
import org.apache.doris.thrift.TPrimitiveType;
import org.apache.doris.thrift.TSortType;
import org.apache.doris.thrift.TStorageFormat;
@@ -2504,26 +2505,6 @@
return false;
}
- public void setVariantMaxSubcolumnsCount(int maxSubcoumnsCount) {
- List<Column> columns = getBaseSchema(true);
- boolean hasVariantType = false;
- for (Column column : columns) {
- Type type = column.getType();
- if (type.isVariantType()) {
- hasVariantType = true;
- VariantType scType = (VariantType) type;
- scType.setVariantMaxSubcolumnsCount(maxSubcoumnsCount);
- }
- }
- if (hasVariantType) {
- getOrCreatTableProperty().setVariantMaxSubcolumnsCount(maxSubcoumnsCount);
- }
- }
-
- public int getVariantMaxSubcolumnsCount() {
- return getOrCreatTableProperty().getVariantMaxSubcolumnsCount();
- }
-
public int getBaseSchemaVersion() {
MaterializedIndexMeta baseIndexMeta = indexIdToMeta.get(baseIndexId);
return baseIndexMeta.getSchemaVersion();
@@ -3602,4 +3583,76 @@
protected void addIndexNameToIdForUnitTest(String name, long id) {
indexNameToId.put(name, id);
}
+
+ public Pair<Integer, Integer> getMinMaxVariantSubcolumnsCount() {
+ int minVariantSubcolumnsCount = Integer.MAX_VALUE;
+ int maxVariantSubcolumnsCount = -1;
+ for (Column column : getBaseSchema()) {
+ if (column.getType().isVariantType()) {
+ minVariantSubcolumnsCount =
+ Math.min(minVariantSubcolumnsCount, column.getVariantMaxSubcolumnsCount());
+ maxVariantSubcolumnsCount =
+ Math.max(maxVariantSubcolumnsCount, column.getVariantMaxSubcolumnsCount());
+ }
+ }
+ return Pair.of(minVariantSubcolumnsCount, maxVariantSubcolumnsCount);
+ }
+
+ public Index getInvertedIndex(Column column, List<String> subPath) {
+ List<Index> invertedIndexes = new ArrayList<>();
+ for (Index index : indexes.getIndexes()) {
+ if (index.getIndexType() == IndexDef.IndexType.INVERTED) {
+ List<String> columns = index.getColumns();
+ if (columns != null && !columns.isEmpty() && column.getName().equals(columns.get(0))) {
+ invertedIndexes.add(index);
+ }
+ }
+ }
+
+ if (subPath == null || subPath.isEmpty()) {
+ return invertedIndexes.size() == 1 ? invertedIndexes.get(0)
+ : invertedIndexes.stream().filter(Index::isAnalyzedInvertedIndex).findFirst().orElse(null);
+ }
+
+ // subPath is not empty, means it is a variant column, find the field pattern from children
+ String subPathString = String.join(".", subPath);
+ String fieldPattern = "";
+ for (Column child : column.getChildren()) {
+ String childName = child.getName();
+ if (child.getFieldPatternType() == TPatternType.MATCH_NAME_GLOB) {
+ try {
+ java.nio.file.PathMatcher matcher = java.nio.file.FileSystems.getDefault()
+ .getPathMatcher("glob:" + childName);
+ if (matcher.matches(java.nio.file.Paths.get(subPathString))) {
+ fieldPattern = childName;
+ }
+ } catch (Exception e) {
+ continue;
+ }
+ } else if (child.getFieldPatternType() == TPatternType.MATCH_NAME) {
+ if (childName.equals(subPathString)) {
+ fieldPattern = childName;
+ }
+ }
+ }
+
+ List<Index> invertedIndexesWithFieldPattern = new ArrayList<>();
+ for (Index index : indexes.getIndexes()) {
+ if (index.getIndexType() == IndexDef.IndexType.INVERTED) {
+ List<String> columns = index.getColumns();
+ if (columns != null && !columns.isEmpty() && column.getName().equals(columns.get(0))
+ && fieldPattern.equals(index.getInvertedIndexFieldPattern())) {
+ invertedIndexesWithFieldPattern.add(index);
+ }
+ }
+ }
+ if (invertedIndexesWithFieldPattern.isEmpty()) {
+ return invertedIndexes.size() == 1 ? invertedIndexes.get(0)
+ : invertedIndexes.stream().filter(Index::isAnalyzedInvertedIndex).findFirst().orElse(null);
+ } else {
+ return invertedIndexesWithFieldPattern.size() == 1 ? invertedIndexesWithFieldPattern.get(0)
+ : invertedIndexesWithFieldPattern.stream()
+ .filter(Index::isAnalyzedInvertedIndex).findFirst().orElse(null);
+ }
+ }
}
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 2ba7bdb..071916a 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
@@ -250,6 +250,8 @@
public static final String PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT = "variant_max_subcolumns_count";
public static final int VARIANT_MAX_SUBCOLUMNS_COUNT_DEFAULT_VALUE = 0;
+ public static final String PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE = "variant_enable_typed_paths_to_sparse";
+
public enum RewriteType {
PUT, // always put property
REPLACE, // replace if exists property
@@ -1852,4 +1854,19 @@
}
return maxSubcoumnsCount;
}
+
+ public static boolean analyzeEnableTypedPathsToSparse(Map<String, String> properties,
+ boolean defaultValue) throws AnalysisException {
+ boolean enableTypedPathsToSparse = defaultValue;
+ if (properties != null && properties.containsKey(PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE)) {
+ String enableTypedPathsToSparseStr = properties.get(PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE);
+ try {
+ enableTypedPathsToSparse = Boolean.parseBoolean(enableTypedPathsToSparseStr);
+ } catch (Exception e) {
+ throw new AnalysisException("variant_enable_typed_paths_to_sparse must be `true` or `false`");
+ }
+ properties.remove(PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE);
+ }
+ return enableTypedPathsToSparse;
+ }
}
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 fa05c15..b597912 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
@@ -1441,10 +1441,6 @@
properties.put(PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_FLATTEN_NESTED,
olapTable.variantEnableFlattenNested().toString());
}
- if (!properties.containsKey(PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT)) {
- properties.put(PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT,
- Integer.toString(olapTable.getVariantMaxSubcolumnsCount()));
- }
if (!properties.containsKey(PropertyAnalyzer.PROPERTIES_ENABLE_SINGLE_REPLICA_COMPACTION)) {
properties.put(PropertyAnalyzer.PROPERTIES_ENABLE_SINGLE_REPLICA_COMPACTION,
olapTable.enableSingleReplicaCompaction().toString());
@@ -2879,16 +2875,6 @@
}
Preconditions.checkNotNull(versionInfo);
- int variantMaxSubcolumnsCount = ConnectContext.get() == null ? 0 : ConnectContext.get()
- .getSessionVariable().getGlobalVariantMaxSubcolumnsCount();
- try {
- variantMaxSubcolumnsCount = PropertyAnalyzer
- .analyzeVariantMaxSubcolumnsCount(properties, variantMaxSubcolumnsCount);
- } catch (AnalysisException e) {
- throw new DdlException(e.getMessage());
- }
- olapTable.setVariantMaxSubcolumnsCount(variantMaxSubcolumnsCount);
-
// a set to record every new tablet created when create table
// if failed in any step, use this set to do clear things
Set<Long> tabletIdSet = new HashSet<>();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
index 0580cbc..6e35bc3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/ExpressionTranslator.java
@@ -31,7 +31,6 @@
import org.apache.doris.analysis.FunctionCallExpr;
import org.apache.doris.analysis.FunctionName;
import org.apache.doris.analysis.FunctionParams;
-import org.apache.doris.analysis.IndexDef;
import org.apache.doris.analysis.IsNullPredicate;
import org.apache.doris.analysis.LambdaFunctionCallExpr;
import org.apache.doris.analysis.LambdaFunctionExpr;
@@ -211,7 +210,6 @@
@Override
public Expr visitMatch(Match match, PlanTranslatorContext context) {
- Index invertedIndex = null;
// Get the first slot from match's left expr
SlotReference slot = match.getInputSlots().stream()
.findFirst()
@@ -229,20 +227,10 @@
throw new AnalysisException("SlotReference in Match failed to get OlapTable, SQL is " + match.toSql());
}
- List<Index> indexes = olapTbl.getIndexes();
- if (indexes != null) {
- for (Index index : indexes) {
- if (index.getIndexType() == IndexDef.IndexType.INVERTED) {
- List<String> columns = index.getColumns();
- if (columns != null && !columns.isEmpty() && column.getName().equals(columns.get(0))) {
- invertedIndex = index;
- break;
- }
- }
- }
- }
+ Index invertedIndex = olapTbl.getInvertedIndex(column, slot.getSubPath());
MatchPredicate.Operator op = match.op();
+
MatchPredicate matchPredicate = new MatchPredicate(op, match.left().accept(this, context),
match.right().accept(this, context), match.getDataType().toCatalogDataType(),
NullableMode.DEPEND_ON_ARGUMENT, invertedIndex);
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 695cc71..263b06d 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
@@ -60,6 +60,7 @@
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.Pair;
import org.apache.doris.common.UserException;
+import org.apache.doris.common.util.PropertyAnalyzer;
import org.apache.doris.datasource.InternalCatalog;
import org.apache.doris.dictionary.LayoutType;
import org.apache.doris.job.common.IntervalUnit;
@@ -451,9 +452,14 @@
import org.apache.doris.nereids.DorisParser.UseDatabaseContext;
import org.apache.doris.nereids.DorisParser.UserIdentifyContext;
import org.apache.doris.nereids.DorisParser.UserVariableContext;
+import org.apache.doris.nereids.DorisParser.VariantContext;
import org.apache.doris.nereids.DorisParser.VariantPredefinedFieldsContext;
import org.apache.doris.nereids.DorisParser.VariantSubColTypeContext;
import org.apache.doris.nereids.DorisParser.VariantSubColTypeListContext;
+import org.apache.doris.nereids.DorisParser.VariantTypeDefinitionsContext;
+import org.apache.doris.nereids.DorisParser.VariantWithFieldsAndPropsContext;
+import org.apache.doris.nereids.DorisParser.VariantWithOnlyFieldsContext;
+import org.apache.doris.nereids.DorisParser.VariantWithOnlyPropsContext;
import org.apache.doris.nereids.DorisParser.WhereClauseContext;
import org.apache.doris.nereids.DorisParser.WindowFrameContext;
import org.apache.doris.nereids.DorisParser.WindowSpecContext;
@@ -1030,6 +1036,7 @@
import org.apache.doris.statistics.AnalysisInfo;
import org.apache.doris.system.NodeType;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
@@ -4597,7 +4604,46 @@
@Override
public DataType visitVariantPredefinedFields(VariantPredefinedFieldsContext ctx) {
- return new VariantType(visitVariantSubColTypeList(ctx.variantSubColTypeList()));
+ VariantTypeDefinitionsContext variantDef = ctx.complex;
+
+ List<VariantField> fields = Lists.newArrayList();
+ Map<String, String> properties = Maps.newHashMap();
+ if (variantDef instanceof VariantWithFieldsAndPropsContext) {
+ VariantWithFieldsAndPropsContext withBoth = (VariantWithFieldsAndPropsContext) variantDef;
+ fields = visitVariantSubColTypeList(withBoth.variantSubColTypeList());
+ properties = Maps.newHashMap(visitPropertyClause(withBoth.properties));
+ } else if (variantDef instanceof VariantWithOnlyFieldsContext) {
+ VariantWithOnlyFieldsContext withFields = (VariantWithOnlyFieldsContext) variantDef;
+ fields = visitVariantSubColTypeList(withFields.variantSubColTypeList());
+ } else if (variantDef instanceof VariantWithOnlyPropsContext) {
+ VariantWithOnlyPropsContext withProps = (VariantWithOnlyPropsContext) variantDef;
+ properties = Maps.newHashMap(visitPropertyClause(withProps.properties));
+ } else {
+ Preconditions.checkState(variantDef instanceof VariantContext,
+ "Unsupported variant definition: " + variantDef.getText());
+ }
+
+ int variantMaxSubcolumnsCount = ConnectContext.get() == null ? 0 :
+ ConnectContext.get().getSessionVariable().getGlobalVariantMaxSubcolumnsCount();
+ boolean enableTypedPathsToSparse = ConnectContext.get() == null ? false :
+ ConnectContext.get().getSessionVariable().getGlobalEnableTypedPathsToSparse();
+
+ try {
+ variantMaxSubcolumnsCount = PropertyAnalyzer
+ .analyzeVariantMaxSubcolumnsCount(properties, variantMaxSubcolumnsCount);
+ enableTypedPathsToSparse = PropertyAnalyzer
+ .analyzeEnableTypedPathsToSparse(properties, enableTypedPathsToSparse);
+ } catch (org.apache.doris.common.AnalysisException e) {
+ throw new NotSupportedException(e.getMessage());
+ }
+
+ if (!properties.isEmpty()) {
+ throw new NotSupportedException("only support for "
+ + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE
+ + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT);
+ }
+
+ return new VariantType(fields, variantMaxSubcolumnsCount, enableTypedPathsToSparse);
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
index c24a20c..989be8e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
@@ -338,17 +338,35 @@
Preconditions.checkState(!Strings.isNullOrEmpty(ctlName), "catalog name is null or empty");
Preconditions.checkState(!Strings.isNullOrEmpty(dbName), "database name is null or empty");
- //check datev1 and decimalv2
+ //check datatype: datev1, decimalv2, variant
+ boolean allZero = false;
+ boolean allPositive = false;
for (ColumnDefinition columnDef : columns) {
String columnNameUpperCase = columnDef.getName().toUpperCase();
if (columnNameUpperCase.startsWith("__DORIS_")) {
throw new AnalysisException(
"Disable to create table column with name start with __DORIS_: " + columnNameUpperCase);
}
- if (columnDef.getType().isVariantType() && columnNameUpperCase.indexOf('.') != -1) {
- throw new AnalysisException(
+ if (columnDef.getType().isVariantType()) {
+ if (columnNameUpperCase.indexOf('.') != -1) {
+ throw new AnalysisException(
"Disable to create table of `VARIANT` type column named with a `.` character: "
+ columnNameUpperCase);
+ }
+ VariantType variantType = (VariantType) columnDef.getType();
+ if (variantType.getVariantMaxSubcolumnsCount() == 0) {
+ allZero = true;
+ if (allPositive) {
+ throw new AnalysisException("The variant_max_subcolumns_count must either be 0"
+ + " in all columns, or greater than 0 in all columns");
+ }
+ } else {
+ allPositive = true;
+ if (allZero) {
+ throw new AnalysisException("The variant_max_subcolumns_count must either be 0"
+ + " in all columns, or greater than 0 in all columns");
+ }
+ }
}
if (columnDef.getType().isDateType() && Config.disable_datev1) {
throw new AnalysisException(
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 af78f40..83de55b 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,8 @@
cf.getComment() == null ? "" : cf.getComment(), cf.getPatternType().toString()))
.collect(ImmutableList.toImmutableList());
return new VariantType(variantFields,
- ((org.apache.doris.catalog.VariantType) type).getVariantMaxSubcolumnsCount());
+ ((org.apache.doris.catalog.VariantType) type).getVariantMaxSubcolumnsCount(),
+ ((org.apache.doris.catalog.VariantType) type).getEnableTypedPathsToSparse());
}
return new VariantType(0);
} else {
@@ -1061,7 +1062,7 @@
validateNestedType(scalarType, fieldType);
if (!fieldPatterns.add(field.getPattern())) {
throw new AnalysisException("Duplicate field name " + field.getPattern()
- + " in struct " + scalarType.toSql());
+ + " in variant " + scalarType.toSql());
}
}
break;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantField.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantField.java
index 232e741..03909d8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantField.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantField.java
@@ -72,9 +72,22 @@
pattern, dataType.toCatalogDataType(), comment, patternType);
}
+ /**
+ * Convert this VariantField to SQL string representation.
+ * @return SQL string representation of this VariantField
+ */
public String toSql() {
- return pattern + ":" + dataType.toSql()
- + (comment.isEmpty() ? "" : " COMMENT " + comment);
+ StringBuilder sb = new StringBuilder();
+ if (patternType == TPatternType.MATCH_NAME) {
+ sb.append(patternType.toString()).append(" ");
+ }
+
+ sb.append("'").append(pattern).append("'");
+ sb.append(":").append(dataType.toSql());
+ if (!comment.isEmpty()) {
+ sb.append(" COMMENT '").append(comment).append("'");
+ }
+ return sb.toString();
}
public VariantField conversion() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
index 951161a..f30a328 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
@@ -44,6 +44,8 @@
private int variantMaxSubcolumnsCount = 0;
+ private boolean enableTypedPathsToSparse = false;
+
private final List<VariantField> predefinedFields;
// No predefined fields
@@ -59,23 +61,24 @@
this.predefinedFields = ImmutableList.copyOf(Objects.requireNonNull(fields, "fields should not be null"));
}
- public VariantType(List<VariantField> fields, int variantMaxSubcolumnsCount) {
+ public VariantType(List<VariantField> fields, int variantMaxSubcolumnsCount, boolean enableTypedPathsToSparse) {
this.predefinedFields = ImmutableList.copyOf(Objects.requireNonNull(fields, "fields should not be null"));
this.variantMaxSubcolumnsCount = variantMaxSubcolumnsCount;
+ this.enableTypedPathsToSparse = enableTypedPathsToSparse;
}
@Override
public DataType conversion() {
return new VariantType(predefinedFields.stream().map(VariantField::conversion)
- .collect(Collectors.toList()), variantMaxSubcolumnsCount);
+ .collect(Collectors.toList()), variantMaxSubcolumnsCount,
+ enableTypedPathsToSparse);
}
@Override
public Type toCatalogDataType() {
org.apache.doris.catalog.VariantType type = new org.apache.doris.catalog.VariantType(predefinedFields.stream()
.map(VariantField::toCatalogDataType)
- .collect(Collectors.toCollection(ArrayList::new)));
- type.setVariantMaxSubcolumnsCount(variantMaxSubcolumnsCount);
+ .collect(Collectors.toCollection(ArrayList::new)), variantMaxSubcolumnsCount, enableTypedPathsToSparse);
return type;
}
@@ -86,10 +89,36 @@
@Override
public String toSql() {
- if (predefinedFields.isEmpty()) {
- return "VARIANT";
+ if (predefinedFields.isEmpty() && variantMaxSubcolumnsCount == 0) {
+ return "variant";
}
- return "VARIANT<" + predefinedFields.stream().map(VariantField::toSql).collect(Collectors.joining(",")) + ">";
+ StringBuilder sb = new StringBuilder();
+ sb.append("variant");
+ sb.append("<");
+ if (!predefinedFields.isEmpty()) {
+ sb.append(predefinedFields.stream().map(VariantField::toSql).collect(Collectors.joining(",")));
+ if (variantMaxSubcolumnsCount == 0 && !enableTypedPathsToSparse) {
+ sb.append(">");
+ return sb.toString();
+ } else {
+ sb.append(",");
+ }
+ }
+
+ sb.append("PROPERTIES (");
+ if (variantMaxSubcolumnsCount != 0) {
+ sb.append("\"variant_max_subcolumns_count\" = \"")
+ .append(String.valueOf(variantMaxSubcolumnsCount)).append("\",");
+ }
+ if (variantMaxSubcolumnsCount != 0 && enableTypedPathsToSparse) {
+ sb.append(",");
+ }
+ if (enableTypedPathsToSparse) {
+ sb.append("\"variant_enable_typed_paths_to_sparse\" = \"")
+ .append(String.valueOf(enableTypedPathsToSparse)).append("\"");
+ }
+ sb.append(")>");
+ return sb.toString();
}
@Override
@@ -102,6 +131,7 @@
}
VariantType other = (VariantType) o;
return this.variantMaxSubcolumnsCount == other.variantMaxSubcolumnsCount
+ && this.enableTypedPathsToSparse == other.enableTypedPathsToSparse
&& Objects.equals(predefinedFields, other.predefinedFields);
}
@@ -123,4 +153,8 @@
public List<VariantField> getPredefinedFields() {
return predefinedFields;
}
+
+ public int getVariantMaxSubcolumnsCount() {
+ return variantMaxSubcolumnsCount;
+ }
}
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 a02c19f..2dc1d59 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
@@ -741,6 +741,9 @@
public static final String GLOBAL_VARIANT_SUBCOLUMNS_COUNT = "global_variant_max_subcolumns_count";
+ public static final String GLOBAL_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE =
+ "global_variant_enable_typed_paths_to_sparse";
+
public static final String ENABLE_TEXT_VALIDATE_UTF8 = "enable_text_validate_utf8";
public static final String ENABLE_SQL_CONVERTOR_FEATURES = "enable_sql_convertor_features";
@@ -2698,6 +2701,21 @@
})
public boolean skipCheckingAcidVersionFile = false;
+ @VariableMgr.VarAttr(
+ name = GLOBAL_VARIANT_SUBCOLUMNS_COUNT,
+ needForward = true,
+ checker = "checkGlobalVariantMaxSubcolumnsCount",
+ fuzzy = true
+ )
+ public int globalVariantMaxSubcolumnsCount = 2048;
+
+ @VariableMgr.VarAttr(
+ name = GLOBAL_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE,
+ needForward = true,
+ fuzzy = true
+ )
+ public boolean globalEnableTypedPathsToSparse = false;
+
@VariableMgr.VarAttr(name = ENABLE_SQL_CONVERTOR_FEATURES, needForward = true,
checker = "checkSqlConvertorFeatures",
description = {
@@ -2750,14 +2768,6 @@
}, checker = "checkSkewRewriteJoinSaltExplodeFactor")
public int skewRewriteJoinSaltExplodeFactor = 0;
- @VariableMgr.VarAttr(
- name = GLOBAL_VARIANT_SUBCOLUMNS_COUNT,
- needForward = true,
- checker = "checkGlobalVariantMaxSubcolumnsCount",
- fuzzy = true
- )
- public int globalVariantMaxSubcolumnsCount = 2048;
-
public void setEnableEsParallelScroll(boolean enableESParallelScroll) {
this.enableESParallelScroll = enableESParallelScroll;
}
@@ -2796,6 +2806,7 @@
int maxBytes = 10 * 1024 * 1024;
this.exchangeMultiBlocksByteSize = minBytes + (int) (random.nextDouble() * (maxBytes - minBytes));
this.globalVariantMaxSubcolumnsCount = random.nextInt(10);
+ this.globalEnableTypedPathsToSparse = random.nextBoolean();
int randomInt = random.nextInt(4);
if (randomInt % 2 == 0) {
this.rewriteOrToInPredicateThreshold = 100000;
@@ -5098,6 +5109,10 @@
this.enableAddIndexForNewData = enableAddIndexForNewData;
}
+ public boolean getGlobalEnableTypedPathsToSparse() {
+ return globalEnableTypedPathsToSparse;
+ }
+
public static boolean enableStrictCast() {
if (ConnectContext.get() != null) {
return ConnectContext.get().getSessionVariable().enableStrictCast;
diff --git a/fe/fe-core/src/test/java/org/apache/doris/persist/ScalarTypeTest.java b/fe/fe-core/src/test/java/org/apache/doris/persist/ScalarTypeTest.java
new file mode 100644
index 0000000..b1f2039
--- /dev/null
+++ b/fe/fe-core/src/test/java/org/apache/doris/persist/ScalarTypeTest.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.persist;
+
+import org.apache.doris.catalog.PrimitiveType;
+import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.catalog.VariantType;
+import org.apache.doris.persist.gson.GsonUtils;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ScalarTypeTest {
+ @Test
+ public void testScalarType() {
+ ScalarType scalarType = new ScalarType(PrimitiveType.VARIANT);
+ String json = GsonUtils.GSON.toJson(scalarType);
+ System.out.println(json);
+ ScalarType scalarType2 = GsonUtils.GSON.fromJson(json, ScalarType.class);
+ Assert.assertFalse(scalarType2 instanceof VariantType);
+ Assert.assertEquals(scalarType.getPrimitiveType(), scalarType2.getPrimitiveType());
+ Assert.assertEquals(scalarType.getVariantMaxSubcolumnsCount(), 0);
+ Assert.assertEquals(scalarType.getVariantEnableTypedPathsToSparse(), false);
+ }
+}
diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto
index 5040f5d..2c37581 100644
--- a/gensrc/proto/olap_file.proto
+++ b/gensrc/proto/olap_file.proto
@@ -351,6 +351,7 @@
optional int32 be_exec_version = 24;
optional int32 variant_max_subcolumns_count = 25 [default = 0];
optional PatternTypePB pattern_type = 26;
+ optional bool variant_enable_typed_paths_to_sparse = 27 [default = false];
// this field is only used during flexible partial update load
optional bool is_on_update_current_timestamp = 28 [default = false];
}
diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift
index 08ba828..f5ef123 100644
--- a/gensrc/thrift/Descriptors.thrift
+++ b/gensrc/thrift/Descriptors.thrift
@@ -49,6 +49,7 @@
19: optional i32 cluster_key_id = -1
20: optional i32 be_exec_version = -1
21: optional TPatternType pattern_type
+ 22: optional bool variant_enable_typed_paths_to_sparse = false
23: optional bool is_on_update_current_timestamp = false
}
diff --git a/regression-test/data/variant_p0/load.out b/regression-test/data/variant_p0/load.out
index e7521c3..c4efac9 100644
--- a/regression-test/data/variant_p0/load.out
+++ b/regression-test/data/variant_p0/load.out
@@ -224,7 +224,7 @@
[123]
-- !sql_25 --
-50000 55000.000000010754 6150000
+50000 55000.00000000543 6150000
-- !sql_26 --
5000
diff --git a/regression-test/data/variant_p0/nested2.out b/regression-test/data/variant_p0/nested2.out
index 357f769..fcae06f 100644
--- a/regression-test/data/variant_p0/nested2.out
+++ b/regression-test/data/variant_p0/nested2.out
@@ -1,7 +1,7 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !sql_desc_1 --
k bigint Yes true \N
-v variant Yes false \N NONE
+v variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
v.nested.a array<tinyint> Yes false \N NONE
v.nested.b array<text> Yes false \N NONE
v.nested.c array<double> Yes false \N NONE
@@ -50,7 +50,7 @@
-- !sql_desc_2 --
k bigint Yes true \N
-v variant Yes false \N NONE
+v variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
v.nested.a array<double> Yes false \N NONE
v.nested.b array<json> Yes false \N NONE
v.nested.c array<double> Yes false \N NONE
@@ -169,7 +169,7 @@
-- !sql_desc_4 --
k bigint Yes true \N
-v variant Yes false \N NONE
+v variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
v.nested.a array<json> Yes false \N NONE
v.nested.b array<json> Yes false \N NONE
v.nested.c array<text> Yes false \N NONE
@@ -218,7 +218,7 @@
-- !sql_desc_5 --
k bigint Yes true \N
-v variant Yes false \N NONE
+v variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
v.nested.a array<json> Yes false \N NONE
v.nested.b array<json> Yes false \N NONE
v.nested.c array<json> Yes false \N NONE
diff --git a/regression-test/data/variant_p0/predefine/load.out b/regression-test/data/variant_p0/predefine/load.out
index ed7c3ad..794eb01 100644
--- a/regression-test/data/variant_p0/predefine/load.out
+++ b/regression-test/data/variant_p0/predefine/load.out
@@ -14,19 +14,6 @@
12 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"}
-- !sql --
-id bigint No true \N
-type varchar(30) Yes false \N NONE
-v1 variant<MATCH_NAME_GLOB 'a.b.c':int,MATCH_NAME_GLOB 'ss':text,MATCH_NAME_GLOB 'dcm':decimalv3(38,9),MATCH_NAME_GLOB 'dt':datetimev2(0),MATCH_NAME_GLOB 'ip':ipv4,MATCH_NAME_GLOB 'a.b.d':double> Yes false \N NONE
-v1.a.b.c int Yes false \N NONE
-v1.a.b.d double Yes false \N NONE
-v1.dcm decimal(38,9) Yes false \N NONE
-v1.dt datetime Yes false \N NONE
-v1.ip ipv4 Yes false \N NONE
-v1.ss text Yes false \N NONE
-v1.xxx smallint Yes false \N NONE
-v1.yyy double Yes false \N NONE
-
--- !sql --
127.0.0.1
127.0.0.1
127.0.0.1
@@ -73,18 +60,6 @@
12 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"}
-- !sql --
-id bigint No true \N
-v1 variant Yes false \N NONE
-v1.PREDEFINE_COL1 smallint Yes false \N NONE
-v1.PREDEFINE_COL2 double Yes false \N NONE
-v1.PREDEFINE_COL3 text Yes false \N NONE
-v1.PREDEFINE_COL4 text Yes false \N NONE
-v1.predefine_col1 smallint Yes false \N NONE
-v1.predefine_col2 double Yes false \N NONE
-v1.predefine_col3 text Yes false \N NONE
-v1.predefine_col4 text Yes false \N NONE
-
--- !sql --
1 {"predefine_col1":1024}
2 {"predefine_col2":1.11111}
3 {"predefine_col3":"11111.00000"}
@@ -101,59 +76,11 @@
4 {"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_int":[1, 2, 3],"array_string":["a", "b", "c"],"ext_1":1.111111,"ext_2":"this is an extra field","ext_3":[1, 2, 3],"float_":1.111111111,"ipv4_":"127.0.0.1","varchar_":"world hello"}
-- !sql --
-id bigint No true \N
-v1 variant<MATCH_NAME_GLOB 'array_int':array<int>,MATCH_NAME_GLOB 'array_string':array<text>,MATCH_NAME_GLOB 'array_decimal':array<decimalv3(26,9)>,MATCH_NAME_GLOB 'array_datetime':array<datetimev2(0)>,MATCH_NAME_GLOB 'array_datetimev2':array<datetimev2(0)>,MATCH_NAME_GLOB 'array_date':array<datev2>,MATCH_NAME_GLOB 'array_datev2':array<datev2>,MATCH_NAME_GLOB 'array_ipv4':array<ipv4>,MATCH_NAME_GLOB 'array_ipv6':array<ipv6>,MATCH_NAME_GLOB 'array_float':array<decimalv3(26,9)>,MATCH_NAME_GLOB 'array_boolean':array<boolean>,MATCH_NAME_GLOB 'int_':int,MATCH_NAME_GLOB 'string_':text,MATCH_NAME_GLOB 'decimal_':decimalv3(26,9),MATCH_NAME_GLOB 'datetime_':datetimev2(0),MATCH_NAME_GLOB 'datetimev2_':datetimev2(6),MATCH_NAME_GLOB 'date_':datev2,MATCH_NAME_GLOB 'datev2_':datev2,MATCH_NAME_GLOB 'ipv4_':ipv4,MATCH_NAME_GLOB 'ipv6_':ipv6,MATCH_NAME_GLOB 'float_':decimalv3(26,9),MATCH_NAME_GLOB 'boolean_':boolean,MATCH_NAME_GLOB 'varchar_':text> Yes false \N NONE
-v1.array_boolean array<boolean> Yes false \N NONE
-v1.array_date array<date> Yes false \N NONE
-v1.array_datetime array<datetime> Yes false \N NONE
-v1.array_datetimev2 array<datetime> Yes false \N NONE
-v1.array_datev2 array<date> Yes false \N NONE
-v1.array_decimal array<decimal(26,9)> Yes false \N NONE
-v1.array_float array<decimal(26,9)> Yes false \N NONE
-v1.array_int array<int> Yes false \N NONE
-v1.array_ipv4 array<ipv4> Yes false \N NONE
-v1.array_ipv6 array<ipv6> Yes false \N NONE
-v1.array_string array<text> Yes false \N NONE
-v1.boolean_ boolean Yes false \N NONE
-v1.date_ date Yes false \N NONE
-v1.datetime_ datetime Yes false \N NONE
-v1.datetimev2_ datetime Yes false \N NONE
-v1.datev2_ date Yes false \N NONE
-v1.decimal_ decimal(26,9) Yes false \N NONE
-v1.ext_1 double Yes false \N NONE
-v1.ext_2 text Yes false \N NONE
-v1.ext_3 array<tinyint> Yes false \N NONE
-v1.float_ decimal(26,9) Yes false \N NONE
-v1.int_ int Yes false \N NONE
-v1.ipv4_ ipv4 Yes false \N NONE
-v1.ipv6_ ipv6 Yes false \N NONE
-v1.string_ text Yes false \N NONE
-v1.varchar_ text Yes false \N NONE
-
--- !sql --
101 {"a":1} {"dcm":1111111.000000000} \N
102 {"a":1} {"dcm":1111111.000000000} {"dcm":1111111.000000000}
103 {"a":1} {"dcm":1111111.000000000} {"dt":"2021-01-01 11:11:11"}
-- !sql --
-id bigint No true \N
-v1 variant Yes false \N NONE
-v2 variant<MATCH_NAME_GLOB 'dcm':decimalv3(38,9),MATCH_NAME_GLOB 'dt':datetimev2(0)> Yes false \N NONE
-v3 variant<MATCH_NAME_GLOB 'dcm':decimalv3(38,9),MATCH_NAME_GLOB 'dt':datetimev2(0),MATCH_NAME_GLOB 'ip':ipv6> Yes false \N NONE
-v1.PREDEFINE_COL1 smallint Yes false \N NONE
-v1.PREDEFINE_COL2 double Yes false \N NONE
-v1.PREDEFINE_COL3 text Yes false \N NONE
-v1.PREDEFINE_COL4 text Yes false \N NONE
-v1.a tinyint Yes false \N NONE
-v1.predefine_col1 smallint Yes false \N NONE
-v1.predefine_col2 double Yes false \N NONE
-v1.predefine_col3 text Yes false \N NONE
-v1.predefine_col4 text Yes false \N NONE
-v2.dcm decimal(38,9) Yes false \N NONE
-v3.dcm decimal(38,9) Yes false \N NONE
-v3.dt datetime Yes false \N NONE
-
--- !sql --
1 {"nested":[{"a":123,"b":"456"}]}
1 {"nested":[{"a":123,"b":"456"}]}
1 {"nested":[{"a":123,"b":"456"}]}
@@ -168,16 +95,22 @@
[{"a":123,"b":"456"}]
-- !sql --
-[123]
-[123]
-[123]
-[123]
-[123]
+\N
+\N
+\N
+\N
+\N
-- !sql --
-id bigint No true \N
-v variant<MATCH_NAME_GLOB 'nested.a':text> Yes false \N NONE
-v.auto_type json Yes false \N NONE
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
+{"auto_type":"jsonb"}
-- !sql_arr_null_1 --
3 {"array_decimal":[null, 2.200000000, 3.300000000, 4.400000000]}
diff --git a/regression-test/data/variant_p0/predefine/predefined_typed_to_sparse.out b/regression-test/data/variant_p0/predefine/predefined_typed_to_sparse.out
new file mode 100644
index 0000000..9c681be
--- /dev/null
+++ b/regression-test/data/variant_p0/predefine/predefined_typed_to_sparse.out
@@ -0,0 +1,75 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !sql --
+1 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+52 {"array_decimal_2":[1217297.486087340, 366003851280257.752431218, 8973145984227.655768002],"array_ipv6_2":["f99b:f60a:9223:5049:8b1c:45d7:45f5:b4fd", "72d2:77aa:e0bb:d7f7:592b:f462:d72:c5be"],"char_1":"Generate it nested test.","date_1":"2025-12-14","datetime_1":"2024-01-22 13:11:14","datetimev2_1":"2026-02-03 02:27:24.073783","datev2_2":"2023-09-21","decimal_2":77374.884509513,"int_1":22039,"ipv4_2":"201.126.28.227","ipv6_1":"6cd7:b2f:737d:6caa:5727:33bb:ee5d:63d2","largeint_1":764894823616784426248703058599238663,"metadata":{"priority":3,"processed_by":"nqgjfwint","valid":0},"string_1":"Example field process data object.","string_1_nested":{"context":{"session_id":"gmugrfcxxkmw","source_ip":"227.97.148.155","timestamp":"2026-06-11 09:35:49.398754"},"message":"Is object log to process.","status_code":"30289"}}
+81 {"array_decimal_1":[6993835366877.197970529, 692486181822.904938989, 57800977.779873991],"array_ipv6_1":["3e5e::d3c6:9b00", "497c:a15f:93d4:6487:fb8a:922a:116:382c"],"char_1":"Of nested generate.","date_1":"2025-02-17","datetime_2":"2025-07-19 14:19:28","datetimev2_2":"2026-08-01 13:51:16.663655","datev2_2":"2023-07-01","decimal_1":71167668339089076.027343245,"int_2":-4330,"ipv4_1":"59.119.122.122","ipv6_1":"71:9f6f:498f:6114:4dbc:9317:d188:846a","largeint_1":999275976602,"string_1_nested":{"context":{"session_id":"csswaakndsqv","source_ip":"142.174.127.131","timestamp":"2026-05-28 18:37:16.559456"},"message":"Json code of code.","status_code":"56746"},"string_2":"Status key status example a short it."}
+186 {"array_decimal_2":[343096599140599.876400678, 7831434.851857885],"array_ipv6_2":["6628:ec19:f0fb:9c28::2108:e7c0", "d1e6:a9b1:960b:fb6a:2af9:5510:7ef7:4f28"],"char_2":"Process generate string log is.","date_2":"2026-01-17","datetime_2":"2025-06-24 10:18:55","datetimev2_1":"2025-01-11 15:17:37.482750","datev2_1":"2026-01-30","decimal_1":42741395319382677.318175638,"int_1":30470,"int_nested":{"level1_num_1":95377,"level1_num_2":74730},"ipv4_2":"14.45.131.14","ipv6_2":"6c40:ada4:83e7:4436::","largeint_2":1972321546770399093377808800275591213,"string_1":"The it code of to field.","string_2_nested":{"context":{"session_id":"opvsllcaalta","source_ip":"136.15.57.180","timestamp":"2023-05-13 15:40:32.911831"},"message":"In nested string.","status_code":"41918"}}
+475 {"array_decimal_2":[88211.795496743, 69626003842.211054548],"array_ipv6_2":["5284:d12a:d199:af4a:e22b:a147:dea5:ec29", "8d50:3ef:2583:17ab:ee3f:72af:e90a:ee54", "89b8:b2d5:6c9c:271f:6175::3d94"],"char_2":"Random generate key in sample.","date_2":"2026-11-29","datetime_2":"2025-03-02 23:14:03","datetimev2_1":"2026-08-02 18:57:45.077150","datev2_1":"2023-11-04","decimal_2":-4280.446032481,"int_1":69203,"int_nested":{"level1_num_1":42164,"level1_num_2":73701},"ipv4_2":"180.182.39.98","ipv6_1":"56dc:6910:4d3a:241:bdc9:7c63:54ac:957b","largeint_2":7116719144922,"string_1":"Object is data message nested.","string_2_nested":{"context":{"session_id":"zboqencwghbp","source_ip":"99.67.120.47","timestamp":"2025-08-13 21:26:42.588013"},"message":"And message in.","status_code":"87131"}}
+505 {"array_decimal_1":[601.234546799, 262143833.424900595],"array_ipv6_1":["5379:e655:ffb4:ff93:f993:1b00:5e9:f7bb", "dd6c:a85b:84da:1de9:2919:9e55:c9a0:aa26", "6e07:b5fc:c994:9a63:732f:41c9:8ca2:16d7"],"char_2":"Message random a code generate.","date_1":"2025-03-31","datetime_1":"2027-02-04 18:34:24","datetimev2_1":"2024-01-23 16:23:45.625302","datev2_1":"2025-05-28","decimal_2":80073776.516113260,"int_1":42447,"ipv4_1":"150.214.32.106","ipv6_2":"da18:1fbc:dadd:53f4:8e5b:25fc::","largeint_1":6381994961717802432931228,"string_1_nested":{"context":{"session_id":"wipdivqnpntk","source_ip":"10.52.81.99","timestamp":"2024-05-14 15:00:11.320701"},"message":"Key to message generate json.","status_code":"-4652"},"string_2":"Log it message and data value field log."}
+598 {"array_decimal_2":[-90235911041.078404692, 87024.785161188, 7.453107283],"array_ipv6_1":["749b:b007:43a7:bcaf:2ef2:bfe5:2b69:aea8", "b60:5636:2b04:70a3:d901:db26:7966:5cb0", "9d56:4380:83b0:17c:5840:aa25:f2f6:db95"],"char_2":"Field status generate generate short.","date_1":"2026-01-08","datetime_2":"2023-09-28 00:51:10","datetimev2_2":"2023-12-02 20:35:49.472295","datev2_1":"2026-01-04","decimal_2":26.144007845,"int_2":77401,"int_nested":{"level1_num_1":97684,"level1_num_2":86484},"ipv4_2":"72.138.200.25","ipv6_2":"d898:2c91:3541:8bfa:dfe4:fa22:f301:a92","largeint_2":4375114360934695506121925213,"string_2":"String data nested to example generate.","string_2_nested":{"context":{"session_id":"vkxemvohrpze","source_ip":"217.56.193.118","timestamp":"2025-12-03 03:27:28.639440"},"message":"Key status test json of in is a.","status_code":"73350"}}
+659 {"array_decimal_2":[676292444331501.791295286],"array_ipv6_2":["aa75:5e74:ae2:9d05:6320:bc1a:9fa8:c22", "ab6a:1d10:f690:1229:44e6:6724:7fc0:f4c3", "9add:9146:91fb:3af0:39fb:e8e0:50a:af54"],"char_1":"Level short data the.","date_1":"2026-04-18","datetime_2":"2027-03-24 07:05:37","datetimev2_1":"2024-03-09 21:58:53.536163","datev2_2":"2023-08-29","decimal_2":375096233442620.402021458,"int_1":49010,"ipv4_1":"76.205.28.41","ipv6_1":"3e38:7813:6474:60e1:c245:8391:5d3a:6bf3","largeint_2":8,"metadata":{"priority":4,"processed_by":"jovrgftdi","valid":1},"string_1_nested":{"context":{"session_id":"jiizftwrqbgo","source_ip":"106.142.112.230","timestamp":"2026-03-25 19:54:02.914284"},"message":"Key code in.","status_code":"89497"},"string_2":"Of string code example sample value in."}
+668 {"array_decimal_1":[345.581519531],"array_ipv6_2":["bd7c:4ea0:c3f2:8242:a917:b6f9:f1c4:81fc"],"char_1":"Message the field.","date_2":"2023-06-04","datetime_2":"2023-07-26 09:51:00","datetimev2_2":"2023-08-06 12:59:06.782257","datev2_2":"2026-02-10","decimal_1":71704608.366887325,"int_1":3839,"ipv4_1":"237.141.96.142","ipv6_2":"f65:d104:f442:90f8:962b:ac7f:70ef:47fc","largeint_1":73701028754393574400404888160807216,"string_2":"Test status status to a.","string_2_nested":{"context":{"session_id":"gzfrmskyhvgk","source_ip":"62.167.211.183","timestamp":"2026-10-08 06:36:46.788298"},"message":"And json data in key.","status_code":"86739"}}
+789 {"array_decimal_2":[461419171.666216999, 3746898066419.821429238, 742451.192408462],"array_ipv6_1":["6287:3753:3cc4:4759:4ff2:13ee:20aa:d7e7", "1cdf:2c95:a45a:b2aa:787b:bf1f:70c2:1121"],"char_1":"Key sample process.","date_2":"2024-11-17","datetime_1":"2026-04-22 16:03:35","datetimev2_2":"2024-06-21 13:12:07.539485","datev2_2":"2024-01-25","decimal_2":8933959111.376668859,"int_1":25966,"int_nested":{"level1_num_1":91219,"level1_num_2":4608},"ipv4_1":"121.174.189.99","ipv6_2":"8ab:accb:ad63:bc97:84f9:4c8b:137e:efaf","largeint_2":269951187241728368326988938317,"string_1":"In sample to.","string_2_nested":{"context":{"session_id":"jxxteoxxdrzu","source_ip":"100.16.34.59","timestamp":"2026-05-28 23:42:50.962876"},"message":"Data generate status and generate process sample example.","status_code":"37776"}}
+
+-- !sql --
+1 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+52 {"array_decimal_2":[1217297.486087340, 366003851280257.752431218, 8973145984227.655768002],"array_ipv6_2":["f99b:f60a:9223:5049:8b1c:45d7:45f5:b4fd", "72d2:77aa:e0bb:d7f7:592b:f462:d72:c5be"],"char_1":"Generate it nested test.","date_1":"2025-12-14","datetime_1":"2024-01-22 13:11:14","datetimev2_1":"2026-02-03 02:27:24.073783","datev2_2":"2023-09-21","decimal_2":77374.884509513,"int_1":22039,"ipv4_2":"201.126.28.227","ipv6_1":"6cd7:b2f:737d:6caa:5727:33bb:ee5d:63d2","largeint_1":764894823616784426248703058599238663,"metadata":{"priority":3,"processed_by":"nqgjfwint","valid":0},"string_1":"Example field process data object.","string_1_nested":{"context":{"session_id":"gmugrfcxxkmw","source_ip":"227.97.148.155","timestamp":"2026-06-11 09:35:49.398754"},"message":"Is object log to process.","status_code":"30289"}}
+81 {"array_decimal_1":[6993835366877.197970529, 692486181822.904938989, 57800977.779873991],"array_ipv6_1":["3e5e::d3c6:9b00", "497c:a15f:93d4:6487:fb8a:922a:116:382c"],"char_1":"Of nested generate.","date_1":"2025-02-17","datetime_2":"2025-07-19 14:19:28","datetimev2_2":"2026-08-01 13:51:16.663655","datev2_2":"2023-07-01","decimal_1":71167668339089076.027343245,"int_2":-4330,"ipv4_1":"59.119.122.122","ipv6_1":"71:9f6f:498f:6114:4dbc:9317:d188:846a","largeint_1":999275976602,"string_1_nested":{"context":{"session_id":"csswaakndsqv","source_ip":"142.174.127.131","timestamp":"2026-05-28 18:37:16.559456"},"message":"Json code of code.","status_code":"56746"},"string_2":"Status key status example a short it."}
+186 {"array_decimal_2":[343096599140599.876400678, 7831434.851857885],"array_ipv6_2":["6628:ec19:f0fb:9c28::2108:e7c0", "d1e6:a9b1:960b:fb6a:2af9:5510:7ef7:4f28"],"char_2":"Process generate string log is.","date_2":"2026-01-17","datetime_2":"2025-06-24 10:18:55","datetimev2_1":"2025-01-11 15:17:37.482750","datev2_1":"2026-01-30","decimal_1":42741395319382677.318175638,"int_1":30470,"int_nested":{"level1_num_1":95377,"level1_num_2":74730},"ipv4_2":"14.45.131.14","ipv6_2":"6c40:ada4:83e7:4436::","largeint_2":1972321546770399093377808800275591213,"string_1":"The it code of to field.","string_2_nested":{"context":{"session_id":"opvsllcaalta","source_ip":"136.15.57.180","timestamp":"2023-05-13 15:40:32.911831"},"message":"In nested string.","status_code":"41918"}}
+475 {"array_decimal_2":[88211.795496743, 69626003842.211054548],"array_ipv6_2":["5284:d12a:d199:af4a:e22b:a147:dea5:ec29", "8d50:3ef:2583:17ab:ee3f:72af:e90a:ee54", "89b8:b2d5:6c9c:271f:6175::3d94"],"char_2":"Random generate key in sample.","date_2":"2026-11-29","datetime_2":"2025-03-02 23:14:03","datetimev2_1":"2026-08-02 18:57:45.077150","datev2_1":"2023-11-04","decimal_2":-4280.446032481,"int_1":69203,"int_nested":{"level1_num_1":42164,"level1_num_2":73701},"ipv4_2":"180.182.39.98","ipv6_1":"56dc:6910:4d3a:241:bdc9:7c63:54ac:957b","largeint_2":7116719144922,"string_1":"Object is data message nested.","string_2_nested":{"context":{"session_id":"zboqencwghbp","source_ip":"99.67.120.47","timestamp":"2025-08-13 21:26:42.588013"},"message":"And message in.","status_code":"87131"}}
+505 {"array_decimal_1":[601.234546799, 262143833.424900595],"array_ipv6_1":["5379:e655:ffb4:ff93:f993:1b00:5e9:f7bb", "dd6c:a85b:84da:1de9:2919:9e55:c9a0:aa26", "6e07:b5fc:c994:9a63:732f:41c9:8ca2:16d7"],"char_2":"Message random a code generate.","date_1":"2025-03-31","datetime_1":"2027-02-04 18:34:24","datetimev2_1":"2024-01-23 16:23:45.625302","datev2_1":"2025-05-28","decimal_2":80073776.516113260,"int_1":42447,"ipv4_1":"150.214.32.106","ipv6_2":"da18:1fbc:dadd:53f4:8e5b:25fc::","largeint_1":6381994961717802432931228,"string_1_nested":{"context":{"session_id":"wipdivqnpntk","source_ip":"10.52.81.99","timestamp":"2024-05-14 15:00:11.320701"},"message":"Key to message generate json.","status_code":"-4652"},"string_2":"Log it message and data value field log."}
+598 {"array_decimal_2":[-90235911041.078404692, 87024.785161188, 7.453107283],"array_ipv6_1":["749b:b007:43a7:bcaf:2ef2:bfe5:2b69:aea8", "b60:5636:2b04:70a3:d901:db26:7966:5cb0", "9d56:4380:83b0:17c:5840:aa25:f2f6:db95"],"char_2":"Field status generate generate short.","date_1":"2026-01-08","datetime_2":"2023-09-28 00:51:10","datetimev2_2":"2023-12-02 20:35:49.472295","datev2_1":"2026-01-04","decimal_2":26.144007845,"int_2":77401,"int_nested":{"level1_num_1":97684,"level1_num_2":86484},"ipv4_2":"72.138.200.25","ipv6_2":"d898:2c91:3541:8bfa:dfe4:fa22:f301:a92","largeint_2":4375114360934695506121925213,"string_2":"String data nested to example generate.","string_2_nested":{"context":{"session_id":"vkxemvohrpze","source_ip":"217.56.193.118","timestamp":"2025-12-03 03:27:28.639440"},"message":"Key status test json of in is a.","status_code":"73350"}}
+659 {"array_decimal_2":[676292444331501.791295286],"array_ipv6_2":["aa75:5e74:ae2:9d05:6320:bc1a:9fa8:c22", "ab6a:1d10:f690:1229:44e6:6724:7fc0:f4c3", "9add:9146:91fb:3af0:39fb:e8e0:50a:af54"],"char_1":"Level short data the.","date_1":"2026-04-18","datetime_2":"2027-03-24 07:05:37","datetimev2_1":"2024-03-09 21:58:53.536163","datev2_2":"2023-08-29","decimal_2":375096233442620.402021458,"int_1":49010,"ipv4_1":"76.205.28.41","ipv6_1":"3e38:7813:6474:60e1:c245:8391:5d3a:6bf3","largeint_2":8,"metadata":{"priority":4,"processed_by":"jovrgftdi","valid":1},"string_1_nested":{"context":{"session_id":"jiizftwrqbgo","source_ip":"106.142.112.230","timestamp":"2026-03-25 19:54:02.914284"},"message":"Key code in.","status_code":"89497"},"string_2":"Of string code example sample value in."}
+668 {"array_decimal_1":[345.581519531],"array_ipv6_2":["bd7c:4ea0:c3f2:8242:a917:b6f9:f1c4:81fc"],"char_1":"Message the field.","date_2":"2023-06-04","datetime_2":"2023-07-26 09:51:00","datetimev2_2":"2023-08-06 12:59:06.782257","datev2_2":"2026-02-10","decimal_1":71704608.366887325,"int_1":3839,"ipv4_1":"237.141.96.142","ipv6_2":"f65:d104:f442:90f8:962b:ac7f:70ef:47fc","largeint_1":73701028754393574400404888160807216,"string_2":"Test status status to a.","string_2_nested":{"context":{"session_id":"gzfrmskyhvgk","source_ip":"62.167.211.183","timestamp":"2026-10-08 06:36:46.788298"},"message":"And json data in key.","status_code":"86739"}}
+789 {"array_decimal_2":[461419171.666216999, 3746898066419.821429238, 742451.192408462],"array_ipv6_1":["6287:3753:3cc4:4759:4ff2:13ee:20aa:d7e7", "1cdf:2c95:a45a:b2aa:787b:bf1f:70c2:1121"],"char_1":"Key sample process.","date_2":"2024-11-17","datetime_1":"2026-04-22 16:03:35","datetimev2_2":"2024-06-21 13:12:07.539485","datev2_2":"2024-01-25","decimal_2":8933959111.376668859,"int_1":25966,"int_nested":{"level1_num_1":91219,"level1_num_2":4608},"ipv4_1":"121.174.189.99","ipv6_2":"8ab:accb:ad63:bc97:84f9:4c8b:137e:efaf","largeint_2":269951187241728368326988938317,"string_1":"In sample to.","string_2_nested":{"context":{"session_id":"jxxteoxxdrzu","source_ip":"100.16.34.59","timestamp":"2026-05-28 23:42:50.962876"},"message":"Data generate status and generate process sample example.","status_code":"37776"}}
+
+-- !sql --
+{"array_decimal_1":"decimal128i","array_ipv6_1":"ipv6","char_1":"string","date_1":"datev2","datetime_1":"datetimev2","datetimev2_1":"datetimev2","datev2_1":"datev2","decimal_1":"decimal128i","int_1":"int","int_nested.level1_num_1":"int","int_nested.level1_num_2":"int","ipv4_1":"ipv4","ipv6_1":"ipv6","largeint_1":"largeint","string_1":"string","string_1_nested.message":"string","string_1_nested.metadata.source":"string","string_1_nested.metadata.timestamp":"string"}
+
+-- !sql --
+1 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+2 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+3 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+4 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+5 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+6 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+7 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+8 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+9 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+
+-- !sql --
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+
+-- !sql --
+{"array_decimal_1":"decimal128i","array_ipv6_1":"ipv6","char_1":"string","date_1":"datev2","datetime_1":"datetimev2","datetimev2_1":"datetimev2","datev2_1":"datev2","decimal_1":"decimal128i","int_1":"int","int_nested.level1_num_1":"int","int_nested.level1_num_2":"int","ipv4_1":"ipv4","ipv6_1":"ipv6","largeint_1":"largeint","string_1":"string","string_1_nested.message":"string","string_1_nested.metadata.source":"string","string_1_nested.metadata.timestamp":"string"}
+
+-- !sql --
+1 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+2 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+3 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+4 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+5 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+6 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+7 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+8 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+9 {"array_decimal_1":[12345678901234567.123456789, 987.654321000],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334", "::1"],"char_1":"short text","date_1":"2023-10-27","datetime_1":"2023-10-27 10:30:00","datetimev2_1":"2023-10-27 10:30:00.123456","datev2_1":"2023-10-28","decimal_1":12345.678900000,"int_1":42,"int_nested":{"level1_num_1":1011111,"level1_num_2":102},"ipv4_1":"192.168.1.1","ipv6_1":"::1","largeint_1":12345678901234567890123456789012345678,"string_1":"This is a sample string.","string_1_nested":{"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}}}
+
+-- !sql --
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+[12345678901234567.123456789, 987.654321000] ["2001:db8:85a3::8a2e:370:7334", "::1"] 42 {"level1_num_1":1011111,"level1_num_2":102} This is a sample string. {"message":"Hello from nested object","metadata":{"source":"generator","timestamp":"2023-10-27T12:00:00Z"}} 12345.678900000 2023-10-27 10:30:00 2023-10-27 10:30:00.123456 2023-10-27 2023-10-28 192.168.1.1 ::1 12345678901234567890123456789012345678 short text
+
diff --git a/regression-test/data/variant_p0/predefine/sql/q01.out b/regression-test/data/variant_p0/predefine/sql/q01.out
index 26fd5d8..06bdeab 100644
--- a/regression-test/data/variant_p0/predefine/sql/q01.out
+++ b/regression-test/data/variant_p0/predefine/sql/q01.out
@@ -4,7 +4,7 @@
-- !q01_2 --
id bigint No true \N
-v1 variant<MATCH_NAME_GLOB 'array_int':array<int>,MATCH_NAME_GLOB 'array_string':array<text>,MATCH_NAME_GLOB 'array_decimal':array<decimalv3(26,9)>,MATCH_NAME_GLOB 'array_datetime':array<datetimev2(0)>,MATCH_NAME_GLOB 'array_datetimev2':array<datetimev2(0)>,MATCH_NAME_GLOB 'array_date':array<datev2>,MATCH_NAME_GLOB 'array_datev2':array<datev2>,MATCH_NAME_GLOB 'array_ipv4':array<ipv4>,MATCH_NAME_GLOB 'array_ipv6':array<ipv6>,MATCH_NAME_GLOB 'array_float':array<decimalv3(26,9)>,MATCH_NAME_GLOB 'array_boolean':array<boolean>,MATCH_NAME_GLOB 'int_':int,MATCH_NAME_GLOB 'string_':text,MATCH_NAME_GLOB 'decimal_':decimalv3(26,9),MATCH_NAME_GLOB 'datetime_':datetimev2(0),MATCH_NAME_GLOB 'datetimev2_':datetimev2(6),MATCH_NAME_GLOB 'date_':datev2,MATCH_NAME_GLOB 'datev2_':datev2,MATCH_NAME_GLOB 'ipv4_':ipv4,MATCH_NAME_GLOB 'ipv6_':ipv6,MATCH_NAME_GLOB 'float_':decimalv3(26,9),MATCH_NAME_GLOB 'boolean_':boolean,MATCH_NAME_GLOB 'varchar_':text> Yes false \N NONE
+v1 variant<'array_int':array<int>,'array_string':array<text>,'array_decimal':array<decimalv3(26,9)>,'array_datetime':array<datetimev2(0)>,'array_datetimev2':array<datetimev2(0)>,'array_date':array<datev2>,'array_datev2':array<datev2>,'array_ipv4':array<ipv4>,'array_ipv6':array<ipv6>,'array_float':array<decimalv3(26,9)>,'array_boolean':array<boolean>,'int_':int,'string_':text,'decimal_':decimalv3(26,9),'datetime_':datetimev2(0),'datetimev2_':datetimev2(6),'date_':datev2,'datev2_':datev2,'ipv4_':ipv4,'ipv6_':ipv6,'float_':decimalv3(26,9),'boolean_':boolean,'varchar_':text,PROPERTIES ("variant_max_subcolumns_count" = "6")> Yes false \N NONE
v1.array_boolean array<boolean> Yes false \N NONE
v1.array_date array<date> Yes false \N NONE
v1.array_datetime array<datetime> Yes false \N NONE
diff --git a/regression-test/data/variant_p0/predefine/test_all_prdefine_type_to_sparse.out b/regression-test/data/variant_p0/predefine/test_all_prdefine_type_to_sparse.out
new file mode 100644
index 0000000..25d76de
--- /dev/null
+++ b/regression-test/data/variant_p0/predefine/test_all_prdefine_type_to_sparse.out
@@ -0,0 +1,8920 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !sql --
+{"array_bigint_1":"bigint","array_boolean_1":"bool","array_char_1":"string","array_date_1":"datev2","array_datetime_1":"datetimev2","array_decimal128_1":"decimal128i","array_decimal256_1":"null","array_decimal32_1":"decimal32","array_decimal64_1":"decimal64","array_double_1":"double","array_float_1":"float","array_int_1":"int","array_ipv4_1":"ipv4","array_ipv6_1":"ipv6","array_largeint_1":"largeint","array_smallint_1":"smallint","array_string_1":"string","array_tinyint_1":"tinyint","bigint_1":"bigint","boolean_1":"bool","char_1":"string","date_1":"datev2","datetime_1":"datetimev2","decimal128_1":"decimal128i","decimal32_1":"decimal32","decimal64_1":"decimal64","double_1":"double","float_1":"float","int_1":"int","ipv4_1":"ipv4","ipv6_1":"ipv6","largeint_1":"largeint","other_1":"string","smallint_1":"smallint","string_1":"string","tinyint_1":"tinyint"}
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.other_1 text Yes false \N NONE
+var.tinyint_1 tinyint Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.tinyint_1 tinyint Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.smallint_1 smallint Yes false \N NONE
+var.tinyint_1 tinyint Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.smallint_1 smallint Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.int_1 int Yes false \N NONE
+var.smallint_1 smallint Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.int_1 int Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.bigint_1 bigint Yes false \N NONE
+var.int_1 int Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.bigint_1 bigint Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.bigint_1 bigint Yes false \N NONE
+var.largeint_1 largeint Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.largeint_1 largeint Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.char_1 text Yes false \N NONE
+var.largeint_1 largeint Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.char_1 text Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.char_1 text Yes false \N NONE
+var.string_1 text Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.string_1 text Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.float_1 float Yes false \N NONE
+var.string_1 text Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.string_1 text Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.double_1 double Yes false \N NONE
+var.string_1 text Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.double_1 double Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal32_1 decimal(8,2) Yes false \N NONE
+var.double_1 double Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal32_1 decimal(8,2) Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal32_1 decimal(8,2) Yes false \N NONE
+var.decimal64_1 decimal(16,9) Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal64_1 decimal(16,9) Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal128_1 decimal(36,9) Yes false \N NONE
+var.decimal64_1 decimal(16,9) Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal128_1 decimal(36,9) Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal128_1 decimal(36,9) Yes false \N NONE
+var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.decimal128_1 decimal(36,9) Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.datetime_1 datetime Yes false \N NONE
+var.decimal128_1 decimal(36,9) Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.datetime_1 datetime Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.date_1 date Yes false \N NONE
+var.datetime_1 datetime Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.date_1 date Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.date_1 date Yes false \N NONE
+var.ipv4_1 ipv4 Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.ipv4_1 ipv4 Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.ipv4_1 ipv4 Yes false \N NONE
+var.ipv6_1 ipv6 Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.ipv6_1 ipv6 Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_boolean_1 array<boolean> Yes false \N NONE
+var.ipv6_1 ipv6 Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.ipv6_1 ipv6 Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_tinyint_1 array<tinyint> Yes false \N NONE
+var.ipv6_1 ipv6 Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_tinyint_1 array<tinyint> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_smallint_1 array<smallint> Yes false \N NONE
+var.array_tinyint_1 array<tinyint> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_smallint_1 array<smallint> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_int_1 array<int> Yes false \N NONE
+var.array_smallint_1 array<smallint> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_int_1 array<int> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_bigint_1 array<bigint> Yes false \N NONE
+var.array_int_1 array<int> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_bigint_1 array<bigint> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_bigint_1 array<bigint> Yes false \N NONE
+var.array_largeint_1 array<largeint> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_largeint_1 array<largeint> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_char_1 array<text> Yes false \N NONE
+var.array_largeint_1 array<largeint> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_char_1 array<text> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_char_1 array<text> Yes false \N NONE
+var.array_string_1 array<text> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_string_1 array<text> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_float_1 array<float> Yes false \N NONE
+var.array_string_1 array<text> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_float_1 array<float> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_double_1 array<double> Yes false \N NONE
+var.array_float_1 array<float> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_double_1 array<double> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal32_1 array<decimal(8,2)> Yes false \N NONE
+var.array_double_1 array<double> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal32_1 array<decimal(8,2)> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal32_1 array<decimal(8,2)> Yes false \N NONE
+var.array_decimal64_1 array<decimal(16,9)> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal64_1 array<decimal(16,9)> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal128_1 array<decimal(36,9)> Yes false \N NONE
+var.array_decimal64_1 array<decimal(16,9)> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal128_1 array<decimal(36,9)> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal128_1 array<decimal(36,9)> Yes false \N NONE
+var.array_decimal256_1 array<unknown type: UNSUPPORTED_TYPE> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_decimal256_1 array<unknown type: UNSUPPORTED_TYPE> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_datetime_1 array<datetime> Yes false \N NONE
+var.array_decimal256_1 array<unknown type: UNSUPPORTED_TYPE> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_datetime_1 array<datetime> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_datetime_1":["2021-01-01 00:00:00"]}
+{"array_datetime_1":["2021-01-01 00:00:01"]}
+{"array_datetime_1":["2021-01-01 00:00:02"]}
+{"array_datetime_1":["2021-01-01 00:00:03"]}
+{"array_datetime_1":["2021-01-01 00:00:04"]}
+{"array_datetime_1":["2021-01-01 00:00:05"]}
+{"array_datetime_1":["2021-01-01 00:00:06"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_date_1 array<date> Yes false \N NONE
+var.array_datetime_1 array<datetime> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_date_1 array<date> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_datetime_1":["2021-01-01 00:00:00"]}
+{"array_datetime_1":["2021-01-01 00:00:01"]}
+{"array_datetime_1":["2021-01-01 00:00:02"]}
+{"array_datetime_1":["2021-01-01 00:00:03"]}
+{"array_datetime_1":["2021-01-01 00:00:04"]}
+{"array_datetime_1":["2021-01-01 00:00:05"]}
+{"array_datetime_1":["2021-01-01 00:00:06"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_date_1":["2021-01-01"]}
+{"array_date_1":["2021-01-02"]}
+{"array_date_1":["2021-01-03"]}
+{"array_date_1":["2021-01-04"]}
+{"array_date_1":["2021-01-05"]}
+{"array_date_1":["2021-01-06"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_date_1 array<date> Yes false \N NONE
+var.array_ipv4_1 array<ipv4> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_ipv4_1 array<ipv4> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_datetime_1":["2021-01-01 00:00:00"]}
+{"array_datetime_1":["2021-01-01 00:00:01"]}
+{"array_datetime_1":["2021-01-01 00:00:02"]}
+{"array_datetime_1":["2021-01-01 00:00:03"]}
+{"array_datetime_1":["2021-01-01 00:00:04"]}
+{"array_datetime_1":["2021-01-01 00:00:05"]}
+{"array_datetime_1":["2021-01-01 00:00:06"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_date_1":["2021-01-01"]}
+{"array_date_1":["2021-01-02"]}
+{"array_date_1":["2021-01-03"]}
+{"array_date_1":["2021-01-04"]}
+{"array_date_1":["2021-01-05"]}
+{"array_date_1":["2021-01-06"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_ipv4_1":["192.168.1.1"]}
+{"array_ipv4_1":["192.168.1.2"]}
+{"array_ipv4_1":["192.168.1.3"]}
+{"array_ipv4_1":["192.168.1.4"]}
+{"array_ipv4_1":["192.168.1.5"]}
+{"array_ipv4_1":["192.168.1.6"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_ipv4_1 array<ipv4> Yes false \N NONE
+var.array_ipv6_1 array<ipv6> Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_ipv6_1 array<ipv6> Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_datetime_1":["2021-01-01 00:00:00"]}
+{"array_datetime_1":["2021-01-01 00:00:01"]}
+{"array_datetime_1":["2021-01-01 00:00:02"]}
+{"array_datetime_1":["2021-01-01 00:00:03"]}
+{"array_datetime_1":["2021-01-01 00:00:04"]}
+{"array_datetime_1":["2021-01-01 00:00:05"]}
+{"array_datetime_1":["2021-01-01 00:00:06"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_date_1":["2021-01-01"]}
+{"array_date_1":["2021-01-02"]}
+{"array_date_1":["2021-01-03"]}
+{"array_date_1":["2021-01-04"]}
+{"array_date_1":["2021-01-05"]}
+{"array_date_1":["2021-01-06"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_ipv4_1":["192.168.1.1"]}
+{"array_ipv4_1":["192.168.1.2"]}
+{"array_ipv4_1":["192.168.1.3"]}
+{"array_ipv4_1":["192.168.1.4"]}
+{"array_ipv4_1":["192.168.1.5"]}
+{"array_ipv4_1":["192.168.1.6"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7335"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7336"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7337"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7338"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7339"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733a"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733b"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733c"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733d"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733e"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+
+-- !sql_compaction_before --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.array_ipv6_1 array<ipv6> Yes false \N NONE
+var.other_1 text Yes false \N NONE
+
+-- !sql_compaction_after --
+id bigint No true \N
+var variant<'boolean_*':boolean,'tinyint_*':tinyint,'smallint_*':smallint,'int_*':int,'bigint_*':bigint,'largeint_*':largeint,'char_*':text,'string_*':text,'float_*':float,'double_*':double,'decimal32_*':decimalv3(8,2),'decimal64_*':decimalv3(16,9),'decimal128_*':decimalv3(36,9),'decimal256_*':decimalv3(70,60),'datetime_*':datetimev2(0),'date_*':datev2,'ipv4_*':ipv4,'ipv6_*':ipv6,'array_boolean_*':array<boolean>,'array_tinyint_*':array<tinyint>,'array_smallint_*':array<smallint>,'array_int_*':array<int>,'array_bigint_*':array<bigint>,'array_largeint_*':array<largeint>,'array_char_*':array<text>,'array_string_*':array<text>,'array_float_*':array<float>,'array_double_*':array<double>,'array_decimal32_*':array<decimalv3(8,2)>,'array_decimal64_*':array<decimalv3(16,9)>,'array_decimal128_*':array<decimalv3(36,9)>,'array_decimal256_*':array<decimalv3(70,60)>,'array_datetime_*':array<datetimev2(0)>,'array_date_*':array<datev2>,'array_ipv4_*':array<ipv4>,'array_ipv6_*':array<ipv6>,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true")> No false \N NONE
+var.other_1 text Yes false \N NONE
+
+-- !sql --
+{"array_bigint_1":[1, null],"array_boolean_1":[1],"array_char_1":["1"],"array_date_1":["2021-01-01"],"array_datetime_1":["2021-01-01 00:00:00"],"array_decimal128_1":[1.120000000],"array_decimal256_1":[null],"array_decimal32_1":[1.12],"array_decimal64_1":[1.120000000],"array_double_1":[1.12],"array_float_1":[1.12],"array_int_1":[1, null],"array_ipv4_1":["192.168.1.1"],"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"],"array_largeint_1":[1, null],"array_smallint_1":[1, null],"array_string_1":["1"],"array_tinyint_1":[1, null],"bigint_1":1,"boolean_1":1,"char_1":"1","date_1":"2021-01-01","datetime_1":"2021-01-01 00:00:00","decimal128_1":1.120000000,"decimal32_1":1.12,"decimal64_1":1.120000000,"double_1":1.12,"float_1":1.12,"int_1":1,"ipv4_1":"192.168.1.1","ipv6_1":"2001:db8:85a3::8a2e:370:7334","largeint_1":1,"other_1":"1","smallint_1":1,"string_1":"1","tinyint_1":1}
+{"other_1":"1"}
+{"tinyint_1":1}
+{"tinyint_1":2}
+{"smallint_1":1}
+{"smallint_1":2}
+{"smallint_1":3}
+{"int_1":1}
+{"int_1":2}
+{"int_1":3}
+{"int_1":4}
+{"bigint_1":1}
+{"bigint_1":2}
+{"bigint_1":3}
+{"bigint_1":4}
+{"bigint_1":5}
+{"largeint_1":1}
+{"largeint_1":2}
+{"largeint_1":3}
+{"largeint_1":4}
+{"largeint_1":5}
+{"largeint_1":6}
+{"char_1":"1"}
+{"char_1":"2"}
+{"char_1":"3"}
+{"char_1":"4"}
+{"char_1":"5"}
+{"char_1":"6"}
+{"char_1":"7"}
+{"string_1":"1"}
+{"string_1":"2"}
+{"string_1":"3"}
+{"string_1":"4"}
+{"string_1":"5"}
+{"string_1":"6"}
+{"string_1":"7"}
+{"string_1":"8"}
+{"float_1":1.12}
+{"float_1":2.12}
+{"float_1":3.12}
+{"float_1":4.12}
+{"float_1":5.12}
+{"float_1":6.12}
+{"float_1":7.12}
+{"float_1":8.12}
+{"double_1":1.12}
+{"double_1":2.12}
+{"double_1":3.12}
+{"double_1":4.12}
+{"double_1":5.12}
+{"double_1":6.12}
+{"double_1":7.12}
+{"double_1":8.12}
+{"double_1":9.12}
+{"decimal32_1":1.12}
+{"decimal32_1":2.12}
+{"decimal32_1":3.12}
+{"decimal32_1":4.12}
+{"decimal32_1":5.12}
+{"decimal32_1":6.12}
+{"decimal32_1":7.12}
+{"decimal32_1":8.12}
+{"decimal32_1":9.12}
+{"decimal32_1":10.12}
+{"decimal64_1":1.120000000}
+{"decimal64_1":2.120000000}
+{"decimal64_1":3.120000000}
+{"decimal64_1":4.120000000}
+{"decimal64_1":5.120000000}
+{"decimal64_1":6.120000000}
+{"decimal64_1":7.120000000}
+{"decimal64_1":8.120000000}
+{"decimal64_1":9.120000000}
+{"decimal64_1":10.120000000}
+{"decimal64_1":11.120000000}
+{"decimal128_1":1.120000000}
+{"decimal128_1":2.120000000}
+{"decimal128_1":3.120000000}
+{"decimal128_1":4.120000000}
+{"decimal128_1":5.120000000}
+{"decimal128_1":6.120000000}
+{"decimal128_1":7.120000000}
+{"decimal128_1":8.120000000}
+{"decimal128_1":9.120000000}
+{"decimal128_1":10.120000000}
+{"decimal128_1":11.120000000}
+{"decimal128_1":12.120000000}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{}
+{"datetime_1":"2021-01-01 00:00:00"}
+{"datetime_1":"2021-01-01 00:00:01"}
+{"datetime_1":"2021-01-01 00:00:02"}
+{"datetime_1":"2021-01-01 00:00:03"}
+{"datetime_1":"2021-01-01 00:00:04"}
+{"datetime_1":"2021-01-01 00:00:05"}
+{"datetime_1":"2021-01-01 00:00:06"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"datetime_1":"2021-01-01 00:00:09"}
+{"datetime_1":"2021-01-01 00:00:10"}
+{"datetime_1":"2021-01-01 00:00:07"}
+{"datetime_1":"2021-01-01 00:00:08"}
+{"date_1":"2021-01-01"}
+{"date_1":"2021-01-02"}
+{"date_1":"2021-01-03"}
+{"date_1":"2021-01-04"}
+{"date_1":"2021-01-05"}
+{"date_1":"2021-01-06"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"date_1":"2021-01-07"}
+{"date_1":"2021-01-08"}
+{"date_1":"2021-01-09"}
+{"date_1":"2021-01-10"}
+{"ipv4_1":"192.168.1.1"}
+{"ipv4_1":"192.168.1.2"}
+{"ipv4_1":"192.168.1.3"}
+{"ipv4_1":"192.168.1.4"}
+{"ipv4_1":"192.168.1.5"}
+{"ipv4_1":"192.168.1.6"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.7"}
+{"ipv4_1":"192.168.1.8"}
+{"ipv4_1":"192.168.1.9"}
+{"ipv4_1":"192.168.1.10"}
+{"ipv4_1":"192.168.1.11"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7334"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7335"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7336"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7337"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7338"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7339"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733a"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733b"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733c"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733d"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733e"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7341"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:733f"}
+{"ipv6_1":"2001:db8:85a3::8a2e:370:7340"}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_boolean_1":[1]}
+{"array_boolean_1":[0]}
+{"array_tinyint_1":[1]}
+{"array_tinyint_1":[2]}
+{"array_tinyint_1":[3]}
+{"array_tinyint_1":[4]}
+{"array_tinyint_1":[5]}
+{"array_tinyint_1":[6]}
+{"array_tinyint_1":[7]}
+{"array_tinyint_1":[8]}
+{"array_tinyint_1":[9]}
+{"array_tinyint_1":[10]}
+{"array_tinyint_1":[11]}
+{"array_tinyint_1":[12]}
+{"array_tinyint_1":[13]}
+{"array_tinyint_1":[14]}
+{"array_tinyint_1":[15]}
+{"array_tinyint_1":[16]}
+{"array_tinyint_1":[17]}
+{"array_tinyint_1":[18]}
+{"array_smallint_1":[1]}
+{"array_smallint_1":[2, null]}
+{"array_smallint_1":[3]}
+{"array_smallint_1":[4]}
+{"array_smallint_1":[5]}
+{"array_smallint_1":[6]}
+{"array_smallint_1":[7]}
+{"array_smallint_1":[8]}
+{"array_smallint_1":[9]}
+{"array_smallint_1":[10]}
+{"array_smallint_1":[11]}
+{"array_smallint_1":[12]}
+{"array_smallint_1":[13]}
+{"array_smallint_1":[14]}
+{"array_smallint_1":[15]}
+{"array_smallint_1":[16]}
+{"array_smallint_1":[17]}
+{"array_smallint_1":[18]}
+{"array_smallint_1":[19]}
+{"array_int_1":[1]}
+{"array_int_1":[2]}
+{"array_int_1":[3]}
+{"array_int_1":[4]}
+{"array_int_1":[5]}
+{"array_int_1":[6]}
+{"array_int_1":[7]}
+{"array_int_1":[8]}
+{"array_int_1":[9]}
+{"array_int_1":[10]}
+{"array_int_1":[11]}
+{"array_int_1":[12]}
+{"array_int_1":[13]}
+{"array_int_1":[14]}
+{"array_int_1":[15]}
+{"array_int_1":[16]}
+{"array_int_1":[17]}
+{"array_int_1":[18]}
+{"array_int_1":[19]}
+{"array_int_1":[20]}
+{"array_bigint_1":[1]}
+{"array_bigint_1":[2]}
+{"array_bigint_1":[3]}
+{"array_bigint_1":[4]}
+{"array_bigint_1":[5]}
+{"array_bigint_1":[6]}
+{"array_bigint_1":[7]}
+{"array_bigint_1":[8]}
+{"array_bigint_1":[9]}
+{"array_bigint_1":[10]}
+{"array_bigint_1":[11]}
+{"array_bigint_1":[12]}
+{"array_bigint_1":[13]}
+{"array_bigint_1":[14]}
+{"array_bigint_1":[15]}
+{"array_bigint_1":[16]}
+{"array_bigint_1":[17]}
+{"array_bigint_1":[18]}
+{"array_bigint_1":[19]}
+{"array_bigint_1":[20]}
+{"array_bigint_1":[21]}
+{"array_largeint_1":[1, null]}
+{"array_largeint_1":[2]}
+{"array_largeint_1":[3]}
+{"array_largeint_1":[4]}
+{"array_largeint_1":[5]}
+{"array_largeint_1":[6]}
+{"array_largeint_1":[7]}
+{"array_largeint_1":[8]}
+{"array_largeint_1":[9]}
+{"array_largeint_1":[10]}
+{"array_largeint_1":[11]}
+{"array_largeint_1":[12]}
+{"array_largeint_1":[13]}
+{"array_largeint_1":[14]}
+{"array_largeint_1":[15]}
+{"array_largeint_1":[16]}
+{"array_largeint_1":[17]}
+{"array_largeint_1":[18]}
+{"array_largeint_1":[19]}
+{"array_largeint_1":[20]}
+{"array_largeint_1":[21]}
+{"array_largeint_1":[22]}
+{"array_char_1":["1"]}
+{"array_char_1":["2"]}
+{"array_char_1":["3"]}
+{"array_char_1":["4"]}
+{"array_char_1":["5"]}
+{"array_char_1":["6"]}
+{"array_char_1":["7"]}
+{"array_char_1":["8"]}
+{"array_char_1":["9"]}
+{"array_char_1":["10"]}
+{"array_char_1":["11"]}
+{"array_char_1":["12"]}
+{"array_char_1":["13"]}
+{"array_char_1":["14"]}
+{"array_char_1":["15"]}
+{"array_char_1":["16"]}
+{"array_char_1":["17"]}
+{"array_char_1":["18"]}
+{"array_char_1":["19"]}
+{"array_char_1":["20"]}
+{"array_char_1":["21"]}
+{"array_char_1":["22"]}
+{"array_char_1":["23"]}
+{"array_string_1":["1"]}
+{"array_string_1":["2"]}
+{"array_string_1":["3"]}
+{"array_string_1":["4"]}
+{"array_string_1":["5"]}
+{"array_string_1":["6"]}
+{"array_string_1":["7"]}
+{"array_string_1":["8"]}
+{"array_string_1":["9"]}
+{"array_string_1":["10"]}
+{"array_string_1":["11"]}
+{"array_string_1":["12"]}
+{"array_string_1":["13"]}
+{"array_string_1":["14"]}
+{"array_string_1":["15"]}
+{"array_string_1":["16"]}
+{"array_string_1":["17"]}
+{"array_string_1":["18"]}
+{"array_string_1":["19"]}
+{"array_string_1":["20"]}
+{"array_string_1":["21"]}
+{"array_string_1":["22"]}
+{"array_string_1":["23"]}
+{"array_string_1":["24"]}
+{"array_float_1":[1.12]}
+{"array_float_1":[2.12]}
+{"array_float_1":[3.12]}
+{"array_float_1":[4.12]}
+{"array_float_1":[5.12]}
+{"array_float_1":[6.12]}
+{"array_float_1":[7.12]}
+{"array_float_1":[8.12]}
+{"array_float_1":[9.12]}
+{"array_float_1":[10.12]}
+{"array_float_1":[11.12]}
+{"array_float_1":[12.12]}
+{"array_float_1":[13.12]}
+{"array_float_1":[14.12]}
+{"array_float_1":[15.12]}
+{"array_float_1":[16.12]}
+{"array_float_1":[17.12]}
+{"array_float_1":[18.12]}
+{"array_float_1":[19.12]}
+{"array_float_1":[20.12]}
+{"array_float_1":[21.12]}
+{"array_float_1":[22.12]}
+{"array_float_1":[23.12]}
+{"array_float_1":[24.12]}
+{"array_float_1":[25.12]}
+{"array_double_1":[1.12]}
+{"array_double_1":[2.12]}
+{"array_double_1":[3.12]}
+{"array_double_1":[4.12]}
+{"array_double_1":[5.12]}
+{"array_double_1":[6.12]}
+{"array_double_1":[7.12]}
+{"array_double_1":[8.12]}
+{"array_double_1":[9.12]}
+{"array_double_1":[10.12]}
+{"array_double_1":[11.12]}
+{"array_double_1":[12.12]}
+{"array_double_1":[13.12]}
+{"array_double_1":[14.12]}
+{"array_double_1":[15.12]}
+{"array_double_1":[16.12]}
+{"array_double_1":[17.12]}
+{"array_double_1":[18.12]}
+{"array_double_1":[19.12]}
+{"array_double_1":[20.12]}
+{"array_double_1":[21.12]}
+{"array_double_1":[22.12]}
+{"array_double_1":[23.12]}
+{"array_double_1":[24.12]}
+{"array_double_1":[25.12]}
+{"array_double_1":[26.12]}
+{"array_decimal32_1":[1.12]}
+{"array_decimal32_1":[2.12]}
+{"array_decimal32_1":[3.12]}
+{"array_decimal32_1":[4.12]}
+{"array_decimal32_1":[5.12]}
+{"array_decimal32_1":[6.12]}
+{"array_decimal32_1":[7.12]}
+{"array_decimal32_1":[8.12]}
+{"array_decimal32_1":[9.12]}
+{"array_decimal32_1":[10.12]}
+{"array_decimal32_1":[11.12]}
+{"array_decimal32_1":[12.12]}
+{"array_decimal32_1":[13.12]}
+{"array_decimal32_1":[14.12]}
+{"array_decimal32_1":[15.12]}
+{"array_decimal32_1":[16.12]}
+{"array_decimal32_1":[17.12]}
+{"array_decimal32_1":[18.12]}
+{"array_decimal32_1":[19.12]}
+{"array_decimal32_1":[20.12]}
+{"array_decimal32_1":[21.12]}
+{"array_decimal32_1":[22.12]}
+{"array_decimal32_1":[23.12]}
+{"array_decimal32_1":[24.12]}
+{"array_decimal32_1":[25.12]}
+{"array_decimal32_1":[26.12]}
+{"array_decimal32_1":[27.12]}
+{"array_decimal64_1":[1.120000000]}
+{"array_decimal64_1":[2.120000000]}
+{"array_decimal64_1":[3.120000000]}
+{"array_decimal64_1":[4.120000000]}
+{"array_decimal64_1":[5.120000000]}
+{"array_decimal64_1":[6.120000000]}
+{"array_decimal64_1":[7.120000000]}
+{"array_decimal64_1":[8.120000000]}
+{"array_decimal64_1":[9.120000000]}
+{"array_decimal64_1":[10.120000000]}
+{"array_decimal64_1":[11.120000000]}
+{"array_decimal64_1":[12.120000000]}
+{"array_decimal64_1":[13.120000000]}
+{"array_decimal64_1":[14.120000000]}
+{"array_decimal64_1":[15.120000000]}
+{"array_decimal64_1":[16.120000000]}
+{"array_decimal64_1":[17.120000000]}
+{"array_decimal64_1":[18.120000000]}
+{"array_decimal64_1":[19.120000000]}
+{"array_decimal64_1":[20.120000000]}
+{"array_decimal64_1":[21.120000000]}
+{"array_decimal64_1":[22.120000000]}
+{"array_decimal64_1":[23.120000000]}
+{"array_decimal64_1":[24.120000000]}
+{"array_decimal64_1":[25.120000000]}
+{"array_decimal64_1":[26.120000000]}
+{"array_decimal64_1":[27.120000000]}
+{"array_decimal64_1":[28.120000000]}
+{"array_decimal128_1":[1.120000000]}
+{"array_decimal128_1":[2.120000000]}
+{"array_decimal128_1":[3.120000000]}
+{"array_decimal128_1":[4.120000000]}
+{"array_decimal128_1":[5.120000000]}
+{"array_decimal128_1":[6.120000000]}
+{"array_decimal128_1":[7.120000000]}
+{"array_decimal128_1":[8.120000000]}
+{"array_decimal128_1":[9.120000000]}
+{"array_decimal128_1":[10.120000000]}
+{"array_decimal128_1":[11.120000000]}
+{"array_decimal128_1":[12.120000000]}
+{"array_decimal128_1":[13.120000000]}
+{"array_decimal128_1":[14.120000000]}
+{"array_decimal128_1":[15.120000000]}
+{"array_decimal128_1":[16.120000000]}
+{"array_decimal128_1":[17.120000000]}
+{"array_decimal128_1":[18.120000000]}
+{"array_decimal128_1":[19.120000000]}
+{"array_decimal128_1":[20.120000000]}
+{"array_decimal128_1":[21.120000000]}
+{"array_decimal128_1":[22.120000000]}
+{"array_decimal128_1":[23.120000000]}
+{"array_decimal128_1":[24.120000000]}
+{"array_decimal128_1":[25.120000000]}
+{"array_decimal128_1":[26.120000000]}
+{"array_decimal128_1":[27.120000000]}
+{"array_decimal128_1":[28.120000000]}
+{"array_decimal128_1":[29.120000000]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_decimal256_1":[null]}
+{"array_datetime_1":["2021-01-01 00:00:00"]}
+{"array_datetime_1":["2021-01-01 00:00:01"]}
+{"array_datetime_1":["2021-01-01 00:00:02"]}
+{"array_datetime_1":["2021-01-01 00:00:03"]}
+{"array_datetime_1":["2021-01-01 00:00:04"]}
+{"array_datetime_1":["2021-01-01 00:00:05"]}
+{"array_datetime_1":["2021-01-01 00:00:06"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_datetime_1":["2021-01-01 00:00:07"]}
+{"array_datetime_1":["2021-01-01 00:00:08"]}
+{"array_datetime_1":["2021-01-01 00:00:09"]}
+{"array_datetime_1":["2021-01-01 00:00:10"]}
+{"array_date_1":["2021-01-01"]}
+{"array_date_1":["2021-01-02"]}
+{"array_date_1":["2021-01-03"]}
+{"array_date_1":["2021-01-04"]}
+{"array_date_1":["2021-01-05"]}
+{"array_date_1":["2021-01-06"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_date_1":["2021-01-09"]}
+{"array_date_1":["2021-01-10"]}
+{"array_date_1":["2021-01-07"]}
+{"array_date_1":["2021-01-08"]}
+{"array_ipv4_1":["192.168.1.1"]}
+{"array_ipv4_1":["192.168.1.2"]}
+{"array_ipv4_1":["192.168.1.3"]}
+{"array_ipv4_1":["192.168.1.4"]}
+{"array_ipv4_1":["192.168.1.5"]}
+{"array_ipv4_1":["192.168.1.6"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv4_1":["192.168.1.10"]}
+{"array_ipv4_1":["192.168.1.7"]}
+{"array_ipv4_1":["192.168.1.8"]}
+{"array_ipv4_1":["192.168.1.9"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7334"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7335"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7336"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7337"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7338"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7339"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733a"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733b"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733c"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733d"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733e"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7341"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:733f"]}
+{"array_ipv6_1":["2001:db8:85a3::8a2e:370:7340"]}
+{"other_1":"1"}
+{"other_1":"2"}
+{"other_1":"3"}
+{"other_1":"4"}
+{"other_1":"5"}
+{"other_1":"6"}
+{"other_1":"7"}
+{"other_1":"8"}
+{"other_1":"9"}
+{"other_1":"10"}
+{"other_1":"11"}
+{"other_1":"12"}
+{"other_1":"13"}
+{"other_1":"14"}
+{"other_1":"15"}
+{"other_1":"16"}
+{"other_1":"17"}
+{"other_1":"18"}
+{"other_1":"19"}
+{"other_1":"20"}
+{"other_1":"21"}
+{"other_1":"22"}
+{"other_1":"23"}
+{"other_1":"24"}
+{"other_1":"25"}
+{"other_1":"26"}
+{"other_1":"27"}
+{"other_1":"28"}
+{"other_1":"29"}
+{"other_1":"30"}
+{"other_1":"31"}
+{"other_1":"32"}
+{"other_1":"33"}
+{"other_1":"34"}
+{"other_1":"35"}
+
diff --git a/regression-test/data/variant_p0/predefine/test_custom_analyzer.out b/regression-test/data/variant_p0/predefine/test_custom_analyzer.out
new file mode 100644
index 0000000..0698c95
--- /dev/null
+++ b/regression-test/data/variant_p0/predefine/test_custom_analyzer.out
@@ -0,0 +1,43 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !tokenize_sql --
+[{\n "token": "србија херцеговина щучин гурзуф ψ4 босна"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "wasted…again"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "♯p-complete"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "a∴a∴"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "rx j1242−11"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "1080º avalanche"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "clayfighter"\n }, {\n "token": "63"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "β"\n }, {\n "token": "carbon"\n }, {\n "token": "nitride"\n }]
+
+-- !tokenize_sql --
+[{\n "token": "ǁuǁe"\n }, {\n "token": "language"\n }]
+
+-- !sql --
+1 abcDEF
+
+-- !sql --
+2 中国人民
+
+-- !sql --
+3 ǁŨǁe Language
+
+-- !sql --
+3 Wikipedia;Miscellaneous-Jj102786 / 3tle Born Oct 27th 1986 @ Blytheville, Arkansas @ 9:14pm 23 yrs of age male,white Cucassion American raised Religion:Pentocostal,Church of God
+
+-- !sql --
+4 1080º Avalanche
+
diff --git a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out
new file mode 100644
index 0000000..617122a
--- /dev/null
+++ b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out
@@ -0,0 +1,11 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !sql --
+id bigint Yes true \N
+var variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
+
+-- !sql --
+id bigint Yes true \N
+var variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
+var2 variant<PROPERTIES ("variant_max_subcolumns_count" = "15")> Yes false \N NONE
+var3 variant<PROPERTIES ("variant_max_subcolumns_count" = "10")> Yes false \N NONE
+
diff --git a/regression-test/data/variant_p0/schema_change/test_add_multi_var_mulit_indexes.out b/regression-test/data/variant_p0/schema_change/test_add_multi_var_mulit_indexes.out
new file mode 100644
index 0000000..b13717a
--- /dev/null
+++ b/regression-test/data/variant_p0/schema_change/test_add_multi_var_mulit_indexes.out
@@ -0,0 +1,20 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !sql --
+0 {"a":12345,"b":2} \N \N
+1 {"a":12345,"b":2} {"a":"12345","b":"3"} \N
+2 {"a":12345,"b":2} {"a":"56789","b":"3"} {"a":12345,"b":2}
+3 {"a":12345,"b":2} {"a":"12345","b":"2"} {"a":56789,"b":2}
+4 {"a":12345,"b":2} {"a":"56789","b":"2"} {"a":12345,"b":3}
+
+-- !sql --
+1 {"a":12345,"b":2} {"a":"12345","b":"3"} \N
+3 {"a":12345,"b":2} {"a":"12345","b":"2"} {"a":56789,"b":2}
+
+-- !sql --
+3 {"a":12345,"b":2} {"a":"12345","b":"2"} {"a":56789,"b":2}
+4 {"a":12345,"b":2} {"a":"56789","b":"2"} {"a":12345,"b":3}
+
+-- !sql --
+2 {"a":12345,"b":2} {"a":"56789","b":"3"} {"a":12345,"b":2}
+3 {"a":12345,"b":2} {"a":"12345","b":"2"} {"a":56789,"b":2}
+
diff --git a/regression-test/data/variant_p0/tpch/sql/q01_trans.out b/regression-test/data/variant_p0/tpch/sql/q01_trans.out
index c5d260ca..f0672f2 100644
--- a/regression-test/data/variant_p0/tpch/sql/q01_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q01_trans.out
@@ -1,7 +1,7 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !q01_trans --
-A F 3774200.0 5.320753880689995E9 5.054096266682795E9 5.256751331449231E9 25.537587116854997 36002.123829014105 0.05014459706338475 147790
-N F 95257.0 1.3373779584000006E8 1.2713237265119994E8 1.3228629122944497E8 25.30066401062417 35521.32691633468 0.04939442231075703 3765
-N O 7459297.0 1.0512270008900036E10 9.986238338384706E9 1.0385578376585476E10 25.545537671232875 36000.92468801382 0.05009595890410998 292000
-R F 3785523.0 5.337950526470003E9 5.071818532942003E9 5.274405503049376E9 25.5259438574251 35994.02921403095 0.04998927856182775 148301
+A F 3774200.0 5.32075388069E9 5.054096266682786E9 5.256751331449226E9 25.537587116854997 36002.12382901414 0.0501445970633986 147790
+N F 95257.0 1.3373779584E8 1.2713237265120004E8 1.3228629122944503E8 25.30066401062417 35521.32691633466 0.04939442231075693 3765
+N O 7459297.0 1.0512270008900019E10 9.986238338384691E9 1.0385578376585459E10 25.545537671232875 36000.924688013765 0.050095958904099 292000
+R F 3785523.0 5.33795052647E9 5.071818532941994E9 5.274405503049363E9 25.5259438574251 35994.029214030925 0.04998927856184158 148301
diff --git a/regression-test/data/variant_p0/tpch/sql/q05_trans.out b/regression-test/data/variant_p0/tpch/sql/q05_trans.out
index 7eb16fd..49b518c 100644
--- a/regression-test/data/variant_p0/tpch/sql/q05_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q05_trans.out
@@ -3,6 +3,6 @@
CHINA 7822103.0
INDIA 6376121.508500004
JAPAN 6000077.218400001
-INDONESIA 5580475.402700002
-VIETNAM 4497840.546600001
+INDONESIA 5580475.402700004
+VIETNAM 4497840.5466
diff --git a/regression-test/data/variant_p0/tpch/sql/q06_trans.out b/regression-test/data/variant_p0/tpch/sql/q06_trans.out
index 174241a..3eca67a 100644
--- a/regression-test/data/variant_p0/tpch/sql/q06_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q06_trans.out
@@ -1,4 +1,4 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !q06_trans --
-1.1803420253399998E7
+1.1803420253400007E7
diff --git a/regression-test/data/variant_p0/tpch/sql/q08_trans.out b/regression-test/data/variant_p0/tpch/sql/q08_trans.out
index b248362..b303017 100644
--- a/regression-test/data/variant_p0/tpch/sql/q08_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q08_trans.out
@@ -1,5 +1,5 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !q08_trans --
-1995 0.028648741305617544
-1996 0.01825027910796215
+1995 0.028648741305617547
+1996 0.018250279107962147
diff --git a/regression-test/data/variant_p0/tpch/sql/q09_trans.out b/regression-test/data/variant_p0/tpch/sql/q09_trans.out
index 807b50e..ba5905b 100644
--- a/regression-test/data/variant_p0/tpch/sql/q09_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q09_trans.out
@@ -1,178 +1,178 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !q09_trans --
-ALGERIA 1998 2321785.3682000004
+ALGERIA 1998 2321785.3681999994
ALGERIA 1997 3685016.8589
-ALGERIA 1996 4276597.4252999965
-ALGERIA 1995 4418370.4153999975
-ALGERIA 1994 3864849.952099998
-ALGERIA 1993 3541051.386499998
+ALGERIA 1996 4276597.4253
+ALGERIA 1995 4418370.415399999
+ALGERIA 1994 3864849.952100001
+ALGERIA 1993 3541051.3865
ALGERIA 1992 4310013.348199998
-ARGENTINA 1998 2685983.8005
+ARGENTINA 1998 2685983.800500001
ARGENTINA 1997 4242147.8124
-ARGENTINA 1996 3907867.0103000016
-ARGENTINA 1995 4605921.501099999
-ARGENTINA 1994 3542096.1564
-ARGENTINA 1993 3949965.9387999987
-ARGENTINA 1992 4521180.4695
-BRAZIL 1998 2778730.393099999
-BRAZIL 1997 4642037.468700003
-BRAZIL 1996 4530304.603400001
-BRAZIL 1995 4502344.865700001
-BRAZIL 1994 4875806.501500003
-BRAZIL 1993 4687478.6531
+ARGENTINA 1996 3907867.0102999993
+ARGENTINA 1995 4605921.5011
+ARGENTINA 1994 3542096.1563999997
+ARGENTINA 1993 3949965.938799999
+ARGENTINA 1992 4521180.469500001
+BRAZIL 1998 2778730.3931
+BRAZIL 1997 4642037.4687
+BRAZIL 1996 4530304.603399999
+BRAZIL 1995 4502344.865699999
+BRAZIL 1994 4875806.5015
+BRAZIL 1993 4687478.653100001
BRAZIL 1992 5035200.046399999
CANADA 1998 2194509.0465
-CANADA 1997 3482197.9520999985
-CANADA 1996 3712231.281399999
-CANADA 1995 4014814.847599998
-CANADA 1994 4145304.485499999
-CANADA 1993 3787069.604499998
-CANADA 1992 4168009.420099999
-CHINA 1998 3398578.0001000008
-CHINA 1997 6358959.3338
-CHINA 1996 6435158.322900003
-CHINA 1995 6174776.211300001
+CANADA 1997 3482197.9521000003
+CANADA 1996 3712231.2814
+CANADA 1995 4014814.8476000004
+CANADA 1994 4145304.4854999995
+CANADA 1993 3787069.6044999994
+CANADA 1992 4168009.4200999993
+CHINA 1998 3398578.000099999
+CHINA 1997 6358959.333799998
+CHINA 1996 6435158.322899998
+CHINA 1995 6174776.211299999
CHINA 1994 6385751.081199998
-CHINA 1993 5765034.119399997
-CHINA 1992 6324034.237900005
-EGYPT 1998 2333148.3334000004
-EGYPT 1997 3661244.2730999994
-EGYPT 1996 3765371.2367999996
-EGYPT 1995 4094744.292499998
-EGYPT 1994 3566508.081800001
-EGYPT 1993 3725283.7747000013
-EGYPT 1992 3373762.333499999
+CHINA 1993 5765034.1194
+CHINA 1992 6324034.237900001
+EGYPT 1998 2333148.3334
+EGYPT 1997 3661244.2731
+EGYPT 1996 3765371.2368000015
+EGYPT 1995 4094744.2925000004
+EGYPT 1994 3566508.0818
+EGYPT 1993 3725283.7747
+EGYPT 1992 3373762.3335000006
ETHIOPIA 1998 1953927.2682
-ETHIOPIA 1997 3285786.3266000007
-ETHIOPIA 1996 3525028.7952
-ETHIOPIA 1995 3781674.8910999987
-ETHIOPIA 1994 3037409.435999999
+ETHIOPIA 1997 3285786.3266000003
+ETHIOPIA 1996 3525028.7951999996
+ETHIOPIA 1995 3781674.8910999997
+ETHIOPIA 1994 3037409.4359999998
ETHIOPIA 1993 3008978.2677000007
-ETHIOPIA 1992 2721203.235500001
-FRANCE 1998 2604373.8804999986
-FRANCE 1997 3982872.0488000023
-FRANCE 1996 3622479.2412999994
-FRANCE 1995 4479939.702
-FRANCE 1994 3531013.1981000025
-FRANCE 1993 4086437.3101999997
-FRANCE 1992 3637792.1333
-GERMANY 1998 3291023.2964999974
-GERMANY 1997 5139337.344300003
-GERMANY 1996 4799810.457699999
-GERMANY 1995 5405785.797800004
-GERMANY 1994 4555556.459199997
-GERMANY 1993 4428195.101900002
+ETHIOPIA 1992 2721203.235499999
+FRANCE 1998 2604373.8805
+FRANCE 1997 3982872.0488
+FRANCE 1996 3622479.2413
+FRANCE 1995 4479939.7020000005
+FRANCE 1994 3531013.198099999
+FRANCE 1993 4086437.310200001
+FRANCE 1992 3637792.133300001
+GERMANY 1998 3291023.2965
+GERMANY 1997 5139337.344300002
+GERMANY 1996 4799810.457700001
+GERMANY 1995 5405785.797800001
+GERMANY 1994 4555556.459199998
+GERMANY 1993 4428195.1019
GERMANY 1992 4656148.420400001
-INDIA 1998 2591288.187399999
-INDIA 1997 5159562.7033
-INDIA 1996 5307258.304900003
-INDIA 1995 5148208.790199999
-INDIA 1994 5164001.958200001
-INDIA 1993 4321398.438800003
-INDIA 1992 5297703.693499999
-INDONESIA 1998 3094900.159700001
-INDONESIA 1997 5719773.035799999
-INDONESIA 1996 6037238.599300002
-INDONESIA 1995 5266783.489899999
-INDONESIA 1994 5470762.872900001
-INDONESIA 1993 6189826.661299997
-INDONESIA 1992 4414623.154899998
-IRAN 1998 3214864.120900001
-IRAN 1997 3688049.0690999986
-IRAN 1996 3621649.2246999983
-IRAN 1995 4420783.4205
-IRAN 1994 4373984.652300001
-IRAN 1993 3731301.7814000007
+INDIA 1998 2591288.1874
+INDIA 1997 5159562.703300001
+INDIA 1996 5307258.304900002
+INDIA 1995 5148208.790200002
+INDIA 1994 5164001.9582
+INDIA 1993 4321398.4388
+INDIA 1992 5297703.6935
+INDONESIA 1998 3094900.1596999997
+INDONESIA 1997 5719773.035800001
+INDONESIA 1996 6037238.599300001
+INDONESIA 1995 5266783.489900001
+INDONESIA 1994 5470762.8729
+INDONESIA 1993 6189826.661299999
+INDONESIA 1992 4414623.154899999
+IRAN 1998 3214864.1208999995
+IRAN 1997 3688049.0691
+IRAN 1996 3621649.224699999
+IRAN 1995 4420783.420499999
+IRAN 1994 4373984.6523
+IRAN 1993 3731301.7813999997
IRAN 1992 4417133.366199998
-IRAQ 1998 2338859.4098999994
-IRAQ 1997 3622681.5642999993
-IRAQ 1996 4762291.872199997
-IRAQ 1995 4558092.735900002
-IRAQ 1994 4951604.169899996
-IRAQ 1993 3830077.991100002
-IRAQ 1992 3938636.4873999986
-JAPAN 1998 1849535.0802000004
-JAPAN 1997 4068688.8536999994
-JAPAN 1996 4044774.7597000017
-JAPAN 1995 4793005.802699999
-JAPAN 1994 4114717.056800001
+IRAQ 1998 2338859.4099000003
+IRAQ 1997 3622681.5643
+IRAQ 1996 4762291.8722
+IRAQ 1995 4558092.735899999
+IRAQ 1994 4951604.1699
+IRAQ 1993 3830077.9910999993
+IRAQ 1992 3938636.487399999
+JAPAN 1998 1849535.0801999997
+JAPAN 1997 4068688.853700001
+JAPAN 1996 4044774.759699999
+JAPAN 1995 4793005.8027
+JAPAN 1994 4114717.056799999
JAPAN 1993 3614468.7485000007
-JAPAN 1992 4266694.470000001
-JORDAN 1998 1811488.0718999994
-JORDAN 1997 2951297.867800001
-JORDAN 1996 3302528.3067000005
-JORDAN 1995 3221813.9990000012
-JORDAN 1994 2417892.092100001
-JORDAN 1993 3107641.7661000015
-JORDAN 1992 3316379.0585000003
-KENYA 1998 2579075.4189999984
-KENYA 1997 2929194.231699999
-KENYA 1996 3569129.5618999996
-KENYA 1995 3542889.108699999
-KENYA 1994 3983095.399400002
-KENYA 1993 3713988.970799999
+JAPAN 1992 4266694.469999999
+JORDAN 1998 1811488.0718999999
+JORDAN 1997 2951297.867799999
+JORDAN 1996 3302528.3067
+JORDAN 1995 3221813.999
+JORDAN 1994 2417892.0921
+JORDAN 1993 3107641.7660999987
+JORDAN 1992 3316379.0584999993
+KENYA 1998 2579075.4189999993
+KENYA 1997 2929194.2316999994
+KENYA 1996 3569129.5619
+KENYA 1995 3542889.1086999993
+KENYA 1994 3983095.3993999995
+KENYA 1993 3713988.9708000002
KENYA 1992 3304641.8340000007
-MOROCCO 1998 1815334.818000001
+MOROCCO 1998 1815334.818
MOROCCO 1997 3693214.8447000002
-MOROCCO 1996 4116175.923
-MOROCCO 1995 3515127.140199998
-MOROCCO 1994 4003072.111999998
-MOROCCO 1993 3599199.6679000016
+MOROCCO 1996 4116175.923000001
+MOROCCO 1995 3515127.1401999984
+MOROCCO 1994 4003072.111999999
+MOROCCO 1993 3599199.6679000007
MOROCCO 1992 3958335.4223999996
MOZAMBIQUE 1998 1620428.7346
-MOZAMBIQUE 1997 2802166.647299999
-MOZAMBIQUE 1996 2409955.1754999985
+MOZAMBIQUE 1997 2802166.6472999994
+MOZAMBIQUE 1996 2409955.1755
MOZAMBIQUE 1995 2771602.6274
-MOZAMBIQUE 1994 2548226.215799999
-MOZAMBIQUE 1993 2843748.905299998
+MOZAMBIQUE 1994 2548226.2157999994
+MOZAMBIQUE 1993 2843748.9053
MOZAMBIQUE 1992 2556501.0943000014
-PERU 1998 2036430.3602
-PERU 1997 4064142.409099999
-PERU 1996 4068678.5671000006
-PERU 1995 4657694.841199998
-PERU 1994 4731959.465500002
-PERU 1993 4144006.660999999
-PERU 1992 3754635.007800001
-ROMANIA 1998 1992773.6811
+PERU 1998 2036430.3601999995
+PERU 1997 4064142.4091
+PERU 1996 4068678.5670999996
+PERU 1995 4657694.8412
+PERU 1994 4731959.465500001
+PERU 1993 4144006.6610000012
+PERU 1992 3754635.0078
+ROMANIA 1998 1992773.6811000002
ROMANIA 1997 2854639.868
-ROMANIA 1996 3139337.3029000005
+ROMANIA 1996 3139337.3028999986
ROMANIA 1995 3222153.3776
-ROMANIA 1994 3222844.319000001
-ROMANIA 1993 3488994.0287999976
-ROMANIA 1992 3029274.4420000007
-RUSSIA 1998 2339865.6635000003
+ROMANIA 1994 3222844.319
+ROMANIA 1993 3488994.028800001
+ROMANIA 1992 3029274.442
+RUSSIA 1998 2339865.6634999993
RUSSIA 1997 4153619.5424000006
-RUSSIA 1996 3772067.4041000023
-RUSSIA 1995 4704988.860700001
+RUSSIA 1996 3772067.4040999995
+RUSSIA 1995 4704988.8607
RUSSIA 1994 4479082.8694
-RUSSIA 1993 4767719.979100001
+RUSSIA 1993 4767719.979099998
RUSSIA 1992 4533465.559
-SAUDI ARABIA 1998 3386948.9564000014
-SAUDI ARABIA 1997 5425980.3373
-SAUDI ARABIA 1996 5227607.167700001
-SAUDI ARABIA 1995 4506731.641100001
-SAUDI ARABIA 1994 4698658.742499998
-SAUDI ARABIA 1993 5493626.528499995
-SAUDI ARABIA 1992 4573560.014999997
-UNITED KINGDOM 1998 2252021.5136999995
-UNITED KINGDOM 1997 4343926.802599999
-UNITED KINGDOM 1996 4189476.3064999986
-UNITED KINGDOM 1995 4469569.8829
-UNITED KINGDOM 1994 4410094.626399997
-UNITED KINGDOM 1993 4054677.104999997
-UNITED KINGDOM 1992 3978688.8831000007
-UNITED STATES 1998 2238771.558099999
-UNITED STATES 1997 4135581.5733999996
-UNITED STATES 1996 3624013.266
-UNITED STATES 1995 3892244.517199999
-UNITED STATES 1994 3289224.113800001
-UNITED STATES 1993 3626170.2027999996
-UNITED STATES 1992 3993973.499699999
-VIETNAM 1998 1924313.4862000004
-VIETNAM 1997 3436195.370900001
+SAUDI ARABIA 1998 3386948.9563999986
+SAUDI ARABIA 1997 5425980.337300001
+SAUDI ARABIA 1996 5227607.167700002
+SAUDI ARABIA 1995 4506731.6411000015
+SAUDI ARABIA 1994 4698658.742499999
+SAUDI ARABIA 1993 5493626.528499998
+SAUDI ARABIA 1992 4573560.015000001
+UNITED KINGDOM 1998 2252021.5137000005
+UNITED KINGDOM 1997 4343926.802599998
+UNITED KINGDOM 1996 4189476.3065000013
+UNITED KINGDOM 1995 4469569.882899999
+UNITED KINGDOM 1994 4410094.6263999995
+UNITED KINGDOM 1993 4054677.1050000014
+UNITED KINGDOM 1992 3978688.8830999993
+UNITED STATES 1998 2238771.5580999996
+UNITED STATES 1997 4135581.5734000015
+UNITED STATES 1996 3624013.2660000008
+UNITED STATES 1995 3892244.5171999983
+UNITED STATES 1994 3289224.1138000013
+UNITED STATES 1993 3626170.2028000006
+UNITED STATES 1992 3993973.4997000014
+VIETNAM 1998 1924313.4862000002
+VIETNAM 1997 3436195.3708999995
VIETNAM 1996 4017288.8926999997
-VIETNAM 1995 3644054.137200001
-VIETNAM 1994 4141277.6664999984
-VIETNAM 1993 2556114.1693
-VIETNAM 1992 4090524.4905000003
+VIETNAM 1995 3644054.137199999
+VIETNAM 1994 4141277.6665000003
+VIETNAM 1993 2556114.1692999993
+VIETNAM 1992 4090524.4904999994
diff --git a/regression-test/data/variant_p0/tpch/sql/q10_trans.out b/regression-test/data/variant_p0/tpch/sql/q10_trans.out
index d99b595..f8559914 100644
--- a/regression-test/data/variant_p0/tpch/sql/q10_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q10_trans.out
@@ -1,23 +1,23 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !q10_trans --
-8242 Customer#000008242 622786.7296999999 6322.09 ETHIOPIA P2n4nJhy,UqSo2s43YfSvYJDZ6lk 15-792-676-1184 slyly regular packages haggle carefully ironic ideas. courts are furiously. furiously unusual theodolites cajole. i
+8242 Customer#000008242 622786.7297 6322.09 ETHIOPIA P2n4nJhy,UqSo2s43YfSvYJDZ6lk 15-792-676-1184 slyly regular packages haggle carefully ironic ideas. courts are furiously. furiously unusual theodolites cajole. i
7714 Customer#000007714 557400.3053 9799.98 IRAN SnnIGB,SkmnWpX3 20-922-418-6024 arhorses according to the blithely express re
-11032 Customer#000011032 512500.9641 8496.93 UNITED KINGDOM WIKHC7K3Cn7156iNOyfVG3cZ7YqkgsR,Ly 33-102-772-3533 posits-- furiously ironic accounts are again
-2455 Customer#000002455 481592.40530000004 2070.99 GERMANY RVn1ZSRtLqPlJLIZxvpmsbgC02 17-946-225-9977 al asymptotes. finally ironic accounts cajole furiously. permanently unusual theodolites aro
-12106 Customer#000012106 479414.21330000006 5342.11 UNITED STATES wth3twOmu6vy 34-905-346-4472 ly after the blithely regular foxes. accounts haggle carefully alongside of the blithely even ideas.
-8530 Customer#000008530 457855.9467 9734.95 MOROCCO GMQyte94oDM7eD7exnkj 4hH9yq3 25-736-932-5850 slyly asymptotes. quickly final deposits in
-13984 Customer#000013984 446316.5104000001 3482.28 IRAN qZXwuapCHvxbX 20-981-264-2952 y unusual courts could wake furiously
-1966 Customer#000001966 444059.03819999995 1937.72 ALGERIA jPv1 UHra5JLALR5Isci5u0636RoAu7t vH 10-973-269-8886 the blithely even accounts. final deposits cajole around the blithely final packages.
+11032 Customer#000011032 512500.9640999999 8496.93 UNITED KINGDOM WIKHC7K3Cn7156iNOyfVG3cZ7YqkgsR,Ly 33-102-772-3533 posits-- furiously ironic accounts are again
+2455 Customer#000002455 481592.4053 2070.99 GERMANY RVn1ZSRtLqPlJLIZxvpmsbgC02 17-946-225-9977 al asymptotes. finally ironic accounts cajole furiously. permanently unusual theodolites aro
+12106 Customer#000012106 479414.21329999994 5342.11 UNITED STATES wth3twOmu6vy 34-905-346-4472 ly after the blithely regular foxes. accounts haggle carefully alongside of the blithely even ideas.
+8530 Customer#000008530 457855.94670000003 9734.95 MOROCCO GMQyte94oDM7eD7exnkj 4hH9yq3 25-736-932-5850 slyly asymptotes. quickly final deposits in
+13984 Customer#000013984 446316.5104 3482.28 IRAN qZXwuapCHvxbX 20-981-264-2952 y unusual courts could wake furiously
+1966 Customer#000001966 444059.0382 1937.72 ALGERIA jPv1 UHra5JLALR5Isci5u0636RoAu7t vH 10-973-269-8886 the blithely even accounts. final deposits cajole around the blithely final packages.
11026 Customer#000011026 417913.4142 7738.76 ALGERIA XorIktoJOAEJkpNNMx 10-184-163-4632 ly even dolphins eat along the blithely even instructions. express attainments cajole slyly. busy dolphins in
-8501 Customer#000008501 412797.51 6906.7 ARGENTINA 776af4rOa mZ66hczs 11-317-552-5840 y final deposits after the fluffily even accounts are slyly final, regular
+8501 Customer#000008501 412797.51000000007 6906.7 ARGENTINA 776af4rOa mZ66hczs 11-317-552-5840 y final deposits after the fluffily even accounts are slyly final, regular
1565 Customer#000001565 412506.0062 1820.03 BRAZIL EWQO5Ck,nMuHVQimqL8dLrixRP6QKveXcz9QgorW 12-402-178-2007 ously regular accounts wake slyly ironic idea
-14398 Customer#000014398 408575.36000000004 -602.24 UNITED STATES GWRCgIPHajtU21vICVvbJJerFu2cUk 34-814-111-5424 s. blithely even accounts cajole blithely. even foxes doubt--
+14398 Customer#000014398 408575.36 -602.24 UNITED STATES GWRCgIPHajtU21vICVvbJJerFu2cUk 34-814-111-5424 s. blithely even accounts cajole blithely. even foxes doubt--
1465 Customer#000001465 405055.34569999995 9365.93 INDIA tDRaTC7UgFbBX7VF6cVXYQA0 18-807-487-1074 s lose blithely ironic, regular packages. regular, final foxes haggle c
-12595 Customer#000012595 401402.23909999995 -6.92 INDIA LmeaX5cR,w9NqKugl yRm98 18-186-132-3352 o the busy accounts. blithely special gifts maintain a
-961 Customer#000000961 401198.17370000004 6963.68 JAPAN 5,81YDLFuRR47KKzv8GXdmi3zyP37PlPn 22-989-463-6089 e final requests: busily final accounts believe a
+12595 Customer#000012595 401402.2391 -6.92 INDIA LmeaX5cR,w9NqKugl yRm98 18-186-132-3352 o the busy accounts. blithely special gifts maintain a
+961 Customer#000000961 401198.1737 6963.68 JAPAN 5,81YDLFuRR47KKzv8GXdmi3zyP37PlPn 22-989-463-6089 e final requests: busily final accounts believe a
14299 Customer#000014299 400968.3751 6595.97 RUSSIA 7lFczTya0iM1bhEWT 32-156-618-1224 carefully regular requests. quickly ironic accounts against the ru
623 Customer#000000623 399883.42569999996 7887.6 INDONESIA HXiFb9oWlgqZXrJPUCEJ6zZIPxAM4m6 19-113-202-7085 requests. dolphins above the busily regular dependencies cajole after
9151 Customer#000009151 396562.0295 5691.95 IRAQ 7gIdRdaxB91EVdyx8DyPjShpMD 21-834-147-4906 ajole fluffily. furiously regular accounts are special, silent account
14819 Customer#000014819 396271.10360000003 7308.39 FRANCE w8StIbymUXmLCcUag6sx6LUIp8E3pA,Ux 16-769-398-7926 ss, final asymptotes use furiously slyly ironic dependencies. special, express dugouts according to the dep
-13478 Customer#000013478 395513.13580000005 -778.11 KENYA 9VIsvIeZrJpC6OOdYheMC2vdtq8Ai0Rt 24-983-202-8240 r theodolites. slyly unusual pinto beans sleep fluffily against the asymptotes. quickly r
+13478 Customer#000013478 395513.1358 -778.11 KENYA 9VIsvIeZrJpC6OOdYheMC2vdtq8Ai0Rt 24-983-202-8240 r theodolites. slyly unusual pinto beans sleep fluffily against the asymptotes. quickly r
diff --git a/regression-test/data/variant_p0/tpch/sql/q14_trans.out b/regression-test/data/variant_p0/tpch/sql/q14_trans.out
index 24dca0a..a8212ce 100644
--- a/regression-test/data/variant_p0/tpch/sql/q14_trans.out
+++ b/regression-test/data/variant_p0/tpch/sql/q14_trans.out
@@ -1,4 +1,4 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !q14_trans --
-16.28385568900598
+16.28385568900597
diff --git a/regression-test/data/variant_p0/with_index/test_array_inverted_index_profile.out b/regression-test/data/variant_p0/with_index/test_array_inverted_index_profile.out
index d2e04cd..5b2b843 100644
--- a/regression-test/data/variant_p0/with_index/test_array_inverted_index_profile.out
+++ b/regression-test/data/variant_p0/with_index/test_array_inverted_index_profile.out
@@ -5,15 +5,9 @@
-- !sql2 --
2019-01-01 d93d942d985a8fb7547c72dada8d332f ["v", "w", "x", "y", "z"]
--- !sql --
-2019-01-01 d93d942d985a8fb7547c72dada8d332f ["v", "w", "x", "y", "z"]
-
-- !sql3 --
2017-01-01 d93d942d985a8fb7547c72dada8d332e ["m", "n", "o", "p", "q", "r", "s", "t", "u"]
--- !sql --
-2017-01-01 d93d942d985a8fb7547c72dada8d332e ["m", "n", "o", "p", "q", "r", "s", "t", "u"]
-
-- !sql4 --
-- !sql5 --
diff --git a/regression-test/data/variant_p1/compaction/compaction_sparse_column.out b/regression-test/data/variant_p1/compaction/compaction_sparse_column.out
index b060cb9..014f134 100644
--- a/regression-test/data/variant_p1/compaction/compaction_sparse_column.out
+++ b/regression-test/data/variant_p1/compaction/compaction_sparse_column.out
@@ -1,21 +1,21 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !select_b_bfcompact --
-12292
+12286
-- !select_xxxx_bfcompact --
-12291
+12285
-- !select_point_bfcompact --
3
-- !select_1_bfcompact --
-4096
+4094
-- !select_2_bfcompact --
-4096
+4094
-- !select_3_bfcompact --
-4096
+4094
-- !select_4_bfcompact --
1
@@ -36,34 +36,34 @@
1
-- !select_4_1_bfcompact --
-4096
+4094
-- !select_5_1_bfcompact --
-4096
+4094
-- !select_6_1_bfcompact --
-4096
+4094
-- !select_all_bfcompact --
3 1234 \N ddddd 1 \N
-- !select_b --
-12292
+12286
-- !select_xxxx --
-12291
+12285
-- !select_point --
3
-- !select_1 --
-4096
+4094
-- !select_2 --
-4096
+4094
-- !select_3 --
-4096
+4094
-- !select_4 --
1
@@ -84,13 +84,13 @@
1
-- !select_4_1 --
-4096
+4094
-- !select_5_1 --
-4096
+4094
-- !select_6_1 --
-4096
+4094
-- !select_all --
3 1234 \N ddddd 1 \N
diff --git a/regression-test/data/variant_p1/compaction/test_compaction_extract_root.out b/regression-test/data/variant_p1/compaction/test_compaction_extract_root.out
index 5d16b15..9ad5a7a 100644
--- a/regression-test/data/variant_p1/compaction/test_compaction_extract_root.out
+++ b/regression-test/data/variant_p1/compaction/test_compaction_extract_root.out
@@ -1,18 +1,15 @@
-- This file is automatically generated. You should know what you did if you want to edit this
--- !select_b_1 --
-24582
-
-- !select_b_2 --
-12288
+12282
-- !select_1_bfcompact --
{"code":2,"state":"open"}
-- !select_b_3 --
-24588
+24569
-- !select_b_4 --
-12288
+12282
-- !select_1 --
{"code":2,"state":"open"}
diff --git a/regression-test/suites/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.groovy b/regression-test/suites/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.groovy
index 26db35c..481fa68 100644
--- a/regression-test/suites/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.groovy
+++ b/regression-test/suites/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.groovy
@@ -75,7 +75,7 @@
col3 array<int> $null_define,
col4 map<int, int> $null_define,
col5 struct<f1: int> $null_define,
- col6 variant $null_define
+ col6 variant<properties("variant_max_subcolumns_count" = "0", "variant_enable_typed_paths_to_sparse" = "false")> $null_define
)
/* mow */
UNIQUE KEY(col0) DISTRIBUTED BY HASH(col0) BUCKETS 4 PROPERTIES (
diff --git a/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy b/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
index 65f0c7e..927a57d 100644
--- a/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
+++ b/regression-test/suites/fault_injection_p0/test_variant_bloom_filter.groovy
@@ -55,11 +55,13 @@
sql """
CREATE TABLE IF NOT EXISTS ${index_table} (
k bigint,
- v variant
+ v variant<
+ properties("variant_max_subcolumns_count" = "9999")
+ >
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "bloom_filter_columns" = "v", "variant_max_subcolumns_count" = "9999");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false", "bloom_filter_columns" = "v");
"""
load_json_data.call(index_table, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""")
load_json_data.call(index_table, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""")
diff --git a/regression-test/suites/fault_injection_p0/test_variant_compaction_with_sparse_limit.groovy b/regression-test/suites/fault_injection_p0/test_variant_compaction_with_sparse_limit.groovy
index 7bd4fd2..6e3d6a1 100644
--- a/regression-test/suites/fault_injection_p0/test_variant_compaction_with_sparse_limit.groovy
+++ b/regression-test/suites/fault_injection_p0/test_variant_compaction_with_sparse_limit.groovy
@@ -52,18 +52,18 @@
}
def create_table = { tableName, buckets="auto", key_type="DUPLICATE" ->
sql "DROP TABLE IF EXISTS ${tableName}"
- def var_def = "variant"
+ def var_def = "variant <properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")>"
if (key_type == "AGGREGATE") {
- var_def = "variant replace"
+ var_def = "variant <properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")> replace"
}
sql """
CREATE TABLE IF NOT EXISTS ${tableName} (
k bigint,
- v ${var_def}
+ v ${var_def}
)
${key_type} KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS ${buckets}
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true");
"""
}
def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"]
diff --git a/regression-test/suites/function_p0/test_array_agg.groovy b/regression-test/suites/function_p0/test_array_agg.groovy
index e89ea83..4324108 100644
--- a/regression-test/suites/function_p0/test_array_agg.groovy
+++ b/regression-test/suites/function_p0/test_array_agg.groovy
@@ -18,7 +18,12 @@
suite("test_array_agg", "p0") {
sql """ set enable_nereids_planner=true;"""
sql """ set enable_fallback_to_original_planner=false;"""
- def tableName = "array_agg_table"
+ def tableName = "test_variant_array_function"
+
+
+ def count = new Random().nextInt(1) + 1
+ sql """ set global_variant_max_subcolumns_count=${count};"""
+
sql """
drop table if exists ${tableName};
"""
diff --git a/regression-test/suites/variant_github_events_new_p0/load.groovy b/regression-test/suites/variant_github_events_new_p0/load.groovy
index 9a67162..e2ae7162 100644
--- a/regression-test/suites/variant_github_events_new_p0/load.groovy
+++ b/regression-test/suites/variant_github_events_new_p0/load.groovy
@@ -44,13 +44,15 @@
}
}
}
+ int max_subcolumns_count = Math.floor(Math.random() * 50) + 1
+ boolean enable_typed_paths_to_sparse = new Random().nextBoolean()
def table_name = "github_events"
sql """DROP TABLE IF EXISTS ${table_name}"""
table_name = "github_events"
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant<'payload.pull_request.head.repo.topics' : array<text>>,
+ v variant<'payload.pull_request.head.repo.topics' : array<text>, properties("variant_max_subcolumns_count" = "${max_subcolumns_count}", "variant_enable_typed_paths_to_sparse" = "${enable_typed_paths_to_sparse}")>,
INDEX idx_var(v) USING INVERTED COMMENT ''
)
DUPLICATE KEY(`k`)
@@ -136,7 +138,7 @@
}
}
}
- sql """ALTER TABLE github_events ADD COLUMN v2 variant DEFAULT NULL"""
+ sql """ALTER TABLE github_events ADD COLUMN v2 variant<properties("variant_max_subcolumns_count" = "${max_subcolumns_count}", "variant_enable_typed_paths_to_sparse" = "${enable_typed_paths_to_sparse}")> DEFAULT NULL"""
for(int t = 0; t <= 10; t += 1){
long k = 9223372036854775107 + t
sql """INSERT INTO github_events VALUES (${k}, '{"aaaa" : 1234, "bbbb" : "11ssss"}', '{"xxxx" : 1234, "yyyy" : [1.111]}')"""
@@ -149,30 +151,33 @@
trigger_and_wait_compaction("github_events", "full")
// query and filterd by inverted index
- profile("test_profile_1") {
- sql """ set enable_common_expr_pushdown = true; """
- sql """ set enable_common_expr_pushdown_for_inverted_index = true; """
- sql """ set enable_pipeline_x_engine = true;"""
- sql """ set enable_profile = true;"""
- sql """ set profile_level = 2;"""
- run {
- qt_sql_inv """/* test_profile_1 */
- select count() from github_events where arrays_overlap(cast(v['payload']['pull_request']['head']['repo']['topics'] as array<text>), ['javascript', 'css'] )
- """
- }
-
- check { profileString, exception ->
- log.info(profileString)
- // Use a regular expression to match the numeric value inside parentheses after "RowsInvertedIndexFiltered:"
- def matcher = (profileString =~ /RowsInvertedIndexFiltered:\s+[^\(]+\((\d+)\)/)
- def total = 0
- while (matcher.find()) {
- total += matcher.group(1).toInteger()
+ if (!enable_typed_paths_to_sparse) {
+ profile("test_profile_1") {
+ sql """ set enable_common_expr_pushdown = true; """
+ sql """ set enable_common_expr_pushdown_for_inverted_index = true; """
+ sql """ set enable_pipeline_x_engine = true;"""
+ sql """ set enable_profile = true;"""
+ sql """ set profile_level = 2;"""
+ run {
+ qt_sql_inv """/* test_profile_1 */
+ select count() from github_events where arrays_overlap(cast(v['payload']['pull_request']['head']['repo']['topics'] as array<text>), ['javascript', 'css'] )
+ """
}
- // Assert that the sum of all matched numbers equals 67677
- assertEquals(67677, total)
- }
+
+ check { profileString, exception ->
+ log.info(profileString)
+ // Use a regular expression to match the numeric value inside parentheses after "RowsInvertedIndexFiltered:"
+ def matcher = (profileString =~ /RowsInvertedIndexFiltered:\s+[^\(]+\((\d+)\)/)
+ def total = 0
+ while (matcher.find()) {
+ total += matcher.group(1).toInteger()
+ }
+ // Assert that the sum of all matched numbers equals 67677
+ assertEquals(67677, total)
+ }
+ }
}
+
sql """ set enable_common_expr_pushdown = true; """
sql """ set enable_common_expr_pushdown_for_inverted_index = true; """
qt_sql_inv """select count() from github_events where arrays_overlap(cast(v['payload']['pull_request']['head']['repo']['topics'] as array<text>), ['javascript', 'css'] )"""
diff --git a/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy b/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy
index 10358f0..aa86b7c 100644
--- a/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy
+++ b/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy
@@ -76,12 +76,12 @@
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "${rand_subcolumns_count}")>
-- INDEX idx_var(v) USING INVERTED PROPERTIES("parser" = "english") COMMENT ''
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 4
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_enable_flatten_nested" = "true", "variant_max_subcolumns_count" = "${rand_subcolumns_count}", "inverted_index_storage_format"= "v2");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_enable_flatten_nested" = "true", "inverted_index_storage_format"= "v2");
"""
// 2015
load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""")
@@ -97,6 +97,11 @@
// 2022
load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2022-11-07-16.json'}""")
load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2022-11-07-10.json'}""")
+
+ sql """ ALTER TABLE github_events ADD INDEX idx_var2 (`v`) USING INVERTED """
+ wait_for_latest_op_on_table_finish("github_events", timeout)
+
+ // 2022
load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2022-11-07-22.json'}""")
load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2022-11-07-23.json'}""")
@@ -132,11 +137,11 @@
sql """
CREATE TABLE IF NOT EXISTS github_events2 (
k bigint,
- v variant not null
+ v variant<properties("variant_max_subcolumns_count" = "${rand_subcolumns_count}")> not null
)
UNIQUE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 4
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_enable_flatten_nested" = "true", "bloom_filter_columns" = "v", "variant_max_subcolumns_count" = "${rand_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_enable_flatten_nested" = "true", "bloom_filter_columns" = "v");
"""
sql """insert into github_events2 select * from github_events order by k"""
sql """select v['payload']['commits'] from github_events order by k ;"""
diff --git a/regression-test/suites/variant_log_data_p2/load.groovy b/regression-test/suites/variant_log_data_p2/load.groovy
index f1fa6ca..33c21ab 100644
--- a/regression-test/suites/variant_log_data_p2/load.groovy
+++ b/regression-test/suites/variant_log_data_p2/load.groovy
@@ -73,21 +73,21 @@
// sql "set enable_two_phase_read_opt = false;"
// no sparse columns
load_json_data.call(table_name, """${getS3Url() + '/regression/load/logdata.json'}""")
- qt_sql_32 """ select json_extract(v, "\$.json.parseFailed") from logdata where json_extract(v, "\$.json.parseFailed") != 'null' order by k limit 1;"""
+ qt_sql_32 """ select json_extract(v, "\$.json.parseFailed") from logdata where cast(json_extract(v, "\$.json.parseFailed") as string) != 'null' order by k limit 1;"""
qt_sql_32_1 """select cast(v['json']['parseFailed'] as string) from logdata where cast(v['json']['parseFailed'] as string) is not null and k = 162 limit 1;"""
sql "truncate table ${table_name}"
// 0.95 default ratio
load_json_data.call(table_name, """${getS3Url() + '/regression/load/logdata.json'}""")
- qt_sql_33 """ select json_extract(v,"\$.json.parseFailed") from logdata where json_extract(v,"\$.json.parseFailed") != 'null' order by k limit 1;"""
+ qt_sql_33 """ select json_extract(v,"\$.json.parseFailed") from logdata where cast(json_extract(v,"\$.json.parseFailed") as string) != 'null' order by k limit 1;"""
qt_sql_33_1 """select cast(v['json']['parseFailed'] as string) from logdata where cast(v['json']['parseFailed'] as string) is not null and k = 162 limit 1;"""
sql "truncate table ${table_name}"
// always sparse column
load_json_data.call(table_name, """${getS3Url() + '/regression/load/logdata.json'}""")
- qt_sql_34 """ select json_extract(v, "\$.json.parseFailed") from logdata where json_extract(v,"\$.json.parseFailed") != 'null' order by k limit 1;"""
+ qt_sql_34 """ select json_extract(v, "\$.json.parseFailed") from logdata where cast(json_extract(v,"\$.json.parseFailed") as string) != 'null' order by k limit 1;"""
sql "truncate table ${table_name}"
- qt_sql_35 """select json_extract(v,"\$.json.parseFailed") from logdata where k = 162 and json_extract(v,"\$.json.parseFailed") != 'null';"""
+ qt_sql_35 """select json_extract(v,"\$.json.parseFailed") from logdata where k = 162 and cast(json_extract(v,"\$.json.parseFailed") as string) != 'null';"""
qt_sql_35_1 """select cast(v['json']['parseFailed'] as string) from logdata where cast(v['json']['parseFailed'] as string) is not null and k = 162 limit 1;"""
// TODO add test case that some certain columns are materialized in some file while others are not materilized(sparse)
// unique table
diff --git a/regression-test/suites/variant_p0/agg.groovy b/regression-test/suites/variant_p0/agg.groovy
index 2097891..97999a1 100644
--- a/regression-test/suites/variant_p0/agg.groovy
+++ b/regression-test/suites/variant_p0/agg.groovy
@@ -18,10 +18,10 @@
suite("regression_test_variant_agg"){
sql """DROP TABLE IF EXISTS var_agg"""
- int max_subcolumns_count = Math.floor(Math.random() * 10)
- def var = "variant replace"
+ int max_subcolumns_count = Math.floor(Math.random() * 10) + 1
+ def var = "variant<properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")> replace"
if (max_subcolumns_count % 2 == 0) {
- var = "variant <'d' : int, 'b.f' : int, 'xxxx' : string, 'point' : bigint> replace"
+ var = "variant <'d' : int, 'b.f' : int, 'xxxx' : string, 'point' : bigint, properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")> replace"
}
sql """
CREATE TABLE IF NOT EXISTS var_agg (
@@ -31,7 +31,7 @@
)
AGGREGATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 4
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true");
"""
sql """insert into var_agg values (1, '[1]', 1),(1, '{"a" : 1}', 1);"""
sql """insert into var_agg values (2, '[2]', 2),(1, '{"a" : [[[1]]]}', 2);"""
diff --git a/regression-test/suites/variant_p0/column_name.groovy b/regression-test/suites/variant_p0/column_name.groovy
index 27132ce..be4c3cb 100644
--- a/regression-test/suites/variant_p0/column_name.groovy
+++ b/regression-test/suites/variant_p0/column_name.groovy
@@ -22,11 +22,11 @@
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "${max_subcolumns_count}")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true");
"""
sql """insert into ${table_name} values (1, '{"中文" : "中文", "\\\u4E2C\\\u6587": "unicode"}')"""
diff --git a/regression-test/suites/variant_p0/column_size_limit.groovy b/regression-test/suites/variant_p0/column_size_limit.groovy
index 153cb1a..bf9739a 100644
--- a/regression-test/suites/variant_p0/column_size_limit.groovy
+++ b/regression-test/suites/variant_p0/column_size_limit.groovy
@@ -22,11 +22,11 @@
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "0")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "0");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
def jsonBuilder = new JsonBuilder()
def root = jsonBuilder {
diff --git a/regression-test/suites/variant_p0/desc.groovy b/regression-test/suites/variant_p0/desc.groovy
index d86860e..35c4549 100644
--- a/regression-test/suites/variant_p0/desc.groovy
+++ b/regression-test/suites/variant_p0/desc.groovy
@@ -19,10 +19,8 @@
// if (isCloudMode()) {
// return
// }
- def count = "0"
- if (new Random().nextInt(100) < 50) {
- count = "1000"
- }
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
+ sql """ set global_variant_max_subcolumns_count = 0 """
def load_json_data = {table_name, file_name ->
// load the json data
@@ -61,7 +59,7 @@
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS ${buckets}
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
}
@@ -80,7 +78,7 @@
PARTITION p3 VALUES LESS THAN (100000)
)
DISTRIBUTED BY HASH(k) BUCKETS ${buckets}
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
}
@@ -170,7 +168,7 @@
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 5
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
sql """ insert into ${table_name} values (0, '{"a": 1123, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}, "zzz" : null, "oooo" : {"akakaka" : null, "xxxx" : {"xxx" : 123}}}', '{"a": 11245, "xxxx" : "kaana"}', '{"a": 11245, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}}')"""
sql "select * from ${table_name} limit 1"
@@ -187,7 +185,7 @@
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 5
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
sql """ insert into ${table_name} values (0, '{"a": 1123, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}, "zzz" : null, "oooo" : {"akakaka" : null, "xxxx" : {"xxx" : 123}}}')"""
sql "select * from ${table_name} limit 1"
@@ -230,7 +228,7 @@
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 5
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
sql """ insert into ${table_name} values (0, '{"名字" : "jack", "!@#^&*()": "11111", "金额" : 200, "画像" : {"地址" : "北京", "\\\u4E2C\\\u6587": "unicode"}}')"""
sql """set describe_extend_variant_column = true"""
@@ -246,7 +244,7 @@
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 5
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
sql """ insert into ${table_name} values (0, '{}')"""
sql """ insert into ${table_name} values (0, '100')"""
diff --git a/regression-test/suites/variant_p0/nested.groovy b/regression-test/suites/variant_p0/nested.groovy
index 497873a..2d12937 100644
--- a/regression-test/suites/variant_p0/nested.groovy
+++ b/regression-test/suites/variant_p0/nested.groovy
@@ -94,7 +94,7 @@
qt_sql """select * from var_nested where v['k2'] = 'some' and array_contains(cast(v['nested1']['nested2']['a'] as array<tinyint>), 10) order by k limit 1;"""
// type change case
- sql """INSERT INTO var_nested SELECT *, '{"k1":"1", "k2": 1.1, "k3" : [1234.0], "k4" : 1.10000, "k5" : [["123"]], "nested1" : {"nested2" : [{"a" : "10", "b" : "1.1", "c" : 1111.111}]}}' FROM numbers("number" = "8000") where number > 7000 limit 100;"""
+ sql """INSERT INTO var_nested SELECT *, '{"k1":"1", "k2": 1.1, "k3" : [1234.0], "k4" : 1.10000, "k5" : [["123"]], "nested1" : {"nested2" : [{"a" : 10, "b" : 1.1, "c" : "1111"}]}}' FROM numbers("number" = "8000") where number > 7000 limit 100;"""
qt_sql """select * from var_nested where v['k2'] = 'what' and array_contains(cast(v['nested1']['nested2']['a'] as array<tinyint>), 10) order by k limit 1;"""
trigger_and_wait_compaction("var_nested", "full")
qt_sql """select * from var_nested where v['k2'] = 'nested' and array_contains(cast(v['nested1']['nested2']['a'] as array<tinyint>), 10) order by k limit 1;"""
diff --git a/regression-test/suites/variant_p0/nested2.groovy b/regression-test/suites/variant_p0/nested2.groovy
index 8d48fcf..9ea89c6 100644
--- a/regression-test/suites/variant_p0/nested2.groovy
+++ b/regression-test/suites/variant_p0/nested2.groovy
@@ -19,7 +19,8 @@
suite("variant_nested_type_conflict", "p0"){
try {
-
+ sql """ set global_variant_max_subcolumns_count = 10"""
+ sql """ set global_variant_enable_typed_paths_to_sparse = false"""
def table_name = "var_nested_type_conflict"
sql "DROP TABLE IF EXISTS ${table_name}"
sql """set describe_extend_variant_column = true"""
diff --git a/regression-test/suites/variant_p0/predefine/delete_update.groovy b/regression-test/suites/variant_p0/predefine/delete_update.groovy
index 8257f4b..bd1c917 100644
--- a/regression-test/suites/variant_p0/predefine/delete_update.groovy
+++ b/regression-test/suites/variant_p0/predefine/delete_update.groovy
@@ -21,8 +21,8 @@
// MOR
def table_name = "var_delete_update"
sql "DROP TABLE IF EXISTS ${table_name}"
- int max_subcolumns_count = Math.floor(Math.random() * 5) + 1
- def var = "variant <'a' : largeint, 'b' : array<int>, 'c' : double, 'd' : text>"
+ int max_subcolumns_count = Math.floor(Math.random() * 5) + 1
+ def var = "variant <'a' : largeint, 'b' : array<int>, 'c' : double, 'd' : text, properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")>"
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
@@ -30,7 +30,7 @@
)
UNIQUE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 3
- properties("replication_num" = "1", "enable_unique_key_merge_on_write" = "false", "variant_enable_flatten_nested" = "false", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "enable_unique_key_merge_on_write" = "false", "variant_enable_flatten_nested" = "false", "disable_auto_compaction" = "true");
"""
// test mor table
@@ -57,7 +57,7 @@
)
UNIQUE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 4
- properties("replication_num" = "1", "enable_unique_key_merge_on_write" = "true", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "enable_unique_key_merge_on_write" = "true", "disable_auto_compaction" = "true");
"""
sql "insert into var_delete_update_mow select k, cast(v as string), cast(v as string) from var_delete_update"
sql "delete from ${table_name} where k = 1"
diff --git a/regression-test/suites/variant_p0/predefine/insert_into_select.groovy b/regression-test/suites/variant_p0/predefine/insert_into_select.groovy
index 4d92d28..5e7ecd6 100644
--- a/regression-test/suites/variant_p0/predefine/insert_into_select.groovy
+++ b/regression-test/suites/variant_p0/predefine/insert_into_select.groovy
@@ -17,6 +17,8 @@
suite("regression_test_variant_predefine_insert_into_select", "variant_type"){
def table_name = "insert_into_select"
+ def max_subcolumns_count = new Random().nextInt(5) + 1
+ sql "set global_variant_max_subcolumns_count = ${max_subcolumns_count}"
sql "DROP TABLE IF EXISTS ${table_name}_var"
sql "DROP TABLE IF EXISTS ${table_name}_str"
sql """
diff --git a/regression-test/suites/variant_p0/predefine/load.groovy b/regression-test/suites/variant_p0/predefine/load.groovy
index 1a00eb6..4e993cd 100644
--- a/regression-test/suites/variant_p0/predefine/load.groovy
+++ b/regression-test/suites/variant_p0/predefine/load.groovy
@@ -17,10 +17,11 @@
suite("regression_test_variant_predefine_schema", "p0"){
sql """DROP TABLE IF EXISTS test_predefine"""
- def count = "0"
+ def count = new Random().nextInt(10) + 1;
if (new Random().nextInt(100) < 50) {
count = "1000"
}
+ sql """ set global_variant_max_subcolumns_count = ${count} """
sql """
CREATE TABLE `test_predefine` (
`id` bigint NOT NULL,
@@ -28,7 +29,7 @@
`v1` variant<'a.b.c':int,'ss':string,'dcm':decimal(38, 9),'dt':datetime,'ip':ipv4,'a.b.d':double> NULL,
INDEX idx_var_sub(`v1`) USING INVERTED PROPERTIES("parser" = "english") )
ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 3
- PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_max_subcolumns_count" = "${count}");
+ PROPERTIES ( "replication_allocation" = "tag.location.default: 1");
"""
sql """insert into test_predefine values(1, '1', '{"a" : {"b" : {"c" : "123456", "d" : "11.111"}}, "ss" : 199991111, "dcm" : 123.456, "dt" : "2021-01-01 00:00:00", "ip" : "127.0.0.1"}')"""
@@ -44,8 +45,6 @@
sql """insert into test_predefine values(12, '3', '{"dcm" : 789.123, "dt" : "2025-01-01 11:11:11.1", "ip" : "127.0.0.1"}')"""
sql """insert into test_predefine values(11, '4', '{"a" : {"b" : {"c" : "678910", "d" : "33.222"}}}')"""
qt_sql """select * from test_predefine order by id"""
- sql """set describe_extend_variant_column = true"""
- qt_sql "desc test_predefine"
qt_sql """select cast(v1['ip'] as ipv4) from test_predefine where cast(v1['ip'] as ipv4) = '127.0.0.1';"""
qt_sql """select cast(v1['dcm'] as decimal) from test_predefine where cast(v1['dcm'] as decimal) = '123.456';"""
@@ -62,7 +61,7 @@
`v1` variant NULL,
INDEX idx_var_sub(`v1`) USING INVERTED PROPERTIES("parser" = "english") )
ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 2
- PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_enable_flatten_nested" = "true", "variant_max_subcolumns_count" = "0");
+ PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_enable_flatten_nested" = "true");
"""
sql """insert into test_predefine1 values(1, '{"predefine_col1" : 1024}')"""
sql """insert into test_predefine1 values(2, '{"predefine_col2" : 1.11111}')"""
@@ -74,7 +73,6 @@
sql """insert into test_predefine1 values(7, '{"PREDEFINE_COL3" : "11111.00000"}')"""
sql """insert into test_predefine1 values(8, '{"PREDEFINE_COL4" : "2020-01-01-01"}')"""
sql """select * from test_predefine1 order by id limit 1"""
- qt_sql """desc test_predefine1"""
qt_sql """select * from test_predefine1 order by id"""
@@ -106,10 +104,11 @@
'ipv6_':ipv6,
'float_':decimalv3(26,9),
'boolean_':boolean,
- 'varchar_': text
+ 'varchar_': text,
+ properties("variant_max_subcolumns_count" = "6", "variant_enable_typed_paths_to_sparse" = "false")
> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 2
- PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_max_subcolumns_count" = "${count}");
+ PROPERTIES ( "replication_allocation" = "tag.location.default: 1");
"""
def json1 = """
{
@@ -198,7 +197,6 @@
sql "insert into test_predefine2 values(4, '${json4}')"
qt_sql """select * from test_predefine2 order by id"""
- qt_sql """ desc test_predefine2 """
for (int i = 10; i < 100; i++) {
sql "insert into test_predefine2 values(${i}, '${json4}')"
@@ -215,7 +213,6 @@
sql """insert into test_predefine1 values(103, '{"a" :1}', '{"dcm": 1111111}', '{"dt": "2021-01-01 11:11:11"}');"""
qt_sql """select * from test_predefine1 where id >= 100 order by id"""
// 3. drop column
- qt_sql "desc test_predefine1"
sql "alter table test_predefine1 drop column v3"
sql "DROP TABLE IF EXISTS test_predefine3"
@@ -223,7 +220,7 @@
`id` bigint NOT NULL,
`v` variant<'nested.a':string> NULL)
ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1
- PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_enable_flatten_nested" = "true", "variant_max_subcolumns_count" = "0");"""
+ PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_enable_flatten_nested" = "false", "disable_auto_compaction" = "true");"""
// test alter nested no effect at present
sql "truncate table test_predefine3"
@@ -249,7 +246,8 @@
sql """insert into test_predefine3 values (1, '{"auto_type" : 256}')"""
sql """insert into test_predefine3 values (1, '{"auto_type" : 12345}')"""
sql """insert into test_predefine3 values (1, '{"auto_type" : 1.0}')"""
- qt_sql """desc test_predefine3"""
+ trigger_and_wait_compaction("test_predefine3", "full")
+ qt_sql """select variant_type(v) from test_predefine3"""
// test array
sql "DROP TABLE IF EXISTS region_insert"
@@ -274,8 +272,7 @@
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
- "group_commit_data_bytes" = "134217728",
- "variant_max_subcolumns_count" = "${count}"
+ "group_commit_data_bytes" = "134217728"
);
"""
sql """
@@ -293,8 +290,7 @@
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"min_load_replica_num" = "-1",
- "bloom_filter_columns" = "var",
- "variant_max_subcolumns_count" = "${count}"
+ "bloom_filter_columns" = "var"
);
"""
@@ -311,8 +307,7 @@
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
- "min_load_replica_num" = "-1",
- "variant_max_subcolumns_count" = "0"
+ "min_load_replica_num" = "-1"
);
"""
sql """insert into test_array_with_nulls values(3, '{"array_decimal" : [null, 2.2, 3.3, 4.4]}')"""
@@ -336,8 +331,7 @@
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
- "min_load_replica_num" = "-1",
- "variant_max_subcolumns_count" = "0"
+ "min_load_replica_num" = "-1"
);
"""
sql """insert into test_variant_type values(1, '{"dcm" : 1.1, "db" : 2.2, "dt" : "2021-01-01 00:00:00", "a.b.c" : [1, 2, 3]}')"""
@@ -354,8 +348,7 @@
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
- "min_load_replica_num" = "-1",
- "variant_max_subcolumns_count" = "0"
+ "min_load_replica_num" = "-1"
);
"""
sql """insert into test_variant_type_not_null values(1, '{"dcm" : 1.1, "db" : 2.2, "dt" : "2021-01-01 00:00:00", "a.b.c" : [1, 2, 3]}')"""
diff --git a/regression-test/suites/variant_p0/predefine/multi_var.groovy b/regression-test/suites/variant_p0/predefine/multi_var.groovy
index 411b826..edfd5b7 100644
--- a/regression-test/suites/variant_p0/predefine/multi_var.groovy
+++ b/regression-test/suites/variant_p0/predefine/multi_var.groovy
@@ -18,23 +18,29 @@
suite("regression_test_variant_predefine_multi_var", "variant_type"){
int max_subcolumns_count = Math.floor(Math.random() * 7) + 1
def table_name = "multi_variants"
+ boolean enable_typed_paths_to_sparse = new Random().nextBoolean()
+ sql "set global_variant_enable_typed_paths_to_sparse = ${enable_typed_paths_to_sparse}"
sql "DROP TABLE IF EXISTS ${table_name}"
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant<'k1' : int, 'k2' : string, 'k3' : array<int>, 'k4' : double>,
+ v variant<'k1' : int, 'k2' : string, 'k3' : array<int>, 'k4' : double,
+ properties("variant_max_subcolumns_count" = "${max_subcolumns_count}", "variant_enable_typed_paths_to_sparse" = "${enable_typed_paths_to_sparse}")
+ >,
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 4
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true");
"""
sql """INSERT INTO ${table_name} SELECT *, '{"k1":1, "k2": "hello world", "k3" : [1234], "k4" : 1.10000, "k5" : [[123]]}' FROM numbers("number" = "101")"""
sql """INSERT INTO ${table_name} SELECT *, '{"k7":123, "k8": "elden ring", "k9" : 1.1112, "k10" : [1.12], "k11" : ["moon"]}' FROM numbers("number" = "203") where number > 100"""
sql """INSERT INTO ${table_name} SELECT *, '{"k7":123, "k8": "elden ring", "k9" : 1.1112, "k10" : [1.12], "k11" : ["moon"]}' FROM numbers("number" = "411") where number > 200"""
trigger_and_wait_compaction(table_name, "cumulative")
- sql "alter table ${table_name} add column v2 variant<'k1' : int, 'k2' : string, 'k3' : array<int>, 'k4' : double> default null"
+ sql """alter table ${table_name} add column v2 variant<'k1' : int, 'k2' : string, 'k3' : array<int>, 'k4' : double ,
+ properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\", \"variant_enable_typed_paths_to_sparse\" = \"${enable_typed_paths_to_sparse}\")> default null"""
sql """INSERT INTO ${table_name} select k, v, v from ${table_name}"""
- sql "alter table ${table_name} add column v3 variant<'k1' : int, 'k2' : string, 'k3' : array<int>, 'k4' : double> default null"
+ sql """alter table ${table_name} add column v3 variant<'k1' : int, 'k2' : string, 'k3' : array<int>, 'k4' : double,
+ properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\", \"variant_enable_typed_paths_to_sparse\" = \"${enable_typed_paths_to_sparse}\")> default null"""
sql """INSERT INTO ${table_name} select k, v, v, v from ${table_name}"""
sql "alter table ${table_name} add column ss string default null"
sql """INSERT INTO ${table_name} select k, v, v, v, v from ${table_name}"""
@@ -44,7 +50,7 @@
qt_sql """select cast(v["k1"] as tinyint), cast(v2["k2"] as text), cast(v3["k3"] as string), cast(v["k7"] as tinyint), cast(v2["k8"] as text), cast(v3["k9"] as double) from ${table_name} where k > 200 order by k, 1, 2, 3, 4, 5, 6 limit 10"""
qt_sql """select cast(v["k1"] as tinyint), cast(v2["k2"] as text), cast(v3["k3"] as string), cast(v["k7"] as tinyint), cast(v2["k8"] as text), cast(v3["k9"] as double) from ${table_name} where k > 300 order by k, 1, 2, 3, 4, 5, 6 limit 10"""
- sql "alter table ${table_name} add column v4 variant default null"
+ sql "alter table ${table_name} add column v4 variant<properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\", \"variant_enable_typed_paths_to_sparse\" = \"${enable_typed_paths_to_sparse}\")> default null"
for (int i = 0; i < 20; i++) {
sql """insert into ${table_name} values (1, '{"a" : 1}', '{"a" : 1}', '{"a" : 1}', '{"a" : 1}', '{"a" : 1}')"""
}
diff --git a/regression-test/suites/variant_p0/predefine/predefined_typed_to_sparse.groovy b/regression-test/suites/variant_p0/predefine/predefined_typed_to_sparse.groovy
new file mode 100644
index 0000000..cdd888a
--- /dev/null
+++ b/regression-test/suites/variant_p0/predefine/predefined_typed_to_sparse.groovy
@@ -0,0 +1,217 @@
+// 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_predefine_typed_to_sparse", "p0"){
+ sql """ set enable_common_expr_pushdown = true """
+ def count = new Random().nextInt(10) + 1
+
+ def load_json_data = {table_name, file_name ->
+ // load the json data
+ streamLoad {
+ table "${table_name}"
+
+ // set http request header params
+ set 'read_json_by_line', 'true'
+ set 'format', 'json'
+ set 'max_filter_ratio', '0.1'
+ set 'memtable_on_sink_node', 'true'
+ file file_name // import json file
+ time 10000 // limit inflight 10s
+
+ // if declared a check callback, the default check condition will ignore.
+ // So you must check all condition
+
+ check { result, exception, startTime, endTime ->
+ if (exception != null) {
+ throw exception
+ }
+ logger.info("Stream load ${file_name} result: ${result}".toString())
+ def json = parseJson(result)
+ assertEquals("success", json.Status.toLowerCase())
+ // assertEquals(json.NumberTotalRows, json.NumberLoadedRows + json.NumberUnselectedRows)
+ assertTrue(json.NumberLoadedRows > 0 && json.LoadBytes > 0)
+ }
+ }
+ }
+
+ def tableName = "test_predefine_typed_to_sparse"
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NOT NULL,
+ `var` variant <
+ 'array_decimal_*':array<decimalv3 (26,9)>,
+ 'array_ipv6_*':array<ipv6>,
+ 'int_*':int,
+ 'string_*':string,
+ 'decimal_*':decimalv3(26,9),
+ 'datetime_*':datetime,
+ 'datetimev2_*':datetimev2(6),
+ 'date_*':date,
+ 'datev2_*':datev2,
+ 'ipv4_*':ipv4,
+ 'ipv6_*':ipv6,
+ 'largeint_*':largeint,
+ 'char_*': text,
+ properties (
+ "variant_enable_typed_paths_to_sparse" = "true",
+ "variant_max_subcolumns_count" = "${count}"
+ )
+ > NOT NULL,
+ INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="array_decimal_*") COMMENT '',
+ INDEX idx_a_c (var) USING INVERTED PROPERTIES("field_pattern"="array_ipv6_*") COMMENT '',
+ INDEX idx_a_d (var) USING INVERTED PROPERTIES("field_pattern"="int_*") COMMENT '',
+ INDEX idx_a_e (var) USING INVERTED PROPERTIES("field_pattern"="string_*", "parser"="english", "support_phrase" = "true") COMMENT '',
+ INDEX idx_a_f (var) USING INVERTED PROPERTIES("field_pattern"="decimal_*") COMMENT '',
+ INDEX idx_a_g (var) USING INVERTED PROPERTIES("field_pattern"="datetime_*") COMMENT '',
+ INDEX idx_a_h (var) USING INVERTED PROPERTIES("field_pattern"="datetimev2_*") COMMENT '',
+ INDEX idx_a_i (var) USING INVERTED PROPERTIES("field_pattern"="date_*") COMMENT '',
+ INDEX idx_a_j (var) USING INVERTED PROPERTIES("field_pattern"="datev2_*") COMMENT '',
+ INDEX idx_a_k (var) USING INVERTED PROPERTIES("field_pattern"="ipv4_*") COMMENT '',
+ INDEX idx_a_l (var) USING INVERTED PROPERTIES("field_pattern"="ipv6_*") COMMENT '',
+ INDEX idx_a_m (var) USING INVERTED PROPERTIES("field_pattern"="largeint_*") COMMENT '',
+ INDEX idx_a_n (var) USING INVERTED PROPERTIES("field_pattern"="char_*") COMMENT ''
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")
+
+ """
+
+ sql """
+ INSERT INTO ${tableName} (`id`, `var`) VALUES
+ (
+ 1,
+ '{
+ "array_decimal_1": ["12345678901234567.123456789", "987.654321"],
+ "array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7334", "::1"],
+ "int_1": 42,
+ "int_nested": {
+ "level1_num_1": 1011111,
+ "level1_num_2": 102
+ },
+ "string_1": "This is a sample string.",
+ "string_1_nested": {
+ "message": "Hello from nested object",
+ "metadata": {
+ "timestamp": "2023-10-27T12:00:00Z",
+ "source": "generator"
+ }
+ },
+ "decimal_1": 12345.6789,
+ "datetime_1": "2023-10-27 10:30:00",
+ "datetimev2_1": "2023-10-27 10:30:00.123456",
+ "date_1": "2023-10-27",
+ "datev2_1": "2023-10-28",
+ "ipv4_1": "192.168.1.1",
+ "ipv6_1": "::1",
+ "largeint_1": "12345678901234567890123456789012345678",
+ "char_1": "short text"
+ }'
+ );
+ """
+ for (int i = 1; i < 10; i++) {
+ load_json_data.call(tableName, getS3Url() + "/regression/variant/schema_tmpt${i}.json")
+ }
+
+ qt_sql """ select * from ${tableName} order by id limit 10 """
+
+ trigger_and_wait_compaction(tableName, "cumulative")
+
+ qt_sql """ select * from ${tableName} order by id limit 10"""
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NOT NULL,
+ `var` variant <
+ 'array_decimal_*':array<decimalv3 (26,9)>,
+ 'array_ipv6_*':array<ipv6>,
+ 'int_*':int,
+ 'string_*':string,
+ 'decimal_*':decimalv3(26,9),
+ 'datetime_*':datetime,
+ 'datetimev2_*':datetimev2(6),
+ 'date_*':date,
+ 'datev2_*':datev2,
+ 'ipv4_*':ipv4,
+ 'ipv6_*':ipv6,
+ 'largeint_*':largeint,
+ 'char_*': text,
+ properties (
+ "variant_enable_typed_paths_to_sparse" = "true",
+ "variant_max_subcolumns_count" = "5"
+ )
+ > NOT NULL,
+ INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="array_decimal_*") COMMENT '',
+ INDEX idx_a_c (var) USING INVERTED PROPERTIES("field_pattern"="array_ipv6_*") COMMENT '',
+ INDEX idx_a_d (var) USING INVERTED PROPERTIES("field_pattern"="int_*") COMMENT '',
+ INDEX idx_a_e (var) USING INVERTED PROPERTIES("field_pattern"="string_*", "parser"="english", "support_phrase" = "true") COMMENT '',
+ INDEX idx_a_f (var) USING INVERTED PROPERTIES("field_pattern"="decimal_*") COMMENT '',
+ INDEX idx_a_g (var) USING INVERTED PROPERTIES("field_pattern"="datetime_*") COMMENT '',
+ INDEX idx_a_h (var) USING INVERTED PROPERTIES("field_pattern"="datetimev2_*") COMMENT '',
+ INDEX idx_a_i (var) USING INVERTED PROPERTIES("field_pattern"="date_*") COMMENT '',
+ INDEX idx_a_j (var) USING INVERTED PROPERTIES("field_pattern"="datev2_*") COMMENT '',
+ INDEX idx_a_k (var) USING INVERTED PROPERTIES("field_pattern"="ipv4_*") COMMENT '',
+ INDEX idx_a_l (var) USING INVERTED PROPERTIES("field_pattern"="ipv6_*") COMMENT '',
+ INDEX idx_a_m (var) USING INVERTED PROPERTIES("field_pattern"="largeint_*") COMMENT '',
+ INDEX idx_a_n (var) USING INVERTED PROPERTIES("field_pattern"="char_*") COMMENT ''
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")
+ """
+
+ for (int i = 1; i < 10; i++) {
+ sql """
+ INSERT INTO ${tableName} (`id`, `var`) VALUES
+ (
+ ${i},
+ '{
+ "array_decimal_1": ["12345678901234567.123456789", "987.654321"],
+ "array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7334", "::1"],
+ "int_1": 42,
+ "int_nested": {
+ "level1_num_1": 1011111,
+ "level1_num_2": 102
+ },
+ "string_1": "This is a sample string.",
+ "string_1_nested": {
+ "message": "Hello from nested object",
+ "metadata": {
+ "timestamp": "2023-10-27T12:00:00Z",
+ "source": "generator"
+ }
+ },
+ "decimal_1": 12345.6789,
+ "datetime_1": "2023-10-27 10:30:00",
+ "datetimev2_1": "2023-10-27 10:30:00.123456",
+ "date_1": "2023-10-27",
+ "datev2_1": "2023-10-28",
+ "ipv4_1": "192.168.1.1",
+ "ipv6_1": "::1",
+ "largeint_1": "12345678901234567890123456789012345678",
+ "char_1": "short text"
+ }'
+ );
+ """
+ }
+
+ qt_sql """ select variant_type(var) from ${tableName} limit 1"""
+ qt_sql """ select * from ${tableName} order by id limit 10 """
+ qt_sql """ select var['array_decimal_1'], var['array_ipv6_1'], var['int_1'], var['int_nested'], var['string_1'], var['string_1_nested'], var['decimal_1'], var['datetime_1'], var['datetimev2_1'], var['date_1'], var['datev2_1'], var['ipv4_1'], var['ipv6_1'], var['largeint_1'], var['char_1'] from ${tableName} order by id """
+
+ trigger_and_wait_compaction(tableName, "cumulative")
+
+ qt_sql """ select variant_type(var) from ${tableName} limit 1"""
+ qt_sql """ select * from ${tableName} order by id limit 10"""
+ qt_sql """ select var['array_decimal_1'], var['array_ipv6_1'], var['int_1'], var['int_nested'], var['string_1'], var['string_1_nested'], var['decimal_1'], var['datetime_1'], var['datetimev2_1'], var['date_1'], var['datev2_1'], var['ipv4_1'], var['ipv6_1'], var['largeint_1'], var['char_1'] from ${tableName} order by id """
+
+}
\ No newline at end of file
diff --git a/regression-test/suites/variant_p0/predefine/test_all_prdefine_type_to_sparse.groovy b/regression-test/suites/variant_p0/predefine/test_all_prdefine_type_to_sparse.groovy
new file mode 100644
index 0000000..3264462
--- /dev/null
+++ b/regression-test/suites/variant_p0/predefine/test_all_prdefine_type_to_sparse.groovy
@@ -0,0 +1,391 @@
+// 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_all_prdefine_type_to_sparse", "p0"){
+
+ sql """ set describe_extend_variant_column = true """
+
+ def tableName = "test_all_prdefine_type_to_sparse"
+ sql "set enable_decimal256 = true"
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NOT NULL,
+ `var` variant <
+ 'boolean_*':boolean,
+ 'tinyint_*':tinyint,
+ 'smallint_*':smallint,
+ 'int_*':int,
+ 'bigint_*':bigint,
+ 'largeint_*':largeint,
+ 'char_*': text,
+ 'string_*':string,
+ 'float_*':float,
+ 'double_*':double,
+ 'decimal32_*':decimalv3(8,2),
+ 'decimal64_*':decimalv3(16,9),
+ 'decimal128_*':decimalv3(36,9),
+ 'decimal256_*':decimalv3(70,60),
+ 'datetime_*':datetime,
+ 'date_*':date,
+ 'ipv4_*':ipv4,
+ 'ipv6_*':ipv6,
+ 'array_boolean_*':array<boolean>,
+ 'array_tinyint_*':array<tinyint>,
+ 'array_smallint_*':array<smallint>,
+ 'array_int_*':array<int>,
+ 'array_bigint_*':array<bigint>,
+ 'array_largeint_*':array<largeint>,
+ 'array_char_*':array<text>,
+ 'array_string_*':array<string>,
+ 'array_float_*':array<float>,
+ 'array_double_*':array<double>,
+ 'array_decimal32_*':array<decimalv3(8,2)>,
+ 'array_decimal64_*':array<decimalv3(16,9)>,
+ 'array_decimal128_*':array<decimalv3(36,9)>,
+ 'array_decimal256_*':array<decimalv3(70,60)>,
+ 'array_datetime_*':array<datetime>,
+ 'array_date_*':array<date>,
+ 'array_ipv4_*':array<ipv4>,
+ 'array_ipv6_*':array<ipv6>,
+ properties (
+ "variant_enable_typed_paths_to_sparse" = "true",
+ "variant_max_subcolumns_count" = "1"
+ )
+ > NOT NULL
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")
+
+ """
+
+ sql """
+ INSERT INTO ${tableName} VALUES
+ (0,
+ '{
+ "boolean_1": true,
+ "tinyint_1": 1,
+ "smallint_1": 1,
+ "int_1": 1,
+ "bigint_1": 1,
+ "largeint_1": 1,
+ "char_1": "1",
+ "string_1": "1",
+ "float_1": 1.12,
+ "double_1": 1.12,
+ "decimal32_1": 1.12,
+ "decimal64_1": 1.12,
+ "decimal128_1": 1.12,
+ "decimal256_1": 1.12,
+ "datetime_1": "2021-01-01 00:00:00",
+ "date_1": "2021-01-01",
+ "ipv4_1": "192.168.1.1",
+ "ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7334",
+ "array_boolean_1": [true],
+ "array_tinyint_1": [1, null],
+ "array_smallint_1": [1, null],
+ "array_int_1": [1, null],
+ "array_bigint_1": [1, null],
+ "array_largeint_1": [1, null],
+ "array_char_1": ["1"],
+ "array_string_1": ["1"],
+ "array_float_1": [1.12],
+ "array_double_1": [1.12],
+ "array_decimal32_1": [1.12],
+ "array_decimal64_1": [1.12],
+ "array_decimal128_1": [1.12],
+ "array_decimal256_1": [1.12],
+ "array_datetime_1": ["2021-01-01 00:00:00"],
+ "array_date_1": ["2021-01-01"],
+ "array_ipv4_1": ["192.168.1.1"],
+ "array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"],
+ "other_1": "1"
+ }'
+ ),
+ (1,
+ '{"other_1": "1"}'
+ );
+ """
+
+ qt_sql """ select variant_type(var) from ${tableName} limit 1"""
+ qt_sql """ select var from ${tableName} order by id """
+
+
+ def check_table = {
+ def before_result = sql """ select var from ${tableName} order by id """
+ log.info("before_result: ${before_result}")
+ qt_sql_compaction_before """ desc ${tableName} """
+
+ trigger_and_wait_compaction(tableName, "full")
+
+ def after_result = sql """ select var from ${tableName} order by id """
+ log.info("after_result: ${after_result}")
+ assertTrue(before_result.toString() == after_result.toString())
+
+ qt_sql_compaction_after """ desc ${tableName} """
+ qt_sql """ select var from ${tableName} order by id """
+ }
+
+ sql """ insert into ${tableName} values (2, '{"tinyint_1": 1}'),(3, '{"tinyint_1": 2}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (4, '{"smallint_1": 1}'),(5, '{"smallint_1": 2}'),(6, '{"smallint_1": 3}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (7, '{"int_1": 1}'),(8, '{"int_1": 2}'),(9, '{"int_1": 3}'),(10, '{"int_1": 4}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (11, '{"bigint_1": 1}'),(12, '{"bigint_1": 2}'),(13, '{"bigint_1": 3}'),(14, '{"bigint_1": 4}'),(15, '{"bigint_1": 5}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (16, '{"largeint_1": 1}'),(17, '{"largeint_1": 2}'),(18, '{"largeint_1": 3}'),(19, '{"largeint_1": 4}'),(20, '{"largeint_1": 5}'),(21, '{"largeint_1": 6}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (22, '{"char_1": "1"}'),(23, '{"char_1": "2"}'),(24, '{"char_1": "3"}'),(25, '{"char_1": "4"}'),(26, '{"char_1": "5"}'),(27, '{"char_1": "6"}'),(28, '{"char_1": "7"}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (29, '{"string_1": "1"}'),(30, '{"string_1": "2"}'),(31, '{"string_1": "3"}'),(32, '{"string_1": "4"}'),(33, '{"string_1": "5"}'),
+ (34, '{"string_1": "6"}'),(35, '{"string_1": "7"}'),(36, '{"string_1": "8"}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (37, '{"float_1": 1.12}'),(38, '{"float_1": 2.12}'),(39, '{"float_1": 3.12}'),(40, '{"float_1": 4.12}'),(41, '{"float_1": 5.12}'),
+ (42, '{"float_1": 6.12}'),(43, '{"float_1": 7.12}'),(44, '{"float_1": 8.12}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (45, '{"double_1": 1.12}'),(46, '{"double_1": 2.12}'),(47, '{"double_1": 3.12}'),(48, '{"double_1": 4.12}'),(49, '{"double_1": 5.12}'),
+ (50, '{"double_1": 6.12}'),(51, '{"double_1": 7.12}'),(52, '{"double_1": 8.12}'),(53, '{"double_1": 9.12}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (54, '{"decimal32_1": 1.12}'),(55, '{"decimal32_1": 2.12}'),(56, '{"decimal32_1": 3.12}'),(57, '{"decimal32_1": 4.12}'),(58, '{"decimal32_1": 5.12}'),
+ (59, '{"decimal32_1": 6.12}'),(60, '{"decimal32_1": 7.12}'),(61, '{"decimal32_1": 8.12}'),(62, '{"decimal32_1": 9.12}'),(63, '{"decimal32_1": 10.12}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (64, '{"decimal64_1": 1.12}'),(65, '{"decimal64_1": 2.12}'),(66, '{"decimal64_1": 3.12}'),(67, '{"decimal64_1": 4.12}'),(68, '{"decimal64_1": 5.12}'),
+ (69, '{"decimal64_1": 6.12}'),(70, '{"decimal64_1": 7.12}'),(71, '{"decimal64_1": 8.12}'),(72, '{"decimal64_1": 9.12}'),(73, '{"decimal64_1": 10.12}'),(74, '{"decimal64_1": 11.12}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (75, '{"decimal128_1": 1.12}'),(76, '{"decimal128_1": 2.12}'),(77, '{"decimal128_1": 3.12}'),(78, '{"decimal128_1": 4.12}'),(79, '{"decimal128_1": 5.12}'),
+ (80, '{"decimal128_1": 6.12}'),(81, '{"decimal128_1": 7.12}'),(82, '{"decimal128_1": 8.12}'),(83, '{"decimal128_1": 9.12}'),(84, '{"decimal128_1": 10.12}'),(85, '{"decimal128_1": 11.12}'),
+ (86, '{"decimal128_1": 12.12}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (87, '{"decimal256_1": 1.12}'),(88, '{"decimal256_1": 2.12}'),(89, '{"decimal256_1": 3.12}'),(90, '{"decimal256_1": 4.12}'),(91, '{"decimal256_1": 5.12}'),
+ (92, '{"decimal256_1": 6.12}'),(93, '{"decimal256_1": 7.12}'),(94, '{"decimal256_1": 8.12}'),(95, '{"decimal256_1": 9.12}'),(96, '{"decimal256_1": 10.12}'),(97, '{"decimal256_1": 11.12}'),
+ (98, '{"decimal256_1": 12.12}'),(99, '{"decimal256_1": 13.12}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (100, '{"datetime_1": "2021-01-01 00:00:00"}'),(101, '{"datetime_1": "2021-01-01 00:00:01"}'),(102, '{"datetime_1": "2021-01-01 00:00:02"}'),
+ (103, '{"datetime_1": "2021-01-01 00:00:03"}'),(104, '{"datetime_1": "2021-01-01 00:00:04"}'),(105, '{"datetime_1": "2021-01-01 00:00:05"}'),(106, '{"datetime_1": "2021-01-01 00:00:06"}'),
+ (107, '{"datetime_1": "2021-01-01 00:00:07"}'),(108, '{"datetime_1": "2021-01-01 00:00:08"}'),(109, '{"datetime_1": "2021-01-01 00:00:09"}'),(110, '{"datetime_1": "2021-01-01 00:00:10"}'),
+ (111, '{"datetime_1": "2021-01-01 00:00:07"}'),(112, '{"datetime_1": "2021-01-01 00:00:08"}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (113, '{"date_1": "2021-01-01"}'),(114, '{"date_1": "2021-01-02"}'),(115, '{"date_1": "2021-01-03"}'),(116, '{"date_1": "2021-01-04"}'),
+ (117, '{"date_1": "2021-01-05"}'),(118, '{"date_1": "2021-01-06"}'),(119, '{"date_1": "2021-01-07"}'),(120, '{"date_1": "2021-01-08"}'),(121, '{"date_1": "2021-01-09"}'),(122, '{"date_1": "2021-01-10"}'),
+ (123, '{"date_1": "2021-01-07"}'),(124, '{"date_1": "2021-01-08"}'),(125, '{"date_1": "2021-01-09"}'),(126, '{"date_1": "2021-01-10"}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (127, '{"ipv4_1": "192.168.1.1"}'),(128, '{"ipv4_1": "192.168.1.2"}'),(129, '{"ipv4_1": "192.168.1.3"}'),(130, '{"ipv4_1": "192.168.1.4"}'),
+ (131, '{"ipv4_1": "192.168.1.5"}'),(132, '{"ipv4_1": "192.168.1.6"}'),(133, '{"ipv4_1": "192.168.1.7"}'),(134, '{"ipv4_1": "192.168.1.8"}'),(135, '{"ipv4_1": "192.168.1.9"}'),(136, '{"ipv4_1": "192.168.1.10"}'),
+ (137, '{"ipv4_1": "192.168.1.7"}'),(138, '{"ipv4_1": "192.168.1.8"}'),(139, '{"ipv4_1": "192.168.1.9"}'),(140, '{"ipv4_1": "192.168.1.10"}'),(141, '{"ipv4_1": "192.168.1.11"}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (142, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7334"}'),(143, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7335"}'),
+ (144, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7336"}'),(145, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7337"}'),(146, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7338"}'),
+ (147, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7339"}'),(148, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733a"}'),(149, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733b"}'),
+ (150, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733c"}'),(151, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733d"}'),(152, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733e"}'),
+ (153, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733f"}'),(154, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7340"}'),(155, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7341"}'),
+ (156, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:733f"}'),(157, '{"ipv6_1": "2001:0db8:85a3:0000:0000:8a2e:0370:7340"}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (158, '{"array_boolean_1": [true]}'),(159, '{"array_boolean_1": [false]}'),(160, '{"array_boolean_1": [true]}'),(161, '{"array_boolean_1": [false]}'),
+ (162, '{"array_boolean_1": [true]}'),(163, '{"array_boolean_1": [false]}'),(164, '{"array_boolean_1": [true]}'),(165, '{"array_boolean_1": [false]}'),(166, '{"array_boolean_1": [true]}'),(167, '{"array_boolean_1": [false]}'),
+ (168, '{"array_boolean_1": [true]}'),(169, '{"array_boolean_1": [false]}'),(170, '{"array_boolean_1": [true]}'),(171, '{"array_boolean_1": [false]}'),(172, '{"array_boolean_1": [true]}'),(173, '{"array_boolean_1": [false]}');"""
+
+ check_table();
+
+ sql """ insert into ${tableName} values (174, '{"array_tinyint_1": [1]}'),(175, '{"array_tinyint_1": [2]}'),(176, '{"array_tinyint_1": [3]}'),(177, '{"array_tinyint_1": [4]}'),
+ (178, '{"array_tinyint_1": [5]}'),(179, '{"array_tinyint_1": [6]}'),(180, '{"array_tinyint_1": [7]}'),(181, '{"array_tinyint_1": [8]}'),(182, '{"array_tinyint_1": [9]}'),(183, '{"array_tinyint_1": [10]}'),
+ (184, '{"array_tinyint_1": [11]}'),(185, '{"array_tinyint_1": [12]}'),(186, '{"array_tinyint_1": [13]}'),(187, '{"array_tinyint_1": [14]}'),(188, '{"array_tinyint_1": [15]}'),(189, '{"array_tinyint_1": [16]}'),
+ (190, '{"array_tinyint_1": [17]}'),(191, '{"array_tinyint_1": [18]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (192, '{"array_smallint_1": [1]}'),(193, '{"array_smallint_1": [2, null]}'),(194, '{"array_smallint_1": [3]}'),(195, '{"array_smallint_1": [4]}'),
+ (196, '{"array_smallint_1": [5]}'),(197, '{"array_smallint_1": [6]}'),(198, '{"array_smallint_1": [7]}'),(199, '{"array_smallint_1": [8]}'),(200, '{"array_smallint_1": [9]}'),(201, '{"array_smallint_1": [10]}'),
+ (202, '{"array_smallint_1": [11]}'),(203, '{"array_smallint_1": [12]}'),(204, '{"array_smallint_1": [13]}'),(205, '{"array_smallint_1": [14]}'),(206, '{"array_smallint_1": [15]}'),(207, '{"array_smallint_1": [16]}'),
+ (208, '{"array_smallint_1": [17]}'),(209, '{"array_smallint_1": [18]}'),(210, '{"array_smallint_1": [19]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (211, '{"array_int_1": [1]}'),(212, '{"array_int_1": [2]}'),(213, '{"array_int_1": [3]}'),(214, '{"array_int_1": [4]}'),
+ (215, '{"array_int_1": [5]}'),(216, '{"array_int_1": [6]}'),(217, '{"array_int_1": [7]}'),(218, '{"array_int_1": [8]}'),(219, '{"array_int_1": [9]}'),(220, '{"array_int_1": [10]}'),
+ (221, '{"array_int_1": [11]}'),(222, '{"array_int_1": [12]}'),(223, '{"array_int_1": [13]}'),(224, '{"array_int_1": [14]}'),(225, '{"array_int_1": [15]}'),(226, '{"array_int_1": [16]}'),
+ (227, '{"array_int_1": [17]}'),(228, '{"array_int_1": [18]}'),(229, '{"array_int_1": [19]}'),(230, '{"array_int_1": [20]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (231, '{"array_bigint_1": [1]}'),(232, '{"array_bigint_1": [2]}'),(233, '{"array_bigint_1": [3]}'),(234, '{"array_bigint_1": [4]}'),
+ (235, '{"array_bigint_1": [5]}'),(236, '{"array_bigint_1": [6]}'),(237, '{"array_bigint_1": [7]}'),(238, '{"array_bigint_1": [8]}'),(239, '{"array_bigint_1": [9]}'),(240, '{"array_bigint_1": [10]}'),
+ (241, '{"array_bigint_1": [11]}'),(242, '{"array_bigint_1": [12]}'),(243, '{"array_bigint_1": [13]}'),(244, '{"array_bigint_1": [14]}'),(245, '{"array_bigint_1": [15]}'),(246, '{"array_bigint_1": [16]}'),
+ (247, '{"array_bigint_1": [17]}'),(248, '{"array_bigint_1": [18]}'),(249, '{"array_bigint_1": [19]}'),(250, '{"array_bigint_1": [20]}'),(251, '{"array_bigint_1": [21]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (252, '{"array_largeint_1": [1, null]}'),(253, '{"array_largeint_1": [2]}'),(254, '{"array_largeint_1": [3]}'),(255, '{"array_largeint_1": [4]}'),
+ (256, '{"array_largeint_1": [5]}'),(257, '{"array_largeint_1": [6]}'),(258, '{"array_largeint_1": [7]}'),(259, '{"array_largeint_1": [8]}'),(260, '{"array_largeint_1": [9]}'),(261, '{"array_largeint_1": [10]}'),
+ (262, '{"array_largeint_1": [11]}'),(263, '{"array_largeint_1": [12]}'),(264, '{"array_largeint_1": [13]}'),(265, '{"array_largeint_1": [14]}'),(266, '{"array_largeint_1": [15]}'),(267, '{"array_largeint_1": [16]}'),
+ (268, '{"array_largeint_1": [17]}'),(269, '{"array_largeint_1": [18]}'),(270, '{"array_largeint_1": [19]}'),(271, '{"array_largeint_1": [20]}'),(272, '{"array_largeint_1": [21]}'),(273, '{"array_largeint_1": [22]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (274, '{"array_char_1": ["1"]}'),(275, '{"array_char_1": ["2"]}'),(276, '{"array_char_1": ["3"]}'),(277, '{"array_char_1": ["4"]}'),
+ (278, '{"array_char_1": ["5"]}'),(279, '{"array_char_1": ["6"]}'),(280, '{"array_char_1": ["7"]}'),(281, '{"array_char_1": ["8"]}'),(282, '{"array_char_1": ["9"]}'),(283, '{"array_char_1": ["10"]}'),
+ (284, '{"array_char_1": ["11"]}'),(285, '{"array_char_1": ["12"]}'),(286, '{"array_char_1": ["13"]}'),(287, '{"array_char_1": ["14"]}'),(288, '{"array_char_1": ["15"]}'),(289, '{"array_char_1": ["16"]}'),
+ (290, '{"array_char_1": ["17"]}'),(291, '{"array_char_1": ["18"]}'),(292, '{"array_char_1": ["19"]}'),(293, '{"array_char_1": ["20"]}'),(294, '{"array_char_1": ["21"]}'),(295, '{"array_char_1": ["22"]}'),
+ (296, '{"array_char_1": ["23"]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (297, '{"array_string_1": ["1"]}'),(298, '{"array_string_1": ["2"]}'),(299, '{"array_string_1": ["3"]}'),(300, '{"array_string_1": ["4"]}'),
+ (301, '{"array_string_1": ["5"]}'),(302, '{"array_string_1": ["6"]}'),(303, '{"array_string_1": ["7"]}'),(304, '{"array_string_1": ["8"]}'),(305, '{"array_string_1": ["9"]}'),(306, '{"array_string_1": ["10"]}'),
+ (307, '{"array_string_1": ["11"]}'),(308, '{"array_string_1": ["12"]}'),(309, '{"array_string_1": ["13"]}'),(310, '{"array_string_1": ["14"]}'),(311, '{"array_string_1": ["15"]}'),(312, '{"array_string_1": ["16"]}'),
+ (313, '{"array_string_1": ["17"]}'),(314, '{"array_string_1": ["18"]}'),(315, '{"array_string_1": ["19"]}'),(316, '{"array_string_1": ["20"]}'),(317, '{"array_string_1": ["21"]}'),(318, '{"array_string_1": ["22"]}'),
+ (319, '{"array_string_1": ["23"]}'),(320, '{"array_string_1": ["24"]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (321, '{"array_float_1": [1.12]}'),(322, '{"array_float_1": [2.12]}'),(323, '{"array_float_1": [3.12]}'),(324, '{"array_float_1": [4.12]}'),
+ (325, '{"array_float_1": [5.12]}'),(326, '{"array_float_1": [6.12]}'),(327, '{"array_float_1": [7.12]}'),(328, '{"array_float_1": [8.12]}'),(329, '{"array_float_1": [9.12]}'),(330, '{"array_float_1": [10.12]}'),
+ (331, '{"array_float_1": [11.12]}'),(332, '{"array_float_1": [12.12]}'),(333, '{"array_float_1": [13.12]}'),(334, '{"array_float_1": [14.12]}'),(335, '{"array_float_1": [15.12]}'),(336, '{"array_float_1": [16.12]}'),
+ (337, '{"array_float_1": [17.12]}'),(338, '{"array_float_1": [18.12]}'),(339, '{"array_float_1": [19.12]}'),(340, '{"array_float_1": [20.12]}'),(341, '{"array_float_1": [21.12]}'),(342, '{"array_float_1": [22.12]}'),
+ (343, '{"array_float_1": [23.12]}'),(344, '{"array_float_1": [24.12]}'),(345, '{"array_float_1": [25.12]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (346, '{"array_double_1": [1.12]}'),(347, '{"array_double_1": [2.12]}'),(348, '{"array_double_1": [3.12]}'),(349, '{"array_double_1": [4.12]}'),
+ (350, '{"array_double_1": [5.12]}'),(351, '{"array_double_1": [6.12]}'),(352, '{"array_double_1": [7.12]}'),(353, '{"array_double_1": [8.12]}'),(354, '{"array_double_1": [9.12]}'),(355, '{"array_double_1": [10.12]}'),
+ (356, '{"array_double_1": [11.12]}'),(357, '{"array_double_1": [12.12]}'),(358, '{"array_double_1": [13.12]}'),(359, '{"array_double_1": [14.12]}'),(360, '{"array_double_1": [15.12]}'),(361, '{"array_double_1": [16.12]}'),
+ (362, '{"array_double_1": [17.12]}'),(363, '{"array_double_1": [18.12]}'),(364, '{"array_double_1": [19.12]}'),(365, '{"array_double_1": [20.12]}'),(366, '{"array_double_1": [21.12]}'),(367, '{"array_double_1": [22.12]}'),
+ (368, '{"array_double_1": [23.12]}'),(369, '{"array_double_1": [24.12]}'),(370, '{"array_double_1": [25.12]}'),(371, '{"array_double_1": [26.12]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (372, '{"array_decimal32_1": [1.12]}'),(373, '{"array_decimal32_1": [2.12]}'),(374, '{"array_decimal32_1": [3.12]}'),(375, '{"array_decimal32_1": [4.12]}'),
+ (376, '{"array_decimal32_1": [5.12]}'),(377, '{"array_decimal32_1": [6.12]}'),(378, '{"array_decimal32_1": [7.12]}'),(379, '{"array_decimal32_1": [8.12]}'),(380, '{"array_decimal32_1": [9.12]}'),(381, '{"array_decimal32_1": [10.12]}'),
+ (382, '{"array_decimal32_1": [11.12]}'),(383, '{"array_decimal32_1": [12.12]}'),(384, '{"array_decimal32_1": [13.12]}'),(385, '{"array_decimal32_1": [14.12]}'),(386, '{"array_decimal32_1": [15.12]}'),(387, '{"array_decimal32_1": [16.12]}'),
+ (388, '{"array_decimal32_1": [17.12]}'),(389, '{"array_decimal32_1": [18.12]}'),(390, '{"array_decimal32_1": [19.12]}'),(391, '{"array_decimal32_1": [20.12]}'),(392, '{"array_decimal32_1": [21.12]}'),(393, '{"array_decimal32_1": [22.12]}'),
+ (394, '{"array_decimal32_1": [23.12]}'),(395, '{"array_decimal32_1": [24.12]}'),(396, '{"array_decimal32_1": [25.12]}'),(397, '{"array_decimal32_1": [26.12]}'),(398, '{"array_decimal32_1": [27.12]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (399, '{"array_decimal64_1": [1.12]}'),(400, '{"array_decimal64_1": [2.12]}'),(401, '{"array_decimal64_1": [3.12]}'),(402, '{"array_decimal64_1": [4.12]}'),
+ (403, '{"array_decimal64_1": [5.12]}'),(404, '{"array_decimal64_1": [6.12]}'),(405, '{"array_decimal64_1": [7.12]}'),(406, '{"array_decimal64_1": [8.12]}'),(407, '{"array_decimal64_1": [9.12]}'),(408, '{"array_decimal64_1": [10.12]}'),
+ (409, '{"array_decimal64_1": [11.12]}'),(410, '{"array_decimal64_1": [12.12]}'),(411, '{"array_decimal64_1": [13.12]}'),(412, '{"array_decimal64_1": [14.12]}'),(413, '{"array_decimal64_1": [15.12]}'),(414, '{"array_decimal64_1": [16.12]}'),
+ (415, '{"array_decimal64_1": [17.12]}'),(416, '{"array_decimal64_1": [18.12]}'),(417, '{"array_decimal64_1": [19.12]}'),(418, '{"array_decimal64_1": [20.12]}'),(419, '{"array_decimal64_1": [21.12]}'),(420, '{"array_decimal64_1": [22.12]}'),
+ (421, '{"array_decimal64_1": [23.12]}'),(422, '{"array_decimal64_1": [24.12]}'),(423, '{"array_decimal64_1": [25.12]}'),(424, '{"array_decimal64_1": [26.12]}'),(425, '{"array_decimal64_1": [27.12]}'),(426, '{"array_decimal64_1": [28.12]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (427, '{"array_decimal128_1": [1.12]}'),(428, '{"array_decimal128_1": [2.12]}'),(429, '{"array_decimal128_1": [3.12]}'),(430, '{"array_decimal128_1": [4.12]}'),
+ (431, '{"array_decimal128_1": [5.12]}'),(432, '{"array_decimal128_1": [6.12]}'),(433, '{"array_decimal128_1": [7.12]}'),(434, '{"array_decimal128_1": [8.12]}'),(435, '{"array_decimal128_1": [9.12]}'),(436, '{"array_decimal128_1": [10.12]}'),
+ (437, '{"array_decimal128_1": [11.12]}'),(438, '{"array_decimal128_1": [12.12]}'),(439, '{"array_decimal128_1": [13.12]}'),(440, '{"array_decimal128_1": [14.12]}'),(441, '{"array_decimal128_1": [15.12]}'),(442, '{"array_decimal128_1": [16.12]}'),
+ (443, '{"array_decimal128_1": [17.12]}'),(444, '{"array_decimal128_1": [18.12]}'),(445, '{"array_decimal128_1": [19.12]}'),(446, '{"array_decimal128_1": [20.12]}'),(447, '{"array_decimal128_1": [21.12]}'),(448, '{"array_decimal128_1": [22.12]}'),
+ (449, '{"array_decimal128_1": [23.12]}'),(450, '{"array_decimal128_1": [24.12]}'),(451, '{"array_decimal128_1": [25.12]}'),(452, '{"array_decimal128_1": [26.12]}'),(453, '{"array_decimal128_1": [27.12]}'),(454, '{"array_decimal128_1": [28.12]}'),
+ (455, '{"array_decimal128_1": [29.12]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (456, '{"array_decimal256_1": [1.12]}'),(457, '{"array_decimal256_1": [2.12]}'),(458, '{"array_decimal256_1": [3.12]}'),(459, '{"array_decimal256_1": [4.12]}'),
+ (460, '{"array_decimal256_1": [5.12]}'),(461, '{"array_decimal256_1": [6.12]}'),(462, '{"array_decimal256_1": [7.12]}'),(463, '{"array_decimal256_1": [8.12]}'),(464, '{"array_decimal256_1": [9.12]}'),(465, '{"array_decimal256_1": [10.12]}'),
+ (466, '{"array_decimal256_1": [11.12]}'),(467, '{"array_decimal256_1": [12.12]}'),(468, '{"array_decimal256_1": [13.12]}'),(469, '{"array_decimal256_1": [14.12]}'),(470, '{"array_decimal256_1": [15.12]}'),(471, '{"array_decimal256_1": [16.12]}'),
+ (472, '{"array_decimal256_1": [17.12]}'),(473, '{"array_decimal256_1": [18.12]}'),(474, '{"array_decimal256_1": [19.12]}'),(475, '{"array_decimal256_1": [20.12]}'),(476, '{"array_decimal256_1": [21.12]}'),(477, '{"array_decimal256_1": [22.12]}'),
+ (478, '{"array_decimal256_1": [23.12]}'),(479, '{"array_decimal256_1": [24.12]}'),(480, '{"array_decimal256_1": [25.12]}'),(481, '{"array_decimal256_1": [26.12]}'),(482, '{"array_decimal256_1": [27.12]}'),(483, '{"array_decimal256_1": [28.12]}'),
+ (484, '{"array_decimal256_1": [29.12]}'),(485, '{"array_decimal256_1": [30.12]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (486, '{"array_datetime_1": ["2021-01-01 00:00:00"]}'),(487, '{"array_datetime_1": ["2021-01-01 00:00:01"]}'),(488, '{"array_datetime_1": ["2021-01-01 00:00:02"]}'),
+ (489, '{"array_datetime_1": ["2021-01-01 00:00:03"]}'),(490, '{"array_datetime_1": ["2021-01-01 00:00:04"]}'),(491, '{"array_datetime_1": ["2021-01-01 00:00:05"]}'),(492, '{"array_datetime_1": ["2021-01-01 00:00:06"]}'),
+ (493, '{"array_datetime_1": ["2021-01-01 00:00:07"]}'),(494, '{"array_datetime_1": ["2021-01-01 00:00:08"]}'),(495, '{"array_datetime_1": ["2021-01-01 00:00:09"]}'),(496, '{"array_datetime_1": ["2021-01-01 00:00:10"]}'),
+ (497, '{"array_datetime_1": ["2021-01-01 00:00:07"]}'),(498, '{"array_datetime_1": ["2021-01-01 00:00:08"]}'),(499, '{"array_datetime_1": ["2021-01-01 00:00:09"]}'),(500, '{"array_datetime_1": ["2021-01-01 00:00:10"]}'),
+ (501, '{"array_datetime_1": ["2021-01-01 00:00:07"]}'),(502, '{"array_datetime_1": ["2021-01-01 00:00:08"]}'),(503, '{"array_datetime_1": ["2021-01-01 00:00:09"]}'),(504, '{"array_datetime_1": ["2021-01-01 00:00:10"]}'),
+ (505, '{"array_datetime_1": ["2021-01-01 00:00:07"]}'),(506, '{"array_datetime_1": ["2021-01-01 00:00:08"]}'),(507, '{"array_datetime_1": ["2021-01-01 00:00:09"]}'),(508, '{"array_datetime_1": ["2021-01-01 00:00:10"]}'),
+ (509, '{"array_datetime_1": ["2021-01-01 00:00:07"]}'),(510, '{"array_datetime_1": ["2021-01-01 00:00:08"]}'),(511, '{"array_datetime_1": ["2021-01-01 00:00:09"]}'),(512, '{"array_datetime_1": ["2021-01-01 00:00:10"]}'),
+ (513, '{"array_datetime_1": ["2021-01-01 00:00:07"]}'),(514, '{"array_datetime_1": ["2021-01-01 00:00:08"]}'),(515, '{"array_datetime_1": ["2021-01-01 00:00:09"]}'),(516, '{"array_datetime_1": ["2021-01-01 00:00:10"]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (517, '{"array_date_1": ["2021-01-01"]}'),(518, '{"array_date_1": ["2021-01-02"]}'),(519, '{"array_date_1": ["2021-01-03"]}'),(520, '{"array_date_1": ["2021-01-04"]}'),
+ (521, '{"array_date_1": ["2021-01-05"]}'),(522, '{"array_date_1": ["2021-01-06"]}'),(523, '{"array_date_1": ["2021-01-07"]}'),(524, '{"array_date_1": ["2021-01-08"]}'),(525, '{"array_date_1": ["2021-01-09"]}'),(526, '{"array_date_1": ["2021-01-10"]}'),
+ (527, '{"array_date_1": ["2021-01-07"]}'),(528, '{"array_date_1": ["2021-01-08"]}'),(529, '{"array_date_1": ["2021-01-09"]}'),(530, '{"array_date_1": ["2021-01-10"]}'),
+ (531, '{"array_date_1": ["2021-01-07"]}'),(532, '{"array_date_1": ["2021-01-08"]}'),(533, '{"array_date_1": ["2021-01-09"]}'),(534, '{"array_date_1": ["2021-01-10"]}'),
+ (535, '{"array_date_1": ["2021-01-07"]}'),(536, '{"array_date_1": ["2021-01-08"]}'),(537, '{"array_date_1": ["2021-01-09"]}'),(538, '{"array_date_1": ["2021-01-10"]}'),
+ (539, '{"array_date_1": ["2021-01-07"]}'),(540, '{"array_date_1": ["2021-01-08"]}'),(541, '{"array_date_1": ["2021-01-09"]}'),(542, '{"array_date_1": ["2021-01-10"]}'),
+ (543, '{"array_date_1": ["2021-01-07"]}'),(544, '{"array_date_1": ["2021-01-08"]}'),(545, '{"array_date_1": ["2021-01-09"]}'),(546, '{"array_date_1": ["2021-01-10"]}'),
+ (547, '{"array_date_1": ["2021-01-07"]}'),(548, '{"array_date_1": ["2021-01-08"]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (549, '{"array_ipv4_1": ["192.168.1.1"]}'),(550, '{"array_ipv4_1": ["192.168.1.2"]}'),(551, '{"array_ipv4_1": ["192.168.1.3"]}'),(552, '{"array_ipv4_1": ["192.168.1.4"]}'),
+ (553, '{"array_ipv4_1": ["192.168.1.5"]}'),(554, '{"array_ipv4_1": ["192.168.1.6"]}'),(555, '{"array_ipv4_1": ["192.168.1.7"]}'),(556, '{"array_ipv4_1": ["192.168.1.8"]}'),(557, '{"array_ipv4_1": ["192.168.1.9"]}'),(558, '{"array_ipv4_1": ["192.168.1.10"]}'),
+ (559, '{"array_ipv4_1": ["192.168.1.7"]}'),(560, '{"array_ipv4_1": ["192.168.1.8"]}'),(561, '{"array_ipv4_1": ["192.168.1.9"]}'),(562, '{"array_ipv4_1": ["192.168.1.10"]}'),
+ (563, '{"array_ipv4_1": ["192.168.1.7"]}'),(564, '{"array_ipv4_1": ["192.168.1.8"]}'),(565, '{"array_ipv4_1": ["192.168.1.9"]}'),(566, '{"array_ipv4_1": ["192.168.1.10"]}'),
+ (567, '{"array_ipv4_1": ["192.168.1.7"]}'),(568, '{"array_ipv4_1": ["192.168.1.8"]}'),(569, '{"array_ipv4_1": ["192.168.1.9"]}'),(570, '{"array_ipv4_1": ["192.168.1.10"]}'),
+ (571, '{"array_ipv4_1": ["192.168.1.7"]}'),(572, '{"array_ipv4_1": ["192.168.1.8"]}'),(573, '{"array_ipv4_1": ["192.168.1.9"]}'),(574, '{"array_ipv4_1": ["192.168.1.10"]}'),
+ (575, '{"array_ipv4_1": ["192.168.1.7"]}'),(576, '{"array_ipv4_1": ["192.168.1.8"]}'),(577, '{"array_ipv4_1": ["192.168.1.9"]}'),(578, '{"array_ipv4_1": ["192.168.1.10"]}'),
+ (579, '{"array_ipv4_1": ["192.168.1.7"]}'),(580, '{"array_ipv4_1": ["192.168.1.8"]}'),(581, '{"array_ipv4_1": ["192.168.1.9"]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (582, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7334"]}'),(583, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7335"]}'),
+ (584, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7336"]}'),(585, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7337"]}'),(586, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7338"]}'),
+ (587, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7339"]}'),(588, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733a"]}'),(589, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733b"]}'),
+ (590, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733c"]}'),(591, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733d"]}'),(592, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733e"]}'),
+ (593, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(594, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(595, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (596, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(597, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(598, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (599, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(600, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(601, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (602, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(603, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(604, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (605, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(606, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(607, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (608, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(609, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(610, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (611, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(612, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'),(613, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7341"]}'),
+ (614, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:733f"]}'),(615, '{"array_ipv6_1": ["2001:0db8:85a3:0000:0000:8a2e:0370:7340"]}'); """
+
+ check_table();
+
+ sql """ insert into ${tableName} values (616, '{"other_1": "1"}'),(617, '{"other_1": "2"}'),(618, '{"other_1": "3"}'),(619, '{"other_1": "4"}'),(620, '{"other_1": "5"}'),(621, '{"other_1": "6"}'),(622, '{"other_1": "7"}'),(623, '{"other_1": "8"}'),(624, '{"other_1": "9"}'),(625, '{"other_1": "10"}'),
+ (626, '{"other_1": "11"}'),(627, '{"other_1": "12"}'),(628, '{"other_1": "13"}'),(629, '{"other_1": "14"}'),(630, '{"other_1": "15"}'),(631, '{"other_1": "16"}'),(632, '{"other_1": "17"}'),(633, '{"other_1": "18"}'),(634, '{"other_1": "19"}'),(635, '{"other_1": "20"}'),
+ (636, '{"other_1": "21"}'),(637, '{"other_1": "22"}'),(638, '{"other_1": "23"}'),(639, '{"other_1": "24"}'),(640, '{"other_1": "25"}'),(641, '{"other_1": "26"}'),(642, '{"other_1": "27"}'),(643, '{"other_1": "28"}'),(644, '{"other_1": "29"}'),(645, '{"other_1": "30"}'),
+ (646, '{"other_1": "31"}'),(647, '{"other_1": "32"}'),(648, '{"other_1": "33"}'),(649, '{"other_1": "34"}'),(650, '{"other_1": "35"}'); """
+
+ check_table();
+}
\ No newline at end of file
diff --git a/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy b/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy
new file mode 100644
index 0000000..242936d
--- /dev/null
+++ b/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy
@@ -0,0 +1,174 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+import java.sql.SQLException
+
+suite("test_variant_custom_analyzer", "p0") {
+ def indexTbName1 = "test_custom_analyzer_1"
+ def indexTbName2 = "test_custom_analyzer_2"
+ def indexTbName3 = "test_custom_analyzer_3"
+ sql "set global_variant_max_subcolumns_count = 100"
+ sql """ set enable_match_without_inverted_index = false """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
+
+ sql """
+ CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS edge_ngram_phone_number_tokenizer
+ PROPERTIES
+ (
+ "type" = "edge_ngram",
+ "min_gram" = "3",
+ "max_gram" = "10",
+ "token_chars" = "digit"
+ );
+ """
+
+ sql """
+ CREATE INVERTED INDEX TOKEN_FILTER IF NOT EXISTS word_splitter
+ PROPERTIES
+ (
+ "type" = "word_delimiter",
+ "split_on_numerics" = "false",
+ "split_on_case_change" = "false"
+ );
+ """
+
+ sql """
+ CREATE INVERTED INDEX ANALYZER IF NOT EXISTS edge_ngram_phone_number
+ PROPERTIES
+ (
+ "tokenizer" = "edge_ngram_phone_number_tokenizer"
+ );
+ """
+
+ sql """
+ CREATE INVERTED INDEX ANALYZER IF NOT EXISTS lowercase_delimited
+ PROPERTIES
+ (
+ "tokenizer" = "standard",
+ "token_filter" = "asciifolding, word_splitter, lowercase"
+ );
+ """
+
+ sql """
+ CREATE INVERTED INDEX ANALYZER IF NOT EXISTS keyword_lowercase
+ PROPERTIES
+ (
+ "tokenizer" = "keyword",
+ "token_filter" = "asciifolding, lowercase"
+ );
+ """
+
+ sql """ select sleep(10) """
+
+ qt_tokenize_sql """ select tokenize("Србија Херцеговина Щучин гурзуф Ψ4 Босна", '"analyzer"="keyword_lowercase"'); """
+ qt_tokenize_sql """ select tokenize("Wasted…Again", '"analyzer"="keyword_lowercase"'); """
+ qt_tokenize_sql """ select tokenize("♯P-complete", '"analyzer"="keyword_lowercase"'); """
+ qt_tokenize_sql """ select tokenize("a∴a∴", '"analyzer"="keyword_lowercase"'); """
+ qt_tokenize_sql """ select tokenize("RX J1242−11", '"analyzer"="keyword_lowercase"'); """
+ qt_tokenize_sql """ select tokenize("1080º Avalanche", '"analyzer"="keyword_lowercase"'); """
+ qt_tokenize_sql """ select tokenize("clayfighter 63⅓", '"analyzer"="lowercase_delimited"'); """
+ qt_tokenize_sql """ select tokenize("β-carbon nitride", '"analyzer"="lowercase_delimited"'); """
+ qt_tokenize_sql """ select tokenize("ǁŨǁe language", '"analyzer"="lowercase_delimited"'); """
+
+ sql "DROP TABLE IF EXISTS ${indexTbName1}"
+ sql """
+ CREATE TABLE ${indexTbName1} (
+ `a` bigint NOT NULL AUTO_INCREMENT(1),
+ `ch` variant<'ch' : string> NULL,
+ INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("field_pattern" = "ch", "support_phrase" = "true", "analyzer" = "lowercase_delimited")
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`a`)
+ DISTRIBUTED BY RANDOM BUCKETS 1
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1"
+ );
+ """
+
+ sql """ insert into ${indexTbName1} values(1, '{"ch" : "abcDEF"}'); """
+ sql """ insert into ${indexTbName1} values(2, '{"ch" : "中国人民"}'); """
+ sql """ insert into ${indexTbName1} values(3, '{"ch" : "ǁŨǁe Language"}'); """
+ sql """ insert into ${indexTbName1} values(4, '{"ch" : "RX J1242−11"}'); """
+ sql """ insert into ${indexTbName1} values(5, '{"ch" : "clayfighter 63⅓"}'); """
+ sql """ insert into ${indexTbName1} values(6, '{"ch" : "β-carbon nitrid"}'); """
+
+ try {
+ trigger_and_wait_compaction(indexTbName1, "full")
+ sql "sync"
+ sql """ set enable_common_expr_pushdown = true; """
+
+ qt_sql """ select a, ch['ch'] from ${indexTbName1} where ch['ch'] match 'abcDEF'; """
+ qt_sql """ select a, ch['ch'] from ${indexTbName1} where ch['ch'] match '中'; """
+ qt_sql """ select a, ch['ch'] from ${indexTbName1} where ch['ch'] match 'language'; """
+ } finally {
+ }
+
+ sql "DROP TABLE IF EXISTS ${indexTbName2}"
+ sql """
+ CREATE TABLE ${indexTbName2} (
+ `a` bigint NOT NULL AUTO_INCREMENT(1),
+ `ch` variant<'ch' : string> NULL,
+ INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("field_pattern" = "ch", "support_phrase" = "true", "analyzer" = "edge_ngram_phone_number")
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`a`)
+ DISTRIBUTED BY RANDOM BUCKETS 1
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1"
+ );
+ """
+
+ sql """ INSERT INTO ${indexTbName2} VALUES ('3', '{"ch" : "Wikipedia;Miscellaneous-Jj102786 / 3tle Born Oct 27th 1986 @ Blytheville, Arkansas @ 9:14pm 23 yrs of age male,white Cucassion American raised Religion:Pentocostal,Church of God"}'); """
+
+ try {
+ sql "sync"
+ sql """ set enable_common_expr_pushdown = true; """
+
+ qt_sql """ select a, ch['ch'] from ${indexTbName2} where ch['ch'] match '102'; """
+ } finally {
+ }
+
+ sql "DROP TABLE IF EXISTS ${indexTbName3}"
+ sql """
+ CREATE TABLE ${indexTbName3} (
+ `a` bigint NOT NULL AUTO_INCREMENT(1),
+ `ch` variant<'ch' : string> NULL,
+ INDEX idx_ch (`ch`) USING INVERTED PROPERTIES("field_pattern" = "ch", "support_phrase" = "true", "analyzer" = "keyword_lowercase")
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`a`)
+ DISTRIBUTED BY RANDOM BUCKETS 1
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1"
+ );
+ """
+
+ sql """ INSERT INTO ${indexTbName3} VALUES ('4', '{"ch" : "1080º Avalanche"}'); """
+
+ try {
+ sql "sync"
+ sql """ set enable_common_expr_pushdown = true; """
+
+ qt_sql """ select a, ch['ch'] from ${indexTbName3} where ch['ch'] match '1080º avalanche'; """
+ } finally {
+ }
+
+ try {
+ sql "drop inverted index analyzer edge_ngram_phone_number"
+ } catch (SQLException e) {
+ if (e.message.contains("is used by index")) {
+ logger.info("used by index")
+ }
+ }
+}
\ No newline at end of file
diff --git a/regression-test/suites/variant_p0/predefine/test_multi_index_file.groovy b/regression-test/suites/variant_p0/predefine/test_multi_index_file.groovy
index 7913564..acdee10 100644
--- a/regression-test/suites/variant_p0/predefine/test_multi_index_file.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_multi_index_file.groovy
@@ -25,7 +25,7 @@
sql "DROP TABLE IF EXISTS ${tableName}"
sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
- `var` variant NOT NULL,
+ `var` variant<properties("variant_enable_typed_paths_to_sparse" = "false")> NOT NULL,
INDEX idx_a_d (var) USING INVERTED PROPERTIES("parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_a_d_2 (var) USING INVERTED
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
diff --git a/regression-test/suites/variant_p0/predefine/test_multi_index_nonCurrent.groovy b/regression-test/suites/variant_p0/predefine/test_multi_index_nonCurrent.groovy
index e137404..8ecab4c 100644
--- a/regression-test/suites/variant_p0/predefine/test_multi_index_nonCurrent.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_multi_index_nonCurrent.groovy
@@ -19,6 +19,7 @@
sql """ set describe_extend_variant_column = true """
sql """ set enable_match_without_inverted_index = false """
sql """ set enable_common_expr_pushdown = true """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
def queryAndCheck = { String sqlQuery, int expectedFilteredRows = -1, boolean checkFilterUsed = true ->
def checkpoints_name = "segment_iterator.inverted_index.filtered_rows"
@@ -38,10 +39,10 @@
sql "DROP TABLE IF EXISTS ${tableName}"
sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
- `var` variant NOT NULL,
+ `var` variant<properties ("variant_max_subcolumns_count" = "10")> NOT NULL,
INDEX idx_a_d (var) USING INVERTED PROPERTIES("parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_a_d_2 (var) USING INVERTED
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "10")"""
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"string" : "hello", "array_string" : ["hello"]}'), (2, '{"string" : "world", "array_string" : ["world"]}'), (3, '{"string" : "hello", "array_string" : ["hello"]}'), (4, '{"string" : "world", "array_string" : ["world"]}'), (5, '{"string" : "hello", "array_string" : ["hello"]}') """
// insert into test_variant_multi_index_nonCurrent values(1, '{"string" : "hello", "array_string" : ["hello"]}'), (2, '{"string" : "world", "array_string" : ["world"]}'), (3, '{"string" : "hello", "array_string" : ["hello"]}'), (4, '{"string" : "world", "array_string" : ["world"]}'), (5, '{"string" : "hello", "array_string" : ["hello"]}')
@@ -78,11 +79,11 @@
queryAndCheck("select count() from ${tableName} where var['string'] = 'hello' or var['string'] match_phrase 'world'", 0)
queryAndCheck("select count() from ${tableName} where array_contains(cast(var['array_string'] as array<text>), 'hello')", 22)
- sql """ alter table ${tableName} modify column var variant NULL """
+ sql """ alter table ${tableName} modify column var variant<properties ("variant_max_subcolumns_count" = "10")> NULL """
waitForSchemaChangeDone {
sql """ SHOW ALTER TABLE COLUMN WHERE TableName='${tableName}' ORDER BY createtime DESC LIMIT 1 """
- time 600
+ time 6000
}
queryAndCheck("select count() from ${tableName} where var['string'] match_phrase 'hello'", 22)
@@ -105,7 +106,8 @@
`var` variant<
MATCH_NAME 'string1' : string,
MATCH_NAME 'string2' : string,
- MATCH_NAME 'array_string' : array<string>
+ MATCH_NAME 'array_string' : array<string>,
+ properties("variant_max_subcolumns_count" = "10")
> NOT NULL,
INDEX idx_a_d_2 (var) USING INVERTED,
INDEX idx_a_d_3 (var) USING INVERTED PROPERTIES("field_pattern" = "string1","parser"="unicode", "support_phrase" = "true") COMMENT '',
@@ -113,7 +115,7 @@
INDEX idx_a_d_5 (var) USING INVERTED PROPERTIES("field_pattern" = "string2","parser"="unicode", "support_phrase" = "false") COMMENT '',
INDEX idx_a_d_6 (var) USING INVERTED PROPERTIES("field_pattern" = "string2") COMMENT '',
INDEX idx_a_d_7 (var) USING INVERTED PROPERTIES("field_pattern" = "array_string") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "10")"""
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"string1" : "hello", "array_string" : ["hello"], "string2" : "hello"}'),
(2, '{"string1" : "world", "array_string" : ["world"], "string2" : "world"}'),
diff --git a/regression-test/suites/variant_p0/predefine/test_prdefine_insert_into_select.groovy b/regression-test/suites/variant_p0/predefine/test_prdefine_insert_into_select.groovy
index 423b6be..cbeff1e 100644
--- a/regression-test/suites/variant_p0/predefine/test_prdefine_insert_into_select.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_prdefine_insert_into_select.groovy
@@ -16,6 +16,9 @@
// under the License.
suite("test_predefine_insert_into_select", "p0"){
+
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
+
sql "DROP TABLE IF EXISTS fromTable"
sql """CREATE TABLE fromTable (
`id` bigint NULL,
@@ -23,20 +26,21 @@
MATCH_NAME 'a' : date,
MATCH_NAME 'b' : decimal(20,12),
MATCH_NAME 'c' : datetime,
- MATCH_NAME 'd' : string
+ MATCH_NAME 'd' : string,
+ properties("variant_max_subcolumns_count" = "2")
> NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="d", "parser"="unicode", "support_phrase" = "true") COMMENT ''
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "2")"""
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into fromTable values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": 123, "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}');"""
sql """insert into fromTable values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": 123, "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}');"""
sql "DROP TABLE IF EXISTS toTable_without_define"
sql """CREATE TABLE toTable_without_define (
`id` bigint NULL,
- `var` variant NULL
+ `var` variant<properties("variant_max_subcolumns_count" = "2")> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "2")"""
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into toTable_without_define values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": 123, "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}');"""
sql """ insert into toTable_without_define select id, cast(var as string) from fromTable"""
@@ -57,14 +61,16 @@
`id` bigint NULL,
`var` variant<
MATCH_NAME 'a' : date,
- MATCH_NAME 'b' : decimal(20,12)
+ MATCH_NAME 'b' : decimal(20,12),
+ properties("variant_max_subcolumns_count" = "2")
> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "2")"""
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into toTable_with_define values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": 123, "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}');"""
sql """ insert into toTable_with_define select id, cast(var as string) from fromTable"""
+ findException = false
try {
sql """ insert into toTable_with_define select * from fromTable"""
} catch (Exception e) {
diff --git a/regression-test/suites/variant_p0/predefine/test_prdefine_typed_column_sparse_column.groovy b/regression-test/suites/variant_p0/predefine/test_prdefine_typed_column_sparse_column.groovy
index 336fe82..ce65a2f 100644
--- a/regression-test/suites/variant_p0/predefine/test_prdefine_typed_column_sparse_column.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_prdefine_typed_column_sparse_column.groovy
@@ -18,6 +18,7 @@
suite("test_predefine_typed_sparse", "p0"){
def tableName = "test_predefine_typed_sparse"
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
sql "DROP TABLE IF EXISTS ${tableName}"
sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
@@ -25,10 +26,11 @@
MATCH_NAME 'a' : date,
MATCH_NAME 'b' : decimal(20,12),
MATCH_NAME 'c' : datetime,
- MATCH_NAME 'd' : date
+ MATCH_NAME 'd' : date,
+ properties("variant_max_subcolumns_count" = "2")
> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "2")"""
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
for (int i = 0; i < 10; i++) {
sql """insert into ${tableName} values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": "2025-04-18", "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}');"""
diff --git a/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy b/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
index a029144..9c9aa0b 100644
--- a/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy
@@ -15,11 +15,32 @@
// specific language governing permissions and limitations
// under the License.
-suite("test_predefine_ddl", "p0"){
+suite("test_predefine_ddl", "p0") {
+
+ def timeout = 60000
+ def delta_time = 1000
+ def alter_res = "null"
+ def useTime = 0
+ def wait_for_latest_op_on_table_finish = { tableName, OpTimeout ->
+ for(int t = delta_time; t <= OpTimeout; t += delta_time){
+ alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${tableName}" ORDER BY CreateTime DESC LIMIT 1;"""
+ alter_res = alter_res.toString()
+ if(alter_res.contains("FINISHED")) {
+ sleep(3000) // wait change table state to normal
+ logger.info(tableName + " latest alter job finished, detail: " + alter_res)
+ break
+ }
+ useTime = t
+ sleep(delta_time)
+ }
+ assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout")
+ }
+
+ def tableName = "test_ddl_table"
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : string,
@@ -36,8 +57,8 @@
exception("can not find field pattern: bb* in column: var")
}
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : string,
@@ -49,8 +70,8 @@
BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant NOT NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") COMMENT '',
@@ -59,27 +80,35 @@
exception("can not find field pattern: ab in column: var")
}
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
- `var` variant NULL
+ `var` variant<properties("variant_max_subcolumns_count" = "10")> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
test {
- sql """ create index idx_ab on test_ddl_table (var) using inverted properties("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") """
+ sql """ create index idx_ab on ${tableName} (var) using inverted properties("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") """
+ exception("Can not create index with field pattern")
+ }
+
+ test {
+ sql """ create index idx_ab on ${tableName} (var) using inverted properties("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") """
exception("Can not create index with field pattern")
}
- sql """ alter table test_ddl_table add column var2 variant<'ab' : string> NULL """
+ sql """ alter table ${tableName} add column var2 variant<'ab' : string, properties("variant_max_subcolumns_count" = "5")> NULL """
+
+ sql """ alter table ${tableName} add column var3 variant<'ab' : string> NULL """
test {
- sql """ alter table test_ddl_table modify column var variant<'ab' : string> NULL """
+ sql """ alter table ${tableName} modify column var variant<'ab' : string> NULL """
exception("Can not modify variant column with children")
}
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : string,
@@ -91,20 +120,20 @@
BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
test {
- sql """ alter table test_ddl_table modify column var variant NULL """
+ sql """ alter table ${tableName} modify column var variant NULL """
exception("Can not modify variant column with children")
}
test {
- sql """ alter table test_ddl_table drop index idx_ab """
+ sql """ alter table ${tableName} drop index idx_ab """
exception("Can not drop index with field pattern")
}
- sql """ alter table test_ddl_table drop column var """
+ sql """ alter table ${tableName} drop column var """
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : json
@@ -116,22 +145,23 @@
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : int,
- MATCH_NAME 'ab' : string
+ MATCH_NAME 'ab' : string,
+ properties("variant_max_subcolumns_count" = "10", "variant_enable_typed_paths_to_sparse" = "true")
> NULL,
INDEX idx_ab (var) USING INVERTED PROPERTIES("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") COMMENT ''
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
- exception("Duplicate field name ab in struct variant<MATCH_NAME 'ab':int,MATCH_NAME 'ab':text>")
+ exception("""Duplicate field name ab in variant variant<MATCH_NAME 'ab':int,MATCH_NAME 'ab':text,PROPERTIES ("variant_max_subcolumns_count" = "10","variant_enable_typed_paths_to_sparse" = "true")>""")
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : decimalv2(22, 2)
@@ -142,8 +172,8 @@
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : datev1
@@ -154,8 +184,8 @@
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : datetimev1
@@ -165,19 +195,22 @@
exception("VARIANT unsupported sub-type: datetime")
}
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
- `id` bigint NULL,
- `var` variant<
- MATCH_NAME 'ab' : double
- > NULL,
- INDEX idx_ab (var) USING INVERTED PROPERTIES("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
+ test {
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'ab' : double
+ > NULL,
+ INDEX idx_ab (var) USING INVERTED PROPERTIES("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") COMMENT ''
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
+ exception("")
+ }
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : int
@@ -189,8 +222,8 @@
exception("column: var cannot have multiple inverted indexes with field pattern: ab")
}
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : string
@@ -201,8 +234,8 @@
BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : string
@@ -215,8 +248,8 @@
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : string
@@ -229,8 +262,8 @@
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant<
MATCH_NAME 'ab' : array<string>
@@ -243,8 +276,8 @@
}
test {
- sql "DROP TABLE IF EXISTS test_ddl_table"
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` string NULL,
INDEX idx_ab (var) USING INVERTED PROPERTIES("parser"="unicode", "support_phrase" = "true") COMMENT '',
@@ -255,7 +288,7 @@
}
test {
- sql """CREATE TABLE test_ddl_table (
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant <'c' :char(10)> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
@@ -263,21 +296,70 @@
exception("VARIANT unsupported sub-type: char(10)")
}
- test {
- sql """CREATE TABLE test_ddl_table (
- `id` bigint NULL,
- `var` variant <'c' :array<char(10)>> NULL
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "inverted_index_storage_format" = "v1")"""
- exception("VARIANT unsupported sub-type: array<char(10)>")
- }
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant <'c' :text, properties("variant_max_subcolumns_count" = "10")> NULL
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1")"""
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant <properties("variant_max_subcolumns_count" = "10")> NULL
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1")"""
+
test {
- sql """CREATE TABLE test_ddl_table (
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
- `var` variant <'c' :array<array<int>>> NULL
+ `var1` variant <properties("variant_max_subcolumns_count" = "10")> NULL,
+ `var2` variant <properties("variant_max_subcolumns_count" = "0")> NULL
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "inverted_index_storage_format" = "v1")"""
- exception("VARIANT unsupported sub-type: array<array<int>>")
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1")"""
+ exception("The variant_max_subcolumns_count must either be 0 in all columns, or greater than 0 in all columns")
}
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql "set global_variant_max_subcolumns_count = 10"
+ sql "set global_variant_enable_typed_paths_to_sparse = false"
+ sql """CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant NULL
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1")"""
+
+ qt_sql "desc ${tableName}"
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant NULL,
+ INDEX idx_ab (var) USING INVERTED PROPERTIES("parser"="unicode", "support_phrase" = "true") COMMENT ''
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1")"""
+
+ sql "create index idx_ab2 on ${tableName} (var) using inverted"
+ wait_for_latest_op_on_table_finish("${tableName}", timeout)
+
+ sql """alter table ${tableName} add column var2 variant<properties("variant_max_subcolumns_count" = "15")> NULL"""
+ wait_for_latest_op_on_table_finish("${tableName}", timeout)
+
+ test {
+ sql """alter table ${tableName} add column var3 variant<properties("variant_max_subcolumns_count" = "0")> NULL"""
+ exception("The variant_max_subcolumns_count must either be 0 in all columns or greater than 0 in all columns")
+ }
+
+ sql "alter table ${tableName} add column var3 variant NULL"
+ wait_for_latest_op_on_table_finish("${tableName}", timeout)
+
+ qt_sql "desc ${tableName}"
+
+ sql "create index idx_ab3 on ${tableName} (var2) using inverted"
+ wait_for_latest_op_on_table_finish("${tableName}", timeout)
+
+ sql "create index idx_ab4 on ${tableName} (var2) using inverted properties(\"parser\"=\"unicode\")"
+ wait_for_latest_op_on_table_finish("${tableName}", timeout)
}
\ No newline at end of file
diff --git a/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy b/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy
index 278527b..bf2edc3 100644
--- a/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy
@@ -19,6 +19,7 @@
sql """ set describe_extend_variant_column = true """
sql """ set enable_match_without_inverted_index = false """
sql """ set enable_common_expr_pushdown = true """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
def count = new Random().nextInt(5) + 1
def tableName = "base_match_name_variant_test"
sql "DROP TABLE IF EXISTS ${tableName}"
@@ -29,14 +30,15 @@
MATCH_NAME '*cc' : string,
MATCH_NAME 'b?b' : string,
MATCH_NAME_GLOB 'bb*' : string,
- MATCH_NAME_GLOB 'bx?' : string
+ MATCH_NAME_GLOB 'bx?' : string,
+ properties("variant_max_subcolumns_count" = "${count}")
> NOT NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="ab", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_bb (var) USING INVERTED PROPERTIES("field_pattern"="*cc", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_b_b (var) USING INVERTED PROPERTIES("field_pattern"="b?b", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_bb_glob (var) USING INVERTED PROPERTIES("field_pattern"="bb*", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_bx_glob (var) USING INVERTED PROPERTIES("field_pattern"="bx?", "parser"="unicode", "support_phrase" = "true") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${count}")"""
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"ab" : 123, "*cc" : 123, "b?b" : 123, "bb3" : 123, "bxx" : 123}')"""
sql """insert into ${tableName} values(2, '{"ab" : 456, "*cc" : 456, "b?b" : 456, "bb3" : 456, "bxx" : 456}')"""
@@ -72,14 +74,15 @@
MATCH_NAME 'a.*' : string,
MATCH_NAME_GLOB 'a.b[0-9]' : string,
MATCH_NAME_GLOB 'a.b?c' : string,
- MATCH_NAME_GLOB 'a.c*' : string
+ MATCH_NAME_GLOB 'a.c*' : string,
+ properties("variant_max_subcolumns_count" = "${count}")
> NOT NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="a.b", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_bb (var) USING INVERTED PROPERTIES("field_pattern"="a.*", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_b_b (var) USING INVERTED PROPERTIES("field_pattern"="a.b[0-9]", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_bb_glob (var) USING INVERTED PROPERTIES("field_pattern"="a.b?c", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_bx_glob (var) USING INVERTED PROPERTIES("field_pattern"="a.c*", "parser"="unicode", "support_phrase" = "true") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${count}")"""
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"a" : {"b" : 789, "*" : 789, "b1" : 789, "bxc" : 789, "c2323" : 789}}')"""
sql """insert into ${tableName} values(2, '{"a" : {"b" : 111, "*" : 111, "b1" : 111, "bxc" : 111, "c2323" : 111}}')"""
diff --git a/regression-test/suites/variant_p0/predefine/test_predefine_schema_change.groovy b/regression-test/suites/variant_p0/predefine/test_predefine_schema_change.groovy
index 6459345..afb744e 100644
--- a/regression-test/suites/variant_p0/predefine/test_predefine_schema_change.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_predefine_schema_change.groovy
@@ -17,6 +17,7 @@
suite("test_predefine_schema_change", "p0"){
def tableName = "test_predefine_schema_change"
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
sql "DROP TABLE IF EXISTS ${tableName}"
sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
@@ -24,12 +25,13 @@
MATCH_NAME 'a' : date,
MATCH_NAME 'b' : decimal(20,12),
MATCH_NAME 'c' : datetime,
- MATCH_NAME 'd' : string
+ MATCH_NAME 'd' : string,
+ properties("variant_max_subcolumns_count" = "2")
> NULL,
`col1` varchar(100) NOT NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="d", "parser"="unicode", "support_phrase" = "true") COMMENT ''
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`)
- BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "2")"""
+ BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": 123, "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}', 'col');"""
sql """insert into ${tableName} values(1, '{"a": "2025-04-16", "b": 123.123456789012, "c": "2025-04-17T09:09:09Z", "d": 123, "e": "2025-04-19", "f": "2025-04-20", "g": "2025-04-21", "h": "2025-04-22", "i": "2025-04-23", "j": "2025-04-24", "k": "2025-04-25", "l": "2025-04-26", "m": "2025-04-27", "n": "2025-04-28", "o": "2025-04-29", "p": "2025-04-30"}', 'col');"""
diff --git a/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy b/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
index 5bbb969..d9ab4a8 100644
--- a/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
@@ -19,6 +19,7 @@
sql """ set describe_extend_variant_column = true """
sql """ set enable_match_without_inverted_index = false """
sql """ set enable_common_expr_pushdown = true """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
def tableName = "test_variant_predefine_index_type"
sql "DROP TABLE IF EXISTS ${tableName}"
@@ -27,12 +28,13 @@
`var` variant <
MATCH_NAME 'path.int' : int,
MATCH_NAME 'path.decimal' : DECIMAL(15, 12),
- MATCH_NAME 'path.string' : string
+ MATCH_NAME 'path.string' : string,
+ properties("variant_max_subcolumns_count" = "10")
> NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="path.int", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_a_c (var) USING INVERTED PROPERTIES("field_pattern"="path.decimal") COMMENT '',
INDEX idx_a_d (var) USING INVERTED PROPERTIES("field_pattern"="path.string", "parser"="unicode", "support_phrase" = "true") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "10")"""
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"path" : {"int" : 123, "decimal" : 123.123456789012, "string" : "hello"}}'),
(2, '{"path" : {"int" : 456, "decimal" : 456.456789123456, "string" : "world"}}'),
@@ -69,7 +71,8 @@
`id` int NOT NULL,
`overflow_properties` variant<
MATCH_NAME 'color' : text,
- MATCH_NAME 'tags' : array<string>
+ MATCH_NAME 'tags' : array<string>,
+ properties("variant_max_subcolumns_count" = "10")
> NULL,
INDEX idx1 (`overflow_properties`) USING INVERTED PROPERTIES( "field_pattern" = "color", "support_phrase" = "true", "parser" = "english", "lower_case" = "true"),
INDEX idx2 (`overflow_properties`) USING INVERTED PROPERTIES( "field_pattern" = "tags", "support_phrase" = "true", "parser" = "english", "lower_case" = "true")
@@ -87,7 +90,6 @@
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728",
- "variant_max_subcolumns_count" = "10",
"disable_auto_compaction" = "true"
);
"""
diff --git a/regression-test/suites/variant_p0/predefine/test_predefine_type_multi_index.groovy b/regression-test/suites/variant_p0/predefine/test_predefine_type_multi_index.groovy
index 4f65208..525951b 100644
--- a/regression-test/suites/variant_p0/predefine/test_predefine_type_multi_index.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_predefine_type_multi_index.groovy
@@ -19,17 +19,19 @@
sql """ set describe_extend_variant_column = true """
sql """ set enable_match_without_inverted_index = false """
sql """ set enable_common_expr_pushdown = true """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
def tableName = "test_variant_predefine_type_multi_index"
sql "DROP TABLE IF EXISTS ${tableName}"
sql """CREATE TABLE ${tableName} (
`id` bigint NULL,
`var` variant <
- MATCH_NAME 'path.string' : string
+ MATCH_NAME 'path.string' : string,
+ properties("variant_max_subcolumns_count" = "10")
> NULL,
INDEX idx_a_d (var) USING INVERTED PROPERTIES("field_pattern"="path.string", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_a_d_2 (var) USING INVERTED PROPERTIES("field_pattern"="path.string") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "10")"""
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")"""
sql """insert into ${tableName} values(1, '{"path" : {"int" : 123, "decimal" : 123.123456789012, "string" : "hello"}}'),
(2, '{"path" : {"int" : 456, "decimal" : 456.456789123456, "string" : "world"}}'),
diff --git a/regression-test/suites/variant_p0/predefine/test_types_with_indexes_profile.groovy b/regression-test/suites/variant_p0/predefine/test_types_with_indexes_profile.groovy
index d48f9b9..31e9d2a 100644
--- a/regression-test/suites/variant_p0/predefine/test_types_with_indexes_profile.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_types_with_indexes_profile.groovy
@@ -18,6 +18,7 @@
sql """ set describe_extend_variant_column = true """
sql """ set enable_match_without_inverted_index = false """
sql """ set enable_common_expr_pushdown = true """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
def load_json_data = {table_name, file_name ->
// load the json data
@@ -66,7 +67,8 @@
'ipv4_*':ipv4,
'ipv6_*':ipv6,
'largeint_*':largeint,
- 'char_*': text
+ 'char_*': text,
+ properties("variant_max_subcolumns_count" = "2")
> NOT NULL,
INDEX idx_a_b (var) USING INVERTED PROPERTIES("field_pattern"="array_decimal_*") COMMENT '',
INDEX idx_a_c (var) USING INVERTED PROPERTIES("field_pattern"="array_ipv6_*") COMMENT '',
@@ -81,7 +83,7 @@
INDEX idx_a_l (var) USING INVERTED PROPERTIES("field_pattern"="ipv6_*") COMMENT '',
INDEX idx_a_m (var) USING INVERTED PROPERTIES("field_pattern"="largeint_*") COMMENT '',
INDEX idx_a_n (var) USING INVERTED PROPERTIES("field_pattern"="char_*") COMMENT ''
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "2")
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")
"""
sql """
diff --git a/regression-test/suites/variant_p0/predefine/test_variant_compaction_with_sparse_limit.groovy b/regression-test/suites/variant_p0/predefine/test_variant_compaction_with_sparse_limit.groovy
index 1d97d8f..0ab363d 100644
--- a/regression-test/suites/variant_p0/predefine/test_variant_compaction_with_sparse_limit.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_variant_compaction_with_sparse_limit.groovy
@@ -46,10 +46,6 @@
}
set_be_config("variant_max_sparse_column_statistics_size", "2")
- int max_subcolumns_count = Math.floor(Math.random() * 5)
- if (max_subcolumns_count == 1) {
- max_subcolumns_count = 0
- }
def create_table = { tableName, buckets="auto", key_type="DUPLICATE" ->
sql "DROP TABLE IF EXISTS ${tableName}"
def var_def = "variant <'sala' : int, 'ddd' : double, 'z' : double>"
@@ -63,7 +59,7 @@
)
${key_type} KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS ${buckets}
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true");
"""
}
def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"]
diff --git a/regression-test/suites/variant_p0/predefine/test_variant_is_null_expr.groovy b/regression-test/suites/variant_p0/predefine/test_variant_is_null_expr.groovy
index 4010c7e..9ac9cdd 100644
--- a/regression-test/suites/variant_p0/predefine/test_variant_is_null_expr.groovy
+++ b/regression-test/suites/variant_p0/predefine/test_variant_is_null_expr.groovy
@@ -19,7 +19,9 @@
suite("test_variant_is_null_expr", "p0, nonConcurrent") {
// define a sql table
def testTable = "test_variant_is_null_expr"
- int max_subcolumns_count = Math.floor(Math.random() * 5) + 1
+
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
+
sql """ DROP TABLE IF EXISTS ${testTable} """
sql """
CREATE TABLE ${testTable} (
@@ -30,14 +32,13 @@
> NULL COMMENT "",
INDEX idx_a (v) USING INVERTED PROPERTIES("field_pattern"= "string*", "parser"="unicode", "support_phrase" = "true") COMMENT '',
INDEX idx_b (v) USING INVERTED PROPERTIES("field_pattern"= "string*"),
- INDEX idx_c (v) USING INVERTED PROPERTIES("field_pattern"= "int*"),
+ INDEX idx_c (v) USING INVERTED PROPERTIES("field_pattern"= "int*")
) ENGINE=OLAP
DUPLICATE KEY(`k`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
- "replication_allocation" = "tag.location.default: 1",
- "variant_max_subcolumns_count" = "${max_subcolumns_count}"
+ "replication_allocation" = "tag.location.default: 1"
);
"""
diff --git a/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy b/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
index 86cdbfc..032dfba 100644
--- a/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
+++ b/regression-test/suites/variant_p0/predefine/variant_hirachinal.groovy
@@ -18,11 +18,12 @@
suite("regression_test_variant_predefine_hirachinal", "variant_type"){
def table_name = "var_rs"
sql "DROP TABLE IF EXISTS ${table_name}"
+ int count = new Random().nextInt(10) + 1
sql """
CREATE TABLE IF NOT EXISTS ${table_name} (
k bigint,
- v variant<'a' : largeint, 'c.d' : text>
+ v variant<'a' : largeint, 'c.d' : text, properties("variant_max_subcolumns_count" = "${count}")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
diff --git a/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy b/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy
index bcb0d38..edb25b5 100644
--- a/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy
+++ b/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy
@@ -27,7 +27,9 @@
`INGESTIONTIMESTAMP` bigint NOT NULL,
`PROCESSEDTIMESTAMP` bigint NOT NULL,
`VERSION` bigint NULL DEFAULT "0",
- `OVERFLOWPROPERTIES` variant<'a' : int, 'b' : string, 'c' : largeint> NULL,
+ `OVERFLOWPROPERTIES` variant<'a' : int, 'b' : string, 'c' : largeint,
+ properties("variant_max_subcolumns_count" = "100")
+ > NULL,
INDEX objects_properties_idx (`OVERFLOWPROPERTIES`) USING INVERTED COMMENT 'This is an inverted index on all properties of the object'
) ENGINE=OLAP
UNIQUE KEY(`PORTALID`, `OBJECTTYPEID`, `OBJECTIDHASH`, `OBJECTID`)
@@ -36,7 +38,6 @@
"replication_allocation" = "tag.location.default: 1",
"enable_unique_key_merge_on_write" = "true",
"function_column.sequence_col" = "VERSION",
- "variant_max_subcolumns_count" = "100",
"disable_auto_compaction" = "true"
);
"""
diff --git a/regression-test/suites/variant_p0/rqg/fix_rqg1.groovy b/regression-test/suites/variant_p0/rqg/fix_rqg1.groovy
index 62f0c22..e66b279 100644
--- a/regression-test/suites/variant_p0/rqg/fix_rqg1.groovy
+++ b/regression-test/suites/variant_p0/rqg/fix_rqg1.groovy
@@ -34,7 +34,6 @@
"storage_format" = "V2",
"inverted_index_storage_format" = "V2",
"light_schema_change" = "true",
- "variant_max_subcolumns_count" = "0",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
diff --git a/regression-test/suites/variant_p0/rqg/rqg7.sql b/regression-test/suites/variant_p0/rqg/rqg7.sql
index 3be1416..cebd266 100644
--- a/regression-test/suites/variant_p0/rqg/rqg7.sql
+++ b/regression-test/suites/variant_p0/rqg/rqg7.sql
@@ -13,7 +13,7 @@
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `table_100_undef_partitions2_keys3_properties4_distributed_by5` (
`pk` int NULL,
- `var` variant<MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6> NULL,
+ `var` variant<MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6, PROPERTIES("variant_max_subcolumns_count"="2048")> NULL,
INDEX idx_col_boolean_undef_signed (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_boolean_undef_signed"),
INDEX idx_col_boolean_undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_boolean_undef_signed_not_null"),
INDEX idx_col_tinyint_undef_signed (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_tinyint_undef_signed"),
@@ -56,7 +56,6 @@
"light_schema_change" = "true",
"replication_num" = "1",
"disable_auto_compaction" = "false",
-"variant_max_subcolumns_count" = "2048",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728"
@@ -82,7 +81,7 @@
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `table_100_undef_partitions2_keys3_properties4_distributed_by52` (
`pk` int NULL,
- `var` variant<MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6> NULL,
+ `var` variant<MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6,PROPERTIES("variant_max_subcolumns_count"="2048")> NULL,
INDEX idx_col_tinyint_undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_tinyint_undef_signed_not_null"),
INDEX idx_col_decimal_5_0__undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_decimal_5_0__undef_signed_not_null"),
INDEX idx_col_boolean_undef_signed (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_boolean_undef_signed"),
@@ -125,7 +124,6 @@
"light_schema_change" = "true",
"replication_num" = "1",
"disable_auto_compaction" = "false",
-"variant_max_subcolumns_count" = "2048",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728"
@@ -151,7 +149,7 @@
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `table_100_undef_partitions2_keys3_properties4_distributed_by53` (
`pk` int NULL,
- `var` variant<MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6> NULL,
+ `var` variant<MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6, PROPERTIES("variant_max_subcolumns_count"="2048")> NULL,
INDEX idx_col_bigint_undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_bigint_undef_signed_not_null"),
INDEX idx_col_boolean_undef_signed (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_boolean_undef_signed"),
INDEX idx_col_boolean_undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_boolean_undef_signed_not_null"),
@@ -194,7 +192,6 @@
"light_schema_change" = "true",
"replication_num" = "1",
"disable_auto_compaction" = "false",
-"variant_max_subcolumns_count" = "2048",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728"
@@ -220,7 +217,7 @@
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `table_100_undef_partitions2_keys3_properties4_distributed_by54` (
`pk` int NULL,
- `var` variant<MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6> NULL,
+ `var` variant<MATCH_NAME_GLOB 'col_bigint_undef_signed_not_null':bigint,MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed_not_null':decimalv3(12,2),MATCH_NAME_GLOB 'col_datetime_undef_signed_not_null':datetimev2(0),MATCH_NAME_GLOB 'col_boolean_undef_signed':boolean,MATCH_NAME_GLOB 'col_boolean_undef_signed_not_null':boolean,MATCH_NAME_GLOB 'col_tinyint_undef_signed':tinyint,MATCH_NAME_GLOB 'col_tinyint_undef_signed_not_null':tinyint,MATCH_NAME_GLOB 'col_smallint_undef_signed':smallint,MATCH_NAME_GLOB 'col_smallint_undef_signed_not_null':smallint,MATCH_NAME_GLOB 'col_int_undef_signed':int,MATCH_NAME_GLOB 'col_int_undef_signed_not_null':int,MATCH_NAME_GLOB 'col_bigint_undef_signed':bigint,MATCH_NAME_GLOB 'col_largeint_undef_signed':largeint,MATCH_NAME_GLOB 'col_largeint_undef_signed_not_null':largeint,MATCH_NAME_GLOB 'col_float_undef_signed':float,MATCH_NAME_GLOB 'col_float_undef_signed_not_null':float,MATCH_NAME_GLOB 'col_double_undef_signed':double,MATCH_NAME_GLOB 'col_double_undef_signed_not_null':double,MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_5_0__undef_signed_not_null':decimalv3(5,0),MATCH_NAME_GLOB 'col_decimal_12_2__undef_signed':decimalv3(12,2),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_32_6__undef_signed_not_null':decimalv3(32,6),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed':decimalv3(76,56),MATCH_NAME_GLOB 'col_decimal_76__56__undef_signed_not_null':decimalv3(76,56),MATCH_NAME_GLOB 'col_date_undef_signed':datev2,MATCH_NAME_GLOB 'col_date_undef_signed_not_null':datev2,MATCH_NAME_GLOB 'col_datetime_undef_signed':datetimev2(0),MATCH_NAME_GLOB 'col_datetime_3__undef_signed':datetimev2(3),MATCH_NAME_GLOB 'col_datetime_3__undef_signed_not_null':datetimev2(3),MATCH_NAME_GLOB 'col_char_10__undef_signed':text,MATCH_NAME_GLOB 'col_char_10__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_char_25__undef_signed':text,MATCH_NAME_GLOB 'col_char_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_25__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed':text,MATCH_NAME_GLOB 'col_varchar_100__undef_signed_not_null':text,MATCH_NAME_GLOB 'col_string_undef_signed':text,MATCH_NAME_GLOB 'col_string_undef_signed_not_null':text,MATCH_NAME_GLOB 'col_ipv4_undef_signed':ipv4,MATCH_NAME_GLOB 'col_ipv4_undef_signed_not_null':ipv4,MATCH_NAME_GLOB 'col_ipv6_undef_signed':ipv6,MATCH_NAME_GLOB 'col_ipv6_undef_signed_not_null':ipv6, PROPERTIES("variant_max_subcolumns_count"="2048")> NULL,
INDEX idx_col_bigint_undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_bigint_undef_signed_not_null"),
INDEX idx_col_decimal_12_2__undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_decimal_12_2__undef_signed_not_null"),
INDEX idx_col_datetime_undef_signed_not_null (`var`) USING INVERTED PROPERTIES("field_pattern" = "col_datetime_undef_signed_not_null"),
@@ -263,7 +260,6 @@
"light_schema_change" = "true",
"replication_num" = "1",
"disable_auto_compaction" = "false",
-"variant_max_subcolumns_count" = "2048",
"enable_single_replica_compaction" = "false",
"group_commit_interval_ms" = "10000",
"group_commit_data_bytes" = "134217728"
diff --git a/regression-test/suites/variant_p0/schema_change/schema_change.groovy b/regression-test/suites/variant_p0/schema_change/schema_change.groovy
index 9c5011a..2e8a094 100644
--- a/regression-test/suites/variant_p0/schema_change/schema_change.groovy
+++ b/regression-test/suites/variant_p0/schema_change/schema_change.groovy
@@ -16,6 +16,7 @@
// under the License.
suite("regression_test_variant_schema_change", "variant_type"){
+
def table_name = "variant_schema_change"
sql "DROP TABLE IF EXISTS ${table_name}"
sql """
diff --git a/regression-test/suites/variant_p0/schema_change/test_add_multi_var_mulit_indexes.groovy b/regression-test/suites/variant_p0/schema_change/test_add_multi_var_mulit_indexes.groovy
new file mode 100644
index 0000000..3d01fb5
--- /dev/null
+++ b/regression-test/suites/variant_p0/schema_change/test_add_multi_var_mulit_indexes.groovy
@@ -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.
+
+
+suite("regression_test_variant_add_multi_var_mulit_indexes", "variant_type"){
+
+
+ def timeout = 60000
+ def delta_time = 1000
+ def alter_res = "null"
+ def useTime = 0
+ def wait_for_latest_op_on_table_finish = { tableName, OpTimeout ->
+ for(int t = delta_time; t <= OpTimeout; t += delta_time){
+ alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${tableName}" ORDER BY CreateTime DESC LIMIT 1;"""
+ alter_res = alter_res.toString()
+ if(alter_res.contains("FINISHED")) {
+ sleep(3000) // wait change table state to normal
+ logger.info(tableName + " latest alter job finished, detail: " + alter_res)
+ break
+ }
+ useTime = t
+ sleep(delta_time)
+ }
+ assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout")
+ }
+ def table_name = "variant_add_multi_var_mulit_indexes"
+ int count = new Random().nextInt(10) + 3
+ sql "set global_variant_max_subcolumns_count = ${count}"
+ sql "set global_variant_enable_typed_paths_to_sparse = false"
+ sql "DROP TABLE IF EXISTS ${table_name}"
+ sql """
+ CREATE TABLE IF NOT EXISTS ${table_name} (
+ k bigint,
+ v variant<properties("variant_max_subcolumns_count" = "${count}")>
+ )
+ DUPLICATE KEY(`k`)
+ DISTRIBUTED BY HASH(k) BUCKETS 1
+ properties("replication_num" = "1", "disable_auto_compaction" = "true");
+ """
+ sql """insert into ${table_name} values (0, '{"a" : 12345,"b" : 2}')"""
+ test {
+ sql """alter table ${table_name} add column var2 variant<properties("variant_max_subcolumns_count" = "0")> NULL"""
+ exception("The variant_max_subcolumns_count must either be 0 in all columns or greater than 0 in all columns")
+ }
+
+ sql """ alter table ${table_name} add column v2 variant<'a': string, 'b': string> NULL"""
+
+ sql """insert into ${table_name} values (1, '{"a" : 12345,"b" : 2}', '{"a" : 12345,"b" : 3}')"""
+
+ sql """alter table ${table_name} add column v3 variant NULL"""
+
+ sql """insert into ${table_name} values (2, '{"a" : 12345,"b" : 2}', '{"a" : 56789,"b" : 3}', '{"a" : 12345,"b" : 2}')"""
+
+ sql """alter table ${table_name} add index idx_v2(v2) using inverted"""
+ wait_for_latest_op_on_table_finish(table_name, timeout)
+
+ sql """alter table ${table_name} add index idx_v3(v3) using inverted"""
+ wait_for_latest_op_on_table_finish(table_name, timeout)
+
+ sql """alter table ${table_name} add index idx_v4(v2) using inverted properties("parser" = "unicode")"""
+ wait_for_latest_op_on_table_finish(table_name, timeout)
+
+ sql """alter table ${table_name} add index idx_v5(v3) using inverted properties("parser" = "unicode", "support_phrase" = "true")"""
+ wait_for_latest_op_on_table_finish(table_name, timeout)
+
+ sql """insert into ${table_name} values (3, '{"a" : 12345,"b" : 2}', '{"a" : 12345,"b" : 2}', '{"a" : 56789,"b" : 2}')"""
+
+ sql """insert into ${table_name} values (4, '{"a" : 12345,"b" : 2}', '{"a" : 56789,"b" : 2}', '{"a" : 12345,"b" : 3}')"""
+
+ trigger_and_wait_compaction("${table_name}", "full")
+
+ qt_sql "select * from ${table_name} order by k"
+
+ sql """ set enable_match_without_inverted_index = false"""
+ sql """ set enable_inverted_index_query = true"""
+ sql """ set enable_common_expr_pushdown = true"""
+ sql """ set enable_common_expr_pushdown_for_inverted_index = true"""
+
+ qt_sql "select * from ${table_name} where cast(v2['a'] as string) match '12345' order by k"
+ qt_sql "select * from ${table_name} where cast(v2['b'] as string) match '2' order by k"
+ qt_sql "select * from ${table_name} where cast(v3['b'] as int) = 2 order by k"
+
+
+}
\ No newline at end of file
diff --git a/regression-test/suites/variant_p0/test_sub_path_pruning.groovy b/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
index a553c17..28960d2 100644
--- a/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
+++ b/regression-test/suites/variant_p0/test_sub_path_pruning.groovy
@@ -17,6 +17,9 @@
suite("variant_sub_path_pruning", "variant_type"){
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
+ sql """ set global_variant_max_subcolumns_count = 0 """
+
sql "DROP TABLE IF EXISTS pruning_test"
sql """
@@ -26,7 +29,7 @@
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id)
- PROPERTIES("replication_num"="1", "variant_max_subcolumns_count" = "0")
+ PROPERTIES("replication_num"="1")
"""
sql """
diff --git a/regression-test/suites/variant_p0/test_variant_float_double_index.groovy b/regression-test/suites/variant_p0/test_variant_float_double_index.groovy
index 5b978f9..5fdb387 100644
--- a/regression-test/suites/variant_p0/test_variant_float_double_index.groovy
+++ b/regression-test/suites/variant_p0/test_variant_float_double_index.groovy
@@ -23,6 +23,7 @@
sql """ set enable_match_without_inverted_index = false """
sql """ set enable_common_expr_pushdown = true """
sql """ set inverted_index_skip_threshold = 0 """
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
def queryAndCheck = { String sqlQuery, int expectedFilteredRows = -1, boolean checkFilterUsed = true ->
def checkpoints_name = "segment_iterator.inverted_index.filtered_rows"
@@ -43,9 +44,9 @@
sql """
CREATE TABLE ${tableName} (
`id` int(11) NULL,
- `v` variant,
+ `v` variant<properties("variant_max_subcolumns_count" = "10")>,
INDEX idx_variant (v) USING INVERTED
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "10")
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")
"""
sql """ insert into ${tableName} values (1, '{"float_col" : 1.5, "double_col" : 1.5239849328948}'), (2, '{"float_col" : 2.23, "double_col" : 2.239849328948}'), (3, '{"float_col" : 3.02, "double_col" : 3.029849328948}') """
@@ -96,11 +97,12 @@
`id` int(11) NULL,
`v` variant<
MATCH_NAME 'float_col': float,
- MATCH_NAME 'double_col': double
+ MATCH_NAME 'double_col': double,
+ properties("variant_max_subcolumns_count" = "10")
>,
INDEX idx_variant (v) USING INVERTED PROPERTIES ( "field_pattern" = "float_col"),
INDEX idx_variant_double (v) USING INVERTED PROPERTIES ( "field_pattern" = "double_col")
- ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true", "variant_max_subcolumns_count" = "10")
+ ) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "disable_auto_compaction" = "true")
"""
sql """ insert into ${tableName} values (1, '{"float_col" : 1.5, "double_col" : 1.5239849328948}'), (2, '{"float_col" : 2.23, "double_col" : 2.239849328948}'), (3, '{"float_col" : 3.02, "double_col" : 3.029849328948}') """
diff --git a/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy b/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
index bb6d4de..039d957 100644
--- a/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
+++ b/regression-test/suites/variant_p0/test_variant_is_null_expr.groovy
@@ -24,15 +24,14 @@
sql """
CREATE TABLE ${testTable} (
`k` int(11) NULL COMMENT "",
- `v` variant NULL COMMENT "",
+ `v` variant<properties("variant_max_subcolumns_count" = "10")> NULL COMMENT "",
INDEX idx_a (v) USING INVERTED
) ENGINE=OLAP
DUPLICATE KEY(`k`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
- "replication_allocation" = "tag.location.default: 1",
- "variant_max_subcolumns_count" = "10"
+ "replication_allocation" = "tag.location.default: 1"
);
"""
diff --git a/regression-test/suites/variant_p0/tpch/load.groovy b/regression-test/suites/variant_p0/tpch/load.groovy
index 44ef25e..b85ad0d 100644
--- a/regression-test/suites/variant_p0/tpch/load.groovy
+++ b/regression-test/suites/variant_p0/tpch/load.groovy
@@ -39,8 +39,8 @@
sql "DROP TABLE IF EXISTS ${tableName}"
int max_subcolumns_count = Math.floor(Math.random() * 7)
def var_def = "variant"
- if (max_subcolumns_count % 2) {
- var_def = "variant<'O_CLERK' : string, 'C_COMMENT' : string, 'L_RETURNFLAG' : string, 'S_COMMENT' : string, 'S_ACCTBAL' : double>"
+ if (max_subcolumns_count % 2 == 0) {
+ var_def = "variant<'O_CLERK' : string, 'C_COMMENT' : string, 'L_RETURNFLAG' : string, 'S_COMMENT' : string, 'S_ACCTBAL' : double, properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\", \"variant_enable_typed_paths_to_sparse\" = \"false\")>"
}
sql """
CREATE TABLE IF NOT EXISTS ${tableName} (
@@ -49,7 +49,7 @@
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY RANDOM BUCKETS 5
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "${max_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
streamLoad {
// a default db 'regression_test' is specified in
diff --git a/regression-test/suites/variant_p0/variant_with_mow.groovy b/regression-test/suites/variant_p0/variant_with_mow.groovy
index 459a406..d488826 100644
--- a/regression-test/suites/variant_p0/variant_with_mow.groovy
+++ b/regression-test/suites/variant_p0/variant_with_mow.groovy
@@ -27,7 +27,7 @@
`INGESTIONTIMESTAMP` bigint NOT NULL,
`PROCESSEDTIMESTAMP` bigint NOT NULL,
`VERSION` bigint NULL DEFAULT "0",
- `OVERFLOWPROPERTIES` variant NULL,
+ `OVERFLOWPROPERTIES` variant<properties("variant_max_subcolumns_count" = "100")> NULL,
INDEX objects_properties_idx (`OVERFLOWPROPERTIES`) USING INVERTED COMMENT 'This is an inverted index on all properties of the object'
) ENGINE=OLAP
UNIQUE KEY(`PORTALID`, `OBJECTTYPEID`, `OBJECTIDHASH`, `OBJECTID`)
@@ -36,7 +36,6 @@
"replication_allocation" = "tag.location.default: 1",
"enable_unique_key_merge_on_write" = "true",
"function_column.sequence_col" = "VERSION",
- "variant_max_subcolumns_count" = "100",
"disable_auto_compaction" = "true"
);
"""
diff --git a/regression-test/suites/variant_p0/with_index/bloom_filter.groovy b/regression-test/suites/variant_p0/with_index/bloom_filter.groovy
index 328c65f..eddbf94 100644
--- a/regression-test/suites/variant_p0/with_index/bloom_filter.groovy
+++ b/regression-test/suites/variant_p0/with_index/bloom_filter.groovy
@@ -21,11 +21,11 @@
sql """
CREATE TABLE IF NOT EXISTS var_with_bloom_filter (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "10")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 1
- properties("replication_num" = "1", "bloom_filter_columns" = "v", "bloom_filter_fpp" = "0.0001", "variant_max_subcolumns_count" = "10");
+ properties("replication_num" = "1", "bloom_filter_columns" = "v", "bloom_filter_fpp" = "0.0001");
"""
sql """insert into var_with_bloom_filter values (1, '{"a" : 123456}')"""
sql """insert into var_with_bloom_filter values (2, '{"a" : 789111}')"""
diff --git a/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy b/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
index f567c7e..6162352 100644
--- a/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
+++ b/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
@@ -36,7 +36,8 @@
`apply_date` date NULL COMMENT '',
`id` varchar(60) NOT NULL COMMENT '',
`inventors` variant<
- MATCH_NAME 'inventors' : array<text>
+ MATCH_NAME 'inventors' : array<text>,
+ properties("variant_max_subcolumns_count" = "10")
> NULL COMMENT '',
INDEX index_inverted_inventors(inventors) USING INVERTED PROPERTIES( "field_pattern" = "inventors", "support_phrase" = "true", "parser" = "english", "lower_case" = "true") COMMENT ''
) ENGINE=OLAP
@@ -50,8 +51,7 @@
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false",
- "inverted_index_storage_format" = "$storageFormat",
- "variant_max_subcolumns_count" = "10"
+ "inverted_index_storage_format" = "$storageFormat"
);
"""
diff --git a/regression-test/suites/variant_p0/with_index/test_array_index_write.groovy b/regression-test/suites/variant_p0/with_index/test_array_index_write.groovy
index cb1100a..9583d77 100644
--- a/regression-test/suites/variant_p0/with_index/test_array_index_write.groovy
+++ b/regression-test/suites/variant_p0/with_index/test_array_index_write.groovy
@@ -20,7 +20,7 @@
def create_variant_index_table = { testTablex, parser ->
def stmt = "CREATE TABLE IF NOT EXISTS " + testTablex + "(\n" +
" k1 INT NULL,\n" +
- " c_arr VARIANT<'c_arr' : array<text>> NULL COMMENT '',\n"
+ " c_arr VARIANT<'c_arr' : array<text>, properties(\"variant_max_subcolumns_count\" = \"10\")> NULL COMMENT '',\n"
String strTmp = parser == "" ? "INDEX index_inverted_c_arr(c_arr) USING INVERTED PROPERTIES( \"field_pattern\"=\"c_arr\") COMMENT 'c_arr index',\n" :
"INDEX index_inverted_c_arr(c_arr) USING INVERTED PROPERTIES( \"field_pattern\"=\"c_arr\", \"parser\"=\" " + parser + "\") COMMENT 'c_arr index',\n"
@@ -35,7 +35,7 @@
"DUPLICATE KEY(`k1`)\n" +
"COMMENT 'OLAP'\n" +
"DISTRIBUTED BY HASH(`k1`) BUCKETS 10\n" +
- "PROPERTIES(\"replication_num\" = \"1\", \"inverted_index_storage_format\" = \"$storageFormat\", \"variant_max_subcolumns_count\" = \"10\");"
+ "PROPERTIES(\"replication_num\" = \"1\", \"inverted_index_storage_format\" = \"$storageFormat\");"
return stmt
}
diff --git a/regression-test/suites/variant_p0/with_index/test_array_inverted_index_profile.groovy b/regression-test/suites/variant_p0/with_index/test_array_inverted_index_profile.groovy
index f456e1b..47cf028 100644
--- a/regression-test/suites/variant_p0/with_index/test_array_inverted_index_profile.groovy
+++ b/regression-test/suites/variant_p0/with_index/test_array_inverted_index_profile.groovy
@@ -77,7 +77,7 @@
CREATE TABLE IF NOT EXISTS `${indexTblName}` (
`apply_date` date NULL COMMENT '',
`id` varchar(60) NOT NULL COMMENT '',
- `inventors` variant<'inventors' : array<text>> NULL COMMENT '',
+ `inventors` variant<'inventors' : array<text>, properties("variant_max_subcolumns_count" = "10")> NULL COMMENT '',
INDEX index_inverted_inventors(inventors) USING INVERTED PROPERTIES( "field_pattern" = "inventors") COMMENT ''
) ENGINE=OLAP
DUPLICATE KEY(`apply_date`, `id`)
@@ -90,7 +90,6 @@
"light_schema_change" = "true",
"disable_auto_compaction" = "false",
"enable_single_replica_compaction" = "false",
- "variant_max_subcolumns_count" = "10",
"inverted_index_storage_format" = "$storageFormat"
);
"""
diff --git a/regression-test/suites/variant_p0/with_index/var_index.groovy b/regression-test/suites/variant_p0/with_index/var_index.groovy
index 7246baf..9beff31 100644
--- a/regression-test/suites/variant_p0/with_index/var_index.groovy
+++ b/regression-test/suites/variant_p0/with_index/var_index.groovy
@@ -17,6 +17,7 @@
suite("regression_test_variant_var_index", "p0, nonConcurrent"){
def table_name = "var_index"
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
sql "DROP TABLE IF EXISTS var_index"
sql """
CREATE TABLE IF NOT EXISTS var_index (
diff --git a/regression-test/suites/variant_p1/compaction/compaction_sparse_column.groovy b/regression-test/suites/variant_p1/compaction/compaction_sparse_column.groovy
index b77db02..e6fffa2 100644
--- a/regression-test/suites/variant_p1/compaction/compaction_sparse_column.groovy
+++ b/regression-test/suites/variant_p1/compaction/compaction_sparse_column.groovy
@@ -50,14 +50,13 @@
sql """
CREATE TABLE ${tableName} (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "3")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
- "disable_auto_compaction" = "true",
- "variant_max_subcolumns_count" = "3"
+ "disable_auto_compaction" = "true"
);
"""
diff --git a/regression-test/suites/variant_p1/compaction/test_compaction_extract_root.groovy b/regression-test/suites/variant_p1/compaction/test_compaction_extract_root.groovy
index 3d3dd84..ab04212 100644
--- a/regression-test/suites/variant_p1/compaction/test_compaction_extract_root.groovy
+++ b/regression-test/suites/variant_p1/compaction/test_compaction_extract_root.groovy
@@ -23,7 +23,7 @@
sql """
CREATE TABLE ${tableName} (
k bigint,
- v variant
+ v variant<properties("variant_max_subcolumns_count" = "2")>
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(`k`) BUCKETS 1
@@ -77,8 +77,5 @@
// qt_select_b_5 """ select v['b'] from test_t where cast(v['b'] as string) != '42005' and cast(v['b'] as string) != '42004' and cast(v['b'] as string) != '42003' order by cast(v['b'] as string); """
qt_select_1 """select v['b'] from test_t where k = 0 and cast(v['a'] as int) = 11245;"""
-<<<<<<< HEAD
-=======
->>>>>>> b4f01947a44 ([feature](semi-structure) support variant and index with many features)
}
diff --git a/regression-test/suites/variant_p1/predefine/load.groovy b/regression-test/suites/variant_p1/predefine/load.groovy
index 6143b72..ae60124 100644
--- a/regression-test/suites/variant_p1/predefine/load.groovy
+++ b/regression-test/suites/variant_p1/predefine/load.groovy
@@ -18,7 +18,9 @@
import org.codehaus.groovy.runtime.IOGroovyMethods
suite("test_predefine_type_multi_index", "p1"){
-
+
+ sql """ set global_variant_enable_typed_paths_to_sparse = false """
+
def load_json_data = {table_name, file_name ->
// load the json data
streamLoad {
@@ -66,14 +68,15 @@
MATCH_NAME 'created_at' : datetime,
MATCH_NAME 'payload.issue.number' : int,
MATCH_NAME 'payload.comment.body' : string,
- MATCH_NAME 'type.name' : string
+ MATCH_NAME 'type.name' : string,
+ properties("variant_max_subcolumns_count" = "${rand_subcolumns_count}")
> NULL,
INDEX idx_var (`v`) USING INVERTED PROPERTIES("parser" = "english", "support_phrase" = "true"),
INDEX idx_var_2 (`v`) USING INVERTED
)
DUPLICATE KEY(`k`)
DISTRIBUTED BY HASH(k) BUCKETS 4
- properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_enable_flatten_nested" = "true", "variant_max_subcolumns_count" = "${rand_subcolumns_count}");
+ properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_enable_flatten_nested" = "true");
"""
// 2015
diff --git a/regression-test/suites/variant_p2/load.groovy b/regression-test/suites/variant_p2/load.groovy
index 08b4a58..de9676f 100644
--- a/regression-test/suites/variant_p2/load.groovy
+++ b/regression-test/suites/variant_p2/load.groovy
@@ -53,9 +53,9 @@
CREATE TABLE IF NOT EXISTS ${table_name} (
id BIGINT NOT NULL,
type VARCHAR(30) NULL,
- actor VARIANT NULL,
- repo VARIANT NULL,
- payload VARIANT NULL,
+ actor VARIANT<properties("variant_max_subcolumns_count" = "9")> NULL,
+ repo VARIANT<properties("variant_max_subcolumns_count" = "9")> NULL,
+ payload VARIANT<properties("variant_max_subcolumns_count" = "9")> NULL,
public BOOLEAN NULL,
created_at DATETIME NULL,
org JSON NULL
@@ -65,7 +65,7 @@
)
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(id) BUCKETS ${buckets}
- properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_max_subcolumns_count" = "9");
+ properties("replication_num" = "1", "disable_auto_compaction" = "false");
"""
}