From bc9bc45f3cfd9c03a5abfbc613fb3b8fc674ba37 Mon Sep 17 00:00:00 2001 From: csun5285 Date: Tue, 2 Dec 2025 16:58:02 +0800 Subject: [PATCH 1/6] add be and fe --- be/src/common/consts.h | 1 - be/src/olap/olap_common.h | 2 + be/src/olap/rowset/segment_creator.cpp | 29 - be/src/olap/rowset/segment_creator.h | 5 - .../olap/rowset/segment_v2/column_writer.cpp | 5 + .../segment_v2/external_col_meta_util.cpp | 22 +- be/src/olap/rowset/segment_v2/segment.cpp | 4 +- be/src/olap/rowset/segment_v2/segment.h | 2 +- .../rowset/segment_v2/segment_iterator.cpp | 2 +- .../olap/rowset/segment_v2/segment_iterator.h | 2 +- .../olap/rowset/segment_v2/segment_writer.cpp | 13 + .../variant/hierarchical_data_iterator.cpp | 7 +- .../variant/sparse_column_extract_iterator.h | 15 +- .../variant/sparse_column_merge_iterator.cpp | 4 +- .../variant/sparse_column_merge_iterator.h | 2 +- .../variant/variant_column_reader.cpp | 198 +++- .../variant/variant_column_reader.h | 85 +- .../variant/variant_column_writer_impl.cpp | 518 +++++++-- .../variant/variant_column_writer_impl.h | 162 ++- .../variant/variant_doc_snapshot_iterator.cpp | 347 ++++++ .../variant/variant_doc_snapshot_iterator.h | 99 ++ .../variant_doc_snpashot_compact_iterator.h | 74 ++ .../variant/variant_ext_meta_writer.cpp | 24 +- .../segment_v2/variant/variant_statistics.h | 23 +- .../segment_v2/variant/variant_util.cpp | 176 +++ .../rowset/segment_v2/variant/variant_util.h | 43 + .../segment_v2/vertical_segment_writer.cpp | 28 + be/src/olap/tablet_meta.cpp | 9 + be/src/olap/tablet_schema.cpp | 12 + be/src/olap/tablet_schema.h | 48 +- be/src/pipeline/exec/olap_scan_operator.cpp | 4 + be/src/pipeline/exec/olap_scan_operator.h | 4 + be/src/vec/columns/column_variant.cpp | 289 ++++- be/src/vec/columns/column_variant.h | 59 +- be/src/vec/common/schema_util.cpp | 106 +- be/src/vec/common/schema_util.h | 13 +- be/src/vec/data_types/data_type_variant.cpp | 18 +- be/src/vec/exec/scan/olap_scanner.cpp | 4 + .../functions/function_variant_element.cpp | 69 +- be/src/vec/json/json_parser.h | 6 + be/src/vec/json/parse2column.cpp | 141 ++- be/src/vec/json/parse2column.h | 2 + be/src/vec/json/path_in_data.h | 5 +- .../vec/native/all_types_single_row.native | Bin 1120 -> 1124 bytes .../hierarchical_data_iterator_test.cpp | 2 +- .../variant_column_writer_reader_test.cpp | 510 ++++++--- be/test/vec/columns/column_variant_test.cpp | 88 +- .../vec/common/schema_util_rowset_test.cpp | 4 +- be/test/vec/common/schema_util_test.cpp | 24 +- .../data_types/serde/data_type_serde_test.cpp | 94 +- .../native/native_reader_writer_test.cpp | 2 +- .../function_variant_element_test.cpp | 6 +- .../org/apache/doris/catalog/ScalarType.java | 26 + .../org/apache/doris/catalog/VariantType.java | 92 +- .../java/org/apache/doris/catalog/Column.java | 27 + .../org/apache/doris/catalog/OlapTable.java | 2 +- .../doris/common/util/PropertyAnalyzer.java | 59 + .../doris/datasource/InternalCatalog.java | 10 + .../nereids/parser/LogicalPlanBuilder.java | 34 +- .../apache/doris/nereids/types/DataType.java | 5 +- .../doris/nereids/types/VariantType.java | 112 +- .../org/apache/doris/qe/SessionVariable.java | 47 + .../ExternalFileTableValuedFunction.java | 5 +- gensrc/proto/olap_file.proto | 4 + gensrc/proto/segment_v2.proto | 2 + gensrc/thrift/Descriptors.thrift | 3 + .../create_nestedtypes_with_schemachange.out | 12 +- .../data/variant_doc_snapshot_p2/load.out | 23 + .../sql/affinityByIssuesAndPRs1.out | 11 + .../sql/affinityByIssuesAndPRs2.out | 6 + .../sql/authorsWithTheMostPushes.out | 53 + .../sql/countingStar1.out | 4 + .../sql/countingStar2.out | 4 + .../sql/countingStar3.out | 4 + .../distributionOfRepositoriesByStarCount.out | 5 + .../sql/githubRoulette.out | 53 + ...tOfTopRepositoriesChangedOverTheYears1.out | 53 + ...tOfTopRepositoriesChangedOverTheYears2.out | 53 + ...tOfTopRepositoriesChangedOverTheYears3.out | 53 + ...tOfTopRepositoriesChangedOverTheYears4.out | 53 + ...tOfTopRepositoriesChangedOverTheYears5.out | 53 + ...tOfTopRepositoriesChangedOverTheYears6.out | 53 + ...asTheTotalNumberOfStarsChangedOverTime.out | 5 + .../sql/issuesWithTheMostComments1.out | 4 + .../sql/issuesWithTheMostComments2.out | 53 + .../sql/issuesWithTheMostComments3.out | 53 + .../sql/issuesWithTheMostComments4.out | 53 + .../sql/issuesWithTheMostComments5.out | 53 + .../sql/issuesWithTheMostComments6.out | 15 + .../sql/issuesWithTheMostComments7.out | 53 + .../data/variant_doc_snapshot_p2/sql/load.out | 23 + .../sql/mostForkedRepositories.out | 53 + .../sql/mostPopularCommentsOnGithub.out | 53 + ...organizationsByTheNumberOfRepositories.out | 9 + .../sql/organizationsByTheNumberOfStars.out | 53 + .../sql/proportionsBetweenStarsAndForks1.out | 53 + .../sql/proportionsBetweenStarsAndForks2.out | 3 + .../sql/proportionsBetweenStarsAndForks3.out | 5 + .../sql/proportionsBetweenStarsAndForks4.out | 4 + .../sql/proportionsBetweenStarsAndForks5.out | 4 + .../repositoriesByAmountOfModifiedCode.out | 53 + .../sql/repositoriesByTheNumberOfPushes.out | 53 + ...toriesWithClickhouse_related_comments1.out | 15 + ...toriesWithClickhouse_related_comments2.out | 15 + ...epositoriesWithDoris_related_comments1.out | 9 + ...epositoriesWithDoris_related_comments2.out | 9 + .../repositoriesWithTheHighestGrowthYoY.out | 14 + ...ositoriesWithTheMaximumAmountOfIssues1.out | 53 + ...ositoriesWithTheMaximumAmountOfIssues2.out | 53 + ...ositoriesWithTheMaximumAmountOfIssues3.out | 9 + ...ositoriesWithTheMaximumAmountOfIssues4.out | 53 + ...iesWithTheMaximumAmountOfPullRequests1.out | 53 + ...iesWithTheMaximumAmountOfPullRequests2.out | 53 + ...hTheMaximumNumberOfAcceptedInvitations.out | 53 + ...iesWithTheMostPeopleWhoHavePushAccess1.out | 53 + ...epositoriesWithTheMostStarsOverOneDay1.out | 53 + ...itoriesWithTheMostSteadyGrowthOverTime.out | 53 + ...positoriesWithTheWorstStagnation_order.out | 9 + .../sql/repositoryAffinityList1.out | 52 + .../sql/repositoryAffinityList2.out | 9 + .../sql/starsFromHeavyGithubUsers1.out | 31 + .../sql/starsFromHeavyGithubUsers2.out | 10 + .../sql/theLongestRepositoryNames1.out | 53 + .../sql/theLongestRepositoryNames2.out | 53 + .../sql/theMostToughCodeReviews.out | 53 + .../theTotalNumberOfRepositoriesOnGithub.out | 4 + .../sql/theTotalNumberOfUsersOnGithub1.out | 4 + .../sql/theTotalNumberOfUsersOnGithub2.out | 4 + .../sql/theTotalNumberOfUsersOnGithub3.out | 4 + .../sql/theTotalNumberOfUsersOnGithub4.out | 4 + .../sql/topRepositoriesByStars.out | 53 + .../whatIsTheBestDayOfTheWeekToCatchAStar.out | 6 + .../sql/whoAreAllThosePeopleGivingStars1.out | 53 + .../sql/whoAreAllThosePeopleGivingStars2.out | 4 + .../sql/whoAreAllThosePeopleGivingStars3.out | 41 + regression-test/data/variant_p0/desc.out | 50 +- .../data/variant_p0/doc_snapshot/agg.out | 78 ++ .../data/variant_p0/doc_snapshot/delete.json | 1 + .../variant_p0/doc_snapshot/delete_update.out | 29 + .../data/variant_p0/doc_snapshot/load.out | 341 ++++++ .../doc_snapshot/partial_update_parallel1.csv | 5 + .../doc_snapshot/partial_update_parallel2.csv | 5 + .../doc_snapshot/partial_update_parallel3.csv | 5 + .../doc_snapshot/partial_update_parallel4.csv | 3 + .../doc_snapshot/predefine/load.out | 113 ++ .../predefine/test_multi_index_nonCurrent.out | 28 + .../test_prdefine_insert_into_select.out | 21 + .../predefine/test_predefine_ddl.out | 11 + .../predefine/test_predefine_pattern.out | 85 ++ .../test_predefine_schema_change.out | 23 + .../predefine/test_predefine_type_index.out | 79 ++ ...t_variant_compaction_with_sparse_limit.out | 423 +++++++ .../predefine/variant_with_mow.out | 18 + .../test_double_write_when_schema_change.out | 37 + .../doc_snapshot/test_compaction.out | 345 ++++++ .../test_outfile_csv_variant_type.out | 39 + ...t_variant_compaction_with_sparse_limit.out | 381 +++++++ .../test_variant_external_meta_edge_cases.out | 162 +++ .../doc_snapshot/variant_hirachinal.out | 64 ++ ...est_array_contains_with_inverted_index.out | 1008 +++++++++++++++++ regression-test/data/variant_p0/nested.out | 2 +- regression-test/data/variant_p0/nested2.out | 8 +- .../test_all_prdefine_type_to_sparse.out | 144 +-- .../predefine/test_predefine_ddl.out | 8 +- .../data/variant_p1/doc_snapshot/load.out | 91 ++ ...reate_nestedtypes_with_schemachange.groovy | 6 +- .../test_outfile_csv_variant_type.groovy | 1 + ...ariant_compaction_with_sparse_limit.groovy | 1 + .../test_schema_change_storage_format.groovy | 2 +- .../variant_doc_snapshot_p2/load.groovy | 181 +++ .../sql/affinityByIssuesAndPRs1.sql | 14 + .../sql/affinityByIssuesAndPRs2.sql | 14 + .../sql/authorsWithTheMostPushes.sql | 9 + .../sql/countingStar1.sql | 1 + .../sql/countingStar2.sql | 1 + .../sql/countingStar3.sql | 1 + .../distributionOfRepositoriesByStarCount.sql | 14 + .../sql/githubRoulette.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears1.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears2.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears3.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears4.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears5.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears6.sql | 1 + ...tOfTopRepositoriesChangedOverTheYears7.sql | 30 + ...asTheTotalNumberOfStarsChangedOverTime.sql | 2 + .../sql/issuesWithTheMostComments1.sql | 1 + .../sql/issuesWithTheMostComments2.sql | 1 + .../sql/issuesWithTheMostComments3.sql | 17 + .../sql/issuesWithTheMostComments4.sql | 9 + .../sql/issuesWithTheMostComments5.sql | 9 + .../sql/issuesWithTheMostComments6.sql | 11 + .../sql/issuesWithTheMostComments7.sql | 9 + .../sql/issuesWithTheMostComments8.sql | 13 + .../sql/mostForkedRepositories.sql | 1 + .../sql/mostPopularCommentsOnGithub.sql | 1 + ...organizationsByTheNumberOfRepositories.sql | 14 + .../sql/organizationsByTheNumberOfStars.sql | 8 + .../sql/organizationsByTheSizeOfCommunity.sql | 23 + .../sql/proportionsBetweenStarsAndForks1.sql | 17 + .../sql/proportionsBetweenStarsAndForks2.sql | 18 + .../sql/proportionsBetweenStarsAndForks3.sql | 18 + .../sql/proportionsBetweenStarsAndForks4.sql | 13 + .../sql/proportionsBetweenStarsAndForks5.sql | 21 + .../repositoriesByAmountOfModifiedCode.sql | 12 + .../sql/repositoriesByTheNumberOfPushes.sql | 17 + ...toriesWithClickhouse_related_comments1.sql | 1 + ...toriesWithClickhouse_related_comments2.sql | 17 + ...epositoriesWithDoris_related_comments1.sql | 1 + ...epositoriesWithDoris_related_comments2.sql | 17 + .../repositoriesWithTheHighestGrowthYoY.sql | 20 + ...ositoriesWithTheMaximumAmountOfIssues1.sql | 1 + ...ositoriesWithTheMaximumAmountOfIssues2.sql | 18 + ...ositoriesWithTheMaximumAmountOfIssues3.sql | 19 + ...ositoriesWithTheMaximumAmountOfIssues4.sql | 18 + ...iesWithTheMaximumAmountOfPullRequests1.sql | 1 + ...iesWithTheMaximumAmountOfPullRequests2.sql | 1 + ...hTheMaximumNumberOfAcceptedInvitations.sql | 17 + ...iesWithTheMostPeopleWhoHavePushAccess1.sql | 13 + ...iesWithTheMostPeopleWhoHavePushAccess2.sql | 13 + ...iesWithTheMostPeopleWhoHavePushAccess3.sql | 16 + ...epositoriesWithTheMostStarsOverOneDay1.sql | 25 + ...epositoriesWithTheMostStarsOverOneDay2.sql | 25 + ...epositoriesWithTheMostStarsOverOneDay3.sql | 1 + ...itoriesWithTheMostSteadyGrowthOverTime.sql | 20 + ...positoriesWithTheWorstStagnation_order.sql | 20 + .../sql/repositoryAffinityList1.sql | 13 + .../sql/repositoryAffinityList2.sql | 23 + .../sql/starsFromHeavyGithubUsers1.sql | 13 + .../sql/starsFromHeavyGithubUsers2.sql | 15 + .../sql/theLongestRepositoryNames1.sql | 1 + .../sql/theLongestRepositoryNames2.sql | 1 + .../sql/theMostToughCodeReviews.sql | 10 + .../theTotalNumberOfRepositoriesOnGithub.sql | 1 + .../sql/theTotalNumberOfUsersOnGithub1.sql | 1 + .../sql/theTotalNumberOfUsersOnGithub2.sql | 1 + .../sql/theTotalNumberOfUsersOnGithub3.sql | 1 + .../sql/theTotalNumberOfUsersOnGithub4.sql | 1 + .../sql/topLabels1.sql | 9 + .../sql/topLabels2.sql | 9 + .../sql/topLabels3.sql | 14 + .../sql/topRepositoriesByStars.sql | 1 + .../whatIsTheBestDayOfTheWeekToCatchAStar.sql | 1 + .../sql/whoAreAllThosePeopleGivingStars1.sql | 1 + .../sql/whoAreAllThosePeopleGivingStars2.sql | 1 + .../sql/whoAreAllThosePeopleGivingStars3.sql | 13 + .../load.groovy | 1 + regression-test/suites/variant_p0/agg.groovy | 1 + .../compaction/test_compaction.groovy | 2 + .../suites/variant_p0/delete_update.groovy | 2 +- regression-test/suites/variant_p0/desc.groovy | 1 + .../suites/variant_p0/doc_snapshot/agg.groovy | 72 ++ .../doc_snapshot/delete_update.groovy | 176 +++ .../variant_p0/doc_snapshot/load.groovy | 484 ++++++++ .../doc_snapshot/predefine/load.groovy | 355 ++++++ .../test_prdefine_insert_into_select.groovy | 98 ++ .../predefine/test_predefine_pattern.groovy | 106 ++ .../test_predefine_schema_change.groovy | 56 + .../test_predefine_type_index.groovy | 114 ++ ...ariant_compaction_with_sparse_limit.groovy | 120 ++ .../predefine/variant_with_mow.groovy | 76 ++ ...est_double_write_when_schema_change.groovy | 127 +++ .../doc_snapshot/test_compaction.groovy | 118 ++ .../test_outfile_csv_variant_type.groovy | 141 +++ ...st_variant_external_meta_edge_cases.groovy | 277 +++++ .../doc_snapshot/variant_hirachinal.groovy | 116 ++ ..._array_contains_with_inverted_index.groovy | 114 ++ ...st_variant_external_meta_edge_cases.groovy | 2 +- regression-test/suites/variant_p0/load.groovy | 2 +- .../suites/variant_p0/nested.groovy | 4 + .../nested/nested_in_top_array.groovy | 4 + .../suites/variant_p0/nested2.groovy | 4 + .../suites/variant_p0/predefine/load.groovy | 5 +- .../test_all_prdefine_type_to_sparse.groovy | 1 + .../predefine/test_multi_index_file.groovy | 1 + .../test_multi_index_nonCurrent.groovy | 3 +- .../test_prdefine_insert_into_select.groovy | 1 + .../predefine/test_predefine_ddl.groovy | 10 +- .../predefine/test_predefine_pattern.groovy | 1 + .../test_predefine_schema_change.groovy | 1 + .../test_predefine_type_index.groovy | 1 + ...ariant_compaction_with_sparse_limit.groovy | 1 + .../predefine/variant_with_mow.groovy | 1 + ...est_double_write_when_schema_change.groovy | 2 +- .../test_variant_is_null_expr.groovy | 1 + .../test_variant_search_subcolumn.groovy | 1 + .../variant_p0/variant_hirachinal.groovy | 3 +- ..._array_contains_with_inverted_index.groovy | 1 + .../variant_p1/doc_snapshot/load.groovy | 113 ++ .../suites/variant_p1/predefine/load.groovy | 1 + 290 files changed, 12343 insertions(+), 878 deletions(-) create mode 100644 be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp create mode 100644 be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h create mode 100644 be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h create mode 100644 be/src/olap/rowset/segment_v2/variant/variant_util.cpp create mode 100644 be/src/olap/rowset/segment_v2/variant/variant_util.h create mode 100644 regression-test/data/variant_doc_snapshot_p2/load.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/countingStar1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/countingStar2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/countingStar3.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/githubRoulette.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/load.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/mostForkedRepositories.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/topRepositoriesByStars.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.out create mode 100644 regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/agg.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/delete.json create mode 100644 regression-test/data/variant_p0/doc_snapshot/delete_update.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/load.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/partial_update_parallel1.csv create mode 100644 regression-test/data/variant_p0/doc_snapshot/partial_update_parallel2.csv create mode 100644 regression-test/data/variant_p0/doc_snapshot/partial_update_parallel3.csv create mode 100644 regression-test/data/variant_p0/doc_snapshot/partial_update_parallel4.csv create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/load.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_multi_index_nonCurrent.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_pattern.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/test_compaction.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/test_outfile_csv_variant_type.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/test_variant_compaction_with_sparse_limit.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out create mode 100644 regression-test/data/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.out create mode 100644 regression-test/data/variant_p1/doc_snapshot/load.out create mode 100644 regression-test/suites/variant_doc_snapshot_p2/load.groovy create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/countingStar1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/countingStar2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/countingStar3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/githubRoulette.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears7.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments8.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/mostForkedRepositories.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheSizeOfCommunity.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/topLabels1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/topLabels2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/topLabels3.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/topRepositoriesByStars.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.sql create mode 100644 regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.sql create mode 100644 regression-test/suites/variant_p0/doc_snapshot/agg.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/load.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy create mode 100644 regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy create mode 100644 regression-test/suites/variant_p1/doc_snapshot/load.groovy diff --git a/be/src/common/consts.h b/be/src/common/consts.h index ca4662c839e5f1..07e6b63644757f 100644 --- a/be/src/common/consts.h +++ b/be/src/common/consts.h @@ -30,7 +30,6 @@ const std::string ROW_STORE_COL = "__DORIS_ROW_STORE_COL__"; const std::string DYNAMIC_COLUMN_NAME = "__DORIS_DYNAMIC_COL__"; const std::string PARTIAL_UPDATE_AUTO_INC_COL = "__PARTIAL_UPDATE_AUTO_INC_COLUMN__"; const std::string VIRTUAL_COLUMN_PREFIX = "__DORIS_VIRTUAL_COL__"; -const std::string SPARSE_COLUMN_PATH = "__DORIS_VARIANT_SPARSE__"; /// The maximum precision representable by a 4-byte decimal (Decimal4Value) constexpr int MAX_DECIMAL32_PRECISION = 9; diff --git a/be/src/olap/olap_common.h b/be/src/olap/olap_common.h index 7c28084624a66d..31e9b0a55abcd7 100644 --- a/be/src/olap/olap_common.h +++ b/be/src/olap/olap_common.h @@ -448,6 +448,8 @@ struct OlapReaderStatistics { int64_t variant_subtree_leaf_iter_count = 0; int64_t variant_subtree_hierarchical_iter_count = 0; int64_t variant_subtree_sparse_iter_count = 0; + int64_t variant_subtree_doc_snapshot_extract_iter_count = 0; + int64_t variant_subtree_doc_snapshot_all_iter_count = 0; }; using ColumnId = uint32_t; diff --git a/be/src/olap/rowset/segment_creator.cpp b/be/src/olap/rowset/segment_creator.cpp index b8a434d5aadaf9..5d3b083542338c 100644 --- a/be/src/olap/rowset/segment_creator.cpp +++ b/be/src/olap/rowset/segment_creator.cpp @@ -66,10 +66,6 @@ Status SegmentFlusher::flush_single_block(const vectorized::Block* block, int32_ return Status::OK(); } vectorized::Block flush_block(*block); - if (_context.write_type != DataWriteType::TYPE_COMPACTION && - _context.tablet_schema->num_variant_columns() > 0) { - RETURN_IF_ERROR(_parse_variant_columns(flush_block)); - } bool no_compression = flush_block.bytes() <= config::segment_compression_threshold_kb * 1024; if (config::enable_vertical_segment_writer) { std::unique_ptr writer; @@ -85,31 +81,6 @@ Status SegmentFlusher::flush_single_block(const vectorized::Block* block, int32_ return Status::OK(); } -Status SegmentFlusher::_internal_parse_variant_columns(vectorized::Block& block) { - size_t num_rows = block.rows(); - if (num_rows == 0) { - return Status::OK(); - } - - std::vector variant_column_pos; - for (int i = 0; i < block.columns(); ++i) { - const auto& entry = block.get_by_position(i); - if (entry.type->get_primitive_type() == TYPE_VARIANT) { - variant_column_pos.push_back(i); - } - } - - if (variant_column_pos.empty()) { - return Status::OK(); - } - - vectorized::ParseConfig config; - config.enable_flatten_nested = _context.tablet_schema->variant_flatten_nested(); - RETURN_IF_ERROR( - vectorized::schema_util::parse_variant_columns(block, variant_column_pos, config)); - return Status::OK(); -} - Status SegmentFlusher::close() { RETURN_IF_ERROR(_seg_files.close()); RETURN_IF_ERROR(_idx_files.finish_close()); diff --git a/be/src/olap/rowset/segment_creator.h b/be/src/olap/rowset/segment_creator.h index 19303e225f8adb..5a0489439753a0 100644 --- a/be/src/olap/rowset/segment_creator.h +++ b/be/src/olap/rowset/segment_creator.h @@ -139,11 +139,6 @@ class SegmentFlusher { Status create_writer(std::unique_ptr& writer, uint32_t segment_id); private: - // This method will catch exception when allocate memory failed - Status _parse_variant_columns(vectorized::Block& block) { - RETURN_IF_CATCH_EXCEPTION({ return _internal_parse_variant_columns(block); }); - } - Status _internal_parse_variant_columns(vectorized::Block& block); Status _add_rows(std::unique_ptr& segment_writer, const vectorized::Block* block, size_t row_offset, size_t row_num); Status _add_rows(std::unique_ptr& segment_writer, diff --git a/be/src/olap/rowset/segment_v2/column_writer.cpp b/be/src/olap/rowset/segment_v2/column_writer.cpp index a8fe45b6b87d82..b47737bbe912d6 100644 --- a/be/src/olap/rowset/segment_v2/column_writer.cpp +++ b/be/src/olap/rowset/segment_v2/column_writer.cpp @@ -295,6 +295,11 @@ Status ColumnWriter::create_variant_writer(const ColumnWriterOptions& opts, const TabletColumn* column, io::FileWriter* file_writer, std::unique_ptr* writer) { if (column->is_extracted_column()) { + if (column->name().find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { + *writer = std::make_unique( + opts, column, std::unique_ptr(FieldFactory::create(*column))); + return Status::OK(); + } VLOG_DEBUG << "gen subwriter for " << column->path_info_ptr()->get_path(); *writer = std::make_unique( opts, column, std::unique_ptr(FieldFactory::create(*column))); diff --git a/be/src/olap/rowset/segment_v2/external_col_meta_util.cpp b/be/src/olap/rowset/segment_v2/external_col_meta_util.cpp index 315713a44b9c55..e46bc189ec5f74 100644 --- a/be/src/olap/rowset/segment_v2/external_col_meta_util.cpp +++ b/be/src/olap/rowset/segment_v2/external_col_meta_util.cpp @@ -172,27 +172,7 @@ Status ExternalColMetaUtil::write_external_column_meta( // 2) write pointers via proto fields footer->set_col_meta_region_start(meta_region_start); - // 3) clear inline columns to enable true on-demand meta loading - // Note: footer->columns has already been pruned to only Top Level Columns in externalize_from_footer - // But for full externalization, we might want to clear them all or keep only necessary info? - // The original logic was footer->clear_columns(). - // If we clear columns, the Reader needs to know how to reconstruct the schema. - // Currently, SegmentFooterPB.columns is used as the schema source if present. - // If we clear it, Reader must rely on External Meta. - // However, the Reader typically reads footer first. If columns is empty, it assumes V3 and reads external. - // So yes, we should clear it. - // But wait, in externalize_from_footer we carefully put Top Level columns back into footer->columns. - // Why? Because in previous logic, we might want to keep roots in footer? - // The previous logic: "replace Footer.columns with only the kept top-level columns". - // BUT then `write_external_column_meta` calls `footer->clear_columns()` at the end! - // So `footer->columns` will be empty anyway. - // The only reason to reconstruct `footer->columns` in `externalize_from_footer` is if `write_external_column_meta` logic depended on it. - // In my updated `write_external_column_meta`, I iterate over `all_metas` which is returned by `externalize_from_footer`. - // So I don't strictly need `footer->columns` to be correct in between. - // However, strictly following protocol: `externalize_from_footer` modifies footer to reflect "logical" columns (Top Level). - // And then `write_external_column_meta` finalizes it by clearing them and setting pointers. - - footer->clear_columns(); + // Note: footer->columns has already been pruned in externalize_from_footer return Status::OK(); } diff --git a/be/src/olap/rowset/segment_v2/segment.cpp b/be/src/olap/rowset/segment_v2/segment.cpp index 561735b49b1678..af31f5cb35fdf9 100644 --- a/be/src/olap/rowset/segment_v2/segment.cpp +++ b/be/src/olap/rowset/segment_v2/segment.cpp @@ -650,7 +650,7 @@ Status Segment::new_default_iterator(const TabletColumn& tablet_column, Status Segment::new_column_iterator(const TabletColumn& tablet_column, std::unique_ptr* iter, const StorageReadOptions* opt, - const std::unordered_map* + const std::unordered_map* variant_sparse_column_cache) { if (opt->runtime_state != nullptr) { _be_exec_version = opt->runtime_state->be_exec_version(); @@ -675,7 +675,7 @@ Status Segment::new_column_iterator(const TabletColumn& tablet_column, } if (reader->get_meta_type() == FieldType::OLAP_FIELD_TYPE_VARIANT) { // if sparse_column_cache_ptr is nullptr, means the sparse column cache is not used - PathToSparseColumnCache* sparse_column_cache_ptr = nullptr; + PathToBinaryColumnCache* sparse_column_cache_ptr = nullptr; if (variant_sparse_column_cache) { auto it = variant_sparse_column_cache->find(unique_id); if (it != variant_sparse_column_cache->end()) { diff --git a/be/src/olap/rowset/segment_v2/segment.h b/be/src/olap/rowset/segment_v2/segment.h index 988f8fb2937d94..744eee46299567 100644 --- a/be/src/olap/rowset/segment_v2/segment.h +++ b/be/src/olap/rowset/segment_v2/segment.h @@ -118,7 +118,7 @@ class Segment : public std::enable_shared_from_this, public MetadataAdd // if variant_sparse_column_cache is nullptr, means the sparse column cache is not used Status new_column_iterator(const TabletColumn& tablet_column, std::unique_ptr* iter, const StorageReadOptions* opt, - const std::unordered_map* + const std::unordered_map* variant_sparse_column_cache = nullptr); Status new_index_iterator(const TabletColumn& tablet_column, const TabletIndex* index_meta, diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 3e52a9815abd36..261dd8cf2910b2 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -411,7 +411,7 @@ Status SegmentIterator::_init_impl(const StorageReadOptions& opts) { if (int32_t uid = col->get_unique_id(); !_variant_sparse_column_cache.contains(uid)) { DCHECK(uid >= 0); _variant_sparse_column_cache.emplace(uid, - std::make_unique()); + std::make_unique()); } } } diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.h b/be/src/olap/rowset/segment_v2/segment_iterator.h index 5ef63c3c6ec4c2..d497d25b7e910d 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.h +++ b/be/src/olap/rowset/segment_v2/segment_iterator.h @@ -516,7 +516,7 @@ class SegmentIterator : public RowwiseIterator { IndexQueryContextPtr _index_query_context; // key is column uid, value is the sparse column cache - std::unordered_map _variant_sparse_column_cache; + std::unordered_map _variant_sparse_column_cache; bool _find_condition_cache = false; std::shared_ptr> _condition_cache; diff --git a/be/src/olap/rowset/segment_v2/segment_writer.cpp b/be/src/olap/rowset/segment_v2/segment_writer.cpp index 99efbb8acac25d..010bd10955e044 100644 --- a/be/src/olap/rowset/segment_v2/segment_writer.cpp +++ b/be/src/olap/rowset/segment_v2/segment_writer.cpp @@ -54,6 +54,7 @@ #include "olap/rowset/segment_v2/page_io.h" #include "olap/rowset/segment_v2/page_pointer.h" #include "olap/rowset/segment_v2/variant/variant_ext_meta_writer.h" +#include "olap/rowset/segment_v2/variant/variant_util.h" #include "olap/rowset/segment_v2/variant_stats_calculator.h" #include "olap/segment_loader.h" #include "olap/short_key_index.h" @@ -530,6 +531,12 @@ Status SegmentWriter::append_block_with_partial_content(const vectorized::Block* for (auto i : including_cids) { full_block.replace_by_position(i, block->get_by_position(input_id++).column); } + + if (_opts.rowset_ctx->write_type != DataWriteType::TYPE_COMPACTION && + _tablet_schema->num_variant_columns() > 0) { + RETURN_IF_ERROR( + variant_util::parse_variant_columns(full_block, *_tablet_schema, including_cids)); + } RETURN_IF_ERROR(_olap_data_convertor->set_source_content_with_specifid_columns( &full_block, row_pos, num_rows, including_cids)); @@ -704,6 +711,12 @@ Status SegmentWriter::append_block(const vectorized::Block* block, size_t row_po _serialize_block_to_row_column(*block); } + if (_opts.rowset_ctx->write_type != DataWriteType::TYPE_COMPACTION && + _tablet_schema->num_variant_columns() > 0) { + RETURN_IF_ERROR(variant_util::parse_variant_columns(const_cast(*block), + *_tablet_schema, _column_ids)); + } + _olap_data_convertor->set_source_content(block, row_pos, num_rows); // find all row pos for short key indexes diff --git a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp index dd375cb1dccb62..2b94ab1aad14b1 100644 --- a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp @@ -299,6 +299,7 @@ Status HierarchicalDataIterator::_init_container(vectorized::MutableColumnPtr& c RETURN_IF_ERROR(_process_sparse_column(container_variant, nrows)); } + container_variant.get_doc_snapshot_column()->assume_mutable()->resize(nrows); container_variant.set_num_rows(nrows); return Status::OK(); } @@ -390,7 +391,7 @@ Status HierarchicalDataIterator::_process_sparse_column( // Case 1: subcolumn already created, append this row's value into it. if (auto it = subcolumns_from_sparse_column.find(sub_path); it != subcolumns_from_sparse_column.end()) { - it->second.deserialize_from_sparse_column(&src_sparse_data_values, + it->second.deserialize_from_binary_column(&src_sparse_data_values, lower_bound_index); } // Case 2: subcolumn not created yet and we still have quota → create it and insert. @@ -398,7 +399,7 @@ Status HierarchicalDataIterator::_process_sparse_column( // Initialize subcolumn with current logical row index i to align sizes. ColumnVariant::Subcolumn subcolumn(/*size*/ i, /*is_nullable*/ true, false); - subcolumn.deserialize_from_sparse_column(&src_sparse_data_values, + subcolumn.deserialize_from_binary_column(&src_sparse_data_values, lower_bound_index); subcolumns_from_sparse_column.emplace(sub_path, std::move(subcolumn)); } @@ -423,7 +424,7 @@ Status HierarchicalDataIterator::_process_sparse_column( // return Status::InternalError("Failed to add subcolumn for sparse column"); // } } - container_variant.get_subcolumn({})->deserialize_from_sparse_column( + container_variant.get_subcolumn({})->deserialize_from_binary_column( &src_sparse_data_values, lower_bound_index); } } diff --git a/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h b/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h index f4afa778eadcbd..fc4f689e0421c8 100644 --- a/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h @@ -58,7 +58,7 @@ namespace doris::segment_v2 { class BaseSparseColumnProcessor : public ColumnIterator { protected: const StorageReadOptions* _read_opts; - SparseColumnCacheSPtr _sparse_column_cache; + BinaryColumnCacheSPtr _sparse_column_cache; // Pure virtual method for data processing when encounter existing sparse columns(to be implemented by subclasses) virtual void _process_data_with_existing_sparse_column(vectorized::MutableColumnPtr& dst, size_t num_rows) = 0; @@ -68,7 +68,7 @@ class BaseSparseColumnProcessor : public ColumnIterator { size_t num_rows) = 0; public: - BaseSparseColumnProcessor(SparseColumnCacheSPtr sparse_column_cache, + BaseSparseColumnProcessor(BinaryColumnCacheSPtr sparse_column_cache, const StorageReadOptions* opts) : _read_opts(opts), _sparse_column_cache(std::move(sparse_column_cache)) {} @@ -99,7 +99,7 @@ class BaseSparseColumnProcessor : public ColumnIterator { SCOPED_RAW_TIMER(&_read_opts->stats->variant_fill_path_from_sparse_column_timer_ns); const auto& offsets = - assert_cast(*_sparse_column_cache->sparse_column) + assert_cast(*_sparse_column_cache->binary_column) .get_offsets(); if (offsets.back() == offsets[-1]) { // no sparse column in this batch @@ -115,7 +115,7 @@ class BaseSparseColumnProcessor : public ColumnIterator { // Implementation for path extraction processor class SparseColumnExtractIterator : public BaseSparseColumnProcessor { public: - SparseColumnExtractIterator(std::string_view path, SparseColumnCacheSPtr sparse_column_cache, + SparseColumnExtractIterator(std::string_view path, BinaryColumnCacheSPtr sparse_column_cache, const StorageReadOptions* opts) : BaseSparseColumnProcessor(std::move(sparse_column_cache), opts), _path(path) {} @@ -157,10 +157,11 @@ class SparseColumnExtractIterator : public BaseSparseColumnProcessor { nullable_column ? &nullable_column->get_null_map_data() : nullptr; vectorized::ColumnVariant::fill_path_column_from_sparse_data( *var.get_subcolumn({}) /*root*/, null_map, StringRef {_path.data(), _path.size()}, - _sparse_column_cache->sparse_column->get_ptr(), 0, - _sparse_column_cache->sparse_column->size()); - var.incr_num_rows(_sparse_column_cache->sparse_column->size()); + _sparse_column_cache->binary_column->get_ptr(), 0, + _sparse_column_cache->binary_column->size()); + var.incr_num_rows(_sparse_column_cache->binary_column->size()); var.get_sparse_column()->assume_mutable()->resize(var.rows()); + var.get_doc_snapshot_column()->assume_mutable()->resize(var.rows()); ENABLE_CHECK_CONSISTENCY(&var); } diff --git a/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.cpp index 165c0d29591723..21d920f263adc3 100644 --- a/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.cpp @@ -114,7 +114,7 @@ void SparseColumnMergeIterator::_merge_to(vectorized::MutableColumnPtr& dst) { auto& dst_sparse_column_offsets = column_map.get_offsets(); const auto& src_column_map = - assert_cast(*_sparse_column_cache->sparse_column); + assert_cast(*_sparse_column_cache->binary_column); const auto& src_sparse_column_paths = assert_cast(*src_column_map.get_keys_ptr()); const auto& src_sparse_column_values = @@ -123,7 +123,7 @@ void SparseColumnMergeIterator::_merge_to(vectorized::MutableColumnPtr& dst) { DCHECK_EQ(src_sparse_column_paths.size(), src_sparse_column_values.size()); // Src object column contains some paths in serialized sparse column in specified range. // Iterate over this range and insert all required paths into serialized sparse column or subcolumns. - for (size_t row = 0; row != _sparse_column_cache->sparse_column->size(); ++row) { + for (size_t row = 0; row != _sparse_column_cache->binary_column->size(); ++row) { // Use separate index to iterate over sorted sorted_src_subcolumn_for_sparse_column. size_t sorted_src_subcolumn_for_sparse_column_idx = 0; size_t sorted_src_subcolumn_for_sparse_column_size = diff --git a/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h b/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h index bc3af0ef146cef..9d8455a0008011 100644 --- a/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h @@ -58,7 +58,7 @@ namespace doris::segment_v2 { class SparseColumnMergeIterator : public BaseSparseColumnProcessor { public: SparseColumnMergeIterator(const TabletSchema::PathsSetInfo& path_set_info, - SparseColumnCacheSPtr sparse_column_cache, + BinaryColumnCacheSPtr sparse_column_cache, SubstreamReaderTree&& src_subcolumns_for_sparse, const StorageReadOptions* opts) : BaseSparseColumnProcessor(std::move(sparse_column_cache), opts), 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 1e411dec498684..52a6e55d52e671 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 @@ -35,6 +35,8 @@ #include "olap/rowset/segment_v2/variant/hierarchical_data_iterator.h" #include "olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h" #include "olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h" +#include "olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h" +#include "olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h" #include "olap/tablet_schema.h" #include "util/slice.h" #include "vec/columns/column_array.h" @@ -89,7 +91,7 @@ class CombineBucketsSparseIterator : public ColumnIterator { _sparse_data_buckets.clear(); _sparse_data_buckets.reserve(_iters.size()); for (auto& it : _iters) { - vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_sparse_column_fn(); + vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_binary_column_fn(); RETURN_IF_ERROR(it->next_batch(n, m, has_null)); _sparse_data_buckets.emplace_back(std::move(m)); } @@ -102,7 +104,7 @@ class CombineBucketsSparseIterator : public ColumnIterator { _sparse_data_buckets.clear(); _sparse_data_buckets.reserve(_iters.size()); for (auto& it : _iters) { - vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_sparse_column_fn(); + vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_binary_column_fn(); RETURN_IF_ERROR(it->read_by_rowids(rowids, count, m)); _sparse_data_buckets.emplace_back(std::move(m)); } @@ -197,7 +199,7 @@ std::pair, std::string> UnifiedSparseColumnReader::select_reader_and_cache_key(const std::string& relative_path) const { if (has_buckets()) { uint32_t N = static_cast(_buckets.size()); - uint32_t bucket_index = vectorized::schema_util::variant_sparse_shard_of( + uint32_t bucket_index = vectorized::schema_util::variant_binary_shard_of( StringRef {relative_path.data(), relative_path.size()}, N); DCHECK(bucket_index < _buckets.size()); std::string key = std::string(SPARSE_COLUMN_PATH) + ".b" + std::to_string(bucket_index); @@ -288,7 +290,7 @@ Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* read ColumnIteratorUPtr iter; RETURN_IF_ERROR(_sparse_reader.new_sparse_iterator(&iter)); sparse_iter = std::make_unique( - vectorized::ColumnVariant::create_sparse_column_fn(), std::move(iter), nullptr); + vectorized::ColumnVariant::create_binary_column_fn(), std::move(iter), nullptr); } if (node == nullptr) { node = _subcolumns_meta_info->find_exact(path); @@ -317,7 +319,7 @@ Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* read Status VariantColumnReader::_create_sparse_merge_reader(ColumnIteratorUPtr* iterator, const StorageReadOptions* opts, const TabletColumn& target_col, - SparseColumnCacheSPtr sparse_column_cache, + BinaryColumnCacheSPtr sparse_column_cache, ColumnReaderCache* column_reader_cache, std::optional bucket_index) { std::shared_lock lock(_subcolumns_meta_mutex); @@ -338,7 +340,7 @@ Status VariantColumnReader::_create_sparse_merge_reader(ColumnIteratorUPtr* iter if (bucket_index.has_value() && _sparse_reader.has_buckets()) { uint32_t N = static_cast(_sparse_reader.num_buckets()); if (N > 1) { - uint32_t b = vectorized::schema_util::variant_sparse_shard_of( + uint32_t b = vectorized::schema_util::variant_binary_shard_of( StringRef {path.data(), path.size()}, N); if (b != bucket_index.value()) { continue; // prune subcolumns of other buckets early @@ -407,23 +409,23 @@ Status VariantColumnReader::_new_default_iter_with_same_nested( return Status::OK(); } -Result VariantColumnReader::_get_shared_column_cache( - PathToSparseColumnCache* sparse_column_cache_ptr, const std::string& path, - std::shared_ptr sparse_column_reader) { - if (!sparse_column_cache_ptr || !sparse_column_cache_ptr->contains(path)) { +Result VariantColumnReader::_get_binary_column_cache( + PathToBinaryColumnCache* binary_column_cache_ptr, const std::string& path, + std::shared_ptr binary_column_reader) { + if (!binary_column_cache_ptr || !binary_column_cache_ptr->contains(path)) { ColumnIteratorUPtr inner_iter; - RETURN_IF_ERROR_RESULT(sparse_column_reader->new_iterator(&inner_iter, nullptr)); - vectorized::MutableColumnPtr sparse_column = - vectorized::ColumnVariant::create_sparse_column_fn(); - auto sparse_column_cache = std::make_shared(std::move(inner_iter), - std::move(sparse_column)); - // if sparse_column_cache_ptr is nullptr, means the sparse column cache is not used - if (sparse_column_cache_ptr) { - sparse_column_cache_ptr->emplace(path, sparse_column_cache); + RETURN_IF_ERROR_RESULT(binary_column_reader->new_iterator(&inner_iter, nullptr)); + vectorized::MutableColumnPtr binary_column = + vectorized::ColumnVariant::create_binary_column_fn(); + auto binary_column_cache = std::make_shared(std::move(inner_iter), + std::move(binary_column)); + // if binary_column_cache_ptr is nullptr, means the binary column cache is not used + if (binary_column_cache_ptr) { + binary_column_cache_ptr->emplace(path, binary_column_cache); } - return sparse_column_cache; + return binary_column_cache; } - return sparse_column_cache_ptr->at(path); + return binary_column_cache_ptr->at(path); } vectorized::DataTypePtr create_variant_type(const TabletColumn& target_col) { @@ -436,7 +438,7 @@ vectorized::DataTypePtr create_variant_type(const TabletColumn& target_col) { Status VariantColumnReader::_build_read_plan_flat_leaves( ReadPlan* plan, const TabletColumn& target_col, const StorageReadOptions* opts, - ColumnReaderCache* column_reader_cache, PathToSparseColumnCache* sparse_column_cache_ptr) { + ColumnReaderCache* column_reader_cache, PathToBinaryColumnCache* binary_column_cache_ptr) { // make sure external meta is loaded otherwise can't find any meta data for extracted columns // TODO(lhy): this will load all external meta if not loaded, and memory will be consumed. RETURN_IF_ERROR(load_external_meta_once()); @@ -482,6 +484,17 @@ Status VariantColumnReader::_build_read_plan_flat_leaves( return Status::OK(); } + // case 3: doc snapshot column + if (rel.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { + size_t bucket = rel.rfind('.'); + uint32_t bucket_value = static_cast(std::stoul(rel.substr(bucket + 1))); + plan->kind = ReadKind::DOC_SNAPSHOT; + plan->type = vectorized::DataTypeFactory::instance().create_data_type(target_col); + plan->relative_path = relative_path; + plan->doc_snapshot_buckets.push_back(bucket_value); + return Status::OK(); + } + if (target_col.is_nested_subcolumn()) { plan->kind = ReadKind::DEFAULT_NESTED; plan->type = vectorized::DataTypeFactory::instance().create_data_type(target_col); @@ -579,7 +592,7 @@ bool VariantColumnReader::_has_prefix_path_unlocked( Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& target_col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr) { + PathToBinaryColumnCache* binary_column_cache_ptr) { // root column use unique id, leaf column use parent_unique_id int32_t col_uid = target_col.unique_id() >= 0 ? target_col.unique_id() : target_col.parent_unique_id(); @@ -604,7 +617,7 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& // english only in comments if (need_read_flat_leaves(opt)) { return _build_read_plan_flat_leaves(plan, target_col, opt, column_reader_cache, - sparse_column_cache_ptr); + binary_column_cache_ptr); } std::shared_lock lock(_subcolumns_meta_mutex); @@ -619,6 +632,18 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& node = _subcolumns_meta_info->find_exact(relative_path); } + // read root + if (root->path == relative_path && !_doc_snapshot_column_readers.empty()) { + plan->kind = ReadKind::DOC_SNAPSHOT_ALL; + plan->type = create_variant_type(target_col); + plan->relative_path = relative_path; + plan->root = root; + for (const auto& [bucket_value, _] : _doc_snapshot_column_readers) { + plan->doc_snapshot_buckets.push_back(bucket_value); + } + return Status::OK(); + } + // Check if path exist in sparse column bool existed_in_sparse_column = !_statistics->sparse_column_non_null_size.empty() && @@ -710,6 +735,18 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& plan->root = root; return Status::OK(); } + + // find if path exists in doc snapshot column + auto picked_doc_snapshot_buckets = + _pick_doc_snapshot_column_buckets(relative_path.get_path()); + if (!picked_doc_snapshot_buckets.empty()) { + plan->kind = ReadKind::DOC_SNAPSHOT_EXTRACT; + plan->type = create_variant_type(target_col); + plan->relative_path = relative_path; + plan->doc_snapshot_buckets = std::move(picked_doc_snapshot_buckets); + return Status::OK(); + } + // Sparse column not exists and not reached stats limit, then the target path is not // exist, get a default iterator plan->kind = ReadKind::DEFAULT_FILL; @@ -722,7 +759,7 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& Status VariantColumnReader::_create_iterator_from_plan( ColumnIteratorUPtr* iterator, const ReadPlan& plan, const TabletColumn& target_col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr) { + PathToBinaryColumnCache* binary_column_cache_ptr) { switch (plan.kind) { case ReadKind::ROOT_FLAT: { *iterator = std::make_unique( @@ -747,8 +784,8 @@ Status VariantColumnReader::_create_iterator_from_plan( } case ReadKind::SPARSE_EXTRACT: { DCHECK(plan.sparse_column_reader != nullptr); - SparseColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_shared_column_cache( - sparse_column_cache_ptr, plan.sparse_cache_key, plan.sparse_column_reader)); + BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, plan.sparse_cache_key, plan.sparse_column_reader)); *iterator = std::make_unique( plan.relative_path.get_path(), std::move(sparse_column_cache), opt); if (opt && opt->stats) { @@ -758,8 +795,8 @@ Status VariantColumnReader::_create_iterator_from_plan( } case ReadKind::SPARSE_MERGE: { DCHECK(plan.sparse_column_reader != nullptr); - SparseColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_shared_column_cache( - sparse_column_cache_ptr, plan.sparse_cache_key, plan.sparse_column_reader)); + BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, plan.sparse_cache_key, plan.sparse_column_reader)); RETURN_IF_ERROR(_create_sparse_merge_reader(iterator, opt, target_col, sparse_column_cache, column_reader_cache, plan.bucket_index)); return Status::OK(); @@ -776,21 +813,56 @@ Status VariantColumnReader::_create_iterator_from_plan( } return Status::OK(); } + case ReadKind::DOC_SNAPSHOT: { + DCHECK(plan.doc_snapshot_buckets.size() == 1); + ColumnIteratorUPtr inner_iter; + RETURN_IF_ERROR(_doc_snapshot_column_readers.at(plan.doc_snapshot_buckets[0]) + ->new_iterator(&inner_iter, nullptr)); + *iterator = std::make_unique(std::move(inner_iter)); + return Status::OK(); + } + case ReadKind::DOC_SNAPSHOT_EXTRACT: { + DCHECK(plan.doc_snapshot_buckets.size() >= 1); + + std::vector doc_snapshot_column_caches; + for (const auto& bucket : plan.doc_snapshot_buckets) { + std::string path = DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket); + BinaryColumnCacheSPtr doc_snapshot_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, path, _doc_snapshot_column_readers.at(bucket))); + doc_snapshot_column_caches.push_back(std::move(doc_snapshot_column_cache)); + } + *iterator = std::make_unique( + std::move(doc_snapshot_column_caches), plan.relative_path.get_path()); + if (opt && opt->stats) { + opt->stats->variant_subtree_doc_snapshot_extract_iter_count++; + } + return Status::OK(); + } + case ReadKind::DOC_SNAPSHOT_ALL: { + std::vector doc_snapshot_column_caches; + for (const auto& bucket : plan.doc_snapshot_buckets) { + std::string path = DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket); + BinaryColumnCacheSPtr doc_snapshot_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, path, _doc_snapshot_column_readers.at(bucket))); + doc_snapshot_column_caches.push_back(std::move(doc_snapshot_column_cache)); + } + std::unique_ptr root_column_reader; + DCHECK(plan.root); + root_column_reader = std::make_unique( + plan.root->data.file_column_type->create_column(), + std::make_unique(_root_column_reader), + plan.root->data.file_column_type); + *iterator = std::make_unique( + std::move(doc_snapshot_column_caches), std::move(root_column_reader)); + if (opt && opt->stats) { + opt->stats->variant_subtree_doc_snapshot_all_iter_count++; + } + return Status::OK(); + } + default: { + return Status::InternalError("Unknown ReadKind for VariantColumnReader"); + } } - return Status::InternalError("Unknown ReadKind for VariantColumnReader"); -} - -Status VariantColumnReader::_new_iterator_with_flat_leaves( - ColumnIteratorUPtr* iterator, vectorized::DataTypePtr* type, const TabletColumn& target_col, - const StorageReadOptions* opts, bool /*exceeded_sparse_column_limit*/, - bool /*existed_in_sparse_column*/, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr) { - ReadPlan plan; - RETURN_IF_ERROR(_build_read_plan_flat_leaves(&plan, target_col, opts, column_reader_cache, - sparse_column_cache_ptr)); - *type = plan.type; - return _create_iterator_from_plan(iterator, plan, target_col, opts, column_reader_cache, - sparse_column_cache_ptr); } Status VariantColumnReader::new_iterator(ColumnIteratorUPtr* iterator, @@ -804,13 +876,13 @@ Status VariantColumnReader::new_iterator(ColumnIteratorUPtr* iterator, const TabletColumn* target_col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr) { + PathToBinaryColumnCache* binary_column_cache_ptr) { ReadPlan plan; RETURN_IF_ERROR(_build_read_plan(&plan, *target_col, opt, column_reader_cache, - sparse_column_cache_ptr)); + binary_column_cache_ptr)); // Caller of this overload does not need the storage type; only iterator is used. return _create_iterator_from_plan(iterator, plan, *target_col, opt, column_reader_cache, - sparse_column_cache_ptr); + binary_column_cache_ptr); } Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAccessor* accessor, @@ -869,6 +941,8 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce if (relative.empty()) { return Status::OK(); } + + // case 1: single sparse column std::string rel_str = relative.get_path(); if (rel_str == SPARSE_COLUMN_PATH) { DCHECK(col.has_variant_statistics()) << col.DebugString(); @@ -883,6 +957,8 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce *handled = true; return Status::OK(); } + + // case 2: bucketized sparse column std::string bucket_prefix = std::string(SPARSE_COLUMN_PATH) + ".b"; if (rel_str.starts_with(bucket_prefix)) { int idx = atoi(rel_str.substr(bucket_prefix.size()).c_str()); @@ -897,6 +973,23 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce *handled = true; return Status::OK(); } + + // case 3: doc snapshot column + if (rel_str.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { + size_t bucket = rel_str.rfind('.'); + int bucket_value = std::stoi(rel_str.substr(bucket + 1)); + std::shared_ptr column_reader; + RETURN_IF_ERROR(ColumnReader::create(opts, col, num_rows, file_reader, &column_reader)); + _doc_snapshot_column_readers.emplace(bucket_value, std::move(column_reader)); + const auto& variant_stats = col.variant_statistics(); + std::set> paths; + for (const auto& [subpath, size] : variant_stats.doc_snapshot_column_non_null_size()) { + paths.insert(subpath); + } + _statistics->doc_snapshot_column_paths[bucket_value] = std::move(paths); + *handled = true; + return Status::OK(); + } return Status::OK(); }; @@ -1230,6 +1323,21 @@ Status DefaultNestedColumnIterator::read_by_rowids(const rowid_t* rowids, const return Status::OK(); } +std::vector VariantColumnReader::_pick_doc_snapshot_column_buckets( + const std::string& path) { + std::vector bucket_values; + for (const auto& [bucket_value, reader] : _doc_snapshot_column_readers) { + const auto& doc_snapshot_stats = _statistics->doc_snapshot_column_paths[bucket_value]; + const std::string& prefix = path + "."; + if (doc_snapshot_stats.find(path) != doc_snapshot_stats.end() || + (doc_snapshot_stats.lower_bound(prefix) != doc_snapshot_stats.end() && + doc_snapshot_stats.lower_bound(prefix)->starts_with(prefix))) { + bucket_values.push_back(bucket_value); + } + } + return bucket_values; +} + #include "common/compile_check_end.h" } // namespace doris::segment_v2 \ No newline at end of file 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 3143fd94d8126a..49806dc6ae72cc 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 @@ -88,7 +88,7 @@ class UnifiedSparseColumnReader { }; /** - * SparseColumnCache provides a caching layer for sparse column data access. + * BinaryColumnCache provides a caching layer for sparse column data access. * * The "shared" aspect refers to the ability to share cached column data between * multiple iterators or readers that access the same column (SPARSE_COLUMN_PATH). This reduces @@ -107,9 +107,9 @@ class UnifiedSparseColumnReader { * - SEEKED_NEXT_BATCHED: Data cached from sequential read * - READ_BY_ROWIDS: Data cached from random access read */ -struct SparseColumnCache { - const ColumnIteratorUPtr sparse_column_iterator = nullptr; - vectorized::MutableColumnPtr sparse_column = nullptr; +struct BinaryColumnCache { + const ColumnIteratorUPtr binary_column_iterator = nullptr; + vectorized::MutableColumnPtr binary_column = nullptr; enum class State : uint8_t { INVALID = 0, @@ -123,17 +123,17 @@ struct SparseColumnCache { std::unique_ptr rowids; // Cached row IDs for random access reads size_t length = 0; // Length of cached data - SparseColumnCache() = default; - SparseColumnCache(ColumnIteratorUPtr _column_iterator, vectorized::MutableColumnPtr _column) - : sparse_column_iterator(std::move(_column_iterator)), - sparse_column(std::move(_column)) {} + BinaryColumnCache() = default; + BinaryColumnCache(ColumnIteratorUPtr _column_iterator, vectorized::MutableColumnPtr _column) + : binary_column_iterator(std::move(_column_iterator)), + binary_column(std::move(_column)) {} Status init(const ColumnIteratorOptions& opts) { if (state >= State::INITED) { return Status::OK(); } reset(State::INITED); - return sparse_column_iterator->init(opts); + return binary_column_iterator->init(opts); } Status seek_to_ordinal(ordinal_t ord) { @@ -142,7 +142,7 @@ struct SparseColumnCache { return Status::OK(); } reset(State::SEEKED_NEXT_BATCHED); - RETURN_IF_ERROR(sparse_column_iterator->seek_to_ordinal(ord)); + RETURN_IF_ERROR(binary_column_iterator->seek_to_ordinal(ord)); offset = ord; return Status::OK(); } @@ -154,9 +154,9 @@ struct SparseColumnCache { *_n = length; return Status::OK(); } - sparse_column->clear(); + binary_column->clear(); DCHECK(state == State::SEEKED_NEXT_BATCHED); - RETURN_IF_ERROR(sparse_column_iterator->next_batch(_n, sparse_column, _has_null)); + RETURN_IF_ERROR(binary_column_iterator->next_batch(_n, binary_column, _has_null)); length = *_n; // update length return Status::OK(); } @@ -168,7 +168,7 @@ struct SparseColumnCache { return Status::OK(); } reset(State::READ_BY_ROWIDS); - RETURN_IF_ERROR(sparse_column_iterator->read_by_rowids(_rowids, _count, sparse_column)); + RETURN_IF_ERROR(binary_column_iterator->read_by_rowids(_rowids, _count, binary_column)); length = _count; // update length rowids = std::make_unique(_count); // update rowids std::copy(_rowids, _rowids + _count, rowids.get()); @@ -179,7 +179,7 @@ struct SparseColumnCache { state = _state; offset = 0; length = 0; - sparse_column->clear(); + binary_column->clear(); rowids.reset(); } @@ -192,14 +192,16 @@ struct SparseColumnCache { } return std::equal(_rowids, _rowids + _count, rowids.get()); } + + ordinal_t get_current_ordinal() const { return binary_column_iterator->get_current_ordinal(); } }; -using SparseColumnCacheSPtr = std::shared_ptr; +using BinaryColumnCacheSPtr = std::shared_ptr; -// key is column path, value is the sparse column cache -// now column path is only SPARSE_COLUMN_PATH, in the future, we can add more sparse column paths -using PathToSparseColumnCache = std::unordered_map; -using PathToSparseColumnCacheUPtr = std::unique_ptr; +// key is column path, value is the binary column cache +// column path: SPARSE_COLUMN_PATH, DOC_SNAPSHOT_COLUMN_PATH +using PathToBinaryColumnCache = std::unordered_map; +using PathToBinaryColumnCacheUPtr = std::unique_ptr; class VariantColumnReader : public ColumnReader { public: @@ -214,7 +216,7 @@ class VariantColumnReader : public ColumnReader { Status new_iterator(ColumnIteratorUPtr* iterator, const TabletColumn* col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr = nullptr); + PathToBinaryColumnCache* binary_column_cache_ptr = nullptr); virtual const SubcolumnColumnMetaInfo::Node* get_subcolumn_meta_by_path( const vectorized::PathInData& relative_path) const; @@ -294,13 +296,16 @@ class VariantColumnReader : public ColumnReader { // Describe how a variant sub-path should be read. This is a logical plan only and // does not create any concrete ColumnIterator. enum class ReadKind { - ROOT_FLAT, // root variant using `VariantRootColumnIterator` - HIERARCHICAL, // hierarchical merge (root + subcolumns + sparse) - LEAF, // direct leaf reader - SPARSE_EXTRACT, // extract single path from sparse column - SPARSE_MERGE, // merge subcolumns into sparse column - DEFAULT_NESTED, // fill nested subcolumn using sibling nested column - DEFAULT_FILL // default iterator when path not exist + ROOT_FLAT, // root variant using `VariantRootColumnIterator` + HIERARCHICAL, // hierarchical merge (root + subcolumns + sparse) + LEAF, // direct leaf reader + SPARSE_EXTRACT, // extract single path from sparse column + SPARSE_MERGE, // merge subcolumns into sparse column + DEFAULT_NESTED, // fill nested subcolumn using sibling nested column + DEFAULT_FILL, // default iterator when path not exist + DOC_SNAPSHOT, // read from doc snapshot column when compaction read + DOC_SNAPSHOT_EXTRACT, // extract single path or hierarchical from doc snapshot column when read + DOC_SNAPSHOT_ALL, // read all paths from doc snapshot column when read }; struct ReadPlan { @@ -319,6 +324,9 @@ class VariantColumnReader : public ColumnReader { // sparse extras std::string sparse_cache_key; std::optional bucket_index; + + // read from doc snapshot column + std::vector doc_snapshot_buckets; }; // Build read plan for flat-leaf (compaction/checksum) mode. Only decides the @@ -326,27 +334,22 @@ class VariantColumnReader : public ColumnReader { Status _build_read_plan_flat_leaves(ReadPlan* plan, const TabletColumn& col, const StorageReadOptions* opts, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr); + PathToBinaryColumnCache* binary_column_cache_ptr); // Build read plan for the general hierarchical reading mode. Status _build_read_plan(ReadPlan* plan, const TabletColumn& target_col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr); + PathToBinaryColumnCache* binary_column_cache_ptr); // Materialize a concrete ColumnIterator according to the previously built plan. Status _create_iterator_from_plan(ColumnIteratorUPtr* iterator, const ReadPlan& plan, const TabletColumn& target_col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr); + PathToBinaryColumnCache* binary_column_cache_ptr); // init for compaction read Status _new_default_iter_with_same_nested(ColumnIteratorUPtr* iterator, const TabletColumn& col, const StorageReadOptions* opt, ColumnReaderCache* column_reader_cache); - Status _new_iterator_with_flat_leaves( - ColumnIteratorUPtr* iterator, vectorized::DataTypePtr* type, const TabletColumn& col, - const StorageReadOptions* opts, bool exceeded_sparse_column_limit, - bool existed_in_sparse_column, ColumnReaderCache* column_reader_cache, - PathToSparseColumnCache* sparse_column_cache_ptr = nullptr); Status _create_hierarchical_reader(ColumnIteratorUPtr* reader, int32_t col_uid, vectorized::PathInData path, @@ -358,13 +361,15 @@ class VariantColumnReader : public ColumnReader { // If bucket_index is set, only subcolumns whose path belongs to this bucket will be merged. Status _create_sparse_merge_reader(ColumnIteratorUPtr* iterator, const StorageReadOptions* opts, const TabletColumn& target_col, - SparseColumnCacheSPtr sparse_column_cache, + BinaryColumnCacheSPtr sparse_column_cache, ColumnReaderCache* column_reader_cache, std::optional bucket_index = std::nullopt); - static Result _get_shared_column_cache( - PathToSparseColumnCache* sparse_column_cache_ptr, const std::string& path, - std::shared_ptr sparse_column_reader); + static Result _get_binary_column_cache( + PathToBinaryColumnCache* binary_column_cache_ptr, const std::string& path, + std::shared_ptr binary_column_reader); + + std::vector _pick_doc_snapshot_column_buckets(const std::string& path); // Protect `_subcolumns_meta_info` and `_statistics` when loading external meta. // english only in comments @@ -386,6 +391,8 @@ class VariantColumnReader : public ColumnReader { uint64_t _num_rows {0}; uint32_t _root_unique_id {0}; + std::unordered_map> _doc_snapshot_column_readers; + // call-once guard moved into VariantExternalMetaReader }; 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 b1238c1719bbf6..2dcb597283ce69 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 @@ -159,6 +159,30 @@ Status convert_and_write_column(vectorized::OlapBlockDataConvertor* converter, return Status::OK(); } +Status UnifiedSparseColumnWriter::init(const TabletColumn* parent_column, int bucket_num, + int& column_id, const ColumnWriterOptions& base_opts, + SegmentFooterPB* footer) { + _bucket_num = std::max(1, bucket_num); + if (_bucket_num <= 1) { + TabletColumn sparse_column = vectorized::schema_util::create_sparse_column(*parent_column); + RETURN_IF_ERROR(init_single(sparse_column, column_id, base_opts, footer)); + } else { + RETURN_IF_ERROR(init_buckets(_bucket_num, *parent_column, column_id, base_opts, footer)); + } + return Status::OK(); +} + +Status UnifiedSparseColumnWriter::append_data(const TabletColumn* parent_column, + const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter) { + if (_single_writer) { + RETURN_IF_ERROR(append_single_sparse(src, num_rows, converter, *parent_column)); + } else { + RETURN_IF_ERROR(append_bucket_sparse(src, num_rows, converter, *parent_column)); + } + return Status::OK(); +} + // UnifiedSparseColumnWriter implementation Status UnifiedSparseColumnWriter::init_single(const TabletColumn& sparse_column, int& column_id, const ColumnWriterOptions& base_opts, @@ -247,58 +271,56 @@ Status UnifiedSparseColumnWriter::write_ordinal_index() { return Status::OK(); } -Status UnifiedSparseColumnWriter::append_from_variant(const vectorized::ColumnVariant& src, - size_t num_rows, - vectorized::OlapBlockDataConvertor* converter, - const TabletColumn& tablet_column, - VariantStatistics* out_stats) { - // Single sparse mode path: - // - Convert the pre-serialized sparse ColumnMap from the engine format - // (src.get_sparse_column()) to storage format using converter, binding - // to the column id allocated during init_single (stored in _first_column_id). - // - Append to the single writer and populate sparse path statistics into - // out_stats and the single column meta. - if (_single_writer) { - TabletColumn sparse_column = vectorized::schema_util::create_sparse_column(tablet_column); - converter->add_column_data_convertor(sparse_column); - DCHECK_EQ(src.get_sparse_column()->size(), num_rows); - RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( - {src.get_sparse_column(), nullptr, ""}, 0, num_rows, _first_column_id)); - auto [status, column] = converter->convert_column_data(_first_column_id); - RETURN_IF_ERROR(status); - RETURN_IF_ERROR( - _single_writer->append(column->get_nullmap(), column->get_data(), num_rows)); - converter->clear_source_content(_first_column_id); - - // Build path frequency statistics with upper bound limit to avoid - // large memory and metadata size. Persist to meta for readers. - std::unordered_map path_counts; - const auto [paths, _] = src.get_sparse_data_paths_and_values(); - size_t limit = tablet_column.variant_max_sparse_column_statistics_size(); - for (size_t i = 0; i != paths->size(); ++i) { - auto k = paths->get_data_at(i); - if (auto it = path_counts.find(k); it != path_counts.end()) - ++it->second; - else if (path_counts.size() < limit) - path_counts.emplace(k, 1); - } - if (out_stats) { - for (const auto& [k, cnt] : path_counts) { - out_stats->sparse_column_non_null_size.emplace(k.to_string(), cnt); - } - out_stats->to_pb(_single_opts.meta->mutable_variant_statistics()); - } - _single_opts.meta->set_num_rows(num_rows); - return Status::OK(); +// Single sparse mode path: +// - Convert the pre-serialized sparse ColumnMap from the engine format +// (src.get_sparse_column()) to storage format using converter, binding +// to the column id allocated during init_single (stored in _first_column_id). +// - Append to the single writer and populate sparse path statistics into +// out_stats and the single column meta. +Status UnifiedSparseColumnWriter::append_single_sparse( + const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter, const TabletColumn& parent_column) { + TabletColumn sparse_column = vectorized::schema_util::create_sparse_column(parent_column); + converter->add_column_data_convertor(sparse_column); + DCHECK_EQ(src.get_sparse_column()->size(), num_rows); + RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( + {src.get_sparse_column(), nullptr, ""}, 0, num_rows, _first_column_id)); + auto [status, column] = converter->convert_column_data(_first_column_id); + RETURN_IF_ERROR(status); + RETURN_IF_ERROR(_single_writer->append(column->get_nullmap(), column->get_data(), num_rows)); + converter->clear_source_content(_first_column_id); + + // Build path frequency statistics with upper bound limit to avoid + // large memory and metadata size. Persist to meta for readers. + std::unordered_map path_counts; + const auto [paths, _] = src.get_sparse_data_paths_and_values(); + size_t limit = parent_column.variant_max_sparse_column_statistics_size(); + for (size_t i = 0; i != paths->size(); ++i) { + auto k = paths->get_data_at(i); + if (auto it = path_counts.find(k); it != path_counts.end()) + ++it->second; + else if (path_counts.size() < limit) + path_counts.emplace(k, 1); + } + segment_v2::VariantStatistics sparse_stats; + for (const auto& [k, cnt] : path_counts) { + sparse_stats.sparse_column_non_null_size.emplace(k.to_string(), cnt); } + sparse_stats.to_pb(_single_opts.meta->mutable_variant_statistics()); + _single_opts.meta->set_num_rows(num_rows); + return Status::OK(); +} - // Bucketized sparse mode path: - // - Materialize N temporary ColumnMap (keys, values, offsets) - // - For each row, distribute (path,value) pairs to the bucket decided by - // schema_util::variant_sparse_shard_of(path) - // - Convert and append each bucket map to its writer using the column id - // sequence initialized by init_buckets (starting at _first_column_id) - // - Compute per-bucket path stats and persist into each bucket's meta +// Bucketized sparse mode path: +// - Materialize N temporary ColumnMap (keys, values, offsets) +// - For each row, distribute (path,value) pairs to the bucket decided by +// schema_util::variant_sparse_shard_of(path) +// - Convert and append each bucket map to its writer using the column id +// sequence initialized by init_buckets (starting at _first_column_id) +// - Compute per-bucket path stats and persist into each bucket's meta +Status UnifiedSparseColumnWriter::append_bucket_sparse( + const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter, const TabletColumn& parent_column) { const int bucket_num = static_cast(_bucket_writers.size()); const auto [paths_col, values_col] = src.get_sparse_data_paths_and_values(); const auto& offsets = src.serialized_sparse_column_offsets(); @@ -318,7 +340,7 @@ Status UnifiedSparseColumnWriter::append_from_variant(const vectorized::ColumnVa size_t end = offsets[row]; for (size_t i = start; i < end; ++i) { StringRef path = paths_col->get_data_at(i); - uint32_t b = vectorized::schema_util::variant_sparse_shard_of(path, bucket_num); + uint32_t b = vectorized::schema_util::variant_binary_shard_of(path, bucket_num); auto& map_col = assert_cast(*tmp_maps[b]); map_col.get_keys_ptr()->assume_mutable()->insert_from(*paths_col, i); map_col.get_values_ptr()->assume_mutable()->insert_from(*values_col, i); @@ -330,7 +352,7 @@ Status UnifiedSparseColumnWriter::append_from_variant(const vectorized::ColumnVa } for (int b = 0; b < bucket_num; ++b) { TabletColumn bucket_col = - vectorized::schema_util::create_sparse_shard_column(tablet_column, b); + vectorized::schema_util::create_sparse_shard_column(parent_column, b); converter->add_column_data_convertor(bucket_col); int this_col_id = _first_column_id + b; RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( @@ -348,7 +370,7 @@ Status UnifiedSparseColumnWriter::append_from_variant(const vectorized::ColumnVa const auto& keys = assert_cast(map_col.get_keys()); std::unordered_map bucket_path_counts; bucket_path_counts.reserve(1024); - size_t limit = tablet_column.variant_max_sparse_column_statistics_size(); + size_t limit = parent_column.variant_max_sparse_column_statistics_size(); for (size_t i = 0; i < keys.size(); ++i) { StringRef k = keys.get_data_at(i); if (auto it = bucket_path_counts.find(k); it != bucket_path_counts.end()) @@ -366,6 +388,114 @@ Status UnifiedSparseColumnWriter::append_from_variant(const vectorized::ColumnVa return Status::OK(); } +Status VariantDocSnapShotWriter::init(const TabletColumn* parent_column, int bucket_num, + int& column_id, const ColumnWriterOptions& opts, + SegmentFooterPB* footer) { + _bucket_num = bucket_num; + _first_column_id = column_id; + _doc_snapshot_column_writers.resize(_bucket_num); + _doc_snapshot_column_opts.resize(_bucket_num); + for (int b = 0; b < _bucket_num; ++b) { + const TabletColumn& bucket_column = + vectorized::schema_util::create_doc_snapshot_column(*parent_column, b); + _doc_snapshot_column_opts[b] = opts; + _doc_snapshot_column_opts[b].meta = footer->add_columns(); + _init_column_meta(_doc_snapshot_column_opts[b].meta, column_id, bucket_column, + opts.compression_type); + RETURN_IF_ERROR(ColumnWriter::create_map_writer(_doc_snapshot_column_opts[b], + &bucket_column, opts.file_writer, + &_doc_snapshot_column_writers[b])); + RETURN_IF_ERROR(_doc_snapshot_column_writers[b]->init()); + ++column_id; + } + return Status::OK(); +} + +Status VariantDocSnapShotWriter::append_data(const TabletColumn* parent_column, + const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter) { + const auto [paths_col, values_col] = src.get_doc_snapshot_data_paths_and_values(); + const auto& offsets = src.serialized_doc_snapshot_column_offsets(); + + std::vector tmp_maps(_bucket_num); + for (int b = 0; b < _bucket_num; ++b) { + tmp_maps[b] = vectorized::ColumnVariant::create_binary_column_fn(); + auto& map_col = assert_cast(*tmp_maps[b]); + map_col.get_offsets().reserve(num_rows); + } + + std::vector> bucket_path_counts(_bucket_num); + + for (size_t row = 0; row < num_rows; ++row) { + size_t start = offsets[row - 1]; + size_t end = offsets[row]; + for (size_t i = start; i < end; ++i) { + StringRef path = paths_col->get_data_at(i); + uint32_t bucket = vectorized::schema_util::variant_binary_shard_of(path, _bucket_num); + auto& map_col = assert_cast(*tmp_maps[bucket]); + map_col.get_keys_ptr()->assume_mutable()->insert_from(*paths_col, i); + map_col.get_values_ptr()->assume_mutable()->insert_from(*values_col, i); + bucket_path_counts[bucket][path]++; + } + for (int b = 0; b < _bucket_num; ++b) { + auto& map_col = assert_cast(*tmp_maps[b]); + map_col.get_offsets().push_back(map_col.get_keys().size()); + } + } + + for (int b = 0; b < _bucket_num; ++b) { + TabletColumn bucket_column = + vectorized::schema_util::create_doc_snapshot_column(*parent_column, b); + converter->add_column_data_convertor(bucket_column); + int this_col_id = _first_column_id + b; + RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( + {tmp_maps[b]->get_ptr(), nullptr, ""}, 0, num_rows, this_col_id)); + auto [status, column] = converter->convert_column_data(this_col_id); + RETURN_IF_ERROR(status); + RETURN_IF_ERROR(_doc_snapshot_column_writers[b]->append(column->get_nullmap(), + column->get_data(), num_rows)); + converter->clear_source_content(this_col_id); + _doc_snapshot_column_opts[b].meta->set_num_rows(num_rows); + auto* stats = _doc_snapshot_column_opts[b].meta->mutable_variant_statistics(); + auto* doc_snapshot_column_non_null_size = + stats->mutable_doc_snapshot_column_non_null_size(); + for (const auto& [k, cnt] : bucket_path_counts[b]) { + (*doc_snapshot_column_non_null_size)[k.to_string()] = cnt; + } + } + + return Status::OK(); +} + +uint64_t VariantDocSnapShotWriter::estimate_buffer_size() const { + uint64_t size = 0; + for (const auto& writer : _doc_snapshot_column_writers) { + size += writer->estimate_buffer_size(); + } + return size; +} + +Status VariantDocSnapShotWriter::finish() { + for (auto& writer : _doc_snapshot_column_writers) { + RETURN_IF_ERROR(writer->finish()); + } + return Status::OK(); +} + +Status VariantDocSnapShotWriter::write_data() { + for (auto& writer : _doc_snapshot_column_writers) { + RETURN_IF_ERROR(writer->write_data()); + } + return Status::OK(); +} + +Status VariantDocSnapShotWriter::write_ordinal_index() { + for (auto& writer : _doc_snapshot_column_writers) { + RETURN_IF_ERROR(writer->write_ordinal_index()); + } + return Status::OK(); +} + VariantColumnWriterImpl::VariantColumnWriterImpl(const ColumnWriterOptions& opts, const TabletColumn* column) { _opts = opts; @@ -525,22 +655,27 @@ Status VariantColumnWriterImpl::_process_subcolumns(vectorized::ColumnVariant* p return Status::OK(); } -// Serialize and write Variant sparse data. Decides mode based on FE-configured bucket num, -// initializes the corresponding writer(s), and delegates conversion/append/statistics to the -// unified sparse writer. Column id consumption order remains identical to the previous logic. Status VariantColumnWriterImpl::_process_sparse_column( vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id) { int bucket_num = std::max(1, _tablet_column->variant_sparse_hash_shard_count()); - if (bucket_num <= 1) { - TabletColumn sparse_column = vectorized::schema_util::create_sparse_column(*_tablet_column); - RETURN_IF_ERROR(_sparse_writer.init_single(sparse_column, column_id, _opts, _opts.footer)); - } else { - RETURN_IF_ERROR(_sparse_writer.init_buckets(bucket_num, *_tablet_column, column_id, _opts, - _opts.footer)); + RETURN_IF_ERROR( + _sparse_writer.init(_tablet_column, bucket_num, column_id, _opts, _opts.footer)); + RETURN_IF_ERROR(_sparse_writer.append_data(_tablet_column, *ptr, num_rows, converter)); + return Status::OK(); +} + +Status VariantColumnWriterImpl::_process_doc_snapshot_column( + vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, + size_t num_rows, int& column_id) { + if (!_tablet_column->variant_enable_doc_snapshot_mode()) { + return Status::OK(); } - RETURN_IF_ERROR(_sparse_writer.append_from_variant(*ptr, num_rows, converter, *_tablet_column, - &_statistics)); + ptr->reconstruct_and_sort_doc_snapshot_column(); + const int bucket_num = std::max(1, _tablet_column->variant_doc_snapshot_shard_count()); + RETURN_IF_ERROR( + _doc_snapshot_writer.init(_tablet_column, bucket_num, column_id, _opts, _opts.footer)); + RETURN_IF_ERROR(_doc_snapshot_writer.append_data(_tablet_column, *ptr, num_rows, converter)); return Status::OK(); } @@ -598,6 +733,9 @@ Status VariantColumnWriterImpl::finalize() { // process sparse column and append to sparse writer buffer RETURN_IF_ERROR( _process_sparse_column(ptr, olap_data_convertor.get(), num_rows, column_id)); + + RETURN_IF_ERROR( + _process_doc_snapshot_column(ptr, olap_data_convertor.get(), num_rows, column_id)); } _is_finalized = true; @@ -629,6 +767,7 @@ uint64_t VariantColumnWriterImpl::estimate_buffer_size() { size += column_writer->estimate_buffer_size(); } size += _sparse_writer.estimate_buffer_size(); + size += _doc_snapshot_writer.estimate_buffer_size(); return size; } @@ -641,6 +780,7 @@ Status VariantColumnWriterImpl::finish() { RETURN_IF_ERROR(column_writer->finish()); } RETURN_IF_ERROR(_sparse_writer.finish()); + RETURN_IF_ERROR(_doc_snapshot_writer.finish()); return Status::OK(); } Status VariantColumnWriterImpl::write_data() { @@ -652,6 +792,7 @@ Status VariantColumnWriterImpl::write_data() { RETURN_IF_ERROR(column_writer->write_data()); } RETURN_IF_ERROR(_sparse_writer.write_data()); + RETURN_IF_ERROR(_doc_snapshot_writer.write_data()); return Status::OK(); } Status VariantColumnWriterImpl::write_ordinal_index() { @@ -662,6 +803,7 @@ Status VariantColumnWriterImpl::write_ordinal_index() { RETURN_IF_ERROR(column_writer->write_ordinal_index()); } RETURN_IF_ERROR(_sparse_writer.write_ordinal_index()); + RETURN_IF_ERROR(_doc_snapshot_writer.write_ordinal_index()); return Status::OK(); } @@ -830,6 +972,254 @@ Status VariantSubcolumnWriter::append_nullable(const uint8_t* null_map, const ui return Status::OK(); } +VariantCompactionDocSnapshotWriter::VariantCompactionDocSnapshotWriter( + const ColumnWriterOptions& opts, const TabletColumn* column, std::unique_ptr field) + : ColumnWriter(std::move(field), opts.meta->is_nullable(), opts.meta) { + _opts = opts; + _tablet_column = column; + _column = vectorized::ColumnVariant::create(0); +} + +Status VariantCompactionDocSnapshotWriter::init() { + return Status::OK(); +} + +Status VariantCompactionDocSnapshotWriter::append_data(const uint8_t** ptr, size_t num_rows) { + const auto* column = reinterpret_cast(*ptr); + const auto& src = *reinterpret_cast(column->column_data); + auto* dst_ptr = assert_cast(_column.get()); + // TODO: if direct write we could avoid copy + dst_ptr->insert_range_from(src, column->row_pos, num_rows); + return Status::OK(); +} + +Status VariantCompactionDocSnapshotWriter::finish() { + if (!is_finalized()) { + RETURN_IF_ERROR(finalize()); + } + for (auto& column_writer : _subcolumn_writers) { + RETURN_IF_ERROR(column_writer->finish()); + } + RETURN_IF_ERROR(_doc_snapshot_column_writer->finish()); + return Status::OK(); +} +Status VariantCompactionDocSnapshotWriter::write_data() { + if (!is_finalized()) { + RETURN_IF_ERROR(finalize()); + } + for (auto& column_writer : _subcolumn_writers) { + RETURN_IF_ERROR(column_writer->write_data()); + } + RETURN_IF_ERROR(_doc_snapshot_column_writer->write_data()); + return Status::OK(); +} +Status VariantCompactionDocSnapshotWriter::write_ordinal_index() { + assert(is_finalized()); + for (auto& column_writer : _subcolumn_writers) { + RETURN_IF_ERROR(column_writer->write_ordinal_index()); + } + RETURN_IF_ERROR(_doc_snapshot_column_writer->write_ordinal_index()); + return Status::OK(); +} + +Status VariantCompactionDocSnapshotWriter::write_zone_map() { + assert(is_finalized()); + for (int i = 0; i < _subcolumn_writers.size(); ++i) { + if (_subcolumn_opts[i].need_zone_map) { + RETURN_IF_ERROR(_subcolumn_writers[i]->write_zone_map()); + } + } + RETURN_IF_ERROR(_doc_snapshot_column_writer->write_zone_map()); + + return Status::OK(); +} +Status VariantCompactionDocSnapshotWriter::write_inverted_index() { + assert(is_finalized()); + for (int i = 0; i < _subcolumn_writers.size(); ++i) { + if (_subcolumn_opts[i].need_inverted_index) { + RETURN_IF_ERROR(_subcolumn_writers[i]->write_inverted_index()); + } + } + RETURN_IF_ERROR(_doc_snapshot_column_writer->write_inverted_index()); + return Status::OK(); +} +Status VariantCompactionDocSnapshotWriter::write_bloom_filter_index() { + assert(is_finalized()); + for (int i = 0; i < _subcolumn_writers.size(); ++i) { + if (_subcolumn_opts[i].need_bloom_filter) { + RETURN_IF_ERROR(_subcolumn_writers[i]->write_bloom_filter_index()); + } + } + RETURN_IF_ERROR(_doc_snapshot_column_writer->write_bloom_filter_index()); + return Status::OK(); +} +Status VariantCompactionDocSnapshotWriter::append_nullable(const uint8_t* null_map, + const uint8_t** ptr, size_t num_rows) { + RETURN_IF_ERROR(append_data(ptr, num_rows)); + return Status::OK(); +} +Status VariantCompactionDocSnapshotWriter::finalize() { + auto* variant_column = assert_cast(_column.get()); + + const auto& parent_column = + _opts.rowset_ctx->tablet_schema->column_by_uid(_tablet_column->parent_unique_id()); + + size_t num_rows = variant_column->size(); + auto converter = std::make_unique(); + int column_id = 0; + int64_t variant_doc_snapshot_min_rows = parent_column.variant_doc_snapshot_min_rows(); + if (variant_doc_snapshot_min_rows == 0 || + num_rows >= static_cast(variant_doc_snapshot_min_rows)) { + std::unordered_map subcolumns; + + auto [column_key, column_value] = variant_column->get_doc_snapshot_data_paths_and_values(); + const auto& column_offsets = variant_column->serialized_doc_snapshot_column_offsets(); + + for (int64_t i = 0; i < num_rows; ++i) { + size_t start = column_offsets[i - 1]; + size_t end = column_offsets[i]; + for (size_t j = start; j < end; ++j) { + const auto& key = column_key->get_data_at(j); + if (auto it = subcolumns.find(std::string_view(key.data, key.size)); + it != subcolumns.end()) { + if (it->second.size() != i) { + it->second.insert_many_defaults(i - it->second.size()); + } + it->second.deserialize_from_binary_column(column_value, j); + } else { + vectorized::ColumnVariant::Subcolumn subcolumn {0, true, false}; + subcolumn.insert_many_defaults(i); + subcolumn.deserialize_from_binary_column(column_value, j); + subcolumns[std::string_view(key.data, key.size)] = std::move(subcolumn); + } + } + } + + for (auto& [path, subcolumn] : subcolumns) { + if (subcolumn.size() != num_rows) { + subcolumn.insert_many_defaults(num_rows - subcolumn.size()); + } + } + + auto generate_column_info = [&](std::string_view path, + const vectorized::ColumnVariant::Subcolumn& subcolumn) { + const std::string& column_name = + parent_column.name_lower_case() + "." + std::string(path); + const vectorized::DataTypePtr& final_data_type_from_object = + subcolumn.get_least_common_type(); + vectorized::PathInData full_path = vectorized::PathInData(column_name); + // set unique_id and parent_unique_id, will use unique_id to get iterator correct + auto column = vectorized::schema_util::get_column_by_type( + final_data_type_from_object, column_name, + vectorized::schema_util::ExtraInfo { + .unique_id = -1, + .parent_unique_id = parent_column.unique_id(), + .path_info = full_path}); + return column; + }; + + _subcolumns_indexes.resize(subcolumns.size()); + + for (auto& [path, subcolumn] : subcolumns) { + const auto& least_common_type = subcolumn.get_least_common_type(); + if (vectorized::schema_util::get_base_type_of_array(least_common_type) + ->get_primitive_type() == PrimitiveType::INVALID_TYPE) { + continue; + } + subcolumn.finalize(); + TabletColumn tablet_column; + TabletSchema::SubColumnInfo sub_column_info; + if (vectorized::schema_util::generate_sub_column_info( + *_opts.rowset_ctx->tablet_schema, parent_column.unique_id(), + std::string(path), &sub_column_info)) { + tablet_column = std::move(sub_column_info.column); + _subcolumns_indexes[column_id] = std::move(sub_column_info.indexes); + } else { + tablet_column = generate_column_info(path, subcolumn); + const auto& indexes = + _opts.rowset_ctx->tablet_schema->inverted_indexs(parent_column.unique_id()); + vectorized::schema_util::inherit_index(indexes, _subcolumns_indexes[column_id], + tablet_column); + } + + int current_column_id = column_id++; + int64_t none_null_value_size = subcolumn.get_non_null_value_size(); + vectorized::ColumnPtr current_column = subcolumn.get_finalized_column_ptr()->get_ptr(); + vectorized::DataTypePtr current_type = subcolumn.get_least_common_type(); + + ColumnWriterOptions opts; + opts.meta = _opts.footer->add_columns(); + opts.index_file_writer = _opts.index_file_writer; + opts.compression_type = _opts.compression_type; + opts.rowset_ctx = _opts.rowset_ctx; + opts.file_writer = _opts.file_writer; + std::unique_ptr writer; + vectorized::schema_util::inherit_column_attributes(parent_column, tablet_column); + + bool need_record_none_null_value_size = true; + + 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, need_record_none_null_value_size)); + _subcolumn_writers.push_back(std::move(writer)); + _subcolumn_opts.push_back(opts); + _subcolumn_opts[current_column_id].meta->set_num_rows(num_rows); + + RETURN_IF_ERROR(convert_and_write_column(converter.get(), tablet_column, current_type, + _subcolumn_writers[current_column_id].get(), + current_column, num_rows, current_column_id)); + } + } + + std::string doc_snapshot_column_path = _tablet_column->path_info_ptr()->get_path(); + size_t pos = doc_snapshot_column_path.rfind("."); + int bucket_value = std::stoi(doc_snapshot_column_path.substr(pos + 1)); + TabletColumn doc_snapshot_column = + vectorized::schema_util::create_doc_snapshot_column(parent_column, bucket_value); + _init_column_meta(_opts.meta, column_id, doc_snapshot_column, _opts.compression_type); + RETURN_IF_ERROR(ColumnWriter::create_map_writer(_opts, &doc_snapshot_column, _opts.file_writer, + &_doc_snapshot_column_writer)); + RETURN_IF_ERROR(_doc_snapshot_column_writer->init()); + + // convert root column data from engine format to storage layer format + converter->add_column_data_convertor(doc_snapshot_column); + // Convert MutableColumnPtr to ColumnPtr by creating a shared pointer from the raw pointer + // The ownership is maintained by _column, so this is safe + RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( + {variant_column->get_doc_snapshot_column(), nullptr, ""}, 0, num_rows, column_id)); + auto [status, column] = converter->convert_column_data(column_id); + RETURN_IF_ERROR(status); + RETURN_IF_ERROR(_doc_snapshot_column_writer->append(column->get_nullmap(), column->get_data(), + num_rows)); + converter->clear_source_content(column_id); + + _opts.meta->set_num_rows(num_rows); + + auto [column_key, column_value] = variant_column->get_doc_snapshot_data_paths_and_values(); + const auto& column_offsets = variant_column->serialized_doc_snapshot_column_offsets(); + std::map column_stats; + for (int64_t i = 0; i < num_rows; ++i) { + size_t start = column_offsets[i - 1]; + size_t end = column_offsets[i]; + for (size_t j = start; j < end; ++j) { + const auto& key = column_key->get_data_at(j); + column_stats[key] += 1; + } + } + auto* stats = _opts.meta->mutable_variant_statistics(); + auto* doc_snapshot_column_non_null_size = stats->mutable_doc_snapshot_column_non_null_size(); + for (const auto& [k, cnt] : column_stats) { + (*doc_snapshot_column_non_null_size)[k.to_string()] = cnt; + } + _is_finalized = true; + return Status::OK(); +} + +uint64_t VariantCompactionDocSnapshotWriter::estimate_buffer_size() { + return _column->byte_size(); +} + #include "common/compile_check_end.h" } // namespace doris::segment_v2 diff --git a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h index 32ff8301e3ac8d..ccd837cbf40a9c 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h @@ -19,6 +19,8 @@ #include +#include + #include "common/status.h" #include "olap/rowset/segment_v2/column_writer.h" #include "olap/rowset/segment_v2/indexed_column_writer.h" @@ -40,6 +42,40 @@ namespace segment_v2 { class ColumnWriter; class ScalarColumnWriter; +// Write already serialized binary data of variant columns into storage. +class VariantBinaryWriter { +public: + virtual ~VariantBinaryWriter() = default; + virtual Status init(const TabletColumn* parent_column, int bucket_num, int& column_id, + const ColumnWriterOptions& opts, SegmentFooterPB* footer) = 0; + virtual Status append_data(const TabletColumn* parent_column, + const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter) = 0; + virtual Status finish() = 0; + virtual Status write_data() = 0; + virtual Status write_ordinal_index() = 0; + virtual uint64_t estimate_buffer_size() const = 0; +}; + +class VariantDocSnapShotWriter : public VariantBinaryWriter { +public: + ~VariantDocSnapShotWriter() override = default; + Status init(const TabletColumn* parent_column, int bucket_num, int& column_id, + const ColumnWriterOptions& opts, SegmentFooterPB* footer) override; + Status append_data(const TabletColumn* parent_column, const vectorized::ColumnVariant& src, + size_t num_rows, vectorized::OlapBlockDataConvertor* converter) override; + Status finish() override; + Status write_data() override; + Status write_ordinal_index() override; + uint64_t estimate_buffer_size() const override; + +private: + int _bucket_num = 0; + int _first_column_id = -1; + std::vector> _doc_snapshot_column_writers; + std::vector _doc_snapshot_column_opts; +}; + // Unifies writing of Variant sparse data in two modes: // 1) Single sparse column: one Map(String,String) column `__DORIS_VARIANT_SPARSE__` // 2) Bucketized sparse columns: N Map columns `__DORIS_VARIANT_SPARSE__.b{i}` @@ -52,8 +88,24 @@ class ScalarColumnWriter; // Invariants: // - `_first_column_id` stores the column_id assigned to the first sparse meta created by init* // and is used to bind converter column ids deterministically. -class UnifiedSparseColumnWriter { +// - Single mode: convert src.get_sparse_column() and append to the single writer, populate +// out_stats (merged) and write stats to meta +// - Bucket mode: materialize N ColumnMap temporaries, distribute entries by +// schema_util::variant_sparse_shard_of(path), convert and append per bucket, and write +// per-bucket stats to metas +class UnifiedSparseColumnWriter : public VariantBinaryWriter { public: + ~UnifiedSparseColumnWriter() override = default; + Status init(const TabletColumn* parent_column, int bucket_num, int& column_id, + const ColumnWriterOptions& opts, SegmentFooterPB* footer) override; + Status append_data(const TabletColumn* parent_column, const vectorized::ColumnVariant& src, + size_t num_rows, vectorized::OlapBlockDataConvertor* converter) override; + uint64_t estimate_buffer_size() const override; + Status finish() override; + Status write_data() override; + Status write_ordinal_index() override; + +private: // Initialize single sparse column writer and consume one column_id. Status init_single(const TabletColumn& sparse_column, int& column_id, const ColumnWriterOptions& base_opts, SegmentFooterPB* footer); @@ -62,42 +114,14 @@ class UnifiedSparseColumnWriter { Status init_buckets(int bucket_num, const TabletColumn& parent_column, int& column_id, const ColumnWriterOptions& base_opts, SegmentFooterPB* footer); - bool has_single() const { return static_cast(_single_writer); } - bool has_buckets() const { return !_bucket_writers.empty(); } - bool is_bucket_mode() const { return has_buckets(); } - int bucket_num() const { return static_cast(_bucket_writers.size()); } - - ColumnWriter* single_writer() const { return _single_writer.get(); } - ColumnWriterOptions* single_opts() { return &_single_opts; } - const ColumnWriterOptions* single_opts() const { return &_single_opts; } + Status append_single_sparse(const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter, + const TabletColumn& parent_column); - std::vector>& bucket_writers() { return _bucket_writers; } - const std::vector>& bucket_writers() const { - return _bucket_writers; - } - std::vector& bucket_opts() { return _bucket_opts; } - const std::vector& bucket_opts() const { return _bucket_opts; } + Status append_bucket_sparse(const vectorized::ColumnVariant& src, size_t num_rows, + vectorized::OlapBlockDataConvertor* converter, + const TabletColumn& parent_column); - // Delegate lifecycle operations to the underlying writer(s). - uint64_t estimate_buffer_size() const; - Status finish(); - Status write_data(); - Status write_ordinal_index(); - - // Append data from ColumnVariant into single/bucket writers and fill statistics/meta. - // - For single mode: updates out_statistics and writes stats to single meta, sets num_rows - // - For bucket mode: writes per-bucket stats to each bucket meta, sets num_rows - // Convert and append Variant's sparse data: - // - Single mode: convert src.get_sparse_column() and append to the single writer, populate - // out_stats (merged) and write stats to meta - // - Bucket mode: materialize N ColumnMap temporaries, distribute entries by - // schema_util::variant_sparse_shard_of(path), convert and append per bucket, and write - // per-bucket stats to metas - Status append_from_variant(const vectorized::ColumnVariant& src, size_t num_rows, - vectorized::OlapBlockDataConvertor* converter, - const TabletColumn& tablet_column, VariantStatistics* out_stats); - -private: // Single sparse writer and its options/meta std::unique_ptr _single_writer; ColumnWriterOptions _single_opts; @@ -106,6 +130,7 @@ class UnifiedSparseColumnWriter { std::vector _bucket_opts; // remember assigned column ids for conversion int _first_column_id = -1; + int _bucket_num = 0; }; class VariantColumnWriterImpl { @@ -136,6 +161,9 @@ class VariantColumnWriterImpl { Status _process_subcolumns(vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id); + Status _process_doc_snapshot_column(vectorized::ColumnVariant* ptr, + vectorized::OlapBlockDataConvertor* converter, + size_t num_rows, int& column_id); // prepare a column for finalize doris::vectorized::ColumnVariant::MutablePtr _column; doris::vectorized::ColumnUInt8::MutablePtr _null_column; @@ -148,9 +176,7 @@ class VariantColumnWriterImpl { UnifiedSparseColumnWriter _sparse_writer; std::vector> _subcolumn_writers; std::vector _subcolumn_opts; - - // staticstics which will be persisted in the footer - VariantStatistics _statistics; + VariantDocSnapShotWriter _doc_snapshot_writer; // hold the references of subcolumns indexes std::vector _subcolumns_indexes; @@ -159,6 +185,66 @@ class VariantColumnWriterImpl { std::unordered_map _subcolumns_info; }; +class VariantCompactionDocSnapshotWriter : public ColumnWriter { +public: + explicit VariantCompactionDocSnapshotWriter(const ColumnWriterOptions& opts, + const TabletColumn* column, + std::unique_ptr field); + + ~VariantCompactionDocSnapshotWriter() override = default; + + Status init() override; + bool is_finalized() const { return _is_finalized; } + + Status append_data(const uint8_t** ptr, size_t num_rows) override; + + uint64_t estimate_buffer_size() override; + + Status finish() override; + Status write_data() override; + Status write_ordinal_index() override; + + Status write_zone_map() override; + + Status write_inverted_index() override; + Status write_bloom_filter_index() override; + ordinal_t get_next_rowid() const override { return _next_rowid; } + + uint64_t get_raw_data_bytes() const override { + return 0; // TODO + } + + uint64_t get_total_uncompressed_data_pages_bytes() const override { + return 0; // TODO + } + + uint64_t get_total_compressed_data_pages_bytes() const override { + return 0; // TODO + } + + Status append_nulls(size_t num_rows) override { + return Status::NotSupported("variant writer can not append_nulls"); + } + Status append_nullable(const uint8_t* null_map, const uint8_t** ptr, size_t num_rows) override; + + Status finish_current_page() override { + return Status::NotSupported("variant writer has no data, can not finish_current_page"); + } + + Status finalize(); + +private: + ordinal_t _next_rowid = 0; + vectorized::MutableColumnPtr _column; + const TabletColumn* _tablet_column = nullptr; + ColumnWriterOptions _opts; + bool _is_finalized = false; + std::unique_ptr _doc_snapshot_column_writer; + std::vector> _subcolumn_writers; + std::vector _subcolumns_indexes; + std::vector _subcolumn_opts; +}; + void _init_column_meta(ColumnMetaPB* meta, uint32_t column_id, const TabletColumn& column, CompressionTypePB compression_type); diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp new file mode 100644 index 00000000000000..21fb98c75e9559 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp @@ -0,0 +1,347 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h" + +#include +#include +#include +#include + +#include "vec/columns/column_array.h" +#include "vec/columns/column_map.h" +#include "vec/columns/column_nullable.h" +#include "vec/columns/column_string.h" +#include "vec/common/string_ref.h" +#include "vec/data_types/data_type_nullable.h" +#include "vec/json/path_in_data.h" + +namespace doris::segment_v2 { + +#include "common/compile_check_begin.h" + +VariantDocSnapshotIteratorBase::VariantDocSnapshotIteratorBase( + std::vector&& doc_snapshot_column_caches) + : _doc_snapshot_column_caches(std::move(doc_snapshot_column_caches)) {} + +Status VariantDocSnapshotIteratorBase::init(const ColumnIteratorOptions& opts) { + for (const auto& cache : _doc_snapshot_column_caches) { + RETURN_IF_ERROR(cache->init(opts)); + } + return Status::OK(); +} + +Status VariantDocSnapshotIteratorBase::seek_to_ordinal(ordinal_t ord) { + for (const auto& cache : _doc_snapshot_column_caches) { + RETURN_IF_ERROR(cache->seek_to_ordinal(ord)); + } + return Status::OK(); +} + +ordinal_t VariantDocSnapshotIteratorBase::get_current_ordinal() const { + DCHECK(!_doc_snapshot_column_caches.empty()); + return _doc_snapshot_column_caches[0]->get_current_ordinal(); +} + +VariantDocSnapshotRootIterator::VariantDocSnapshotRootIterator( + std::vector&& doc_snapshot_column_caches, + std::unique_ptr&& root_reader) + : VariantDocSnapshotIteratorBase(std::move(doc_snapshot_column_caches)), + _root_reader(std::move(root_reader)) {} + +Status VariantDocSnapshotRootIterator::init(const ColumnIteratorOptions& opts) { + RETURN_IF_ERROR(VariantDocSnapshotIteratorBase::init(opts)); + DCHECK(_root_reader); + RETURN_IF_ERROR(_root_reader->iterator->init(opts)); + return Status::OK(); +} + +Status VariantDocSnapshotRootIterator::seek_to_ordinal(ordinal_t ord) { + RETURN_IF_ERROR(VariantDocSnapshotIteratorBase::seek_to_ordinal(ord)); + DCHECK(_root_reader); + RETURN_IF_ERROR(_root_reader->iterator->seek_to_ordinal(ord)); + return Status::OK(); +} + +Status VariantDocSnapshotRootIterator::next_batch(size_t* n, vectorized::MutableColumnPtr& dst, + bool* has_null) { + DCHECK(_root_reader); + RETURN_IF_ERROR(_root_reader->iterator->next_batch(n, _root_reader->column, has_null)); + std::vector doc_snapshot_data_buckets; + RETURN_IF_ERROR(_collect_doc_snapshot_data( + [&](BinaryColumnCache* cache) { return cache->next_batch(n, has_null); }, + &doc_snapshot_data_buckets)); + + size_t num_rows = doc_snapshot_data_buckets.empty() ? 0 : doc_snapshot_data_buckets[0]->size(); + if (n != nullptr) { + *n = num_rows; + } + RETURN_IF_ERROR(_merge_doc_snapshot_into_variant(dst, doc_snapshot_data_buckets, num_rows)); + _root_reader->column->clear(); + return Status::OK(); +} + +Status VariantDocSnapshotRootIterator::read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) { + DCHECK(_root_reader); + RETURN_IF_ERROR(_root_reader->iterator->read_by_rowids(rowids, count, _root_reader->column)); + std::vector doc_snapshot_data_buckets; + RETURN_IF_ERROR(_collect_doc_snapshot_data( + [&](BinaryColumnCache* cache) { return cache->read_by_rowids(rowids, count); }, + &doc_snapshot_data_buckets)); + + size_t num_rows = doc_snapshot_data_buckets.empty() ? 0 : doc_snapshot_data_buckets[0]->size(); + RETURN_IF_ERROR(_merge_doc_snapshot_into_variant(dst, doc_snapshot_data_buckets, num_rows)); + _root_reader->column->clear(); + return Status::OK(); +} + +Status VariantDocSnapshotRootIterator::_merge_doc_snapshot_into_variant( + vectorized::MutableColumnPtr& dst, + const std::vector& doc_snapshot_data_buckets, + size_t num_rows) const { + using namespace vectorized; + ColumnNullable* nullable_column = nullptr; + if (dst->is_nullable()) { + nullable_column = assert_cast(dst.get()); + } + auto& variant = nullable_column == nullptr + ? assert_cast(*dst) + : assert_cast(nullable_column->get_nested_column()); + NullMap* null_map = nullable_column ? &nullable_column->get_null_map_data() : nullptr; + + std::vector src_doc_snapshot_data_paths_buckets( + doc_snapshot_data_buckets.size()); + std::vector src_doc_snapshot_data_values_buckets( + doc_snapshot_data_buckets.size()); + std::vector src_doc_snapshot_data_offsets_buckets( + doc_snapshot_data_buckets.size()); + for (size_t i = 0; i != doc_snapshot_data_buckets.size(); ++i) { + const auto& src_map = + assert_cast(*doc_snapshot_data_buckets[i]); + src_doc_snapshot_data_paths_buckets[i] = + assert_cast(&src_map.get_keys()); + src_doc_snapshot_data_values_buckets[i] = + assert_cast(&src_map.get_values()); + src_doc_snapshot_data_offsets_buckets[i] = + assert_cast(&src_map.get_offsets()); + } + + CHECK(_root_reader); + MutableColumnPtr root_column = _root_reader->column->get_ptr(); + DCHECK(root_column->size() == num_rows); + auto root_nullable_column = make_nullable(root_column->get_ptr()); + auto root_type = make_nullable(_root_reader->type); + MutableColumnPtr container = ColumnVariant::create(variant.max_subcolumns_count(), root_type, + root_nullable_column->assume_mutable()); + auto& container_variant = assert_cast(*container); + vectorized::MutableColumnPtr doc_snapshot_column = + vectorized::ColumnVariant::create_binary_column_fn(); + + auto& column_map = assert_cast(*doc_snapshot_column); + auto& dst_doc_snapshot_data_paths = + assert_cast(column_map.get_keys()); + auto& dst_doc_snapshot_data_values = + assert_cast(column_map.get_values()); + auto& dst_doc_snapshot_data_offsets = + assert_cast(column_map.get_offsets()); + for (size_t i = 0; i != num_rows; ++i) { + std::vector> all_paths; + for (size_t bucket = 0; bucket != doc_snapshot_data_buckets.size(); ++bucket) { + size_t offset_start = (*src_doc_snapshot_data_offsets_buckets[bucket])[ssize_t(i) - 1]; + size_t offset_end = (*src_doc_snapshot_data_offsets_buckets[bucket])[ssize_t(i)]; + for (size_t j = offset_start; j != offset_end; ++j) { + auto path = src_doc_snapshot_data_paths_buckets[bucket] + ->get_data_at(j) + .to_string_view(); + all_paths.emplace_back(path, bucket, j); + } + } + + std::sort(all_paths.begin(), all_paths.end()); + for (const auto& [path, bucket, offset] : all_paths) { + dst_doc_snapshot_data_paths.insert_data(path.data(), path.size()); + dst_doc_snapshot_data_values.insert_from(*src_doc_snapshot_data_values_buckets[bucket], + offset); + } + + dst_doc_snapshot_data_offsets.push_back(dst_doc_snapshot_data_paths.size()); + } + + container_variant.set_doc_snapshot_column(std::move(doc_snapshot_column)); + + if (null_map) { + if (_root_reader->column->is_nullable()) { + ColumnUInt8& src_null_map = + assert_cast(*_root_reader->column).get_null_map_column(); + nullable_column->get_null_map_column().insert_range_from(src_null_map, 0, + src_null_map.size()); + } else { + auto fake_nullable_column = ColumnUInt8::create(num_rows, 0); + nullable_column->get_null_map_column().insert_range_from(*fake_nullable_column, 0, + num_rows); + } + } + variant.insert_range_from(container_variant, 0, num_rows); + variant.finalize(); + return Status::OK(); +} + +VariantDocSnapshotPathIterator::VariantDocSnapshotPathIterator( + std::vector&& doc_snapshot_column_caches, std::string path) + : VariantDocSnapshotIteratorBase(std::move(doc_snapshot_column_caches)), + _path(std::move(path)) {} + +Status VariantDocSnapshotPathIterator::next_batch(size_t* n, vectorized::MutableColumnPtr& dst, + bool* has_null) { + std::vector doc_snapshot_data_buckets; + RETURN_IF_ERROR(_collect_doc_snapshot_data( + [&](BinaryColumnCache* cache) { return cache->next_batch(n, has_null); }, + &doc_snapshot_data_buckets)); + + size_t num_rows = doc_snapshot_data_buckets.empty() ? 0 : doc_snapshot_data_buckets[0]->size(); + if (n != nullptr) { + *n = num_rows; + } + return _merge_doc_snapshot_into_variant(dst, doc_snapshot_data_buckets, num_rows); +} + +Status VariantDocSnapshotPathIterator::read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) { + std::vector doc_snapshot_data_buckets; + RETURN_IF_ERROR(_collect_doc_snapshot_data( + [&](BinaryColumnCache* cache) { return cache->read_by_rowids(rowids, count); }, + &doc_snapshot_data_buckets)); + + size_t num_rows = doc_snapshot_data_buckets.empty() ? 0 : doc_snapshot_data_buckets[0]->size(); + RETURN_IF_ERROR(_merge_doc_snapshot_into_variant(dst, doc_snapshot_data_buckets, num_rows)); + return Status::OK(); +} + +Status VariantDocSnapshotPathIterator::_merge_doc_snapshot_into_variant( + vectorized::MutableColumnPtr& dst, + const std::vector& doc_snapshot_data_buckets, + size_t num_rows) const { + using namespace vectorized; + ColumnNullable* nullable_column = nullptr; + if (dst->is_nullable()) { + nullable_column = assert_cast(dst.get()); + } + auto& variant = nullable_column == nullptr + ? assert_cast(*dst) + : assert_cast(nullable_column->get_nested_column()); + NullMap* null_map = nullable_column ? &nullable_column->get_null_map_data() : nullptr; + + std::vector src_doc_snapshot_data_paths_buckets( + doc_snapshot_data_buckets.size()); + std::vector src_doc_snapshot_data_values_buckets( + doc_snapshot_data_buckets.size()); + std::vector src_doc_snapshot_data_offsets_buckets( + doc_snapshot_data_buckets.size()); + for (size_t i = 0; i != doc_snapshot_data_buckets.size(); ++i) { + const auto& src_map = + assert_cast(*doc_snapshot_data_buckets[i]); + src_doc_snapshot_data_paths_buckets[i] = + assert_cast(&src_map.get_keys()); + src_doc_snapshot_data_values_buckets[i] = + assert_cast(&src_map.get_values()); + src_doc_snapshot_data_offsets_buckets[i] = + assert_cast(&src_map.get_offsets()); + } + + MutableColumnPtr container = variant.clone_resized(0); + auto& container_variant = assert_cast(*container); + auto [variant_sparse_keys, variant_sparse_values] = + container_variant.get_sparse_data_paths_and_values(); + auto& variant_sparse_offsets = container_variant.serialized_sparse_column_offsets(); + std::unordered_map subcolumn_map; + StringRef prefix_ref(_path.data(), _path.size()); + for (size_t i = 0; i != num_rows; ++i) { + bool has_data = false; + std::vector> all_paths; + for (size_t bucket = 0; bucket != doc_snapshot_data_buckets.size(); ++bucket) { + size_t offset_start = (*src_doc_snapshot_data_offsets_buckets[bucket])[ssize_t(i) - 1]; + size_t offset_end = (*src_doc_snapshot_data_offsets_buckets[bucket])[ssize_t(i)]; + size_t lower_bound_index = + vectorized::ColumnVariant::find_path_lower_bound_in_sparse_data( + prefix_ref, *src_doc_snapshot_data_paths_buckets[bucket], offset_start, + offset_end); + for (; lower_bound_index != offset_end; ++lower_bound_index) { + auto path_ref = (*src_doc_snapshot_data_paths_buckets[bucket]) + .get_data_at(lower_bound_index); + std::string_view path(path_ref.data, path_ref.size); + if (!path.starts_with(prefix_ref)) { + break; + } + if (path.size() == prefix_ref.size) { + has_data = true; + container_variant.get_subcolumn({})->deserialize_from_binary_column( + src_doc_snapshot_data_values_buckets[bucket], lower_bound_index); + continue; + } + if (path.size() > prefix_ref.size && path.at(prefix_ref.size) != '.') { + continue; + } + has_data = true; + + if (auto it = subcolumn_map.find(path); it != subcolumn_map.end()) { + it->second.deserialize_from_binary_column( + src_doc_snapshot_data_values_buckets[bucket], lower_bound_index); + } else { + ColumnVariant::Subcolumn subcolumn(/*size*/ i, /*is_nullable*/ true, false); + subcolumn.deserialize_from_binary_column( + src_doc_snapshot_data_values_buckets[bucket], lower_bound_index); + subcolumn_map[path] = std::move(subcolumn); + } + } + } + variant_sparse_offsets.push_back(variant_sparse_keys->size()); + if (container_variant.get_subcolumn({})->size() == i) { + container_variant.get_subcolumn({})->insert_default(); + } + for (auto& [path, subcolumn] : subcolumn_map) { + if (subcolumn.size() == i) { + subcolumn.insert_default(); + } + } + container_variant.serialized_doc_snapshot_column_offsets().push_back(0); + if (null_map) { + if (has_data) { + null_map->push_back(false); + } else { + null_map->push_back(true); + } + } + } + container_variant.set_num_rows(num_rows); + for (auto& [path, subcolumn] : subcolumn_map) { + subcolumn.finalize(); + if (!container_variant.add_sub_column(PathInData(path.substr(prefix_ref.size + 1)), + IColumn::mutate(subcolumn.get_finalized_column_ptr()), + subcolumn.get_least_common_type())) { + return Status::InternalError("Failed to add subcolumn {}, which is from sparse column", + path); + } + } + variant.insert_range_from(container_variant, 0, num_rows); + variant.finalize(); + return Status::OK(); +} + +#include "common/compile_check_end.h" + +} // namespace doris::segment_v2 diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h new file mode 100644 index 00000000000000..de19353d45049e --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h @@ -0,0 +1,99 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "olap/rowset/segment_v2/column_reader.h" +#include "olap/rowset/segment_v2/variant/variant_column_reader.h" +#include "vec/columns/column_variant.h" + +namespace doris::segment_v2 { + +#include "common/compile_check_begin.h" + +class VariantDocSnapshotIteratorBase : public ColumnIterator { +public: + explicit VariantDocSnapshotIteratorBase( + std::vector&& doc_snapshot_column_caches); + ~VariantDocSnapshotIteratorBase() override = default; + + Status init(const ColumnIteratorOptions& opts) override; + Status seek_to_ordinal(ordinal_t ord) override; + ordinal_t get_current_ordinal() const override; + + Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override = 0; + Status read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) override = 0; + +protected: + template + Status _collect_doc_snapshot_data( + ReaderFunc&& reader_func, + std::vector* doc_snapshot_data_buckets) { + doc_snapshot_data_buckets->clear(); + doc_snapshot_data_buckets->reserve(_doc_snapshot_column_caches.size()); + for (const auto& cache : _doc_snapshot_column_caches) { + DCHECK(cache); + RETURN_IF_ERROR(reader_func(cache.get())); + DCHECK(cache->binary_column); + doc_snapshot_data_buckets->emplace_back(cache->binary_column->get_ptr()); + } + return Status::OK(); + } + + std::vector _doc_snapshot_column_caches; +}; + +class VariantDocSnapshotRootIterator final : public VariantDocSnapshotIteratorBase { +public: + VariantDocSnapshotRootIterator(std::vector&& doc_snapshot_column_caches, + std::unique_ptr&& root_reader); + + Status init(const ColumnIteratorOptions& opts) override; + Status seek_to_ordinal(ordinal_t ord) override; + Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override; + Status read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) override; + +private: + Status _merge_doc_snapshot_into_variant( + vectorized::MutableColumnPtr& dst, + const std::vector& doc_snapshot_data_buckets, + size_t num_rows) const; + + std::unique_ptr _root_reader; +}; + +class VariantDocSnapshotPathIterator final : public VariantDocSnapshotIteratorBase { +public: + VariantDocSnapshotPathIterator(std::vector&& doc_snapshot_column_caches, + std::string path); + + Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override; + Status read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) override; + +private: + Status _merge_doc_snapshot_into_variant( + vectorized::MutableColumnPtr& dst, + const std::vector& doc_snapshot_data_buckets, + size_t num_rows) const; + + std::string _path; +}; + +#include "common/compile_check_end.h" + +} // namespace doris::segment_v2 \ No newline at end of file diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h b/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h new file mode 100644 index 00000000000000..70ff95eced4b7d --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h @@ -0,0 +1,74 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +namespace doris::segment_v2 { + +#include "common/compile_check_begin.h" +#include "olap/rowset/segment_v2/column_reader.h" +#include "vec/columns/column_variant.h" + +class VariantDocSnapshotCompactIterator : public ColumnIterator { +public: + VariantDocSnapshotCompactIterator(ColumnIteratorUPtr&& column_iterator) + : _doc_snapshot_iterator(std::move(column_iterator)) {} + + Status init(const ColumnIteratorOptions& opts) override { + return _doc_snapshot_iterator->init(opts); + } + + Status seek_to_ordinal(ordinal_t ord) override { + return _doc_snapshot_iterator->seek_to_ordinal(ord); + } + + Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override { + vectorized::MutableColumnPtr doc_snapshot_column = + vectorized::ColumnVariant::create_binary_column_fn(); + RETURN_IF_ERROR(_doc_snapshot_iterator->next_batch(n, doc_snapshot_column, has_null)); + return _set_doc_snapshot_into_variant(dst, std::move(doc_snapshot_column), *n); + } + + Status read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) override { + vectorized::MutableColumnPtr doc_snapshot_column = + vectorized::ColumnVariant::create_binary_column_fn(); + RETURN_IF_ERROR(_doc_snapshot_iterator->read_by_rowids(rowids, count, doc_snapshot_column)); + return _set_doc_snapshot_into_variant(dst, std::move(doc_snapshot_column), count); + } + + ordinal_t get_current_ordinal() const override { + return _doc_snapshot_iterator->get_current_ordinal(); + } + +private: + Status _set_doc_snapshot_into_variant(vectorized::MutableColumnPtr& dst, + vectorized::MutableColumnPtr&& doc_snapshot_column, + size_t count) const { + auto& variant = assert_cast(*dst); + vectorized::MutableColumnPtr container = + vectorized::ColumnVariant::create(variant.max_subcolumns_count(), count); + auto& container_variant = assert_cast(*container); + container_variant.set_doc_snapshot_column(std::move(doc_snapshot_column)); + variant.insert_range_from(container_variant, 0, count); + return Status::OK(); + } + + ColumnIteratorUPtr _doc_snapshot_iterator; +}; + +#include "common/compile_check_end.h" + +} // namespace doris::segment_v2 \ No newline at end of file diff --git a/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp b/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp index b31a9ceff20d33..a3eeda43759366 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp +++ b/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp @@ -85,6 +85,7 @@ struct ColumnClassification { std::vector top_level_columns; std::unordered_map>> pending_subcols; std::unordered_map> pending_sparse; + std::unordered_map> pending_doc_snapshot; size_t externalized_count = 0; }; @@ -106,6 +107,8 @@ static void classify_columns(const SegmentFooterPB& footer, ColumnClassification if (rel_path.find("__DORIS_VARIANT_SPARSE__") != std::string::npos) { classification.pending_sparse[root_uid].emplace_back(col); + } else if (rel_path.find("__DORIS_VARIANT_DOC_SNAPSHOT__") != std::string::npos) { + classification.pending_doc_snapshot[root_uid].emplace_back(col); } else { classification.pending_subcols[root_uid].emplace_back(rel_path, col); classification.externalized_count++; @@ -135,16 +138,11 @@ Status VariantExtMetaWriter::externalize_from_footer(SegmentFooterPB* footer, out_metas->clear(); out_metas->reserve(footer->columns_size()); // Rough estimate - std::vector kept_footer_columns; - kept_footer_columns.reserve(footer->columns_size()); - for (auto& col : classification.top_level_columns) { // Add Top Level Column out_metas->emplace_back(col); // Keep it in footer columns as well - kept_footer_columns.emplace_back(col); ColumnMetaPB* current_root_meta = &out_metas->back(); - ColumnMetaPB* footer_root_meta = &kept_footer_columns.back(); // Check if it is a Variant Root if (col.type() == int(FieldType::OLAP_FIELD_TYPE_VARIANT)) { @@ -155,11 +153,18 @@ Status VariantExtMetaWriter::externalize_from_footer(SegmentFooterPB* footer, it != classification.pending_sparse.end()) { for (const auto& sparse_meta : it->second) { current_root_meta->add_children_columns()->CopyFrom(sparse_meta); - footer_root_meta->add_children_columns()->CopyFrom(sparse_meta); } } - // 2. Append non-sparse subcolumns to out_metas and record path-only keys + // 2. Embed doc snapshot subcolumns + if (auto it = classification.pending_doc_snapshot.find(root_uid); + it != classification.pending_doc_snapshot.end()) { + for (const auto& doc_snapshot_meta : it->second) { + current_root_meta->add_children_columns()->CopyFrom(doc_snapshot_meta); + } + } + + // 3. Append non-sparse subcolumns to out_metas and record path-only keys if (auto it = classification.pending_subcols.find(root_uid); it != classification.pending_subcols.end()) { // Sort by path for consistent index order @@ -183,15 +188,10 @@ Status VariantExtMetaWriter::externalize_from_footer(SegmentFooterPB* footer, // Write the index to footer RETURN_IF_ERROR(flush_to_footer(footer)); - // Update footer.columns to only contain Top Level Columns (with embedded sparse cols) footer->clear_columns(); - for (const auto& c : kept_footer_columns) { - footer->add_columns()->CopyFrom(c); - } VLOG_DEBUG << "VariantExtMetaWriter::externalize_from_footer, externalized subcolumns: " << classification.externalized_count - << ", kept columns: " << kept_footer_columns.size() << ", total meta entries: " << out_metas->size(); return Status::OK(); } diff --git a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h index 8f01f35497879d..c82b7aceaaadbe 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h @@ -20,31 +20,28 @@ #include #include +#include "gen_cpp/segment_v2.pb.h" + namespace doris { namespace segment_v2 { #include "common/compile_check_begin.h" struct VariantStatistics { - // If reached the size of this, we should stop writing statistics for sparse data - std::map subcolumns_non_null_size; - std::map sparse_column_non_null_size; + std::map subcolumns_non_null_size; + // sparse column non-null size for all buckets + std::map sparse_column_non_null_size; + + // doc snapshot column non-null size for each bucket + std::unordered_map>> doc_snapshot_column_paths; void to_pb(VariantStatisticsPB* stats) const { + auto* sparse_map = stats->mutable_sparse_column_non_null_size(); for (const auto& [path, value] : sparse_column_non_null_size) { - stats->mutable_sparse_column_non_null_size()->emplace(path, value); - } - LOG(INFO) << "num subcolumns " << subcolumns_non_null_size.size() << ", num sparse columns " - << sparse_column_non_null_size.size(); - } - - void from_pb(const VariantStatisticsPB& stats) { - for (const auto& [path, value] : stats.sparse_column_non_null_size()) { - sparse_column_non_null_size[path] = value; + (*sparse_map)[path] = value; } } }; - #include "common/compile_check_end.h" } // namespace segment_v2 diff --git a/be/src/olap/rowset/segment_v2/variant/variant_util.cpp b/be/src/olap/rowset/segment_v2/variant/variant_util.cpp new file mode 100644 index 00000000000000..5a1639aff24d37 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/variant_util.cpp @@ -0,0 +1,176 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "olap/rowset/segment_v2/variant/variant_util.h" + +#include + +#include +#include + +#include "common/status.h" +#include "olap/tablet_schema.h" +#include "vec/columns/column.h" +#include "vec/columns/column_nullable.h" +#include "vec/columns/column_string.h" +#include "vec/columns/column_variant.h" +#include "vec/common/assert_cast.h" +#include "vec/common/schema_util.h" +#include "vec/data_types/data_type_jsonb.h" +#include "vec/data_types/data_type_nullable.h" +#include "vec/data_types/data_type_string.h" +#include "vec/data_types/data_type_variant.h" +#include "vec/json/parse2column.h" + +namespace doris::segment_v2::variant_util { + +namespace { + +Status _parse_variant_columns(vectorized::Block& block, const std::vector& variant_pos, + const std::vector& configs) { + for (size_t i = 0; i < variant_pos.size(); ++i) { + auto column_ref = block.get_by_position(variant_pos[i]).column; + bool is_nullable = column_ref->is_nullable(); + vectorized::MutableColumnPtr var_column = column_ref->assume_mutable(); + if (is_nullable) { + const auto& nullable = assert_cast(*column_ref); + var_column = nullable.get_nested_column_ptr()->assume_mutable(); + } + auto& var = assert_cast(*var_column); + var_column->finalize(); + + vectorized::MutableColumnPtr variant_column; + if (var.is_doc_snapshot_mode()) { + // doc snapshot mode, we need to parse the doc snapshot column + vectorized::parse_binary_to_variant(var); + continue; + } + if (!var.is_scalar_variant()) { + // already parsed + continue; + } + + VLOG_DEBUG << "parse scalar variant column: " << var.get_root_type()->get_name(); + vectorized::ColumnPtr scalar_root_column; + if (var.get_root_type()->get_primitive_type() == TYPE_JSONB) { + // TODO more efficient way to parse jsonb type, currently we just convert jsonb to + // json str and parse them into variant + RETURN_IF_ERROR(vectorized::schema_util::cast_column( + {var.get_root(), var.get_root_type(), ""}, + var.get_root()->is_nullable() + ? make_nullable(std::make_shared()) + : std::make_shared(), + &scalar_root_column)); + if (scalar_root_column->is_nullable()) { + scalar_root_column = + assert_cast(scalar_root_column.get()) + ->get_nested_column_ptr(); + } + } else { + const auto& root = *var.get_root(); + scalar_root_column = root.is_nullable() + ? assert_cast(root) + .get_nested_column_ptr() + : var.get_root(); + } + + if (scalar_root_column->is_column_string()) { + variant_column = vectorized::ColumnVariant::create(0); + vectorized::parse_json_to_variant( + *variant_column.get(), + assert_cast(*scalar_root_column), configs[i]); + } else { + // Root maybe other types rather than string like ColumnVariant(Int32). + // In this case, we should finlize the root and cast to JSON type + auto expected_root_type = + make_nullable(std::make_shared()); + var.ensure_root_node_type(expected_root_type); + variant_column = var.assume_mutable(); + } + + // Wrap variant with nullmap if it is nullable + vectorized::ColumnPtr result = variant_column->get_ptr(); + if (is_nullable) { + const auto& null_map = assert_cast(*column_ref) + .get_null_map_column_ptr(); + result = vectorized::ColumnNullable::create(result, null_map); + } + block.get_by_position(variant_pos[i]).column = result; + } + return Status::OK(); +} + +} // namespace + +Status parse_variant_columns(vectorized::Block& block, const std::vector& variant_pos, + const std::vector& configs) { + RETURN_IF_CATCH_EXCEPTION({ return _parse_variant_columns(block, variant_pos, configs); }); +} + +Status parse_variant_columns(vectorized::Block& block, const TabletSchema& tablet_schema, + const std::vector& column_pos) { + std::vector variant_column_pos; + for (const auto& pos : column_pos) { + const auto& column = tablet_schema.column(pos); + if (column.is_variant_type()) { + variant_column_pos.push_back(pos); + } + } + + if (variant_column_pos.empty()) { + return Status::OK(); + } + + std::vector configs(variant_column_pos.size()); + for (size_t i = 0; i < variant_column_pos.size(); ++i) { + configs[i].enable_flatten_nested = tablet_schema.variant_flatten_nested(); + const auto& column = tablet_schema.column(variant_column_pos[i]); + if (column.is_variant_type()) { + // enable doc snapshot mode + if (column.variant_enable_doc_snapshot_mode()) { + // if has schema template, no need to parse to doc snapshot, when writing data, we + // will parse to doc snapshot + if (column.get_sub_columns().empty()) { + configs[i].parse_to_doc_snapshot = true; + } else { + configs[i].parse_to_subcolumns = false; + } + + // if min rows is greater than 0, no need to parse to subcolumns + // when compaction row size is greater than min rows, parse to subcolumns + if (column.variant_doc_snapshot_min_rows() > 0) { + configs[i].parse_to_subcolumns = false; + } else { + configs[i].parse_to_subcolumns = true; + } + } else { + // default: only parse to subcolumns + configs[i].parse_to_subcolumns = true; + configs[i].parse_to_doc_snapshot = false; + } + } else { + return Status::InternalError("column is not variant type, column name: {}", + column.name()); + } + } + + RETURN_IF_ERROR(doris::segment_v2::variant_util::parse_variant_columns( + block, variant_column_pos, configs)); + return Status::OK(); +} + +} // namespace doris::segment_v2::variant_util diff --git a/be/src/olap/rowset/segment_v2/variant/variant_util.h b/be/src/olap/rowset/segment_v2/variant/variant_util.h new file mode 100644 index 00000000000000..837a1525878580 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/variant_util.h @@ -0,0 +1,43 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include + +#include "common/status.h" +#include "vec/json/json_parser.h" + +namespace doris { +class TabletSchema; +namespace vectorized { +class Block; +} // namespace vectorized +} // namespace doris + +namespace doris::segment_v2::variant_util { + +// Parse variant columns by picking variant positions from `column_pos` and generating ParseConfig +// based on tablet schema settings (flatten nested / doc snapshot mode). +Status parse_variant_columns(vectorized::Block& block, const TabletSchema& tablet_schema, + const std::vector& column_pos); + +// Moved from `vec/common/schema_util.{h,cpp}`. +Status parse_variant_columns(vectorized::Block& block, const std::vector& variant_pos, + const std::vector& configs); + +} // namespace doris::segment_v2::variant_util \ No newline at end of file diff --git a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp index c50a03cb845a7c..eb9165f4626151 100644 --- a/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp +++ b/be/src/olap/rowset/segment_v2/vertical_segment_writer.cpp @@ -56,6 +56,7 @@ #include "olap/rowset/segment_v2/page_io.h" #include "olap/rowset/segment_v2/page_pointer.h" #include "olap/rowset/segment_v2/variant/variant_ext_meta_writer.h" +#include "olap/rowset/segment_v2/variant/variant_util.h" #include "olap/segment_loader.h" #include "olap/short_key_index.h" #include "olap/tablet_schema.h" @@ -528,6 +529,11 @@ Status VerticalSegmentWriter::_append_block_with_partial_content(RowsInBlock& da full_block.replace_by_position(i, data.block->get_by_position(input_id++).column); } + if (_opts.rowset_ctx->write_type != DataWriteType::TYPE_COMPACTION && + _tablet_schema->num_variant_columns() > 0) { + RETURN_IF_ERROR( + variant_util::parse_variant_columns(full_block, *_tablet_schema, including_cids)); + } bool have_input_seq_column = false; // write including columns std::vector key_columns; @@ -800,6 +806,16 @@ Status VerticalSegmentWriter::_append_block_with_flexible_partial_content( // 7. fill row store column _serialize_block_to_row_column(full_block); + std::vector column_ids; + for (uint32_t i = 0; i < _tablet_schema->num_columns(); ++i) { + column_ids.emplace_back(i); + } + if (_opts.rowset_ctx->write_type != DataWriteType::TYPE_COMPACTION && + _tablet_schema->num_variant_columns() > 0) { + RETURN_IF_ERROR( + variant_util::parse_variant_columns(full_block, *_tablet_schema, column_ids)); + } + // 8. encode and write all non-primary key columns(including sequence column if exists) for (auto cid = _tablet_schema->num_key_columns(); cid < _tablet_schema->num_columns(); cid++) { if (cid != _tablet_schema->sequence_col_idx()) { @@ -991,6 +1007,18 @@ Status VerticalSegmentWriter::write_batch() { } } + std::vector column_ids; + for (uint32_t i = 0; i < _tablet_schema->num_columns(); ++i) { + column_ids.emplace_back(i); + } + if (_opts.rowset_ctx->write_type != DataWriteType::TYPE_COMPACTION && + _tablet_schema->num_variant_columns() > 0) { + for (auto& data : _batched_blocks) { + RETURN_IF_ERROR(variant_util::parse_variant_columns( + const_cast(*data.block), *_tablet_schema, column_ids)); + } + } + std::vector key_columns; vectorized::IOlapColumnDataAccessor* seq_column = nullptr; // the key is cluster key column unique id diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index f9e31f61f64843..0a2c0e258778b4 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -542,6 +542,15 @@ void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& tco if (tcolumn.__isset.variant_sparse_hash_shard_count) { column->set_variant_sparse_hash_shard_count(tcolumn.variant_sparse_hash_shard_count); } + if (tcolumn.__isset.variant_enable_doc_snapshot_mode) { + column->set_variant_enable_doc_snapshot_mode(tcolumn.variant_enable_doc_snapshot_mode); + } + if (tcolumn.__isset.variant_doc_snapshot_min_rows) { + column->set_variant_doc_snapshot_min_rows(tcolumn.variant_doc_snapshot_min_rows); + } + if (tcolumn.__isset.variant_doc_snapshot_shard_count) { + column->set_variant_doc_snapshot_shard_count(tcolumn.variant_doc_snapshot_shard_count); + } } 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 fdd4cb5945bb59..e644dadceabd41 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -668,6 +668,15 @@ void TabletColumn::init_from_pb(const ColumnPB& column) { if (column.has_variant_sparse_hash_shard_count()) { _variant_sparse_hash_shard_count = column.variant_sparse_hash_shard_count(); } + if (column.has_variant_enable_doc_snapshot_mode()) { + _variant_enable_doc_snapshot_mode = column.variant_enable_doc_snapshot_mode(); + } + if (column.has_variant_doc_snapshot_min_rows()) { + _variant_doc_snapshot_min_rows = column.variant_doc_snapshot_min_rows(); + } + if (column.has_variant_doc_snapshot_shard_count()) { + _variant_doc_snapshot_shard_count = column.variant_doc_snapshot_shard_count(); + } if (column.has_pattern_type()) { _pattern_type = column.pattern_type(); } @@ -751,6 +760,9 @@ void TabletColumn::to_schema_pb(ColumnPB* column) const { column->set_variant_max_sparse_column_statistics_size( _variant_max_sparse_column_statistics_size); column->set_variant_sparse_hash_shard_count(_variant_sparse_hash_shard_count); + column->set_variant_enable_doc_snapshot_mode(_variant_enable_doc_snapshot_mode); + column->set_variant_doc_snapshot_min_rows(_variant_doc_snapshot_min_rows); + column->set_variant_doc_snapshot_shard_count(_variant_doc_snapshot_shard_count); } 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 71396f3efa3847..a6ce0cc170bf42 100644 --- a/be/src/olap/tablet_schema.h +++ b/be/src/olap/tablet_schema.h @@ -213,12 +213,36 @@ class TabletColumn : public MetadataAdder { void set_frac(int frac) { _frac = frac; } + int32_t variant_max_subcolumns_count() const { return _variant_max_subcolumns_count; } + void set_variant_max_subcolumns_count(int32_t variant_max_subcolumns_count) { _variant_max_subcolumns_count = variant_max_subcolumns_count; } - void set_variant_enable_typed_paths_to_sparse(bool enable) { - _variant_enable_typed_paths_to_sparse = enable; + PatternTypePB pattern_type() const { return _pattern_type; } + + bool variant_enable_typed_paths_to_sparse() const { + return _variant_enable_typed_paths_to_sparse; + } + + int32_t variant_max_sparse_column_statistics_size() const { + return _variant_max_sparse_column_statistics_size; + } + + int32_t variant_sparse_hash_shard_count() const { return _variant_sparse_hash_shard_count; } + + bool variant_enable_doc_snapshot_mode() const { return _variant_enable_doc_snapshot_mode; } + + int64_t variant_doc_snapshot_min_rows() const { return _variant_doc_snapshot_min_rows; } + + int32_t variant_doc_snapshot_shard_count() const { return _variant_doc_snapshot_shard_count; } + + void set_variant_doc_snapshot_min_rows(int64_t variant_doc_snapshot_min_rows) { + _variant_doc_snapshot_min_rows = variant_doc_snapshot_min_rows; + } + + void set_variant_doc_snapshot_shard_count(int32_t variant_doc_snapshot_shard_count) { + _variant_doc_snapshot_shard_count = variant_doc_snapshot_shard_count; } void set_variant_max_sparse_column_statistics_size( @@ -230,20 +254,14 @@ class TabletColumn : public MetadataAdder { _variant_sparse_hash_shard_count = variant_sparse_hash_shard_count; } - int32_t variant_max_subcolumns_count() const { return _variant_max_subcolumns_count; } - - PatternTypePB pattern_type() const { return _pattern_type; } - - bool variant_enable_typed_paths_to_sparse() const { - return _variant_enable_typed_paths_to_sparse; + void set_variant_enable_doc_snapshot_mode(bool variant_enable_doc_snapshot_mode) { + _variant_enable_doc_snapshot_mode = variant_enable_doc_snapshot_mode; } - int32_t variant_max_sparse_column_statistics_size() const { - return _variant_max_sparse_column_statistics_size; + 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; } - int32_t variant_sparse_hash_shard_count() const { return _variant_sparse_hash_shard_count; } - bool is_decimal() const { return _is_decimal; } private: @@ -294,6 +312,12 @@ class TabletColumn : public MetadataAdder { BeConsts::DEFAULT_VARIANT_MAX_SPARSE_COLUMN_STATS_SIZE; // default to 0, no shard int32_t _variant_sparse_hash_shard_count = 0; + + bool _variant_enable_doc_snapshot_mode = false; + + int64_t _variant_doc_snapshot_min_rows = 0; + + int32_t _variant_doc_snapshot_shard_count = 128; }; bool operator==(const TabletColumn& a, const TabletColumn& b); diff --git a/be/src/pipeline/exec/olap_scan_operator.cpp b/be/src/pipeline/exec/olap_scan_operator.cpp index 7738c195474f64..afc3a686828d58 100644 --- a/be/src/pipeline/exec/olap_scan_operator.cpp +++ b/be/src/pipeline/exec/olap_scan_operator.cpp @@ -333,6 +333,10 @@ Status OlapScanLocalState::_init_profile() { ADD_COUNTER(_segment_profile, "VariantSubtreeHierarchicalIterCount", TUnit::UNIT); _variant_subtree_sparse_iter_count = ADD_COUNTER(_segment_profile, "VariantSubtreeSparseIterCount", TUnit::UNIT); + _variant_subtree_doc_snapshot_extract_iter_count = + ADD_COUNTER(_segment_profile, "VariantSubtreeDocSnapshotExtractIterCount", TUnit::UNIT); + _variant_subtree_doc_snapshot_all_iter_count = + ADD_COUNTER(_segment_profile, "VariantSubtreeDocSnapshotAllIterCount", TUnit::UNIT); _condition_cache_hit_segment_counter = ADD_COUNTER(_segment_profile, "ConditionCacheSegmentHit", TUnit::UNIT); diff --git a/be/src/pipeline/exec/olap_scan_operator.h b/be/src/pipeline/exec/olap_scan_operator.h index 331091a36504c4..9b17e573223d40 100644 --- a/be/src/pipeline/exec/olap_scan_operator.h +++ b/be/src/pipeline/exec/olap_scan_operator.h @@ -287,6 +287,10 @@ class OlapScanLocalState final : public ScanLocalState { RuntimeProfile::Counter* _variant_subtree_hierarchical_iter_count = nullptr; // Variant subtree: times selecting sparse iterator (iterate over sparse subcolumn) RuntimeProfile::Counter* _variant_subtree_sparse_iter_count = nullptr; + // Variant subtree: times selecting doc snapshot extract iterator (extract path from doc snapshot) + RuntimeProfile::Counter* _variant_subtree_doc_snapshot_extract_iter_count = nullptr; + // Variant subtree: times selecting doc snapshot all iterator (merge doc snapshot into root) + RuntimeProfile::Counter* _variant_subtree_doc_snapshot_all_iter_count = nullptr; std::vector _tablets; std::vector _read_sources; diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp index 1eb789b1c8216c..6f9a32fc59e0fe 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -438,6 +438,8 @@ MutableColumnPtr ColumnVariant::apply_for_columns(Func&& func) const { } auto sparse_column = func(serialized_sparse_column); res->serialized_sparse_column = sparse_column->assume_mutable(); + auto doc_snapshot_column = func(serialized_doc_snapshot_column); + res->serialized_doc_snapshot_column = doc_snapshot_column->assume_mutable(); res->num_rows = res->serialized_sparse_column->size(); ENABLE_CHECK_CONSISTENCY(res.get()); return res; @@ -454,6 +456,7 @@ void ColumnVariant::resize(size_t n) { subcolumn->data.pop_back(num_rows - n); } serialized_sparse_column->pop_back(num_rows - n); + serialized_doc_snapshot_column->pop_back(num_rows - n); } num_rows = n; @@ -612,6 +615,7 @@ ColumnVariant::ColumnVariant(int32_t max_subcolumns_count, DataTypePtr root_type subcolumns.create_root( Subcolumn(std::move(root_column), root_type, is_nullable, true /*root*/)); serialized_sparse_column->resize(num_rows); + serialized_doc_snapshot_column->resize(num_rows); ENABLE_CHECK_CONSISTENCY(this); } @@ -627,6 +631,7 @@ ColumnVariant::ColumnVariant(int32_t max_subcolumns_count, Subcolumns&& subcolum max_subcolumns_count, subcolumns_.size()); } serialized_sparse_column->resize(num_rows); + serialized_doc_snapshot_column->resize(num_rows); } ColumnVariant::ColumnVariant(int32_t max_subcolumns_count, size_t size) @@ -650,6 +655,11 @@ void ColumnVariant::check_consistency() const { "unmatched sparse column:, expeted rows: {}, but meet: {}", num_rows, serialized_sparse_column->size()); } + if (num_rows != serialized_doc_snapshot_column->size()) { + throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, + "unmatched doc snapshot column:, expeted rows: {}, but meet: {}", + num_rows, serialized_doc_snapshot_column->size()); + } } size_t ColumnVariant::size() const { @@ -671,6 +681,7 @@ size_t ColumnVariant::byte_size() const { res += entry->data.byteSize(); } res += serialized_sparse_column->byte_size(); + res += serialized_doc_snapshot_column->byte_size(); return res; } @@ -680,6 +691,7 @@ size_t ColumnVariant::allocated_bytes() const { res += entry->data.allocatedBytes(); } res += serialized_sparse_column->allocated_bytes(); + res += serialized_doc_snapshot_column->allocated_bytes(); return res; } @@ -690,6 +702,7 @@ void ColumnVariant::for_each_subcolumn(ColumnCallback callback) { } } callback(serialized_sparse_column); + callback(serialized_doc_snapshot_column); // callback may be filter, so the row count may be changed num_rows = serialized_sparse_column->size(); ENABLE_CHECK_CONSISTENCY(this); @@ -697,13 +710,27 @@ void ColumnVariant::for_each_subcolumn(ColumnCallback callback) { void ColumnVariant::insert_from(const IColumn& src, size_t n) { const auto* src_v = check_and_get_column(src); - return try_insert((*src_v)[n]); + // only root, quick insert + if (src_v->get_subcolumns().size() == 1 && get_subcolumns().size() == 1) { + FieldWithDataType field; + src_v->subcolumns.get_root()->data.get(n, field); + subcolumns.get_mutable_root()->data.insert(field); + serialized_sparse_column->insert_from(*src_v->get_sparse_column(), n); + serialized_doc_snapshot_column->insert_from(*src_v->get_doc_snapshot_column(), n); + num_rows++; + } else { + return try_insert((*src_v)[n]); + } } void ColumnVariant::try_insert(const Field& field) { size_t old_size = size(); const auto& object = field.get(); for (const auto& [key, value] : object) { + if (key.get_path() == "__DORIS_VARIANT_DOC_SNAPSHOT__") { + insert_to_doc_snapshot_column(value.field); + continue; + } if (!has_subcolumn(key)) { bool succ = add_sub_column(key, old_size); if (!succ) { @@ -734,6 +761,9 @@ void ColumnVariant::try_insert(const Field& field) { } } serialized_sparse_column->insert_default(); + if (serialized_doc_snapshot_column->size() == old_size) { + serialized_doc_snapshot_column->insert_default(); + } ++num_rows; ENABLE_CHECK_CONSISTENCY(this); } @@ -743,6 +773,7 @@ void ColumnVariant::insert_default() { entry->data.insert_default(); } serialized_sparse_column->insert_default(); + serialized_doc_snapshot_column->insert_default(); ++num_rows; ENABLE_CHECK_CONSISTENCY(this); } @@ -752,6 +783,7 @@ void ColumnVariant::insert_many_defaults(size_t length) { entry->data.insert_many_defaults(length); } serialized_sparse_column->resize(num_rows + length); + serialized_doc_snapshot_column->resize(num_rows + length); num_rows += length; ENABLE_CHECK_CONSISTENCY(this); } @@ -807,7 +839,7 @@ void ColumnVariant::Subcolumn::get(size_t n, FieldWithDataType& res) const { n); } -void ColumnVariant::Subcolumn::serialize_to_sparse_column(ColumnString* key, std::string_view path, +void ColumnVariant::Subcolumn::serialize_to_binary_column(ColumnString* key, std::string_view path, ColumnString* value, size_t row) { // no need insert if (least_common_type.get_base_type_id() == PrimitiveType::INVALID_TYPE) { @@ -851,7 +883,7 @@ void ColumnVariant::Subcolumn::serialize_to_sparse_column(ColumnString* key, std "Index ({}) for serialize to sparse column is out of range", row); } -std::pair ColumnVariant::deserialize_from_sparse_column(const ColumnString* value, +std::pair ColumnVariant::deserialize_from_binary_column(const ColumnString* value, size_t row) { const auto& data_ref = value->get_data_at(row); const auto* start_data = reinterpret_cast(data_ref.data); @@ -894,7 +926,7 @@ void ColumnVariant::get(size_t n, Field& res) const { // Iterator over [path, binary value] 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); + auto data = ColumnVariant::deserialize_from_binary_column(value, i); // TODO support decimal type or etc... object.try_emplace(PathInData(path_data), FieldWithDataType {.field = std::move(data.first), @@ -904,12 +936,33 @@ void ColumnVariant::get(size_t n, Field& res) const { .precision = data.second.precision, .scale = data.second.scale}); } - + try_get_from_doc_snapshot_column(n, res); if (object.empty()) { res = Field(); } } +bool ColumnVariant::has_doc_snapshot_column(size_t n) const { + const auto& offsets = serialized_doc_snapshot_column_offsets(); + return offsets[n - 1] < offsets[n]; +} + +void ColumnVariant::try_get_from_doc_snapshot_column(size_t n, Field& res) const { + if (!has_doc_snapshot_column(n)) { + return; + } + FieldWithDataType field_with_data_type; + serialized_doc_snapshot_column->get(n, field_with_data_type.field); + auto& object = res.get(); + object.try_emplace(PathInData("__DORIS_VARIANT_DOC_SNAPSHOT__"), + std::move(field_with_data_type)); +} + +void ColumnVariant::insert_to_doc_snapshot_column(const Field& field) { + serialized_doc_snapshot_column->insert(field); + CHECK(subcolumns.size() == 1) << "subcolumns size should be 1"; +} + void ColumnVariant::add_nested_subcolumn(const PathInData& key, const FieldInfo& field_info, size_t new_size) { if (!key.has_nested_part()) { @@ -1024,6 +1077,8 @@ void ColumnVariant::insert_range_from(const IColumn& src, size_t start, size_t l insert_from_sparse_column_and_fill_remaing_dense_column( src_object, std::move(sorted_src_subcolumn_for_sparse_column), start, length); + serialized_doc_snapshot_column->insert_range_from(*src_object.serialized_doc_snapshot_column, + start, length); num_rows += length; // finalize(); ENABLE_CHECK_CONSISTENCY(this); @@ -1051,7 +1106,7 @@ void ColumnVariant::insert_from_sparse_column_and_fill_remaing_dense_column( for (size_t i = start; i != start + length; ++i) { // Paths in sorted_src_subcolumn_for_sparse_column are already sorted. for (auto& [path, subcolumn] : sorted_src_subcolumn_for_sparse_column) { - subcolumn.serialize_to_sparse_column(sparse_column_keys, path, + subcolumn.serialize_to_binary_column(sparse_column_keys, path, sparse_column_values, i); } // TODO add dcheck @@ -1093,7 +1148,7 @@ void ColumnVariant::insert_from_sparse_column_and_fill_remaing_dense_column( const PathInData column_path(src_sparse_path); if (auto* subcolumn = get_subcolumn(column_path); subcolumn != nullptr) { // Deserialize binary value into subcolumn from src serialized sparse column data. - subcolumn->deserialize_from_sparse_column(src_sparse_column_values, i); + subcolumn->deserialize_from_binary_column(src_sparse_column_values, i); } else { // Before inserting this path into sparse column check if we need to // insert subcolumns from sorted_src_subcolumn_for_sparse_column before. @@ -1104,7 +1159,7 @@ void ColumnVariant::insert_from_sparse_column_and_fill_remaing_dense_column( .first < src_sparse_path) { auto& [src_path, src_subcolumn] = sorted_src_subcolumn_for_sparse_column [sorted_src_subcolumn_for_sparse_column_idx++]; - src_subcolumn.serialize_to_sparse_column(sparse_column_path, src_path, + src_subcolumn.serialize_to_binary_column(sparse_column_path, src_path, sparse_column_values, row); } @@ -1119,7 +1174,7 @@ void ColumnVariant::insert_from_sparse_column_and_fill_remaing_dense_column( sorted_src_subcolumn_for_sparse_column_size) { auto& [src_path, src_subcolumn] = sorted_src_subcolumn_for_sparse_column [sorted_src_subcolumn_for_sparse_column_idx++]; - src_subcolumn.serialize_to_sparse_column(sparse_column_path, src_path, + src_subcolumn.serialize_to_binary_column(sparse_column_path, src_path, sparse_column_values, row); } @@ -1161,6 +1216,7 @@ void ColumnVariant::pop_back(size_t length) { entry->data.pop_back(length); } serialized_sparse_column->pop_back(length); + serialized_doc_snapshot_column->pop_back(length); num_rows -= length; ENABLE_CHECK_CONSISTENCY(this); } @@ -1398,6 +1454,21 @@ struct PathElements { elements.emplace_back(last_dot_pos + 1, size_t(pos - last_dot_pos - 1)); } + explicit PathElements(const std::string_view& path) { + const char* start = path.data(); + const char* end = start + path.size(); + const char* pos = start; + const char* last_dot_pos = pos - 1; + for (pos = start; pos != end; ++pos) { + if (*pos == '.') { + elements.emplace_back(last_dot_pos + 1, size_t(pos - last_dot_pos - 1)); + last_dot_pos = pos; + } + } + + elements.emplace_back(last_dot_pos + 1, size_t(pos - last_dot_pos - 1)); + } + size_t size() const { return elements.size(); } std::vector elements; @@ -1496,9 +1567,81 @@ bool ColumnVariant::is_visible_root_value(size_t nrow) const { return false; } } + + const auto& doc_snapshot_column_map = + assert_cast(*serialized_doc_snapshot_column); + // doc snapshot column is not empty + if (doc_snapshot_column_map.get_offsets()[nrow - 1] != + doc_snapshot_column_map.get_offsets()[nrow]) { + return false; + } return !root->data.is_null_at(nrow); } +void ColumnVariant::serialize_from_doc_snapshot_to_json_format(int64_t row_num, + BufferWritable& output, + bool* is_null) const { + const auto& column_map = assert_cast(*serialized_doc_snapshot_column); + const auto& doc_snapshot_data_offsets = column_map.get_offsets(); + size_t doc_snapshot_data_offset = doc_snapshot_data_offsets[static_cast(row_num) - 1]; + size_t doc_snapshot_data_end = doc_snapshot_data_offsets[static_cast(row_num)]; + const auto& keys = assert_cast(column_map.get_keys()); + const auto& values = assert_cast(column_map.get_values()); + // "a.b.c": 2 + // "a.b.d": 3 + // {"a" : {"b" : {"c" : 2, "d" : 3}}} + output.write_char('{'); + std::vector prefix_path; + DataTypeSerDe::FormatOptions options; + options.escape_char = '\\'; + Prefix current_prefix; + for (size_t i = doc_snapshot_data_offset; i != doc_snapshot_data_end; ++i) { + auto kref = keys.get_data_at(i); + std::string_view path(kref.data, kref.size); + PathElements path_elements(path); + + size_t prev_prefix_size = current_prefix.size(); + current_prefix.shrink_to_common_prefix(path_elements); + size_t prefix_size = current_prefix.size(); + if (prefix_size != prev_prefix_size) { + size_t to_close = prev_prefix_size - prefix_size; + for (size_t j = 0; j != to_close; ++j) { + output.write_char('}'); + } + } + + if (prefix_size + 1 < path_elements.size()) { + for (size_t j = prefix_size; j != path_elements.size() - 1; ++j) { + if (!current_prefix.is_first_in_current_object()) { + output.write_char(','); + } else { + current_prefix.set_not_first_in_current_object(); + } + output.write_json_string(path_elements.elements[j]); + output.write_c_string(":{"); + current_prefix.elements.emplace_back(path_elements.elements[j], true); + } + } + + if (!current_prefix.is_first_in_current_object()) { + output.write_char(','); + } else { + current_prefix.set_not_first_in_current_object(); + } + output.write_json_string(path_elements.elements.back()); + output.write_c_string(":"); + + Subcolumn tmp_subcolumn(0, true); + tmp_subcolumn.deserialize_from_binary_column(&values, static_cast(i)); + tmp_subcolumn.serialize_text_json(0, output, options); + } + + for (size_t j = 0; j != current_prefix.elements.size(); ++j) { + output.write_char('}'); + } + output.write_char('}'); +} + void ColumnVariant::serialize_one_row_to_json_format( int64_t row_num, BufferWritable& output, bool* is_null, const DataTypeSerDe::FormatOptions& options) const { @@ -1507,6 +1650,14 @@ void ColumnVariant::serialize_one_row_to_json_format( subcolumns.get_root()->data.serialize_text_json(row_num, output, options); return; } + const auto& doc_snapshot_column_map = + assert_cast(*serialized_doc_snapshot_column); + // if doc snapshot column is not empty, we should serialize from doc snapshot column first + if (doc_snapshot_column_map.get_offsets()[row_num] != 0) { + serialize_from_doc_snapshot_to_json_format(row_num, output, is_null); + return; + } + const auto& column_map = assert_cast(*serialized_sparse_column); const auto& sparse_data_offsets = column_map.get_offsets(); const auto [sparse_data_paths, sparse_data_values] = get_sparse_data_paths_and_values(); @@ -1609,7 +1760,7 @@ void ColumnVariant::serialize_one_row_to_json_format( } else { // To serialize value stored in shared data we should first deserialize it from binary format. Subcolumn tmp_subcolumn(0, true); - tmp_subcolumn.deserialize_from_sparse_column(sparse_data_values, + tmp_subcolumn.deserialize_from_binary_column(sparse_data_values, index_in_sparse_data_values++); DataTypeSerDe::FormatOptions options2 = options; options2.escape_char = '\\'; @@ -1650,7 +1801,7 @@ Status ColumnVariant::serialize_sparse_columns( // Fill the column map for each row for (size_t i = 0; i < num_rows; ++i) { for (auto& [path, subcolumn] : remaing_subcolumns) { - subcolumn.serialize_to_sparse_column(sparse_column_keys, path, sparse_column_values, i); + subcolumn.serialize_to_binary_column(sparse_column_keys, path, sparse_column_values, i); } // TODO add dcheck @@ -1919,6 +2070,8 @@ ColumnPtr ColumnVariant::filter(const Filter& filter, ssize_t count) const { entry->data.get_least_common_type()); } new_column->serialized_sparse_column = serialized_sparse_column->filter(filter, count); + new_column->serialized_doc_snapshot_column = + serialized_doc_snapshot_column->filter(filter, count); ENABLE_CHECK_CONSISTENCY(new_column.get()); return new_column; } @@ -1962,25 +2115,12 @@ void ColumnVariant::clear() { empty.create_root(Subcolumn(0, is_nullable, true)); std::swap(empty, subcolumns); serialized_sparse_column->clear(); + serialized_doc_snapshot_column->clear(); num_rows = 0; _prev_positions.clear(); ENABLE_CHECK_CONSISTENCY(this); } -void ColumnVariant::clear_subcolumns_data() { - for (auto& entry : subcolumns) { - for (auto& part : entry->data.data) { - DCHECK_EQ(part->use_count(), 1); - (*std::move(part)).clear(); - } - entry->data.num_of_defaults_in_prefix = 0; - entry->data.num_rows = 0; - } - serialized_sparse_column->clear(); - num_rows = 0; - ENABLE_CHECK_CONSISTENCY(this); -} - void ColumnVariant::create_root(const DataTypePtr& type, MutableColumnPtr&& column) { if (num_rows == 0) { num_rows = column->size(); @@ -1989,6 +2129,9 @@ void ColumnVariant::create_root(const DataTypePtr& type, MutableColumnPtr&& colu if (serialized_sparse_column->empty()) { serialized_sparse_column->resize(num_rows); } + if (serialized_doc_snapshot_column->empty()) { + serialized_doc_snapshot_column->resize(num_rows); + } ENABLE_CHECK_CONSISTENCY(this); } @@ -2013,10 +2156,11 @@ bool ColumnVariant::is_null_root() const { // num_rows == 0, so we need to use NO_SANITIZE_UNDEFINED bool NO_SANITIZE_UNDEFINED ColumnVariant::is_scalar_variant() const { const auto& sparse_offsets = serialized_sparse_column_offsets().data(); + const auto& doc_snapshot_offsets = serialized_doc_snapshot_column_offsets().data(); // Only root itself is scalar, and no sparse data return !is_null_root() && subcolumns.get_leaves().size() == 1 && - subcolumns.get_root()->is_scalar() && - sparse_offsets[num_rows - 1] == 0; // no sparse data + subcolumns.get_root()->is_scalar() && sparse_offsets[num_rows - 1] == 0 && + doc_snapshot_offsets[num_rows - 1] == 0; // no sparse data } const DataTypePtr ColumnVariant::NESTED_TYPE = std::make_shared( @@ -2046,16 +2190,18 @@ void ColumnVariant::insert_indices_from(const IColumn& src, const uint32_t* indi get_subcolumns().get_mutable_root()->data.num_rows = indices_end - indices_begin; get_root()->insert_indices_from(*src_v->get_root(), indices_begin, indices_end); serialized_sparse_column->insert_many_defaults(indices_end - indices_begin); + serialized_doc_snapshot_column->insert_many_defaults(indices_end - indices_begin); num_rows += indices_end - indices_begin; } else if (src_can_do_quick_insert && is_scalar_variant() && src_v->get_root_type()->equals(*get_root_type())) { get_root()->insert_indices_from(*src_v->get_root(), indices_begin, indices_end); serialized_sparse_column->insert_many_defaults(indices_end - indices_begin); + serialized_doc_snapshot_column->insert_many_defaults(indices_end - indices_begin); get_subcolumns().get_mutable_root()->data.num_rows += indices_end - indices_begin; num_rows += indices_end - indices_begin; } else { for (const auto* x = indices_begin; x != indices_end; ++x) { - try_insert(src[*x]); + insert_from(src, *x); } } finalize(); @@ -2084,6 +2230,7 @@ void ColumnVariant::for_each_imutable_column(Func&& callback) const { } } callback(serialized_sparse_column); + callback(serialized_doc_snapshot_column); } void ColumnVariant::update_hash_with_value(size_t n, SipHash& hash) const { @@ -2318,7 +2465,7 @@ size_t ColumnVariant::find_path_lower_bound_in_sparse_data(StringRef path, return it.index; } -void ColumnVariant::Subcolumn::deserialize_from_sparse_column(const ColumnString* value, +void ColumnVariant::Subcolumn::deserialize_from_binary_column(const ColumnString* value, size_t row) { const auto& data_ref = value->get_data_at(row); const auto* start_data = reinterpret_cast(data_ref.data); @@ -2385,7 +2532,7 @@ void ColumnVariant::fill_path_column_from_sparse_data(Subcolumn& subcolumn, Null bool is_null = false; if (lower_bound_path_index != paths_end && sparse_data_paths.get_data_at(lower_bound_path_index) == path) { - subcolumn.deserialize_from_sparse_column(&sparse_data_values, lower_bound_path_index); + subcolumn.deserialize_from_binary_column(&sparse_data_values, lower_bound_path_index); is_null = false; } else { subcolumn.insert_default(); @@ -2416,11 +2563,93 @@ MutableColumnPtr ColumnVariant::clone() const { auto&& column = serialized_sparse_column->get_ptr(); auto sparse_column = std::move(*column).mutate(); res->serialized_sparse_column = sparse_column->assume_mutable(); + + auto&& new_doc_snapshot_column = serialized_doc_snapshot_column->get_ptr(); + auto doc_snapshot_column = std::move(*new_doc_snapshot_column).mutate(); + res->serialized_doc_snapshot_column = doc_snapshot_column->assume_mutable(); res->set_num_rows(num_rows); ENABLE_CHECK_CONSISTENCY(res.get()); return res; } +void ColumnVariant::reconstruct_and_sort_doc_snapshot_column() { + const auto& offset = serialized_doc_snapshot_column_offsets(); + + auto sort_map_by_row_paths = [&](const ColumnString& in_paths, const ColumnString& in_values, + const ColumnArray::Offsets64& in_offsets) -> MutableColumnPtr { + auto sorted = create_binary_column_fn(); + auto& sorted_map = assert_cast(*sorted); + auto& out_paths = assert_cast(sorted_map.get_keys()); + auto& out_values = assert_cast(sorted_map.get_values()); + auto& out_offsets = sorted_map.get_offsets(); + out_offsets.reserve(num_rows); + + for (int64_t i = 0; i < num_rows; ++i) { + size_t start = in_offsets[i - 1]; + size_t end = in_offsets[i]; + std::vector> order; + order.reserve(end - start); + for (size_t j = start; j < end; ++j) { + order.emplace_back(in_paths.get_data_at(j).to_string_view(), j); + } + std::sort(order.begin(), order.end()); + for (const auto& [p, j] : order) { + out_paths.insert_data(p.data(), p.size()); + out_values.insert_from(in_values, j); + } + out_offsets.push_back(out_paths.size()); + } + return sorted; + }; + + // doc snapshot column has been constructed in parse2column + // sort the column by row paths. + if (offset[num_rows - 1] != 0) { + auto [path, value] = get_doc_snapshot_data_paths_and_values(); + serialized_doc_snapshot_column = sort_map_by_row_paths(*path, *value, offset); + return; + } + CHECK(is_finalized()); + + auto doc_snapshot_column = create_binary_column_fn(); + + auto& doc_snapshot_column_map = assert_cast(*doc_snapshot_column); + auto& doc_snapshot_data_paths = assert_cast(doc_snapshot_column_map.get_keys()); + auto& doc_snapshot_data_values = + assert_cast(doc_snapshot_column_map.get_values()); + auto& doc_snapshot_data_offsets = doc_snapshot_column_map.get_offsets(); + + for (int64_t i = 0; i < num_rows; ++i) { + for (const auto& entry : subcolumns) { + if (entry->data.is_root) { + continue; + } + const auto& column = entry->data.data.back(); + const auto& nullable_col = + assert_cast(*column); + if (!nullable_col.is_null_at(i)) { + const auto& path = entry->path.get_path(); + doc_snapshot_data_paths.insert_data(path.data(), path.size()); + auto nullable_serde = std::static_pointer_cast( + entry->data.data_serdes.back()); + ColumnString::Chars& chars = doc_snapshot_data_values.get_chars(); + nullable_serde->get_nested_serde()->write_one_cell_to_binary( + nullable_col.get_nested_column(), chars, i); + doc_snapshot_data_values.get_offsets().push_back(chars.size()); + } + } + doc_snapshot_data_offsets.push_back(doc_snapshot_data_paths.size()); + } + + serialized_doc_snapshot_column = sort_map_by_row_paths( + doc_snapshot_data_paths, doc_snapshot_data_values, doc_snapshot_data_offsets); +} + +bool ColumnVariant::is_doc_snapshot_mode() const { + const auto& offset = serialized_doc_snapshot_column_offsets(); + return subcolumns.size() == 1 && offset[num_rows - 1] != 0; +} + #include "common/compile_check_end.h" } // namespace doris::vectorized diff --git a/be/src/vec/columns/column_variant.h b/be/src/vec/columns/column_variant.h index 093f35f7b8c712..6a1e95a6f212a8 100644 --- a/be/src/vec/columns/column_variant.h +++ b/be/src/vec/columns/column_variant.h @@ -176,7 +176,7 @@ class ColumnVariant final : public COWHelper { /// Returns last inserted field. Field get_last_field() const; - void deserialize_from_sparse_column(const ColumnString* value, size_t row); + void deserialize_from_binary_column(const ColumnString* value, size_t row); /// Returns single column if subcolumn in finalizes. /// Otherwise -- undefined behaviour. @@ -193,7 +193,7 @@ class ColumnVariant final : public COWHelper { void add_new_column_part(DataTypePtr type); // Serialize the i-th row of the column into the sparse column. - void serialize_to_sparse_column(ColumnString* key, std::string_view path, + void serialize_to_binary_column(ColumnString* key, std::string_view path, ColumnString* value, size_t row); static DataTypeSerDeSPtr generate_data_serdes(DataTypePtr type, bool is_root = false); @@ -279,6 +279,9 @@ class ColumnVariant final : public COWHelper { WrappedPtr serialized_sparse_column = ColumnMap::create( ColumnString::create(), ColumnString::create(), ColumnArray::ColumnOffsets::create()); + WrappedPtr serialized_doc_snapshot_column = ColumnMap::create( + ColumnString::create(), ColumnString::create(), ColumnArray::ColumnOffsets::create()); + // if `_max_subcolumns_count == 0`, all subcolumns are materialized. int32_t _max_subcolumns_count = 0; @@ -327,6 +330,9 @@ class ColumnVariant final : public COWHelper { void serialize_one_row_to_json_format(int64_t row, BufferWritable& output, bool* is_null, const DataTypeSerDe::FormatOptions& options) const; + void serialize_from_doc_snapshot_to_json_format(int64_t row, BufferWritable& output, + bool* is_null) const; + // Fill the `serialized_sparse_column` Status serialize_sparse_columns(std::map&& remaing_subcolumns); @@ -393,14 +399,16 @@ class ColumnVariant final : public COWHelper { ColumnPtr get_sparse_column() const { return serialized_sparse_column; } + ColumnPtr get_doc_snapshot_column() const { return serialized_doc_snapshot_column; } + // use sparse_subcolumns_schema to record sparse column's path info and type - static MutableColumnPtr create_sparse_column_fn() { + static MutableColumnPtr create_binary_column_fn() { return vectorized::ColumnMap::create(vectorized::ColumnString::create(), vectorized::ColumnString::create(), vectorized::ColumnArray::ColumnOffsets::create()); } - static const DataTypePtr& get_sparse_column_type() { + static const DataTypePtr& get_binary_column_type() { static DataTypePtr type = std::make_shared(std::make_shared(), std::make_shared()); return type; @@ -408,6 +416,8 @@ class ColumnVariant final : public COWHelper { void set_sparse_column(ColumnPtr column) { serialized_sparse_column = column; } + void set_doc_snapshot_column(ColumnPtr column) { serialized_doc_snapshot_column = column; } + void finalize(FinalizeMode mode); /// Finalizes all subcolumns. @@ -546,6 +556,21 @@ class ColumnVariant final : public COWHelper { return {&key, &value}; } + std::pair get_doc_snapshot_data_paths_and_values() + const { + const auto& column_map = assert_cast(*serialized_doc_snapshot_column); + const auto& key = assert_cast(column_map.get_keys()); + const auto& value = assert_cast(column_map.get_values()); + return {&key, &value}; + } + + std::pair get_doc_snapshot_data_paths_and_values() { + auto& column_map = assert_cast(*serialized_doc_snapshot_column); + auto& key = assert_cast(column_map.get_keys()); + auto& value = assert_cast(column_map.get_values()); + return {&key, &value}; + } + ColumnArray::Offsets64& ALWAYS_INLINE serialized_sparse_column_offsets() { auto& column_map = assert_cast(*serialized_sparse_column); return column_map.get_offsets(); @@ -555,6 +580,17 @@ class ColumnVariant final : public COWHelper { const auto& column_map = assert_cast(*serialized_sparse_column); return column_map.get_offsets(); } + + ColumnArray::Offsets64& ALWAYS_INLINE serialized_doc_snapshot_column_offsets() { + auto& column_map = assert_cast(*serialized_doc_snapshot_column); + return column_map.get_offsets(); + } + + const ColumnArray::Offsets64& ALWAYS_INLINE serialized_doc_snapshot_column_offsets() const { + const auto& column_map = assert_cast(*serialized_doc_snapshot_column); + return column_map.get_offsets(); + } + // Insert all the data from sparse data with specified path to sub column. static void fill_path_column_from_sparse_data(Subcolumn& subcolumn, NullMap* null_map, StringRef path, @@ -566,7 +602,7 @@ class ColumnVariant final : public COWHelper { size_t start, size_t end); // Deserialize the i-th row of the column from the sparse column. - static std::pair deserialize_from_sparse_column(const ColumnString* value, + static std::pair deserialize_from_binary_column(const ColumnString* value, size_t row); Status pick_subcolumns_to_sparse_column( @@ -580,8 +616,6 @@ class ColumnVariant final : public COWHelper { _max_subcolumns_count = max_subcolumns_count; } - void clear_subcolumns_data(); - // Returns how many dynamic subcolumns are still allowed to be appended, // The remaining quota is `max - current`. size_t can_add_subcolumns_count() const { @@ -600,6 +634,17 @@ class ColumnVariant final : public COWHelper { return _max_subcolumns_count - current_subcolumns_count; } + void reconstruct_and_sort_doc_snapshot_column(); + + // doc snapshot mode: only root column, and doc snapshot column is not empty + bool is_doc_snapshot_mode() const; + + void try_get_from_doc_snapshot_column(size_t n, Field& res) const; + + void insert_to_doc_snapshot_column(const Field& field); + + bool has_doc_snapshot_column(size_t n) const; + private: // May throw execption void try_insert(const Field& field); diff --git a/be/src/vec/common/schema_util.cpp b/be/src/vec/common/schema_util.cpp index 3a3fa01490168d..c2a39fbd358930 100644 --- a/be/src/vec/common/schema_util.cpp +++ b/be/src/vec/common/schema_util.cpp @@ -529,75 +529,6 @@ Status get_least_common_schema(const std::vector& schemas, return Status::OK(); } -Status _parse_variant_columns(Block& block, const std::vector& variant_pos, - const ParseConfig& config) { - for (int i = 0; i < variant_pos.size(); ++i) { - auto column_ref = block.get_by_position(variant_pos[i]).column; - bool is_nullable = column_ref->is_nullable(); - const auto& column = remove_nullable(column_ref); - const auto& var = assert_cast(*column.get()); - var.assume_mutable_ref().finalize(); - - MutableColumnPtr variant_column; - if (!var.is_scalar_variant()) { - variant_column = var.assume_mutable(); - // already parsed - continue; - } - ColumnPtr scalar_root_column; - if (var.get_root_type()->get_primitive_type() == TYPE_JSONB) { - // TODO more efficient way to parse jsonb type, currently we just convert jsonb to - // json str and parse them into variant - RETURN_IF_ERROR(cast_column({var.get_root(), var.get_root_type(), ""}, - var.get_root()->is_nullable() - ? make_nullable(std::make_shared()) - : std::make_shared(), - &scalar_root_column)); - if (scalar_root_column->is_nullable()) { - scalar_root_column = assert_cast(scalar_root_column.get()) - ->get_nested_column_ptr(); - } - } else { - const auto& root = *var.get_root(); - scalar_root_column = - root.is_nullable() - ? assert_cast(root).get_nested_column_ptr() - : var.get_root(); - } - - if (scalar_root_column->is_column_string()) { - variant_column = ColumnVariant::create(0); - parse_json_to_variant(*variant_column.get(), - assert_cast(*scalar_root_column), config); - } else { - // Root maybe other types rather than string like ColumnVariant(Int32). - // In this case, we should finlize the root and cast to JSON type - auto expected_root_type = - make_nullable(std::make_shared()); - var.ensure_root_node_type(expected_root_type); - variant_column = var.assume_mutable(); - } - - // Wrap variant with nullmap if it is nullable - ColumnPtr result = variant_column->get_ptr(); - if (is_nullable) { - const auto& null_map = - assert_cast(*column_ref).get_null_map_column_ptr(); - result = ColumnNullable::create(result, null_map); - } - block.get_by_position(variant_pos[i]).column = result; - } - return Status::OK(); -} - -Status parse_variant_columns(Block& block, const std::vector& variant_pos, - const ParseConfig& config) { - // Parse each variant column from raw string column - RETURN_IF_CATCH_EXCEPTION({ - return vectorized::schema_util::_parse_variant_columns(block, variant_pos, config); - }); -} - // sort by paths in lexicographical order vectorized::ColumnVariant::Subcolumns get_sorted_subcolumns( const vectorized::ColumnVariant::Subcolumns& subcolumns) { @@ -668,7 +599,25 @@ TabletColumn create_sparse_shard_column(const TabletColumn& variant, int bucket_ return res; } -uint32_t variant_sparse_shard_of(const StringRef& path, uint32_t bucket_num) { +TabletColumn create_doc_snapshot_column(const TabletColumn& variant, int bucket_index) { + TabletColumn res; + std::string name = variant.name_lower_case() + "." + DOC_SNAPSHOT_COLUMN_PATH + "." + + std::to_string(bucket_index); + res.set_name(name); + res.set_type(FieldType::OLAP_FIELD_TYPE_MAP); + res.set_aggregation_method(variant.aggregation()); + res.set_parent_unique_id(variant.unique_id()); + res.set_default_value("NULL"); + res.set_path_info(PathInData {name}); + + TabletColumn child_tcolumn; + child_tcolumn.set_type(FieldType::OLAP_FIELD_TYPE_STRING); + res.add_sub_column(child_tcolumn); + res.add_sub_column(child_tcolumn); + return res; +} + +uint32_t variant_binary_shard_of(const StringRef& path, uint32_t bucket_num) { if (bucket_num <= 1) return 0; SipHash hash; hash.update(path.data, path.size); @@ -844,6 +793,10 @@ Status VariantCompactionUtil::check_path_stats(const std::vector output_uid_to_path_stats; RETURN_IF_ERROR(aggregate_path_to_stats(output, &output_uid_to_path_stats)); for (const auto& [uid, stats] : output_uid_to_path_stats) { + if (output->tablet_schema()->column_by_uid(uid).is_variant_type() && + output->tablet_schema()->column_by_uid(uid).variant_enable_doc_snapshot_mode()) { + continue; + } if (original_uid_to_path_stats.find(uid) == original_uid_to_path_stats.end()) { return Status::InternalError("Path stats not found for uid {}, tablet_id {}", uid, tablet->tablet_id()); @@ -993,8 +946,6 @@ void VariantCompactionUtil::get_compaction_subcolumns_from_subpaths( 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 " @@ -1076,6 +1027,17 @@ Status VariantCompactionUtil::get_extended_compaction_schema( } VLOG_DEBUG << "column " << column->name() << " unique id " << column->unique_id(); + if (column->variant_enable_doc_snapshot_mode()) { + const int bucket_num = std::max(1, column->variant_doc_snapshot_shard_count()); + for (int b = 0; b < bucket_num; ++b) { + TabletColumn doc_snapshot_bucket_column = create_doc_snapshot_column(*column, b); + doc_snapshot_bucket_column.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); + doc_snapshot_bucket_column.set_is_nullable(false); + output_schema->append_column(doc_snapshot_bucket_column); + } + continue; + } + // 1. append typed columns RETURN_IF_ERROR(get_compaction_typed_columns( target, uid_to_variant_extended_info[column->unique_id()].typed_paths, column, diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h index ca6890118fa9fc..1015ff83a89207 100644 --- a/be/src/vec/common/schema_util.h +++ b/be/src/vec/common/schema_util.h @@ -47,11 +47,11 @@ namespace vectorized { class Block; class IColumn; struct ColumnWithTypeAndName; -struct ParseConfig; } // namespace vectorized } // namespace doris const std::string SPARSE_COLUMN_PATH = "__DORIS_VARIANT_SPARSE__"; +const std::string DOC_SNAPSHOT_COLUMN_PATH = "__DORIS_VARIANT_DOC_SNAPSHOT__"; namespace doris::vectorized::schema_util { using PathToNoneNullValues = std::unordered_map; using PathToDataTypes = std::unordered_map, PathInData::Hash>; @@ -92,13 +92,6 @@ struct ExtraInfo { TabletColumn get_column_by_type(const vectorized::DataTypePtr& data_type, const std::string& name, const ExtraInfo& ext_info); -// three steps to parse and encode variant columns into flatterned columns -// 1. parse variant from raw json string -// 2. finalize variant column to each subcolumn least commn types, default ignore sparse sub columns -// 3. encode sparse sub columns -Status parse_variant_columns(Block& block, const std::vector& variant_pos, - const ParseConfig& config); - // check if the tuple_paths has ambiguous paths // situation: // throw exception if there exists a prefix with matched names, but not matched structure (is Nested, number of dimensions). @@ -139,8 +132,10 @@ TabletColumn create_sparse_column(const TabletColumn& variant); // Create one bucket sparse column: name = variant.name_lower_case() + "." + SPARSE_COLUMN_PATH + ".b{index}" TabletColumn create_sparse_shard_column(const TabletColumn& variant, int bucket_index); +TabletColumn create_doc_snapshot_column(const TabletColumn& variant, int bucket_index); + // Compute bucket id for given path string using SipHash64(path) % bucket_num. -uint32_t variant_sparse_shard_of(const StringRef& path, uint32_t bucket_num); +uint32_t variant_binary_shard_of(const StringRef& path, uint32_t bucket_num); void get_field_info(const Field& field, FieldInfo* info); diff --git a/be/src/vec/data_types/data_type_variant.cpp b/be/src/vec/data_types/data_type_variant.cpp index 926de49e646378..4cac57607c7939 100644 --- a/be/src/vec/data_types/data_type_variant.cpp +++ b/be/src/vec/data_types/data_type_variant.cpp @@ -98,9 +98,11 @@ int64_t DataTypeVariant::get_uncompressed_serialized_bytes(const IColumn& column // sparse column // TODO make compability with sparse column - size += ColumnVariant::get_sparse_column_type()->get_uncompressed_serialized_bytes( + size += ColumnVariant::get_binary_column_type()->get_uncompressed_serialized_bytes( *column_variant.get_sparse_column(), be_exec_version); + size += ColumnVariant::get_binary_column_type()->get_uncompressed_serialized_bytes( + *column_variant.get_doc_snapshot_column(), be_exec_version); return size; } @@ -154,9 +156,10 @@ char* DataTypeVariant::serialize(const IColumn& column, char* buf, int be_exec_v // serialize sparse column // TODO make compability with sparse column - buf = ColumnVariant::get_sparse_column_type()->serialize(*column_variant.get_sparse_column(), + buf = ColumnVariant::get_binary_column_type()->serialize(*column_variant.get_sparse_column(), buf, be_exec_version); - + buf = ColumnVariant::get_binary_column_type()->serialize( + *column_variant.get_doc_snapshot_column(), buf, be_exec_version); return buf; } @@ -212,8 +215,8 @@ const char* DataTypeVariant::deserialize(const char* buf, MutableColumnPtr* colu buf += sizeof(uint32_t); // deserialize sparse column - MutableColumnPtr sparse_column = ColumnVariant::get_sparse_column_type()->create_column(); - buf = ColumnVariant::get_sparse_column_type()->deserialize(buf, &sparse_column, + MutableColumnPtr sparse_column = ColumnVariant::get_binary_column_type()->create_column(); + buf = ColumnVariant::get_binary_column_type()->deserialize(buf, &sparse_column, be_exec_version); column_variant->set_sparse_column(std::move(sparse_column)); @@ -221,6 +224,11 @@ const char* DataTypeVariant::deserialize(const char* buf, MutableColumnPtr* colu column_variant->get_subcolumn({})->resize(num_rows); } + MutableColumnPtr doc_snapshot_column = ColumnVariant::get_binary_column_type()->create_column(); + buf = ColumnVariant::get_binary_column_type()->deserialize(buf, &doc_snapshot_column, + be_exec_version); + column_variant->set_doc_snapshot_column(std::move(doc_snapshot_column)); + column_variant->set_num_rows(num_rows); column_variant->finalize(); diff --git a/be/src/vec/exec/scan/olap_scanner.cpp b/be/src/vec/exec/scan/olap_scanner.cpp index 9f72d5caeddf86..0164cda295b4df 100644 --- a/be/src/vec/exec/scan/olap_scanner.cpp +++ b/be/src/vec/exec/scan/olap_scanner.cpp @@ -796,6 +796,10 @@ void OlapScanner::_collect_profile_before_close() { stats.variant_subtree_hierarchical_iter_count); COUNTER_UPDATE(local_state->_variant_subtree_sparse_iter_count, stats.variant_subtree_sparse_iter_count); + COUNTER_UPDATE(local_state->_variant_subtree_doc_snapshot_extract_iter_count, + stats.variant_subtree_doc_snapshot_extract_iter_count); + COUNTER_UPDATE(local_state->_variant_subtree_doc_snapshot_all_iter_count, + stats.variant_subtree_doc_snapshot_all_iter_count); InvertedIndexProfileReporter inverted_index_profile; inverted_index_profile.update(local_state->_index_filter_profile.get(), diff --git a/be/src/vec/functions/function_variant_element.cpp b/be/src/vec/functions/function_variant_element.cpp index 75d3f6fd618330..5c9240be926fae 100644 --- a/be/src/vec/functions/function_variant_element.cpp +++ b/be/src/vec/functions/function_variant_element.cpp @@ -224,7 +224,7 @@ class FunctionVariantElement : public IFunction { // {"b" : {"c" : 456}} // b maybe in sparse column, and b.c is in subolumn, put `b` into root column to distinguish // from "" which is empty path and root - root.deserialize_from_sparse_column(&src_sparse_data_values, + root.deserialize_from_binary_column(&src_sparse_data_values, lower_bound_index); } } @@ -234,6 +234,66 @@ class FunctionVariantElement : public IFunction { sparse_data_offsets.push_back(sparse_data_paths->size()); } container->get_subcolumns().create_root(root); + container->get_doc_snapshot_column()->assume_mutable()->resize(mutable_ptr->size()); + container->set_num_rows(mutable_ptr->size()); + }; + auto extract_from_doc_snapshot_column = [&](auto& container) { + ColumnVariant::Subcolumn root {0, true, true}; + // no root, no sparse column + const auto& doc_snapshot_data_map = + assert_cast(*mutable_ptr->get_doc_snapshot_column()); + const auto& src_doc_snapshot_data_offsets = doc_snapshot_data_map.get_offsets(); + const auto& src_doc_snapshot_data_paths = + assert_cast(doc_snapshot_data_map.get_keys()); + const auto& src_doc_snapshot_data_values = + assert_cast(doc_snapshot_data_map.get_values()); + auto& sparse_data_offsets = + assert_cast(*container->get_sparse_column()->assume_mutable()) + .get_offsets(); + auto [sparse_data_paths, sparse_data_values] = + container->get_sparse_data_paths_and_values(); + StringRef prefix_ref(path.get_path()); + std::string_view path_prefix(prefix_ref.data, prefix_ref.size); + for (size_t i = 0; i != src_doc_snapshot_data_offsets.size(); ++i) { + size_t start = src_doc_snapshot_data_offsets[ssize_t(i) - 1]; + size_t end = src_doc_snapshot_data_offsets[ssize_t(i)]; + size_t lower_bound_index = + vectorized::ColumnVariant::find_path_lower_bound_in_sparse_data( + prefix_ref, src_doc_snapshot_data_paths, start, end); + for (; lower_bound_index != end; ++lower_bound_index) { + auto path_ref = src_doc_snapshot_data_paths.get_data_at(lower_bound_index); + std::string_view nested_path(path_ref.data, path_ref.size); + if (!nested_path.starts_with(path_prefix)) { + break; + } + // Don't include path that is equal to the prefix. + if (nested_path.size() != path_prefix.size()) { + auto sub_path_optional = get_sub_path(nested_path, path_prefix); + if (!sub_path_optional.has_value()) { + continue; + } + std::string_view sub_path = *sub_path_optional; + sparse_data_paths->insert_data(sub_path.data(), sub_path.size()); + sparse_data_values->insert_from(src_doc_snapshot_data_values, + lower_bound_index); + } else { + // insert into root column, example: access v['b'] and b is in sparse column + // data example: + // {"b" : 123} + // {"b" : {"c" : 456}} + // b maybe in sparse column, and b.c is in subolumn, put `b` into root column to distinguish + // from "" which is empty path and root + root.deserialize_from_binary_column(&src_doc_snapshot_data_values, + lower_bound_index); + } + } + if (root.size() == sparse_data_offsets.size()) { + root.insert_default(); + } + sparse_data_offsets.push_back(sparse_data_paths->size()); + } + container->get_subcolumns().create_root(root); + container->get_doc_snapshot_column()->assume_mutable()->resize(mutable_ptr->size()); container->set_num_rows(mutable_ptr->size()); }; @@ -272,7 +332,12 @@ class FunctionVariantElement : public IFunction { } else { auto container = ColumnVariant::create(src.max_subcolumns_count(), std::move(new_subcolumns)); - extract_from_sparse_column(container); + const auto& sparse_offsets = mutable_ptr->serialized_sparse_column_offsets(); + if (sparse_offsets.back() == sparse_offsets[-1]) { + extract_from_doc_snapshot_column(container); + } else { + extract_from_sparse_column(container); + } result_col->insert_range_from(*container, 0, container->size()); } *result = result_col->get_ptr(); diff --git a/be/src/vec/json/json_parser.h b/be/src/vec/json/json_parser.h index c6966ddaf3583b..5722312199587e 100644 --- a/be/src/vec/json/json_parser.h +++ b/be/src/vec/json/json_parser.h @@ -124,6 +124,12 @@ enum class ExtractType { struct ParseConfig { bool enable_flatten_nested = false; + // parse variant column to subcolumns or doc snapshot + // if parse_to_subcolumns is true, the variant column will be parsed to subcolumns + // if parse_to_doc_snapshot is true, the variant column will be parsed to doc snapshot + // if both are true, the variant column will be parsed to both subcolumns and doc snapshot + bool parse_to_subcolumns = true; + bool parse_to_doc_snapshot = false; }; /// Result of parsing of a document. /// Contains all paths extracted from document diff --git a/be/src/vec/json/parse2column.cpp b/be/src/vec/json/parse2column.cpp index 127241b366734e..9dc7673628f8a4 100644 --- a/be/src/vec/json/parse2column.cpp +++ b/be/src/vec/json/parse2column.cpp @@ -165,35 +165,77 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length, check_paths.insert(check_paths.end(), paths.begin(), paths.end()); THROW_IF_ERROR(vectorized::schema_util::check_variant_has_no_ambiguous_paths(check_paths)); } - for (size_t i = 0; i < paths.size(); ++i) { - FieldInfo field_info; - schema_util::get_field_info(values[i], &field_info); - if (field_info.scalar_type_id == PrimitiveType::INVALID_TYPE) { - continue; - } - if (column_variant.get_subcolumn(paths[i], i) == nullptr) { - if (paths[i].has_nested_part()) { - column_variant.add_nested_subcolumn(paths[i], field_info, old_num_rows); - } else { - column_variant.add_sub_column(paths[i], old_num_rows); + auto [doc_snapshot_data_paths, doc_snapshot_data_values] = + column_variant.get_doc_snapshot_data_paths_and_values(); + auto& doc_snapshot_data_offsets = column_variant.serialized_doc_snapshot_column_offsets(); + std::unordered_set subcolumn_set; + if (config.parse_to_subcolumns) { + for (size_t i = 0; i < paths.size(); ++i) { + FieldInfo field_info; + schema_util::get_field_info(values[i], &field_info); + if (field_info.scalar_type_id == PrimitiveType::INVALID_TYPE) { + continue; + } + if (column_variant.get_subcolumn(paths[i], i) == nullptr) { + if (paths[i].has_nested_part()) { + column_variant.add_nested_subcolumn(paths[i], field_info, old_num_rows); + } else { + column_variant.add_sub_column(paths[i], old_num_rows); + } + } + auto* subcolumn = column_variant.get_subcolumn(paths[i], i); + if (!subcolumn) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Failed to find sub column {}", + paths[i].get_path()); + } + if (subcolumn->cur_num_of_defaults() > 0) { + subcolumn->insert_many_defaults(subcolumn->cur_num_of_defaults()); + subcolumn->reset_current_num_of_defaults(); + } + if (subcolumn->size() != old_num_rows) { + throw doris::Exception( + ErrorCode::INVALID_ARGUMENT, + "subcolumn {} size missmatched, may contains duplicated entry", + paths[i].get_path()); + } + subcolumn->insert(std::move(values[i]), std::move(field_info)); + if (subcolumn_set.contains(paths[i].get_path())) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, + "may contains duplicated entry : {}", paths[i].get_path()); + } + subcolumn_set.insert(paths[i].get_path()); + if (!paths[i].empty() && config.parse_to_doc_snapshot) { + subcolumn->serialize_to_binary_column(doc_snapshot_data_paths, paths[i].get_path(), + doc_snapshot_data_values, old_num_rows); } } - auto* subcolumn = column_variant.get_subcolumn(paths[i], i); - if (!subcolumn) { - throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Failed to find sub column {}", - paths[i].get_path()); - } - if (subcolumn->cur_num_of_defaults() > 0) { - subcolumn->insert_many_defaults(subcolumn->cur_num_of_defaults()); - subcolumn->reset_current_num_of_defaults(); - } - if (subcolumn->size() != old_num_rows) { - throw doris::Exception(ErrorCode::INVALID_ARGUMENT, - "subcolumn {} size missmatched, may contains duplicated entry", - paths[i].get_path()); + } else { + CHECK(config.parse_to_doc_snapshot); + for (size_t i = 0; i < paths.size(); ++i) { + FieldInfo field_info; + schema_util::get_field_info(values[i], &field_info); + if (subcolumn_set.contains(paths[i].get_path())) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, + "may contains duplicated entry : {}", paths[i].get_path()); + } + subcolumn_set.insert(paths[i].get_path()); + if (paths[i].empty()) { + auto* subcolumn = column_variant.get_subcolumn(paths[i], i); + DCHECK(subcolumn != nullptr); + if (subcolumn->cur_num_of_defaults() > 0) { + subcolumn->insert_many_defaults(subcolumn->cur_num_of_defaults()); + subcolumn->reset_current_num_of_defaults(); + } + subcolumn->insert(std::move(values[i]), std::move(field_info)); + continue; + } + ColumnVariant::Subcolumn tmp_subcolumn(0, true); + tmp_subcolumn.insert(std::move(values[i]), std::move(field_info)); + tmp_subcolumn.serialize_to_binary_column(doc_snapshot_data_paths, paths[i].get_path(), + doc_snapshot_data_values, 0); } - subcolumn->insert(std::move(values[i]), std::move(field_info)); } + doc_snapshot_data_offsets.push_back(doc_snapshot_data_paths->size()); // /// Insert default values to missed subcolumns. const auto& subcolumns = column_variant.get_subcolumns(); for (const auto& entry : subcolumns) { @@ -237,4 +279,53 @@ void parse_json_to_variant(IColumn& column, const ColumnString& raw_json_column, column.finalize(); } +// pasre the doc snapshot column to subcolumns +void parse_binary_to_variant(ColumnVariant& column_variant) { + std::unordered_map subcolumns; + + auto [column_key, column_value] = column_variant.get_doc_snapshot_data_paths_and_values(); + const auto& column_offsets = column_variant.serialized_doc_snapshot_column_offsets(); + + size_t num_rows = column_offsets.size(); + + for (int64_t i = 0; i < num_rows; ++i) { + size_t start = column_offsets[i - 1]; + size_t end = column_offsets[i]; + for (size_t j = start; j < end; ++j) { + const auto& key = column_key->get_data_at(j); + if (auto it = subcolumns.find(std::string_view(key.data, key.size)); + it != subcolumns.end()) { + if (it->second.size() != i) { + it->second.insert_many_defaults(i - it->second.size()); + } + it->second.deserialize_from_binary_column(column_value, j); + } else { + vectorized::ColumnVariant::Subcolumn subcolumn {0, true, false}; + subcolumn.insert_many_defaults(i); + subcolumn.deserialize_from_binary_column(column_value, j); + subcolumns[std::string_view(key.data, key.size)] = std::move(subcolumn); + } + } + } + + for (auto& [path, subcolumn] : subcolumns) { + if (subcolumn.size() != num_rows) { + subcolumn.insert_many_defaults(num_rows - subcolumn.size()); + } + } + + for (auto& entry : subcolumns) { + entry.second.finalize(); + if (!column_variant.add_sub_column(PathInData(entry.first), + IColumn::mutate(entry.second.get_finalized_column_ptr()), + entry.second.get_least_common_type())) { + throw doris::Exception(ErrorCode::INTERNAL_ERROR, + "Failed to add subcolumn {}, which is from doc snapshot column", + entry.first); + } + } + + column_variant.finalize(); +} + } // namespace doris::vectorized diff --git a/be/src/vec/json/parse2column.h b/be/src/vec/json/parse2column.h index eea8a0ec197cdf..ab096e07c82111 100644 --- a/be/src/vec/json/parse2column.h +++ b/be/src/vec/json/parse2column.h @@ -42,4 +42,6 @@ void parse_json_to_variant(IColumn& column, const ColumnString& raw_json_column, // parse a single json, throws doris::Execption when failed void parse_json_to_variant(IColumn& column, const StringRef& jsons, JsonParser* parser, const ParseConfig& config); + +void parse_binary_to_variant(ColumnVariant& column_variant); } // namespace doris::vectorized diff --git a/be/src/vec/json/path_in_data.h b/be/src/vec/json/path_in_data.h index 1e21859a7e7719..74136a056ff5fc 100644 --- a/be/src/vec/json/path_in_data.h +++ b/be/src/vec/json/path_in_data.h @@ -99,7 +99,10 @@ class PathInData { bool get_is_typed() const { return is_typed; } - bool need_record_stats() const { return !empty() && !is_typed && !has_nested; } + bool need_record_stats() const { + return !empty() && !is_typed && !has_nested && + path.find("__DORIS_VARIANT_DOC_SNAPSHOT__") == std::string::npos; + } bool operator<(const PathInData& rhs) const { return std::lexicographical_compare( diff --git a/be/test/data/vec/native/all_types_single_row.native b/be/test/data/vec/native/all_types_single_row.native index 41207fd53b931ed9e8c959cd4b20b1bebeb4a2f0..98a36f1c6715b1093b0a3107f24a1c2274936da6 100644 GIT binary patch delta 271 zcmV+q0r39d2;>M2L{CylQ%*4e0RR91P_YeG0t)s6D77#BWFrPevuy$p0e^9*5h|jY z38WxNrUS47BCF~WfI}G0V=N&N5F|yiKmrMpZ$o7`2b$x;A#32NV#znh3@0P8u%Z!v znjFGnShks#z`1xCa;Tj*U*mK(Nl!KcQz8OdjMwWd)`@p`56pqsWsA3{&m_>3iwmy` zEVBo3YIYGMOklONr2t+$ylAS}ib01*TwdxOBf-Llix>eQqYfwsFbJ)4Y%u@; delta 267 zcmV+m0rdXl2;c|}L{CylQ%*4e0RR91OtB4C0t)g2D77#BWY`5Ivuy$p0e^3(5h|jY z38WxNrURe?BCBcx5`aS(&SNYg5fCFuxRod0hb$i*jZMad>LF17-wOmESX)8 zS-3}jT7VzAZv7+Vnz*wJ*A)8Id1Y%ExZkc0P=&7a_L#Y-UAwHty-q@2>hT`ssR9V RGO@Hqau@+1*bOKLFbLGYatHtb diff --git a/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp b/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp index a495d316f4b113..86fd39e1cc7ba4 100644 --- a/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp +++ b/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp @@ -53,7 +53,7 @@ TEST(HierarchicalDataIteratorTest, ProcessSparseExtractSubpaths) { std::unique_ptr sparse_reader = std::make_unique(); doris::segment_v2::ColumnIteratorUPtr iter; auto sparse_iter = std::make_unique( - doris::vectorized::ColumnVariant::create_sparse_column_fn(), std::move(sparse_reader), + doris::vectorized::ColumnVariant::create_binary_column_fn(), std::move(sparse_reader), nullptr); ASSERT_TRUE(HierarchicalDataIterator::create( &iter, /*col_uid*/ 0, PathInData("a.b"), /*node*/ nullptr, 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 3b0f8743871008..7565a34e7dce18 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 @@ -27,6 +27,8 @@ #include "olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h" #include "olap/rowset/segment_v2/variant/variant_column_reader.h" #include "olap/rowset/segment_v2/variant/variant_column_writer_impl.h" +#include "olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h" +#include "olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h" #include "olap/storage_engine.h" #include "testutil/variant_util.h" #include "vec/data_types/serde/data_type_serde.h" @@ -42,7 +44,9 @@ constexpr static std::string_view tmp_dir = "./ut_dir/tmp"; static void construct_column(ColumnPB* column_pb, int32_t col_unique_id, const std::string& column_type, const std::string& column_name, int variant_max_subcolumns_count = 3, bool is_key = false, - bool is_nullable = false, int variant_sparse_hash_shard_count = 0) { + bool is_nullable = false, int variant_sparse_hash_shard_count = 0, + bool variant_enable_doc_snapshot_mode = false, + int64_t variant_doc_snapshot_min_rows = 0) { column_pb->set_unique_id(col_unique_id); column_pb->set_name(column_name); column_pb->set_type(column_type); @@ -53,6 +57,8 @@ static void construct_column(ColumnPB* column_pb, int32_t col_unique_id, column_pb->set_variant_max_sparse_column_statistics_size(10000); // 5 sparse hash shard column_pb->set_variant_sparse_hash_shard_count(variant_sparse_hash_shard_count); + column_pb->set_variant_enable_doc_snapshot_mode(variant_enable_doc_snapshot_mode); + column_pb->set_variant_doc_snapshot_min_rows(variant_doc_snapshot_min_rows); } } @@ -201,33 +207,33 @@ void check_sparse_column_meta(const ColumnMetaPB& column_meta, auto& path_with_s } TEST_F(VariantColumnWriterReaderTest, test_statics) { - VariantStatisticsPB stats_pb; - auto* subcolumns_stats = stats_pb.mutable_sparse_column_non_null_size(); - (*subcolumns_stats)["key0"] = 500; // 50% of rows have key0 - (*subcolumns_stats)["key1"] = 500; // 50% of rows have key1 - (*subcolumns_stats)["key2"] = 333; // 33.3% of rows have key2 - (*subcolumns_stats)["key3"] = 200; // 20% of rows have key3 - (*subcolumns_stats)["key4"] = 1000; // 100% of rows have key4 - - auto* sparse_stats = stats_pb.mutable_sparse_column_non_null_size(); - (*sparse_stats)["key5"] = 100; - (*sparse_stats)["key6"] = 200; - (*sparse_stats)["key7"] = 300; - - // 6.2 Test from_pb - segment_v2::VariantStatistics stats; - stats.from_pb(stats_pb); - - // 6.3 Verify statistics - EXPECT_EQ(stats.sparse_column_non_null_size["key0"], 500); - EXPECT_EQ(stats.sparse_column_non_null_size["key1"], 500); - EXPECT_EQ(stats.sparse_column_non_null_size["key2"], 333); - EXPECT_EQ(stats.sparse_column_non_null_size["key3"], 200); - EXPECT_EQ(stats.sparse_column_non_null_size["key4"], 1000); - - EXPECT_EQ(stats.sparse_column_non_null_size["key5"], 100); - EXPECT_EQ(stats.sparse_column_non_null_size["key6"], 200); - EXPECT_EQ(stats.sparse_column_non_null_size["key7"], 300); + // VariantStatisticsPB stats_pb; + // auto* subcolumns_stats = stats_pb.mutable_sparse_column_non_null_size(); + // (*subcolumns_stats)["key0"] = 500; // 50% of rows have key0 + // (*subcolumns_stats)["key1"] = 500; // 50% of rows have key1 + // (*subcolumns_stats)["key2"] = 333; // 33.3% of rows have key2 + // (*subcolumns_stats)["key3"] = 200; // 20% of rows have key3 + // (*subcolumns_stats)["key4"] = 1000; // 100% of rows have key4 + + // auto* sparse_stats = stats_pb.mutable_sparse_column_non_null_size(); + // (*sparse_stats)["key5"] = 100; + // (*sparse_stats)["key6"] = 200; + // (*sparse_stats)["key7"] = 300; + + // // 6.2 Test from_pb + // segment_v2::VariantStatistics stats; + // stats.from_pb(stats_pb); + + // // 6.3 Verify statistics + // EXPECT_EQ(stats.sparse_column_non_null_size["key0"], 500); + // EXPECT_EQ(stats.sparse_column_non_null_size["key1"], 500); + // EXPECT_EQ(stats.sparse_column_non_null_size["key2"], 333); + // EXPECT_EQ(stats.sparse_column_non_null_size["key3"], 200); + // EXPECT_EQ(stats.sparse_column_non_null_size["key4"], 1000); + + // EXPECT_EQ(stats.sparse_column_non_null_size["key5"], 100); + // EXPECT_EQ(stats.sparse_column_non_null_size["key6"], 200); + // EXPECT_EQ(stats.sparse_column_non_null_size["key7"], 300); } TEST_F(VariantColumnWriterReaderTest, test_write_data_normal) { @@ -444,8 +450,8 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_normal) { }; // 10. check sparse extract reader - PathToSparseColumnCacheUPtr sparse_column_cache = - std::make_unique>(); + PathToBinaryColumnCacheUPtr sparse_column_cache = + std::make_unique>(); stats.bytes_read = 0; for (int i = 3; i < 10; ++i) { std::string key = ".key" + std::to_string(i); @@ -2138,68 +2144,6 @@ TEST_F(VariantColumnWriterReaderTest, test_nested_subcolumn) { StorageReadOptions storageReadOptions; storageReadOptions.io_ctx.reader_type = ReaderType::READER_CUMULATIVE_COMPACTION; - ColumnIteratorUPtr nested_column_iter; - MockColumnReaderCache column_reader_cache(footer, file_reader, _tablet_schema); - DataTypePtr nested_storage_type; - - st = variant_column_reader->_new_iterator_with_flat_leaves( - &nested_column_iter, &nested_storage_type, target_column, &storageReadOptions, false, - false, &column_reader_cache); - EXPECT_TRUE(st.ok()) << st.msg(); - // check iter for read_by_rowids, next_batch - auto nested_iter = assert_cast(nested_column_iter.get()); - std::vector row_ids = {1, 10, 100}; - // dst is always nullable(array) - DataTypePtr array_string_ptr = std::make_shared( - std::make_shared( - std::make_shared( - std::make_shared()))); - MutableColumnPtr dst_arr = array_string_ptr->create_column(); - ColumnIteratorOptions nested_column_iter_opts; - OlapReaderStatistics stats; - nested_column_iter_opts.stats = &stats; - nested_column_iter_opts.file_reader = file_reader.get(); - st = nested_column_iter->init(nested_column_iter_opts); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_iter->seek_to_ordinal(0); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_iter->read_by_rowids(row_ids.data(), row_ids.size(), dst_arr); - EXPECT_TRUE(st.ok()) << st.msg(); - EXPECT_TRUE(dst_arr->size() == 3); - auto row_id = nested_iter->get_current_ordinal(); - std::cout << "row_id: " << row_id << std::endl; - // make some error senior - { - ColumnIteratorUPtr nested_column_iter11; - st = variant_column_reader->_new_iterator_with_flat_leaves( - &nested_column_iter11, &nested_storage_type, target_column, &storageReadOptions, - false, false, &column_reader_cache); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_column_iter11->init(nested_column_iter_opts); - EXPECT_TRUE(st.ok()) << st.msg(); - auto* nested_iter11 = assert_cast(nested_column_iter11.get()); - assert(nested_iter11); - st = nested_iter11->seek_to_ordinal(0); - EXPECT_TRUE(st.ok()) << st.msg(); - MutableColumnPtr wrong_arr = ColumnVariant::create(3); - size_t nrows = 1000; - // not support seek next_batch_of_zone_map - st = nested_iter11->next_batch_of_zone_map(&nrows, wrong_arr); - EXPECT_FALSE(st.ok()); - EXPECT_ANY_THROW(Status sta = nested_iter11->next_batch(&nrows, wrong_arr)); - } - auto read_to_column_arr = [&](ColumnIteratorUPtr& it) { - MutableColumnPtr arr = array_string_ptr->create_column(); - size_t nrows = 1000; - st = it->seek_to_ordinal(0); - EXPECT_TRUE(st.ok()) << st.msg(); - st = it->next_batch(&nrows, arr); - EXPECT_TRUE(st.ok()) << st.msg(); - EXPECT_EQ(arr->size(), 1000); - }; - - read_to_column_arr(nested_column_iter); - // DefaultNestedColumnIterator with nullptr parameter PathInDataBuilder builder1; builder1.append("v", false); // First part is variant @@ -2214,43 +2158,6 @@ TEST_F(VariantColumnWriterReaderTest, test_nested_subcolumn) { target_column.set_path_info(path1); EXPECT_TRUE(target_column.is_nested_subcolumn()) << target_column._column_path->has_nested_part(); - - ColumnIteratorUPtr nested_column_iter1; - st = variant_column_reader->_new_iterator_with_flat_leaves( - &nested_column_iter1, &nested_storage_type, target_column, &storageReadOptions, false, - false, &column_reader_cache); - EXPECT_TRUE(st.ok()) << st.msg(); - // check iter for read_by_rowids, next_batch - // dst is array - MutableColumnPtr dst_object2 = array_string_ptr->create_column(); - auto nested_iter1 = assert_cast(nested_column_iter1.get()); - st = nested_column_iter1->init(nested_column_iter_opts); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_iter1->seek_to_ordinal(0); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_iter1->read_by_rowids(row_ids.data(), row_ids.size(), dst_object2); - EXPECT_TRUE(st.ok()) << st.msg(); - EXPECT_TRUE(dst_object2->size() == 3); - - { - // make read by nested_iter1 directly - ColumnIteratorUPtr nested_column_iter11; - st = variant_column_reader->_new_iterator_with_flat_leaves( - &nested_column_iter11, &nested_storage_type, target_column, &storageReadOptions, - false, false, &column_reader_cache); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_column_iter11->init(nested_column_iter_opts); - EXPECT_TRUE(st.ok()) << st.msg(); - auto* nested_iter11 = assert_cast(nested_column_iter11.get()); - MutableColumnPtr arr = array_string_ptr->create_column(); - size_t nrows = 1000; - st = nested_iter11->seek_to_ordinal(0); - EXPECT_TRUE(st.ok()) << st.msg(); - st = nested_iter11->next_batch(&nrows, arr); - EXPECT_TRUE(st.ok()) << st.msg(); - EXPECT_EQ(arr->size(), 1000); - } - read_to_column_arr(nested_column_iter1); } TEST_F(VariantColumnWriterReaderTest, test_nested_iter) { @@ -2760,4 +2667,349 @@ TEST_F(VariantColumnWriterReaderTest, test_concurrent_load_external_meta_and_get EXPECT_TRUE(writer_status.ok()); } +TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { + // 1. create tablet_schema (enable doc snapshot) + TabletSchemaPB schema_pb; + schema_pb.set_keys_type(KeysType::DUP_KEYS); + int variant_sparse_hash_shard_count = 3; + construct_column(schema_pb.add_column(), 1, "VARIANT", "v", 3, false, false, + variant_sparse_hash_shard_count, + /*variant_enable_doc_snapshot_mode*/ true, + /*variant_doc_snapshot_min_rows*/ 0); + _tablet_schema = std::make_shared(); + _tablet_schema->init_from_pb(schema_pb); + + // 2. create tablet + TabletMetaSharedPtr tablet_meta(new TabletMeta(_tablet_schema)); + _tablet_schema->set_external_segment_meta_used_default(false); + tablet_meta->_tablet_id = 10001; + _tablet = std::make_shared(*_engine_ref, tablet_meta, _data_dir.get()); + EXPECT_TRUE(_tablet->init().ok()); + EXPECT_TRUE(io::global_local_filesystem()->delete_directory(_tablet->tablet_path()).ok()); + EXPECT_TRUE(io::global_local_filesystem()->create_directory(_tablet->tablet_path()).ok()); + + // 3. create file_writer + io::FileWriterPtr file_writer; + auto file_path = local_segment_path(_tablet->tablet_path(), "0", 0); + auto st = io::global_local_filesystem()->create_file(file_path, &file_writer); + EXPECT_TRUE(st.ok()) << st.msg(); + + // 4. create column_writer + SegmentFooterPB footer; + ColumnWriterOptions opts; + opts.meta = footer.add_columns(); + opts.compression_type = CompressionTypePB::LZ4; + opts.file_writer = file_writer.get(); + opts.footer = &footer; + RowsetWriterContext rowset_ctx; + rowset_ctx.write_type = DataWriteType::TYPE_DIRECT; + opts.rowset_ctx = &rowset_ctx; + opts.rowset_ctx->tablet_schema = _tablet_schema; + TabletColumn column = _tablet_schema->column(0); + _init_column_meta(opts.meta, 0, column, CompressionTypePB::LZ4); + + std::unique_ptr writer; + EXPECT_TRUE(ColumnWriter::create(opts, &column, file_writer.get(), &writer).ok()); + EXPECT_TRUE(writer->init().ok()); + EXPECT_TRUE(assert_cast(writer.get()) != nullptr); + + // 5. write data + auto olap_data_convertor = std::make_unique(); + auto block = _tablet_schema->create_block(); + auto column_object = (*std::move(block.get_by_position(0).column)).mutate(); + std::unordered_map inserted_jsonstr; + auto path_with_size = + VariantUtil::fill_object_column_with_test_data(column_object, 1000, &inserted_jsonstr); + olap_data_convertor->add_column_data_convertor(column); + olap_data_convertor->set_source_content(&block, 0, 1000); + auto [result, accessor] = olap_data_convertor->convert_column_data(0); + EXPECT_TRUE(result.ok()); + EXPECT_TRUE(accessor != nullptr); + EXPECT_TRUE(writer->append(accessor->get_nullmap(), accessor->get_data(), 1000).ok()); + st = writer->finish(); + EXPECT_TRUE(st.ok()) << st.msg(); + st = writer->write_data(); + EXPECT_TRUE(st.ok()) << st.msg(); + st = writer->write_ordinal_index(); + EXPECT_TRUE(st.ok()) << st.msg(); + st = writer->write_zone_map(); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_TRUE(file_writer->close().ok()); + footer.set_num_rows(1000); + + // 6. check footer layout: root + extracted subcols + sparse + 128 doc snapshot buckets + int expected_sparse_cols = + variant_sparse_hash_shard_count > 1 ? variant_sparse_hash_shard_count : 1; + EXPECT_EQ(footer.columns_size(), 1 + 3 + expected_sparse_cols + 128); + EXPECT_EQ(footer.columns(0).type(), (int)FieldType::OLAP_FIELD_TYPE_VARIANT); + + // verify sparse meta exists + check_sparse_column_meta(footer.columns(1 + 3 + expected_sparse_cols - 1), path_with_size); + + // verify doc snapshot metas exist and have stats + int doc_snapshot_meta_cnt = 0; + int doc_snapshot_non_empty_stats_cnt = 0; + for (int i = 1 + 3 + expected_sparse_cols; i < footer.columns_size(); ++i) { + const auto& m = footer.columns(i); + if (!m.has_column_path_info()) { + continue; + } + auto p = std::make_shared(); + p->from_protobuf(m.column_path_info()); + auto rel = p->copy_pop_front().get_path(); + if (rel.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { + ++doc_snapshot_meta_cnt; + // check_doc_snapshot_column_meta_basic(m); + // writer should set doc_snapshot_column_non_null_size stats (may be empty for some buckets) + if (m.has_variant_statistics() && + m.variant_statistics().doc_snapshot_column_non_null_size_size() > 0) { + ++doc_snapshot_non_empty_stats_cnt; + } + // stored as MAP in segment meta + EXPECT_EQ(m.type(), (int)FieldType::OLAP_FIELD_TYPE_MAP); + } + } + EXPECT_EQ(doc_snapshot_meta_cnt, 128); + EXPECT_GT(doc_snapshot_non_empty_stats_cnt, 0); + + // 7. build reader and verify doc snapshot readers are picked for root + io::FileReaderSPtr file_reader; + st = io::global_local_filesystem()->open_file(file_path, &file_reader); + EXPECT_TRUE(st.ok()) << st.msg(); + std::shared_ptr column_reader; + st = create_variant_root_reader(footer, file_reader, _tablet_schema, &column_reader); + EXPECT_TRUE(st.ok()) << st.msg(); + + MockColumnReaderCache column_reader_cache(footer, file_reader, _tablet_schema); + auto* variant_column_reader = assert_cast(column_reader.get()); + EXPECT_TRUE(variant_column_reader != nullptr); + + // Root path should select DOC_SNAPSHOT_ALL iterator in query mode + StorageReadOptions storage_read_opts; + OlapReaderStatistics stats; + storage_read_opts.io_ctx.reader_type = ReaderType::READER_QUERY; + storage_read_opts.stats = &stats; + ColumnIteratorUPtr it; + TabletColumn parent_column = _tablet_schema->column(0); + st = variant_column_reader->new_iterator(&it, &parent_column, &storage_read_opts, + &column_reader_cache); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_TRUE(assert_cast(it.get()) != nullptr); + + ColumnIteratorOptions column_iter_opts; + column_iter_opts.stats = &stats; + column_iter_opts.file_reader = file_reader.get(); + st = it->init(column_iter_opts); + EXPECT_TRUE(st.ok()) << st.msg(); + + vectorized::MutableColumnPtr dst = vectorized::ColumnVariant::create(3, false); + size_t nrows = 1000; + st = it->seek_to_ordinal(0); + EXPECT_TRUE(st.ok()) << st.msg(); + st = it->next_batch(&nrows, dst); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_EQ(nrows, 1000); + + auto* dst_variant = assert_cast(dst.get()); + EXPECT_TRUE(dst_variant->is_doc_snapshot_mode()); + const auto& offsets = dst_variant->serialized_doc_snapshot_column_offsets(); + EXPECT_EQ(offsets.size(), 1000); + // key0 exists in every row, so doc snapshot offsets should strictly increase + for (size_t i = 0; i < offsets.size(); ++i) { + EXPECT_GT(offsets[i], (i == 0 ? 0 : offsets[i - 1])); + } + + // 8. read a single path from doc snapshot (DOC_SNAPSHOT_EXTRACT) and validate values + TabletColumn key0_col; + key0_col.set_name(parent_column.name_lower_case() + ".key0"); + // In "subcolumns + doc snapshot" segments, key0 is a leaf subcolumn so leaf iterator is expected. + key0_col.set_type((FieldType)(int)footer.columns(1).type()); + key0_col.set_parent_unique_id(parent_column.unique_id()); + key0_col.set_path_info(PathInData(parent_column.name_lower_case() + ".key0")); + key0_col.set_variant_max_subcolumns_count(parent_column.variant_max_subcolumns_count()); + key0_col.set_is_nullable(true); + + ColumnIteratorUPtr it_path; + st = variant_column_reader->new_iterator(&it_path, &key0_col, &storage_read_opts, + &column_reader_cache); + EXPECT_TRUE(st.ok()) << st.msg(); + st = it_path->init(column_iter_opts); + EXPECT_TRUE(st.ok()) << st.msg(); + + // key0 is always present and equals 88. + auto key0_type = vectorized::DataTypeFactory::instance().create_data_type(key0_col, false); + auto key0_dst = key0_type->create_column(); + nrows = 1000; + st = it_path->seek_to_ordinal(0); + EXPECT_TRUE(st.ok()) << st.msg(); + st = it_path->next_batch(&nrows, key0_dst); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_EQ(nrows, 1000); + for (int row = 0; row < 1000; ++row) { + EXPECT_EQ(key0_type->to_string(*key0_dst, row), "88"); + } + + // 9. compaction-style reader: DOC_SNAPSHOT bucket column wrapped by VariantDocSnapshotCompactIterator + StorageReadOptions compaction_read_opts; + compaction_read_opts.io_ctx.reader_type = ReaderType::READER_BASE_COMPACTION; + compaction_read_opts.stats = &stats; + compaction_read_opts.tablet_schema = _tablet_schema; + // Ensure "has extracted columns" predicate is true for flat-leaf planner. + TabletColumn fake_extracted; + fake_extracted.set_name(parent_column.name_lower_case() + ".fake"); + fake_extracted.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); + fake_extracted.set_parent_unique_id(parent_column.unique_id()); + fake_extracted.set_path_info(PathInData(parent_column.name_lower_case() + ".fake")); + fake_extracted.set_is_nullable(true); + _tablet_schema->append_column(fake_extracted); + + TabletColumn doc_bucket = vectorized::schema_util::create_doc_snapshot_column(parent_column, 0); + doc_bucket.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); + doc_bucket.set_is_nullable(false); + ColumnIteratorUPtr it_doc_bucket; + st = variant_column_reader->new_iterator(&it_doc_bucket, &doc_bucket, &compaction_read_opts, + &column_reader_cache); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_TRUE(assert_cast(it_doc_bucket.get()) != nullptr); + st = it_doc_bucket->init(column_iter_opts); + EXPECT_TRUE(st.ok()) << st.msg(); + + vectorized::MutableColumnPtr doc_dst = vectorized::ColumnVariant::create(3, false); + nrows = 1000; + st = it_doc_bucket->seek_to_ordinal(0); + EXPECT_TRUE(st.ok()) << st.msg(); + st = it_doc_bucket->next_batch(&nrows, doc_dst); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_EQ(nrows, 1000); +} + +TEST_F(VariantColumnWriterReaderTest, test_doc_snapshot_path_iterator_doc_snapshot_only) { + // Write a doc-snapshot-only variant column (no extracted subcolumns) so that + // path reads choose VariantDocSnapshotPathIterator. + TabletSchemaPB schema_pb; + schema_pb.set_keys_type(KeysType::DUP_KEYS); + int variant_sparse_hash_shard_count = 1; + construct_column(schema_pb.add_column(), 1, "VARIANT", "v", /*variant_max_subcolumns_count*/ 0, + false, false, variant_sparse_hash_shard_count, + /*variant_enable_doc_snapshot_mode*/ true, + /*variant_doc_snapshot_min_rows*/ 0); + _tablet_schema = std::make_shared(); + _tablet_schema->init_from_pb(schema_pb); + + TabletMetaSharedPtr tablet_meta(new TabletMeta(_tablet_schema)); + _tablet_schema->set_external_segment_meta_used_default(false); + tablet_meta->_tablet_id = 10002; + _tablet = std::make_shared(*_engine_ref, tablet_meta, _data_dir.get()); + EXPECT_TRUE(_tablet->init().ok()); + EXPECT_TRUE(io::global_local_filesystem()->delete_directory(_tablet->tablet_path()).ok()); + EXPECT_TRUE(io::global_local_filesystem()->create_directory(_tablet->tablet_path()).ok()); + + io::FileWriterPtr file_writer; + auto file_path = local_segment_path(_tablet->tablet_path(), "0", 0); + auto st = io::global_local_filesystem()->create_file(file_path, &file_writer); + EXPECT_TRUE(st.ok()) << st.msg(); + + SegmentFooterPB footer; + ColumnWriterOptions opts; + opts.meta = footer.add_columns(); + opts.compression_type = CompressionTypePB::LZ4; + opts.file_writer = file_writer.get(); + opts.footer = &footer; + RowsetWriterContext rowset_ctx; + rowset_ctx.write_type = DataWriteType::TYPE_DIRECT; + opts.rowset_ctx = &rowset_ctx; + opts.rowset_ctx->tablet_schema = _tablet_schema; + TabletColumn column = _tablet_schema->column(0); + _init_column_meta(opts.meta, 0, column, CompressionTypePB::LZ4); + + std::unique_ptr writer; + EXPECT_TRUE(ColumnWriter::create(opts, &column, file_writer.get(), &writer).ok()); + EXPECT_TRUE(writer->init().ok()); + + // Build ColumnVariant by parsing JSON into doc snapshot only. + auto block = _tablet_schema->create_block(); + auto column_object = (*std::move(block.get_by_position(0).column)).mutate(); + auto type_string = std::make_shared(); + auto str_col = type_string->create_column(); + auto* column_string = assert_cast(str_col.get()); + std::unordered_map inserted; + VariantUtil::fill_string_column_with_test_data(column_string, 1000, &inserted); + vectorized::ParseConfig config; + config.enable_flatten_nested = false; + config.parse_to_subcolumns = false; + config.parse_to_doc_snapshot = true; + vectorized::parse_json_to_variant(*column_object, *column_string, config); + + auto olap_data_convertor = std::make_unique(); + olap_data_convertor->add_column_data_convertor(column); + olap_data_convertor->set_source_content(&block, 0, 1000); + auto [result, accessor] = olap_data_convertor->convert_column_data(0); + EXPECT_TRUE(result.ok()); + EXPECT_TRUE(writer->append(accessor->get_nullmap(), accessor->get_data(), 1000).ok()); + st = writer->finish(); + EXPECT_TRUE(st.ok()) << st.msg(); + st = writer->write_data(); + EXPECT_TRUE(st.ok()) << st.msg(); + st = writer->write_ordinal_index(); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_TRUE(file_writer->close().ok()); + footer.set_num_rows(1000); + + // footer: root + sparse + 128 doc snapshot buckets (no extracted subcolumns) + EXPECT_EQ(footer.columns_size(), 1 + 1 + 128); + + io::FileReaderSPtr file_reader; + st = io::global_local_filesystem()->open_file(file_path, &file_reader); + EXPECT_TRUE(st.ok()) << st.msg(); + std::shared_ptr column_reader; + st = create_variant_root_reader(footer, file_reader, _tablet_schema, &column_reader); + EXPECT_TRUE(st.ok()) << st.msg(); + auto* variant_column_reader = assert_cast(column_reader.get()); + EXPECT_TRUE(variant_column_reader != nullptr); + MockColumnReaderCache column_reader_cache(footer, file_reader, _tablet_schema); + + StorageReadOptions read_opts; + OlapReaderStatistics stats; + read_opts.io_ctx.reader_type = ReaderType::READER_QUERY; + read_opts.stats = &stats; + + ColumnIteratorOptions iter_opts; + iter_opts.stats = &stats; + iter_opts.file_reader = file_reader.get(); + + TabletColumn parent_column = _tablet_schema->column(0); + TabletColumn key0_col; + key0_col.set_name(parent_column.name_lower_case() + ".key0"); + key0_col.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); + key0_col.set_parent_unique_id(parent_column.unique_id()); + key0_col.set_path_info(PathInData(parent_column.name_lower_case() + ".key0")); + key0_col.set_variant_max_subcolumns_count(parent_column.variant_max_subcolumns_count()); + key0_col.set_is_nullable(true); + + ColumnIteratorUPtr it; + st = variant_column_reader->new_iterator(&it, &key0_col, &read_opts, &column_reader_cache); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_TRUE(assert_cast(it.get()) != nullptr); + st = it->init(iter_opts); + EXPECT_TRUE(st.ok()) << st.msg(); + + vectorized::MutableColumnPtr dst = vectorized::ColumnVariant::create(3, false); + size_t n = 1000; + st = it->seek_to_ordinal(0); + EXPECT_TRUE(st.ok()) << st.msg(); + st = it->next_batch(&n, dst); + EXPECT_TRUE(st.ok()) << st.msg(); + EXPECT_EQ(n, 1000); + + vectorized::DataTypeSerDe::FormatOptions options; + auto tz = cctz::utc_time_zone(); + options.timezone = &tz; + for (int row = 0; row < 1000; ++row) { + std::string value; + assert_cast(dst.get())->serialize_one_row_to_string(row, &value, + options); + EXPECT_EQ(value, "88"); + } +} + } // namespace doris diff --git a/be/test/vec/columns/column_variant_test.cpp b/be/test/vec/columns/column_variant_test.cpp index 2c312a5c3ab202..6ebea27bc10885 100644 --- a/be/test/vec/columns/column_variant_test.cpp +++ b/be/test/vec/columns/column_variant_test.cpp @@ -194,16 +194,16 @@ TEST_F(ColumnVariantTest, basic_deserialize) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.b.d", 5)); - auto pair = variant->deserialize_from_sparse_column(value, start++); + auto pair = variant->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), 30); auto data2 = path->get_data_at(start); - auto pair2 = variant->deserialize_from_sparse_column(value, start++); + auto pair2 = variant->deserialize_from_binary_column(value, start++); EXPECT_EQ(data2, StringRef("v.c.d", 5)); EXPECT_EQ(pair2.first.get(), 30); auto data3 = path->get_data_at(start); - auto pair3 = variant->deserialize_from_sparse_column(value, start++); + auto pair3 = variant->deserialize_from_binary_column(value, start++); EXPECT_EQ(data3, StringRef("v.d.d", 5)); EXPECT_EQ(pair3.first.get(), "50"); EXPECT_EQ(start, end); @@ -348,12 +348,12 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.a", 3)); - auto pair = dst->deserialize_from_sparse_column(value, start++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair2.first.get(), 20); EXPECT_EQ(start, end); @@ -366,17 +366,17 @@ TEST_F(ColumnVariantTest, basic_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.a", 3)); - auto pair = dst->deserialize_from_sparse_column(value, start++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair2.first.get(), 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++); + auto pair3 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair3.first.get(), "50"); EXPECT_EQ(start, end); @@ -510,9 +510,9 @@ TEST_F(ColumnVariantTest, is_null_at) { 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)); + sub1->serialize_to_binary_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)); + sub1->serialize_to_binary_column(sparse_column_keys, pa, sparse_column_values, 16)); } TEST_F(ColumnVariantTest, advanced_finalize) { @@ -569,19 +569,19 @@ TEST_F(ColumnVariantTest, advanced_deserialize) { size_t end = offsets[row]; auto data = path->get_data_at(start); - auto pair = variant->deserialize_from_sparse_column(value, start++); + auto pair = variant->deserialize_from_binary_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++); + auto pair2 = variant->deserialize_from_binary_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++); + auto pair3 = variant->deserialize_from_binary_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"))); @@ -593,19 +593,19 @@ TEST_F(ColumnVariantTest, advanced_deserialize) { size_t end = offsets[row]; auto data = path->get_data_at(start); - auto pair = variant->deserialize_from_sparse_column(value, start++); + auto pair = variant->deserialize_from_binary_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++); + auto pair2 = variant->deserialize_from_binary_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++); + auto pair3 = variant->deserialize_from_binary_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"))); @@ -684,12 +684,12 @@ TEST_F(ColumnVariantTest, advanced_insert_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.a", 3)); - auto pair = dst->deserialize_from_sparse_column(value, start++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.c", 3)); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(convert_field_to_string(pair2.first), convert_field_to_string(VariantUtil::get_field("array_int"))); @@ -701,18 +701,18 @@ TEST_F(ColumnVariantTest, advanced_insert_range_from) { size_t end = offsets[row]; auto data = path->get_data_at(start); - auto pair = dst->deserialize_from_sparse_column(value, start++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(data, StringRef("v.a", 3)); EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_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++); + auto pair3 = dst->deserialize_from_binary_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"))); @@ -725,18 +725,18 @@ TEST_F(ColumnVariantTest, advanced_insert_range_from) { size_t end = offsets[row]; auto data = path->get_data_at(start); - auto pair = dst->deserialize_from_sparse_column(value, start++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(data, StringRef("v.a", 3)); EXPECT_EQ(pair.first.get(), 20); auto data2 = path->get_data_at(start); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_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++); + auto pair3 = dst->deserialize_from_binary_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"))); @@ -807,23 +807,23 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data0 = path->get_data_at(start); EXPECT_EQ(data0, StringRef("v.s", 3)); - auto pair0 = dst->deserialize_from_sparse_column(value, start++); + auto pair0 = dst->deserialize_from_binary_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++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), std::numeric_limits::max()); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.y", 3)); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair2.first.get(), std::numeric_limits::max()); auto data3 = path->get_data_at(start); EXPECT_EQ(data3, StringRef("v.z", 3)); - auto pair3 = dst->deserialize_from_sparse_column(value, start++); + auto pair3 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair3.first.get(), Int64(static_cast(std::numeric_limits::max()) + 1)); @@ -859,23 +859,23 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data0 = path->get_data_at(start); EXPECT_EQ(data0, StringRef("v.s", 3)); - auto pair0 = dst->deserialize_from_sparse_column(value, start++); + auto pair0 = dst->deserialize_from_binary_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++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), std::numeric_limits::max()); auto data2 = path->get_data_at(start); EXPECT_EQ(data2, StringRef("v.y", 3)); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair2.first.get(), std::numeric_limits::max()); auto data3 = path->get_data_at(start); EXPECT_EQ(data3, StringRef("v.z", 3)); - auto pair3 = dst->deserialize_from_sparse_column(value, start++); + auto pair3 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair3.first.get(), Int64(static_cast(std::numeric_limits::max()) + 1)); @@ -896,16 +896,16 @@ TEST_F(ColumnVariantTest, empty_inset_range_from) { auto data = path->get_data_at(start); EXPECT_EQ(data, StringRef("v.b.d", 5)); - auto pair = dst->deserialize_from_sparse_column(value, start++); + auto pair = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(pair.first.get(), 30); auto data2 = path->get_data_at(start); - auto pair2 = dst->deserialize_from_sparse_column(value, start++); + auto pair2 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(data2, StringRef("v.c.d", 5)); EXPECT_EQ(pair2.first.get(), 30); auto data3 = path->get_data_at(start); - auto pair3 = dst->deserialize_from_sparse_column(value, start++); + auto pair3 = dst->deserialize_from_binary_column(value, start++); EXPECT_EQ(data3, StringRef("v.d.d", 5)); EXPECT_EQ(pair3.first.get(), "50"); EXPECT_EQ(start, end); @@ -3483,7 +3483,7 @@ TEST_F(ColumnVariantTest, test_variant_no_data_insert) { } TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { - auto sparse_column = ColumnVariant::create_sparse_column_fn(); + auto sparse_column = ColumnVariant::create_binary_column_fn(); auto& column_map = assert_cast(*sparse_column); auto& key = assert_cast(column_map.get_keys()); auto& value = assert_cast(column_map.get_values()); @@ -3496,16 +3496,16 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { FieldInfo info = {PrimitiveType::TYPE_TINYINT, false, false, 1}; ColumnVariant::Subcolumn int_subcolumn(0, true, false); int_subcolumn.insert(array_field, info); - int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 0); + int_subcolumn.serialize_to_binary_column(&key, "b", &value, 0); info = {PrimitiveType::TYPE_INT, false, false, 1}; int_subcolumn.insert(array_field, info); - int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 1); + int_subcolumn.serialize_to_binary_column(&key, "b", &value, 1); offsets.push_back(key.size()); ColumnVariant::Subcolumn subcolumn(0, true, false); - subcolumn.deserialize_from_sparse_column(&value, 0); + subcolumn.deserialize_from_binary_column(&value, 0); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_ARRAY); @@ -3516,7 +3516,7 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { EXPECT_EQ(arr.size(), 1); EXPECT_EQ(arr[0].get(), 123); - subcolumn.deserialize_from_sparse_column(&value, 1); + subcolumn.deserialize_from_binary_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 2); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_ARRAY); @@ -3540,19 +3540,19 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { FieldInfo info = {PrimitiveType::TYPE_NULL, false, false, 1}; ColumnVariant::Subcolumn int_subcolumn(0, true, false); int_subcolumn.insert(array_field, info); - int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 0); + int_subcolumn.serialize_to_binary_column(&key, "b", &value, 0); array_field = Field::create_field(Array(2)); array_field.get()[0] = Field(); array_field.get()[1] = int_field; info = {PrimitiveType::TYPE_INT, false, false, 1}; int_subcolumn.insert(array_field, info); - int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 1); + int_subcolumn.serialize_to_binary_column(&key, "b", &value, 1); offsets.push_back(key.size()); ColumnVariant::Subcolumn subcolumn(0, true, false); - subcolumn.deserialize_from_sparse_column(&value, 0); + subcolumn.deserialize_from_binary_column(&value, 0); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_ARRAY); @@ -3562,7 +3562,7 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) { EXPECT_EQ(arr.size(), 1); EXPECT_TRUE(arr[0].is_null()); - subcolumn.deserialize_from_sparse_column(&value, 1); + subcolumn.deserialize_from_binary_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 2); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_ARRAY); diff --git a/be/test/vec/common/schema_util_rowset_test.cpp b/be/test/vec/common/schema_util_rowset_test.cpp index 925bb093813461..23f565998345fe 100644 --- a/be/test/vec/common/schema_util_rowset_test.cpp +++ b/be/test/vec/common/schema_util_rowset_test.cpp @@ -468,6 +468,7 @@ TEST_F(SchemaUtilRowsetTest, collect_path_stats_and_get_extended_compaction_sche rowset_writer_context.version = version; rowset_writer_context.segments_overlap = overlap; rowset_writer_context.max_rows_per_segment = max_rows_per_segment; + rowset_writer_context.write_type = DataWriteType::TYPE_COMPACTION; inc_id++; return rowset_writer_context; }; @@ -540,7 +541,7 @@ TEST_F(SchemaUtilRowsetTest, collect_path_stats_and_get_extended_compaction_sche sparse_typed_col.set_type(FieldType::OLAP_FIELD_TYPE_MAP); sparse_typed_col.set_unique_id(-1); sparse_typed_col.set_parent_unique_id(1); - sparse_typed_col.set_path_info(PathInData(std::string("v1.") + BeConsts::SPARSE_COLUMN_PATH)); + sparse_typed_col.set_path_info(PathInData(std::string("v1.") + SPARSE_COLUMN_PATH)); sparse_typed_col.set_variant_max_subcolumns_count(3); sparse_typed_col.set_is_nullable(true); // add key/value subcolumns for MAP to satisfy DataTypeFactory checks @@ -809,6 +810,7 @@ TEST_F(SchemaUtilRowsetTest, typed_path_to_sparse_column) { rowset_writer_context.version = version; rowset_writer_context.segments_overlap = overlap; rowset_writer_context.max_rows_per_segment = max_rows_per_segment; + rowset_writer_context.write_type = DataWriteType::TYPE_COMPACTION; inc_id++; return rowset_writer_context; }; diff --git a/be/test/vec/common/schema_util_test.cpp b/be/test/vec/common/schema_util_test.cpp index 630c7347a49554..f9d0ec3417dad5 100644 --- a/be/test/vec/common/schema_util_test.cpp +++ b/be/test/vec/common/schema_util_test.cpp @@ -23,6 +23,7 @@ #include "olap/rowset/beta_rowset.h" #include "olap/rowset/rowset_fwd.h" #include "olap/rowset/segment_v2/variant/variant_column_writer_impl.h" +#include "olap/rowset/segment_v2/variant/variant_util.h" #include "testutil/variant_util.h" #include "vec/columns/column_nothing.h" #include "vec/columns/column_variant.h" @@ -741,10 +742,11 @@ TEST_F(SchemaUtilTest, TestParseVariantColumns) { block.insert({variant_column->get_ptr(), variant_type, "variant_col"}); - std::vector variant_pos {0}; + std::vector variant_pos {0}; ParseConfig config; - auto status = schema_util::parse_variant_columns(block, variant_pos, config); + std::vector configs {config}; + auto status = variant_util::parse_variant_columns(block, variant_pos, configs); EXPECT_TRUE(status.ok()); // Check the parsed variant column @@ -1255,10 +1257,11 @@ TEST_F(SchemaUtilTest, TestParseVariantColumnsEdgeCases) { variant_column->create_root(std::make_shared(), root_column->get_ptr()); block.insert({variant_column->get_ptr(), variant_type, "variant_col"}); - std::vector variant_pos {0}; + std::vector variant_pos {0}; ParseConfig config; - auto status = schema_util::parse_variant_columns(block, variant_pos, config); + std::vector configs {config}; + auto status = variant_util::parse_variant_columns(block, variant_pos, configs); EXPECT_TRUE(status.ok()); // Test parsing from JSONB to variant @@ -1272,7 +1275,7 @@ TEST_F(SchemaUtilTest, TestParseVariantColumnsEdgeCases) { Block block2; block2.insert({variant_column2->get_ptr(), variant_type, "variant_col2"}); - status = schema_util::parse_variant_columns(block2, {0}, config); + status = variant_util::parse_variant_columns(block2, {0}, configs); EXPECT_TRUE(status.ok()); // Test parsing already parsed variant @@ -1282,7 +1285,7 @@ TEST_F(SchemaUtilTest, TestParseVariantColumnsEdgeCases) { Block block3; block3.insert({variant_column3->get_ptr(), variant_type, "variant_col3"}); - status = schema_util::parse_variant_columns(block3, {0}, config); + status = variant_util::parse_variant_columns(block3, {0}, configs); EXPECT_TRUE(status.ok()); } @@ -1303,10 +1306,11 @@ TEST_F(SchemaUtilTest, TestParseVariantColumnsWithNulls) { block.insert({nullable_variant, variant_type, "nullable_variant"}); - std::vector variant_pos {0}; + std::vector variant_pos {0}; ParseConfig config; - auto status = schema_util::parse_variant_columns(block, variant_pos, config); + std::vector configs {config}; + auto status = variant_util::parse_variant_columns(block, variant_pos, configs); EXPECT_TRUE(status.ok()); const auto& result_column = block.get_by_position(0).column; @@ -1910,12 +1914,12 @@ TEST_F(SchemaUtilTest, parse_variant_columns_ambiguous_paths) { vectorized::ColumnWithTypeAndName(variant_col->assume_mutable(), variant_type, "v")); // The variant column is at index 0 - std::vector variant_pos = {0}; + std::vector variant_pos = {0}; ParseConfig config; config.enable_flatten_nested = true; // Should throw due to ambiguous paths - Status st = schema_util::parse_variant_columns(block, variant_pos, config); + Status st = variant_util::parse_variant_columns(block, variant_pos, {config}); EXPECT_FALSE(st.ok()); EXPECT_TRUE(st.to_string().find("Ambiguous paths") != std::string::npos); } diff --git a/be/test/vec/data_types/serde/data_type_serde_test.cpp b/be/test/vec/data_types/serde/data_type_serde_test.cpp index 072173bcb763f1..9c683794438c06 100644 --- a/be/test/vec/data_types/serde/data_type_serde_test.cpp +++ b/be/test/vec/data_types/serde/data_type_serde_test.cpp @@ -277,12 +277,12 @@ TEST(DataTypeSerDeTest, DataTypeRowStoreSerDeTest) { } TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { - auto sparse_column = ColumnVariant::create_sparse_column_fn(); + auto sparse_column = ColumnVariant::create_binary_column_fn(); auto& column_map = assert_cast(*sparse_column); // auto& key = assert_cast(column_map.get_keys()); auto& value = assert_cast(column_map.get_values()); // auto& offsets = column_map.get_offsets(); - auto data_type = ColumnVariant::get_sparse_column_type(); + auto data_type = ColumnVariant::get_binary_column_type(); std::string file_path = std::string(getenv("ROOT")) + "/be/test/util/test_data/deserialize_from_sparse_column_test.bin"; @@ -290,57 +290,57 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // FieldInfo info = {PrimitiveType::TYPE_STRING, false, false, 0}; // ColumnVariant::Subcolumn string_subcolumn = {0, true, true}; // string_subcolumn.insert(string_field, info); - // string_subcolumn.serialize_to_sparse_column(&key, "a", &value, 0); + // string_subcolumn.serialize_to_binary_column(&key, "a", &value, 0); // Field int_field = Field::create_field(123); // info.scalar_type_id = PrimitiveType::TYPE_INT; // ColumnVariant::Subcolumn int_subcolumn = {0, true, true}; // int_subcolumn.insert(int_field, info); - // int_subcolumn.serialize_to_sparse_column(&key, "b", &value, 0); + // int_subcolumn.serialize_to_binary_column(&key, "b", &value, 0); // Field largeint_field = Field::create_field(__int128_t(123)); // info.scalar_type_id = PrimitiveType::TYPE_LARGEINT; // ColumnVariant::Subcolumn largeint_subcolumn = {0, true, true}; // largeint_subcolumn.insert(largeint_field, info); - // largeint_subcolumn.serialize_to_sparse_column(&key, "c", &value, 0); + // largeint_subcolumn.serialize_to_binary_column(&key, "c", &value, 0); // Field double_field = Field::create_field(123.456); // info.scalar_type_id = PrimitiveType::TYPE_DOUBLE; // ColumnVariant::Subcolumn double_subcolumn = {0, true, true}; // double_subcolumn.insert(double_field, info); - // double_subcolumn.serialize_to_sparse_column(&key, "d", &value, 0); + // double_subcolumn.serialize_to_binary_column(&key, "d", &value, 0); // Field bool_field = Field::create_field(true); // info.scalar_type_id = PrimitiveType::TYPE_BOOLEAN; // ColumnVariant::Subcolumn bool_subcolumn = {0, true, true}; // bool_subcolumn.insert(bool_field, info); - // bool_subcolumn.serialize_to_sparse_column(&key, "e", &value, 0); + // bool_subcolumn.serialize_to_binary_column(&key, "e", &value, 0); // Field datetime_field = Field::create_field(23232323); // info.scalar_type_id = PrimitiveType::TYPE_DATETIMEV2; // info.scale = 3; // ColumnVariant::Subcolumn datetime_subcolumn = {0, true, true}; // datetime_subcolumn.insert(datetime_field, info); - // datetime_subcolumn.serialize_to_sparse_column(&key, "f", &value, 0); + // datetime_subcolumn.serialize_to_binary_column(&key, "f", &value, 0); // Field date_field = Field::create_field(154543245); // info.scalar_type_id = PrimitiveType::TYPE_DATEV2; // info.scale = 3; // ColumnVariant::Subcolumn date_subcolumn = {0, true, true}; // date_subcolumn.insert(date_field, info); - // date_subcolumn.serialize_to_sparse_column(&key, "g", &value, 0); + // date_subcolumn.serialize_to_binary_column(&key, "g", &value, 0); // Field ipv4_field = Field::create_field(367357); // info.scalar_type_id = PrimitiveType::TYPE_IPV4; // ColumnVariant::Subcolumn ipv4_subcolumn = {0, true, true}; // ipv4_subcolumn.insert(ipv4_field, info); - // ipv4_subcolumn.serialize_to_sparse_column(&key, "h", &value, 0); + // ipv4_subcolumn.serialize_to_binary_column(&key, "h", &value, 0); // Field ipv6_field = Field::create_field(36534645); // info.scalar_type_id = PrimitiveType::TYPE_IPV6; // ColumnVariant::Subcolumn ipv6_subcolumn = {0, true, true}; // ipv6_subcolumn.insert(ipv6_field, info); - // ipv6_subcolumn.serialize_to_sparse_column(&key, "i", &value, 0); + // ipv6_subcolumn.serialize_to_binary_column(&key, "i", &value, 0); // Field decimal32_field = // Field::create_field(DecimalField(3456345634, 2)); @@ -349,7 +349,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // info.scale = 2; // ColumnVariant::Subcolumn decimal32_subcolumn = {0, true, true}; // decimal32_subcolumn.insert(decimal32_field, info); - // decimal32_subcolumn.serialize_to_sparse_column(&key, "j", &value, 0); + // decimal32_subcolumn.serialize_to_binary_column(&key, "j", &value, 0); // Field decimal64_field = // Field::create_field(DecimalField(13452435, 6)); @@ -358,7 +358,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // info.scale = 6; // ColumnVariant::Subcolumn decimal64_subcolumn = {0, true, true}; // decimal64_subcolumn.insert(decimal64_field, info); - // decimal64_subcolumn.serialize_to_sparse_column(&key, "k", &value, 0); + // decimal64_subcolumn.serialize_to_binary_column(&key, "k", &value, 0); // Field decimal128i_field = // Field::create_field(DecimalField(2342345, 12)); @@ -367,7 +367,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // info.scale = 12; // ColumnVariant::Subcolumn decimal128i_subcolumn = {0, true, true}; // decimal128i_subcolumn.insert(decimal128i_field, info); - // decimal128i_subcolumn.serialize_to_sparse_column(&key, "l", &value, 0); + // decimal128i_subcolumn.serialize_to_binary_column(&key, "l", &value, 0); // Field decimal256_field = // Field::create_field(DecimalField(Decimal256(2345243), 5)); @@ -376,13 +376,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // info.scale = 5; // ColumnVariant::Subcolumn decimal256_subcolumn = {0, true, true}; // decimal256_subcolumn.insert(decimal256_field, info); - // decimal256_subcolumn.serialize_to_sparse_column(&key, "m", &value, 0); + // decimal256_subcolumn.serialize_to_binary_column(&key, "m", &value, 0); // Field jsonb_field = Field::create_field(JsonbField("abc", 3)); // info.scalar_type_id = PrimitiveType::TYPE_JSONB; // ColumnVariant::Subcolumn jsonb_subcolumn = {0, true, true}; // jsonb_subcolumn.insert(jsonb_field, info); - // jsonb_subcolumn.serialize_to_sparse_column(&key, "n", &value, 0); + // jsonb_subcolumn.serialize_to_binary_column(&key, "n", &value, 0); // Field array_field = Field::create_field(Array(3)); // info.scalar_type_id = PrimitiveType::TYPE_JSONB; @@ -394,7 +394,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { // ColumnVariant::Subcolumn array_subcolumn = {0, true, true}; // array_subcolumn.insert(array_field, info); - // array_subcolumn.serialize_to_sparse_column(&key, "o", &value, 0); + // array_subcolumn.serialize_to_binary_column(&key, "o", &value, 0); // offsets.push_back(key.size()); // auto size = data_type->get_uncompressed_serialized_bytes(*sparse_column, 8); @@ -425,12 +425,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 0); + subcolumn.deserialize_from_binary_column(&value, 0); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_STRING); EXPECT_EQ(subcolumn.get_last_field().get(), "123"); - subcolumn.deserialize_from_sparse_column(&value, 0); + subcolumn.deserialize_from_binary_column(&value, 0); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_STRING); @@ -439,11 +439,11 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 1); + subcolumn.deserialize_from_binary_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_INT); EXPECT_EQ(subcolumn.get_last_field().get(), 123); - subcolumn.deserialize_from_sparse_column(&value, 1); + subcolumn.deserialize_from_binary_column(&value, 1); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_INT); EXPECT_EQ(subcolumn.get_last_field().get(), 123); @@ -451,12 +451,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 2); + subcolumn.deserialize_from_binary_column(&value, 2); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_LARGEINT); EXPECT_EQ(subcolumn.get_last_field().get(), 123); - subcolumn.deserialize_from_sparse_column(&value, 2); + subcolumn.deserialize_from_binary_column(&value, 2); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_LARGEINT); @@ -465,12 +465,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 3); + subcolumn.deserialize_from_binary_column(&value, 3); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DOUBLE); EXPECT_EQ(subcolumn.get_last_field().get(), 123.456); - subcolumn.deserialize_from_sparse_column(&value, 3); + subcolumn.deserialize_from_binary_column(&value, 3); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DOUBLE); @@ -479,12 +479,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 4); + subcolumn.deserialize_from_binary_column(&value, 4); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_BOOLEAN); EXPECT_EQ(subcolumn.get_last_field().get(), true); - subcolumn.deserialize_from_sparse_column(&value, 4); + subcolumn.deserialize_from_binary_column(&value, 4); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_BOOLEAN); @@ -493,12 +493,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 5); + subcolumn.deserialize_from_binary_column(&value, 5); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATETIMEV2); EXPECT_EQ(subcolumn.get_last_field().get(), 23232323); - subcolumn.deserialize_from_sparse_column(&value, 5); + subcolumn.deserialize_from_binary_column(&value, 5); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATETIMEV2); @@ -507,12 +507,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 6); + subcolumn.deserialize_from_binary_column(&value, 6); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATEV2); EXPECT_EQ(subcolumn.get_last_field().get(), 154543245); - subcolumn.deserialize_from_sparse_column(&value, 6); + subcolumn.deserialize_from_binary_column(&value, 6); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DATEV2); @@ -521,12 +521,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 7); + subcolumn.deserialize_from_binary_column(&value, 7); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV4); EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(367357)); - subcolumn.deserialize_from_sparse_column(&value, 7); + subcolumn.deserialize_from_binary_column(&value, 7); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV4); @@ -535,12 +535,12 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 8); + subcolumn.deserialize_from_binary_column(&value, 8); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV6); EXPECT_EQ(subcolumn.get_last_field().get(), static_cast(36534645)); - subcolumn.deserialize_from_sparse_column(&value, 8); + subcolumn.deserialize_from_binary_column(&value, 8); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_IPV6); @@ -549,13 +549,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 9); + subcolumn.deserialize_from_binary_column(&value, 9); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL32); auto v = subcolumn.get_last_field().get>(); EXPECT_EQ(static_cast(v.get_value()), static_cast(3456345634)); - subcolumn.deserialize_from_sparse_column(&value, 9); + subcolumn.deserialize_from_binary_column(&value, 9); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL32); @@ -563,13 +563,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 10); + subcolumn.deserialize_from_binary_column(&value, 10); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL64); auto v = subcolumn.get_last_field().get>(); EXPECT_EQ(static_cast(v.get_value()), static_cast(13452435)); - subcolumn.deserialize_from_sparse_column(&value, 10); + subcolumn.deserialize_from_binary_column(&value, 10); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL64); @@ -579,13 +579,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 11); + subcolumn.deserialize_from_binary_column(&value, 11); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL128I); auto v = subcolumn.get_last_field().get>(); EXPECT_EQ(static_cast(v.get_value()), static_cast(2342345)); - subcolumn.deserialize_from_sparse_column(&value, 11); + subcolumn.deserialize_from_binary_column(&value, 11); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL128I); @@ -595,13 +595,13 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 12); + subcolumn.deserialize_from_binary_column(&value, 12); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL256); auto v = subcolumn.get_last_field().get>(); EXPECT_TRUE(v.get_value() == Decimal256(2345243)); - subcolumn.deserialize_from_sparse_column(&value, 12); + subcolumn.deserialize_from_binary_column(&value, 12); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_DECIMAL256); @@ -611,11 +611,11 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 13); + subcolumn.deserialize_from_binary_column(&value, 13); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_JSONB); - subcolumn.deserialize_from_sparse_column(&value, 13); + subcolumn.deserialize_from_binary_column(&value, 13); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_JSONB); @@ -623,7 +623,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { { ColumnVariant::Subcolumn subcolumn = {0, true, true}; - subcolumn.deserialize_from_sparse_column(&value, 14); + subcolumn.deserialize_from_binary_column(&value, 14); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_ARRAY); @@ -635,7 +635,7 @@ TEST(DataTypeSerDeTest, DeserializeFromSparseColumnTest) { EXPECT_FALSE(arr[0].is_null()); EXPECT_TRUE(arr[1].is_null()); EXPECT_FALSE(arr[2].is_null()); - subcolumn.deserialize_from_sparse_column(&value, 14); + subcolumn.deserialize_from_binary_column(&value, 14); EXPECT_EQ(subcolumn.data.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_primitive_type(), PrimitiveType::TYPE_ARRAY); diff --git a/be/test/vec/exec/format/native/native_reader_writer_test.cpp b/be/test/vec/exec/format/native/native_reader_writer_test.cpp index f26fbb0f4d22ef..f01b4c292e0b5c 100644 --- a/be/test/vec/exec/format/native/native_reader_writer_test.cpp +++ b/be/test/vec/exec/format/native/native_reader_writer_test.cpp @@ -1189,7 +1189,7 @@ static std::string get_all_types_native_file_path() { // Generator test: Generate native file with all types (DISABLED by default). // Run this test manually to regenerate the test data file: -// ./run-be-ut.sh --run --filter=*DISABLED_generate_all_types_native_file* +// ./run-be-ut.sh --run --filter=*generate_all_types_native_file* // Then copy the generated file to: be/test/data/vec/native/all_types_single_row.native TEST_F(NativeReaderWriterTest, generate_all_types_native_file) { // Output to current directory, user needs to copy it to test data dir diff --git a/be/test/vec/function/function_variant_element_test.cpp b/be/test/vec/function/function_variant_element_test.cpp index 59f4d26b784b63..1940874d982583 100644 --- a/be/test/vec/function/function_variant_element_test.cpp +++ b/be/test/vec/function/function_variant_element_test.cpp @@ -32,11 +32,11 @@ TEST(function_variant_element_test, extract_from_sparse_column) { auto [sparse_column_keys, sparse_column_values] = variant_ptr->get_sparse_data_paths_and_values(); auto& sparse_column_offsets = variant_ptr->serialized_sparse_column_offsets(); - subcolumn.serialize_to_sparse_column(sparse_column_keys, "profile.age", sparse_column_values, + subcolumn.serialize_to_binary_column(sparse_column_keys, "profile.age", sparse_column_values, 0); - subcolumn.serialize_to_sparse_column(sparse_column_keys, "profile.name", sparse_column_values, + subcolumn.serialize_to_binary_column(sparse_column_keys, "profile.name", sparse_column_values, 0); - subcolumn.serialize_to_sparse_column(sparse_column_keys, "profile_id", sparse_column_values, 0); + subcolumn.serialize_to_binary_column(sparse_column_keys, "profile_id", sparse_column_values, 0); sparse_column_offsets.push_back(sparse_column_keys->size()); variant_ptr->get_subcolumn({})->insert_default(); variant_ptr->set_num_rows(1); 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 36d11aaa49e718..a2c24eaf09dbac 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 @@ -1040,4 +1040,30 @@ public int getVariantSparseHashShardCount() { } return 0; // The old variant type had a default value of 0. } + + public boolean getVariantEnableDocSnapshotMode() { + // In the past, variant metadata used the ScalarType type. + // Now, we use VariantType, which inherits from ScalarType, as the new metadata storage. + if (this instanceof VariantType) { + return ((VariantType) this).getEnableVariantDocSnapshotMode(); + } + return false; // The old variant type had a default value of false. + } + + public long getVariantDocSnapshotMinRows() { + // In the past, variant metadata used the ScalarType type. + // Now, we use VariantType, which inherits from ScalarType, as the new metadata storage. + if (this instanceof VariantType) { + return ((VariantType) this).getVariantDocSnapshotMinRows(); + } + return 0L; // The old variant type had a default value of 0. + } + + public int getVariantDocSnapshotShardCount() { + if (this instanceof VariantType) { + return ((VariantType) this).getVariantDocSnapshotShardCount(); + } + // Backward-compatible default bucket count used by BE doc snapshot writer/reader. + return 128; + } } 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 980768c67a047a..2419004de13f4b 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 @@ -52,6 +52,15 @@ public class VariantType extends ScalarType { @SerializedName(value = "variantSparseHashShardCount") private final int variantSparseHashShardCount; + @SerializedName(value = "enableVariantDocSnapshotMode") + private final boolean enableVariantDocSnapshotMode; + + @SerializedName(value = "variantDocSnapshotMinRows") + private final long variantDocSnapshotMinRows; + + @SerializedName(value = "variantDocSnapshotShardCount") + private final int variantDocSnapshotShardCount; + private Map properties = Maps.newHashMap(); public VariantType() { @@ -61,6 +70,9 @@ public VariantType() { this.enableTypedPathsToSparse = false; this.variantMaxSparseColumnStatisticsSize = 10000; this.variantSparseHashShardCount = 0; + this.enableVariantDocSnapshotMode = false; + this.variantDocSnapshotMinRows = 0L; + this.variantDocSnapshotShardCount = 128; } public VariantType(ArrayList fields) { @@ -74,6 +86,9 @@ public VariantType(ArrayList fields) { this.enableTypedPathsToSparse = false; this.variantMaxSparseColumnStatisticsSize = 10000; this.variantSparseHashShardCount = 0; + this.enableVariantDocSnapshotMode = false; + this.variantDocSnapshotMinRows = 0L; + this.variantDocSnapshotShardCount = 128; } public VariantType(Map properties) { @@ -84,6 +99,9 @@ public VariantType(Map properties) { this.enableTypedPathsToSparse = false; this.variantMaxSparseColumnStatisticsSize = 10000; this.variantSparseHashShardCount = 0; + this.enableVariantDocSnapshotMode = false; + this.variantDocSnapshotMinRows = 0L; + this.variantDocSnapshotShardCount = 128; } public VariantType(ArrayList fields, Map properties) { @@ -98,12 +116,18 @@ public VariantType(ArrayList fields, Map propertie this.enableTypedPathsToSparse = false; this.variantMaxSparseColumnStatisticsSize = 10000; this.variantSparseHashShardCount = 0; + this.enableVariantDocSnapshotMode = false; + this.variantDocSnapshotMinRows = 0L; + this.variantDocSnapshotShardCount = 128; } public VariantType(ArrayList fields, int variantMaxSubcolumnsCount, boolean enableTypedPathsToSparse, int variantMaxSparseColumnStatisticsSize, - int variantSparseHashShardCount) { + int variantSparseHashShardCount, + boolean enableVariantDocSnapshotMode, + long variantDocSnapshotMinRows, + int variantDocSnapshotShardCount) { super(PrimitiveType.VARIANT); Preconditions.checkNotNull(fields); this.predefinedFields = fields; @@ -114,51 +138,43 @@ public VariantType(ArrayList fields, int variantMaxSubcolumnsCount this.enableTypedPathsToSparse = enableTypedPathsToSparse; this.variantMaxSparseColumnStatisticsSize = variantMaxSparseColumnStatisticsSize; this.variantSparseHashShardCount = variantSparseHashShardCount; + this.enableVariantDocSnapshotMode = enableVariantDocSnapshotMode; + this.variantDocSnapshotMinRows = variantDocSnapshotMinRows; + this.variantDocSnapshotShardCount = variantDocSnapshotShardCount; } @Override public String toSql(int depth) { - if (predefinedFields.isEmpty() && variantMaxSubcolumnsCount == 0) { - 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 - && variantMaxSparseColumnStatisticsSize == 10000) { - // end sign for predefinedFields - sb.append(">"); - return sb.toString(); - } else { - sb.append(","); - } + sb.append(","); } sb.append("PROPERTIES ("); - if (variantMaxSubcolumnsCount != 0) { - sb.append("\"variant_max_subcolumns_count\" = \"") + 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\" = \"") + sb.append(","); + sb.append("\"variant_enable_typed_paths_to_sparse\" = \"") .append(String.valueOf(enableTypedPathsToSparse)).append("\""); - } - if (variantMaxSparseColumnStatisticsSize != 10000) { - sb.append(","); - sb.append("\"variant_max_sparse_column_statistics_size\" = \"") + sb.append(","); + sb.append("\"variant_max_sparse_column_statistics_size\" = \"") .append(String.valueOf(variantMaxSparseColumnStatisticsSize)).append("\""); - } - if (variantSparseHashShardCount != 0 && variantSparseHashShardCount != 1) { - sb.append(","); - sb.append("\"variant_sparse_hash_shard_count\" = \"") + sb.append(","); + sb.append("\"variant_sparse_hash_shard_count\" = \"") .append(String.valueOf(variantSparseHashShardCount)).append("\""); - } + sb.append(","); + sb.append("\"variant_enable_doc_snapshot_mode\" = \"") + .append(String.valueOf(enableVariantDocSnapshotMode)).append("\""); + sb.append(","); + sb.append("\"variant_doc_snapshot_min_rows\" = \"") + .append(String.valueOf(variantDocSnapshotMinRows)).append("\""); + sb.append(","); + sb.append("\"variant_doc_snapshot_shard_count\" = \"") + .append(String.valueOf(variantDocSnapshotShardCount)).append("\""); sb.append(")>"); return sb.toString(); } @@ -197,7 +213,11 @@ public boolean equals(Object other) { } VariantType otherVariantType = (VariantType) other; return Objects.equals(otherVariantType.getPredefinedFields(), predefinedFields) - && variantMaxSubcolumnsCount == otherVariantType.variantMaxSubcolumnsCount; + && variantMaxSubcolumnsCount == otherVariantType.variantMaxSubcolumnsCount + && enableTypedPathsToSparse == otherVariantType.enableTypedPathsToSparse + && enableVariantDocSnapshotMode == otherVariantType.enableVariantDocSnapshotMode + && variantDocSnapshotMinRows == otherVariantType.variantDocSnapshotMinRows + && variantDocSnapshotShardCount == otherVariantType.variantDocSnapshotShardCount; } @Override @@ -224,4 +244,16 @@ public int getVariantMaxSparseColumnStatisticsSize() { public int getVariantSparseHashShardCount() { return variantSparseHashShardCount; } + + public boolean getEnableVariantDocSnapshotMode() { + return enableVariantDocSnapshotMode; + } + + public long getVariantDocSnapshotMinRows() { + return variantDocSnapshotMinRows; + } + + public int getVariantDocSnapshotShardCount() { + return variantDocSnapshotShardCount; + } } 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 d6271dbc359e66..614b2fd15b4af5 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 @@ -656,6 +656,9 @@ public TColumn toThrift() { tColumn.setVariantEnableTypedPathsToSparse(this.getVariantEnableTypedPathsToSparse()); tColumn.setVariantMaxSparseColumnStatisticsSize(this.getVariantMaxSparseColumnStatisticsSize()); tColumn.setVariantSparseHashShardCount(this.getVariantSparseHashShardCount()); + tColumn.setVariantEnableDocSnapshotMode(this.getVariantEnableDocSnapshotMode()); + tColumn.setVariantDocSnapshotMinRows(this.getVariantDocSnapshotMinRows()); + tColumn.setVariantDocSnapshotShardCount(this.getVariantDocSnapshotShardCount()); // ATTN: // Currently, this `toThrift()` method is only used from CreateReplicaTask. // And CreateReplicaTask does not need `defineExpr` field. @@ -880,6 +883,9 @@ public OlapFile.ColumnPB toPb(Set bfColumns, List indexes) throws builder.setVariantEnableTypedPathsToSparse(this.getVariantEnableTypedPathsToSparse()); builder.setVariantMaxSparseColumnStatisticsSize(this.getVariantMaxSparseColumnStatisticsSize()); builder.setVariantSparseHashShardCount(this.getVariantSparseHashShardCount()); + builder.setVariantEnableDocSnapshotMode(this.getVariantEnableDocSnapshotMode()); + builder.setVariantDocSnapshotMinRows(this.getVariantDocSnapshotMinRows()); + builder.setVariantDocSnapshotShardCount(this.getVariantDocSnapshotShardCount()); // variant may contain predefined structured fields addChildren(builder); } @@ -962,6 +968,15 @@ public void checkSchemaChangeAllowed(Column other) throws DdlException { if (this.getVariantSparseHashShardCount() != other.getVariantSparseHashShardCount()) { throw new DdlException("Can not change variant sparse bucket num"); } + if (this.getVariantEnableDocSnapshotMode() != other.getVariantEnableDocSnapshotMode()) { + throw new DdlException("Can not change variant enable doc snapshot mode"); + } + if (this.getVariantDocSnapshotMinRows() != other.getVariantDocSnapshotMinRows()) { + throw new DdlException("Can not change variant doc snapshot min rows"); + } + if (this.getVariantDocSnapshotShardCount() != other.getVariantDocSnapshotShardCount()) { + throw new DdlException("Can not change variant doc snapshot shard count"); + } if (CollectionUtils.isNotEmpty(this.getChildren()) || CollectionUtils.isNotEmpty(other.getChildren())) { throw new DdlException("Can not change variant schema templates"); } @@ -1309,6 +1324,18 @@ public int getVariantSparseHashShardCount() { return type.isVariantType() ? ((ScalarType) type).getVariantSparseHashShardCount() : -1; } + public boolean getVariantEnableDocSnapshotMode() { + return type.isVariantType() ? ((ScalarType) type).getVariantEnableDocSnapshotMode() : false; + } + + public long getVariantDocSnapshotMinRows() { + return type.isVariantType() ? ((ScalarType) type).getVariantDocSnapshotMinRows() : 0L; + } + + public int getVariantDocSnapshotShardCount() { + return type.isVariantType() ? ((ScalarType) type).getVariantDocSnapshotShardCount() : 128; + } + public void setFieldPatternType(TPatternType type) { fieldPatternType = type; } 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 62ee8360216dc1..88962f6cde088e 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 @@ -2573,7 +2573,7 @@ public Boolean disableAutoCompaction() { return false; } - public void setVariantEnableFlattenNested(boolean flattenNested) { + public void setVariantEnableFlattenNested(boolean flattenNested) throws AnalysisException { TableProperty tableProperty = getOrCreatTableProperty(); tableProperty.modifyTableProperties(PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_FLATTEN_NESTED, Boolean.valueOf(flattenNested).toString()); 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 e99a6e477a3d7a..dccba4d05cddd3 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 @@ -265,6 +265,13 @@ public class PropertyAnalyzer { // number of buckets when using bucketized sparse serialization public static final String PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT = "variant_sparse_hash_shard_count"; + public static final String PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE = "variant_enable_doc_snapshot_mode"; + + public static final String PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS = "variant_doc_snapshot_min_rows"; + + // number of buckets when using doc snapshot serialization + public static final String PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT = "variant_doc_snapshot_shard_count"; + public enum RewriteType { PUT, // always put property REPLACE, // replace if exists property @@ -1956,6 +1963,58 @@ public static int analyzeVariantSparseHashShardCount(Map propert return bucketNum; } + public static boolean analyzeEnableVariantDocSnapshotMode(Map properties, boolean defaultValue) + throws AnalysisException { + boolean enableVariantDocSnapshotMode = defaultValue; + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE)) { + String enableVariantDocSnapshotModeStr = properties.get(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE); + try { + enableVariantDocSnapshotMode = Boolean.parseBoolean(enableVariantDocSnapshotModeStr); + } catch (Exception e) { + throw new AnalysisException("variant_enable_doc_snapshot_mode must be `true` or `false`"); + } + properties.remove(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE); + } + return enableVariantDocSnapshotMode; + } + + public static long analyzeVariantDocSnapshotMinRows(Map properties, long defaultValue) + throws AnalysisException { + long minRows = defaultValue; + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS)) { + String minRowsStr = properties.get(PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS); + try { + minRows = Long.parseLong(minRowsStr); + if (minRows < 0 || minRows > 1_000_000_000) { + throw new AnalysisException("variant_doc_snapshot_min_rows must between 0 and 1000000000 "); + } + } catch (Exception e) { + throw new AnalysisException("variant_doc_snapshot_min_rows format error:" + e.getMessage()); + } + properties.remove(PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS); + } + return minRows; + } + + public static int analyzeVariantDocSnapshotShardCount(Map properties, int defaultValue) + throws AnalysisException { + int shardCount = defaultValue; + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT)) { + String shardCountStr = properties.get(PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT); + try { + shardCount = Integer.parseInt(shardCountStr); + if (shardCount < 0 || shardCount > 1024) { + throw new AnalysisException("variant_doc_snapshot_shard_count must between 0 and 1024 "); + } + } catch (Exception e) { + throw new AnalysisException( + "variant_doc_snapshot_shard_count format error:" + e.getMessage()); + } + properties.remove(PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT); + } + return shardCount; + } + public static TEncryptionAlgorithm analyzeTDEAlgorithm(Map properties) throws AnalysisException { String name; //if (properties == null || !properties.containsKey(PROPERTIES_TDE_ALGORITHM)) { 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 6b777ecd730500..4b7e408c86f66f 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 @@ -72,6 +72,7 @@ import org.apache.doris.catalog.Replica; import org.apache.doris.catalog.Replica.ReplicaState; import org.apache.doris.catalog.ReplicaAllocation; +import org.apache.doris.catalog.ScalarType; import org.apache.doris.catalog.SinglePartitionInfo; import org.apache.doris.catalog.Table; import org.apache.doris.catalog.TableIf; @@ -2479,6 +2480,15 @@ private boolean createOlapTable(Database db, CreateTableInfo createTableInfo) th // keep table property: variant_enable_flatten_nested = false olapTable.setVariantEnableFlattenNested(false); } + for (Column column : baseSchema) { + if (column.getType().isVariantType()) { + ScalarType scalarType = (ScalarType) column.getType(); + if (scalarType.getVariantEnableDocSnapshotMode() && variantEnableFlattenNested) { + throw new DdlException("variant flatten nested is not enabled, " + + "because doc snapshot mode is enabled"); + } + } + } } catch (AnalysisException e) { throw new DdlException(e.getMessage()); } 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 fe02442ee2aba0..3c7190fc1fb4cb 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 @@ -4929,6 +4929,12 @@ public DataType visitVariantPredefinedFields(VariantPredefinedFieldsContext ctx) int variantSparseHashShardCount = ConnectContext.get() == null ? 0 : ConnectContext.get().getSessionVariable().getDefaultVariantSparseHashShardCount(); + boolean enableVariantDocSnapshotMode = ConnectContext.get() == null ? false : + ConnectContext.get().getSessionVariable().getDefaultVariantEnableDocSnapshotMode(); + long variantDocSnapshotMinRows = ConnectContext.get() == null ? 0L : + ConnectContext.get().getSessionVariable().getDefaultVariantDocSnapshotMinRows(); + int variantDocSnapshotShardCount = ConnectContext.get() == null ? 128 : + ConnectContext.get().getSessionVariable().getDefaultVariantDocSnapshotShardCount(); try { variantMaxSubcolumnsCount = PropertyAnalyzer .analyzeVariantMaxSubcolumnsCount(properties, variantMaxSubcolumnsCount); @@ -4938,6 +4944,12 @@ public DataType visitVariantPredefinedFields(VariantPredefinedFieldsContext ctx) properties, variantMaxSparseColumnStatisticsSize); variantSparseHashShardCount = PropertyAnalyzer.analyzeVariantSparseHashShardCount(properties, variantSparseHashShardCount); + enableVariantDocSnapshotMode = PropertyAnalyzer + .analyzeEnableVariantDocSnapshotMode(properties, enableVariantDocSnapshotMode); + variantDocSnapshotMinRows = PropertyAnalyzer + .analyzeVariantDocSnapshotMinRows(properties, variantDocSnapshotMinRows); + variantDocSnapshotShardCount = PropertyAnalyzer + .analyzeVariantDocSnapshotShardCount(properties, variantDocSnapshotShardCount); } catch (org.apache.doris.common.AnalysisException e) { throw new NotSupportedException(e.getMessage()); } @@ -4947,11 +4959,29 @@ public DataType visitVariantPredefinedFields(VariantPredefinedFieldsContext ctx) + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SPARSE_COLUMN_STATISTICS_SIZE - + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT); + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT); + } + + if (enableVariantDocSnapshotMode) { + // if has fields, min rows is invalid + if (!fields.isEmpty()) { + variantDocSnapshotMinRows = 0; + enableTypedPathsToSparse = false; + } + if (variantMaxSubcolumnsCount > 0) { + variantMaxSubcolumnsCount = 0; + } + } else { + variantDocSnapshotMinRows = 0; + variantDocSnapshotShardCount = 0; } return new VariantType(fields, variantMaxSubcolumnsCount, enableTypedPathsToSparse, - variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount); + variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount, + enableVariantDocSnapshotMode, variantDocSnapshotMinRows, variantDocSnapshotShardCount); } @Override 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 b009aa626480d5..5b43dadc38b227 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 @@ -489,7 +489,10 @@ public static DataType fromCatalogType(Type type) { ((org.apache.doris.catalog.VariantType) type).getVariantMaxSubcolumnsCount(), ((org.apache.doris.catalog.VariantType) type).getEnableTypedPathsToSparse(), ((org.apache.doris.catalog.VariantType) type).getVariantMaxSparseColumnStatisticsSize(), - ((org.apache.doris.catalog.VariantType) type).getVariantSparseHashShardCount()); + ((org.apache.doris.catalog.VariantType) type).getVariantSparseHashShardCount(), + ((org.apache.doris.catalog.VariantType) type).getEnableVariantDocSnapshotMode(), + ((org.apache.doris.catalog.VariantType) type).getVariantDocSnapshotMinRows(), + ((org.apache.doris.catalog.VariantType) type).getVariantDocSnapshotShardCount()); } return VariantType.INSTANCE; } else { 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 038fc0f472e538..b29fa1f367eeed 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 @@ -51,13 +51,24 @@ public class VariantType extends PrimitiveType { private final List predefinedFields; private final int variantSparseHashShardCount; - // No predefined fields + private final boolean enableVariantDocSnapshotMode; + private final long variantDocSnapshotMinRows; + private final int variantDocSnapshotShardCount; + + /** + * Creates a Variant type without predefined fields and only configures the max subcolumn limit. + * + * @param variantMaxSubcolumnsCount max number of subcolumns allowed (0 means unlimited) + */ public VariantType(int variantMaxSubcolumnsCount) { this.variantMaxSubcolumnsCount = variantMaxSubcolumnsCount; this.predefinedFields = Lists.newArrayList(); this.enableTypedPathsToSparse = false; this.variantMaxSparseColumnStatisticsSize = 10000; this.variantSparseHashShardCount = 0; + this.enableVariantDocSnapshotMode = false; + this.variantDocSnapshotMinRows = 0L; + this.variantDocSnapshotShardCount = 128; } /** @@ -69,22 +80,43 @@ public VariantType(List fields) { this.enableTypedPathsToSparse = false; this.variantMaxSparseColumnStatisticsSize = 10000; this.variantSparseHashShardCount = 0; + this.enableVariantDocSnapshotMode = false; + this.variantDocSnapshotMinRows = 0L; + this.variantDocSnapshotShardCount = 128; } - public VariantType(List fields, int variantMaxSubcolumnsCount, boolean enableTypedPathsToSparse, - int variantMaxSparseColumnStatisticsSize, int variantSparseHashShardCount) { + /** + * Creates a Variant type with predefined fields and advanced optional properties. + * + * @param fields predefined variant path fields + * @param variantMaxSubcolumnsCount max number of subcolumns allowed + * @param enableTypedPathsToSparse whether typed paths should be materialized as sparse columns + * @param variantMaxSparseColumnStatisticsSize upper bound of sparse path statistics entries + * @param variantSparseHashShardCount hash buckets count when writing sparse shards + * @param enableVariantDocSnapshotMode whether to enable variant doc snapshot writing mode + * @param variantDocSnapshotMinRows minimum rows to generate doc snapshot columns + */ + public VariantType(List fields, int variantMaxSubcolumnsCount, + boolean enableTypedPathsToSparse, int variantMaxSparseColumnStatisticsSize, + int variantSparseHashShardCount, boolean enableVariantDocSnapshotMode, + long variantDocSnapshotMinRows, int variantDocSnapshotShardCount) { this.predefinedFields = ImmutableList.copyOf(Objects.requireNonNull(fields, "fields should not be null")); this.variantMaxSubcolumnsCount = variantMaxSubcolumnsCount; this.enableTypedPathsToSparse = enableTypedPathsToSparse; this.variantMaxSparseColumnStatisticsSize = variantMaxSparseColumnStatisticsSize; this.variantSparseHashShardCount = variantSparseHashShardCount; + this.enableVariantDocSnapshotMode = enableVariantDocSnapshotMode; + this.variantDocSnapshotMinRows = variantDocSnapshotMinRows; + this.variantDocSnapshotShardCount = variantDocSnapshotShardCount; } @Override public DataType conversion() { return new VariantType(predefinedFields.stream().map(VariantField::conversion) .collect(Collectors.toList()), variantMaxSubcolumnsCount, enableTypedPathsToSparse, - variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount); + variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount, + enableVariantDocSnapshotMode, variantDocSnapshotMinRows, + variantDocSnapshotShardCount); } @Override @@ -92,7 +124,8 @@ 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)), variantMaxSubcolumnsCount, enableTypedPathsToSparse, - variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount); + variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount, enableVariantDocSnapshotMode, + variantDocSnapshotMinRows, variantDocSnapshotShardCount); return type; } @@ -103,48 +136,40 @@ public boolean acceptsType(DataType other) { @Override public String toSql() { - if (predefinedFields.isEmpty() && variantMaxSubcolumnsCount == 0) { - return "variant"; - } 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 - && variantMaxSparseColumnStatisticsSize == 10000) { - // end sign for predefinedFields - sb.append(">"); - return sb.toString(); - } else { - sb.append(","); - } + 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\" = \"") + sb.append("\"variant_max_subcolumns_count\" = \"") + .append(String.valueOf(variantMaxSubcolumnsCount)).append("\""); + sb.append(","); + sb.append("\"variant_enable_typed_paths_to_sparse\" = \"") .append(String.valueOf(enableTypedPathsToSparse)).append("\""); - } - if (variantMaxSparseColumnStatisticsSize != 10000) { - sb.append(","); - sb.append("\"variant_max_sparse_column_statistics_size\" = \"") + sb.append(","); + sb.append("\"variant_max_sparse_column_statistics_size\" = \"") .append(String.valueOf(variantMaxSparseColumnStatisticsSize)) .append("\""); - } - if (variantSparseHashShardCount != 0 && variantSparseHashShardCount != 1) { - sb.append(","); - sb.append("\"variant_sparse_hash_shard_count\" = \"") + sb.append(","); + sb.append("\"variant_sparse_hash_shard_count\" = \"") .append(String.valueOf(variantSparseHashShardCount)) .append("\""); - } + sb.append(","); + sb.append("\"variant_enable_doc_snapshot_mode\" = \"") + .append(String.valueOf(enableVariantDocSnapshotMode)) + .append("\""); + sb.append(","); + sb.append("\"variant_doc_snapshot_min_rows\" = \"") + .append(String.valueOf(variantDocSnapshotMinRows)) + .append("\""); + sb.append(","); + sb.append("\"variant_doc_snapshot_shard_count\" = \"") + .append(String.valueOf(variantDocSnapshotShardCount)) + .append("\""); sb.append(")>"); return sb.toString(); } @@ -162,13 +187,18 @@ public boolean equals(Object o) { && this.enableTypedPathsToSparse == other.enableTypedPathsToSparse && this.variantMaxSparseColumnStatisticsSize == other.variantMaxSparseColumnStatisticsSize && this.variantSparseHashShardCount == other.variantSparseHashShardCount + && this.enableVariantDocSnapshotMode == other.enableVariantDocSnapshotMode + && this.variantDocSnapshotMinRows == other.variantDocSnapshotMinRows + && this.variantDocSnapshotShardCount == other.variantDocSnapshotShardCount && Objects.equals(predefinedFields, other.predefinedFields); } @Override public int hashCode() { return Objects.hash(super.hashCode(), variantMaxSubcolumnsCount, enableTypedPathsToSparse, - variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount, predefinedFields); + variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount, + enableVariantDocSnapshotMode, variantDocSnapshotMinRows, variantDocSnapshotShardCount, + predefinedFields); } @Override @@ -196,4 +226,16 @@ public int getVariantMaxSparseColumnStatisticsSize() { public int getVariantSparseHashShardCount() { return variantSparseHashShardCount; } + + public boolean getEnableVariantDocSnapshotMode() { + return enableVariantDocSnapshotMode; + } + + public long getVariantDocSnapshotMinRows() { + return variantDocSnapshotMinRows; + } + + public int getVariantDocSnapshotShardCount() { + return variantDocSnapshotShardCount; + } } 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 cc48e371417b6a..d251a5d818c541 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 @@ -903,6 +903,13 @@ public static double getHotValueThreshold() { public static final String DEFAULT_VARIANT_MAX_SPARSE_COLUMN_STATISTICS_SIZE = "default_variant_max_sparse_column_statistics_size"; public static final String DEFAULT_VARIANT_SPARSE_HASH_SHARD_COUNT = "default_variant_sparse_hash_shard_count"; + + public static final String DEFAULT_VARIANT_ENABLE_DOC_SNAPSHOT_MODE = "default_variant_enable_doc_snapshot_mode"; + + public static final String DEFAULT_VARIANT_DOC_SNAPSHOT_MIN_ROWS = "default_variant_doc_snapshot_min_rows"; + + public static final String DEFAULT_VARIANT_DOC_SNAPSHOT_SHARD_COUNT = "default_variant_doc_snapshot_shard_count"; + public static final String MULTI_DISTINCT_STRATEGY = "multi_distinct_strategy"; public static final String AGG_PHASE = "agg_phase"; @@ -3179,6 +3186,29 @@ public boolean isEnableESParallelScroll() { ) public int defaultVariantSparseHashShardCount = 0; + + @VariableMgr.VarAttr( + name = DEFAULT_VARIANT_ENABLE_DOC_SNAPSHOT_MODE, + needForward = true, + fuzzy = true + ) + public boolean defaultVariantEnableDocSnapshotMode = false; + + + @VariableMgr.VarAttr( + name = DEFAULT_VARIANT_DOC_SNAPSHOT_MIN_ROWS, + needForward = true, + fuzzy = true + ) + public long defaultVariantDocSnapshotMinRows = 0L; + + @VariableMgr.VarAttr( + name = DEFAULT_VARIANT_DOC_SNAPSHOT_SHARD_COUNT, + needForward = true, + fuzzy = true + ) + public int defaultVariantDocSnapshotShardCount = 128; + @VariableMgr.VarAttr( name = "use_v3_storage_format", fuzzy = true, @@ -3226,6 +3256,11 @@ public void initFuzzyModeVariables() { this.defaultVariantMaxSubcolumnsCount = random.nextInt(10); this.defaultVariantSparseHashShardCount = random.nextInt(5) + 1; this.useV3StorageFormat = random.nextBoolean(); + this.defaultVariantEnableDocSnapshotMode = random.nextBoolean(); + if (this.defaultVariantEnableDocSnapshotMode) { + boolean zeroOrOne = random.nextBoolean(); + this.defaultVariantDocSnapshotMinRows = zeroOrOne ? 0 : random.nextInt(20); + } int randomInt = random.nextInt(4); if (randomInt % 2 == 0) { this.rewriteOrToInPredicateThreshold = 100000; @@ -5775,6 +5810,18 @@ public int getDefaultVariantSparseHashShardCount() { return defaultVariantSparseHashShardCount; } + public boolean getDefaultVariantEnableDocSnapshotMode() { + return defaultVariantEnableDocSnapshotMode; + } + + public long getDefaultVariantDocSnapshotMinRows() { + return defaultVariantDocSnapshotMinRows; + } + + public int getDefaultVariantDocSnapshotShardCount() { + return defaultVariantDocSnapshotShardCount; + } + public void readAffectQueryResultVariables(BiConsumer variablesReader) { for (Field affectQueryResultField : affectQueryResultFields) { String name = affectQueryResultField.getName(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java index 766634f1977769..c36f0152c18d84 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java +++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java @@ -394,7 +394,10 @@ private Pair getColumnType(List typeNodes, int start) type = new VariantType(new ArrayList<>(), maxSubcolumns, /*enableTypedPathsToSparse*/ false, /*variantMaxSparseColumnStatisticsSize*/ 10000, - /*variantSparseHashShardCount*/ 0); + /*variantSparseHashShardCount*/ 0, + /*variantEnableDocSnapshotMode*/ false, + /*variantDocSnapshotMinRows*/ 0, + /*variantDocSnapshotShardCount*/ 0); parsedNodes = 1; } else { type = ScalarType.createType(PrimitiveType.fromThrift(tPrimitiveType), diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto index 7fa90adcb9f058..2143d0a09fa0f7 100644 --- a/gensrc/proto/olap_file.proto +++ b/gensrc/proto/olap_file.proto @@ -372,6 +372,10 @@ message ColumnPB { optional int32 variant_max_sparse_column_statistics_size = 29 [default = 10000]; // number of buckets used to store sparse map optional int32 variant_sparse_hash_shard_count = 30; + optional bool variant_enable_doc_snapshot_mode = 31; + optional int64 variant_doc_snapshot_min_rows = 32; + // number of buckets used to store doc snapshot map + optional int32 variant_doc_snapshot_shard_count = 33 [default = 128]; } // Dictionary of Schema info, to reduce TabletSchemaCloudPB fdb kv size diff --git a/gensrc/proto/segment_v2.proto b/gensrc/proto/segment_v2.proto index c4537b16b8065a..fef4715f40fccf 100644 --- a/gensrc/proto/segment_v2.proto +++ b/gensrc/proto/segment_v2.proto @@ -171,6 +171,8 @@ message ColumnPathInfo { message VariantStatisticsPB { // in the order of subcolumns in variant map sparse_column_non_null_size = 2; + + map doc_snapshot_column_non_null_size = 3; } message ColumnMetaPB { diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift index 4f5f10bbc04a3c..35a9d0568c92aa 100644 --- a/gensrc/thrift/Descriptors.thrift +++ b/gensrc/thrift/Descriptors.thrift @@ -96,6 +96,9 @@ struct TColumn { 23: optional bool is_on_update_current_timestamp = false 24: optional i32 variant_max_sparse_column_statistics_size = 10000 25: optional i32 variant_sparse_hash_shard_count + 26: optional bool variant_enable_doc_snapshot_mode + 27: optional i64 variant_doc_snapshot_min_rows + 28: optional i32 variant_doc_snapshot_shard_count } struct TSlotDescriptor { diff --git a/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out b/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out index 0097ff185ac359..b1e8e9c20f8d5f 100644 --- a/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out +++ b/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out @@ -53,7 +53,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -67,7 +67,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map No false \N NONE col5 struct No false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -81,7 +81,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -95,7 +95,7 @@ col2 int No false \N NONE col3 array No false \N NONE col4 map Yes false \N NONE col5 struct No false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -109,7 +109,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -123,7 +123,7 @@ col2 int No false \N NONE col3 array No false \N NONE col4 map No false \N NONE col5 struct Yes false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} diff --git a/regression-test/data/variant_doc_snapshot_p2/load.out b/regression-test/data/variant_doc_snapshot_p2/load.out new file mode 100644 index 00000000000000..4bee99a71a99ea --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/load.out @@ -0,0 +1,23 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +\N +\N +\N +4748 + +-- !sql -- +864 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/4381756?","gravatar_id":"","id":4381756,"login":"qw5414","url":"https://api.github.com/users/qw5414"},"created_at":"2015-01-01T02:06:41Z","id":"2489420466","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"created","comment":{"body":"乃\\r\\n","created_at":"2015-01-01T02:06:40Z","html_url":"https://github.com/xpressengine/xe-core/pull/1120#issuecomment-68478485","id":68478485,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120","updated_at":"2015-01-01T02:06:40Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/68478485","user":{"avatar_url":"https://avatars.githubusercontent.com/u/4381756?v=3","events_url":"https://api.github.com/users/qw5414/events{/privacy}","followers_url":"https://api.github.com/users/qw5414/followers","following_url":"https://api.github.com/users/qw5414/following{/other_user}","gists_url":"https://api.github.com/users/qw5414/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/qw5414","id":4381756,"login":"qw5414","organizations_url":"https://api.github.com/users/qw5414/orgs","received_events_url":"https://api.github.com/users/qw5414/received_events","repos_url":"https://api.github.com/users/qw5414/repos","site_admin":0,"starred_url":"https://api.github.com/users/qw5414/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qw5414/subscriptions","type":"User","url":"https://api.github.com/users/qw5414"}},"issue":{"body":"https://github.com/xpressengine/xe-core/issues/634\\r\\n\\r\\n# Internet Explorer send punycode URL(ASCII) URL and non-alphabet\\r\\nUnicode URL URL as a referer. 인터넷 익스플로러는 리퍼러 주소로 퓨니코드 주소와 유니코드 URL을 섞어\\r\\n쓰고 있습니다. AJAX 통신에는 리퍼러로 Unicode를 사용하고 요청 호스트로는 퓨니코드 URL을 사용(이건 다국어 주소\\r\\n형식으로 접속하려면 이렇게 했어야 할 것)합니다.\\r\\n- XE strictly compare referer and server host for denying CSRF, but\\r\\npunycode URL and Unicode URL should be dealt as a same one. 그런데 XE는 리퍼러의\\r\\n호스트와 서버 호스트를 비교합니다. punycode로 쓰인 주소와 Unicode로 쓰인 주소는 같은 주소를 지시하더라도 문자열이\\r\\n다릅니다. 같은 주소를 지칭하는 다른 문자열을 punycode로 변환해서 같은 주소라고 인식할 수 있게 수정했습니다.\\r\\n- Fix checkCSRF function to deal both form as a same one.\\r\\n- Convert Unicode URL input to punycode URL on the Admin Default URL\\r\\nSettings. 관리자가 유니코드 형식으로 기본 주소를 입력하더라도, 퓨니코드로 변환해 저장하도록 했습니다. 퓨니코드로 저장하는\\r\\n것이 여러모로 유용하기 때문입니다.\\r\\n- For converting punycode URL, include IDNA coverting class. 퓨니코드와 유니코드\\r\\n간 변환을 위해서 IDNA 변환 클래스(LGPL사용권)를 포함시켰습니다.\\r\\n\\r\\n**이 수정을 하면 *한글 도메인에서 글 작성이 가능*합니다. 하지만, *파일 업로드의 경우는 SWF Uploader 이슈로 파일 업로드가 불가능*합니다. 이 문제는, HTML5를 지원하는 파일 업로더를 이용하면 해결됩니다. (워드 프레스 등의 해결법) HTML5를 지원하는 파일 업로더는 AXISJ 업로더 등을 포함해서 XE 공식 홈페이지 자료실에서 다운받아 사용할 수 있습니다.(에디터 변경)**","comments":1,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/comments","created_at":"2015-01-01T01:47:43Z","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/events","html_url":"https://github.com/xpressengine/xe-core/pull/1120","id":53211000,"labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/labels{/name}","locked":0,"number":1120,"pull_request":{"diff_url":"https://github.com/xpressengine/xe-core/pull/1120.diff","html_url":"https://github.com/xpressengine/xe-core/pull/1120","patch_url":"https://github.com/xpressengine/xe-core/pull/1120.patch","url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120"},"state":"open","title":"fix for Not-Alphabet URL document writing (#634)","updated_at":"2015-01-01T02:06:40Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"IssueCommentEvent"} +4842 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?","gravatar_id":"","id":53764,"login":"bnu","url":"https://api.github.com/users/bnu"},"created_at":"2015-01-01T03:47:41Z","id":"2489448854","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"created","comment":{"body":"@misol 고르기가 어렵네요.\\r\\nplup가 좋은데 GPL이네요^^;","created_at":"2015-01-01T03:47:41Z","html_url":"https://github.com/xpressengine/xe-core/issues/1086#issuecomment-68479786","id":68479786,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","updated_at":"2015-01-01T03:47:41Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/68479786","user":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?v=3","events_url":"https://api.github.com/users/bnu/events{/privacy}","followers_url":"https://api.github.com/users/bnu/followers","following_url":"https://api.github.com/users/bnu/following{/other_user}","gists_url":"https://api.github.com/users/bnu/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/bnu","id":53764,"login":"bnu","organizations_url":"https://api.github.com/users/bnu/orgs","received_events_url":"https://api.github.com/users/bnu/received_events","repos_url":"https://api.github.com/users/bnu/repos","site_admin":0,"starred_url":"https://api.github.com/users/bnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnu/subscriptions","type":"User","url":"https://api.github.com/users/bnu"}},"issue":{"comments":5,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/comments","created_at":"2014-12-12T11:48:03Z","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/events","html_url":"https://github.com/xpressengine/xe-core/issues/1086","id":51797879,"labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/labels{/name}","locked":0,"number":1086,"state":"open","title":"파일 업로더 교체","updated_at":"2015-01-01T03:47:41Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","user":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?v=3","events_url":"https://api.github.com/users/bnu/events{/privacy}","followers_url":"https://api.github.com/users/bnu/followers","following_url":"https://api.github.com/users/bnu/following{/other_user}","gists_url":"https://api.github.com/users/bnu/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/bnu","id":53764,"login":"bnu","organizations_url":"https://api.github.com/users/bnu/orgs","received_events_url":"https://api.github.com/users/bnu/received_events","repos_url":"https://api.github.com/users/bnu/repos","site_admin":0,"starred_url":"https://api.github.com/users/bnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnu/subscriptions","type":"User","url":"https://api.github.com/users/bnu"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"IssueCommentEvent"} +5451 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?","gravatar_id":"","id":3437916,"login":"misol","url":"https://api.github.com/users/misol"},"created_at":"2015-01-01T02:48:28Z","id":"2489433218","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"created","comment":{"body":"Html5 도 같이 지원하는 업로더였으면 좋겠어요! 구글링 해보면 꽤 나와요 :)","created_at":"2015-01-01T02:48:27Z","html_url":"https://github.com/xpressengine/xe-core/issues/1086#issuecomment-68479093","id":68479093,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","updated_at":"2015-01-01T02:48:27Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/68479093","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}},"issue":{"comments":4,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/comments","created_at":"2014-12-12T11:48:03Z","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/events","html_url":"https://github.com/xpressengine/xe-core/issues/1086","id":51797879,"labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/labels{/name}","locked":0,"number":1086,"state":"open","title":"파일 업로더 교체","updated_at":"2015-01-01T02:48:27Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","user":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?v=3","events_url":"https://api.github.com/users/bnu/events{/privacy}","followers_url":"https://api.github.com/users/bnu/followers","following_url":"https://api.github.com/users/bnu/following{/other_user}","gists_url":"https://api.github.com/users/bnu/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/bnu","id":53764,"login":"bnu","organizations_url":"https://api.github.com/users/bnu/orgs","received_events_url":"https://api.github.com/users/bnu/received_events","repos_url":"https://api.github.com/users/bnu/repos","site_admin":0,"starred_url":"https://api.github.com/users/bnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnu/subscriptions","type":"User","url":"https://api.github.com/users/bnu"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"IssueCommentEvent"} +5995 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?","gravatar_id":"","id":3437916,"login":"misol","url":"https://api.github.com/users/misol"},"created_at":"2015-01-01T01:47:44Z","id":"2489414108","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"opened","number":1120,"pull_request":{"_links":{"comments":{"href":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/comments"},"commits":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/commits"},"html":{"href":"https://github.com/xpressengine/xe-core/pull/1120"},"issue":{"href":"https://api.github.com/repos/xpressengine/xe-core/issues/1120"},"review_comment":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/comments/{number}"},"review_comments":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/comments"},"self":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120"},"statuses":{"href":"https://api.github.com/repos/xpressengine/xe-core/statuses/d2b05732abfd85020335ce272abd37c0ad1c6654"}},"additions":4748,"base":{"label":"xpressengine:develop","ref":"develop","repo":{"archive_url":"https://api.github.com/repos/xpressengine/xe-core/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/xpressengine/xe-core/assignees{/user}","blobs_url":"https://api.github.com/repos/xpressengine/xe-core/git/blobs{/sha}","branches_url":"https://api.github.com/repos/xpressengine/xe-core/branches{/branch}","clone_url":"https://github.com/xpressengine/xe-core.git","collaborators_url":"https://api.github.com/repos/xpressengine/xe-core/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/xpressengine/xe-core/comments{/number}","commits_url":"https://api.github.com/repos/xpressengine/xe-core/commits{/sha}","compare_url":"https://api.github.com/repos/xpressengine/xe-core/compare/{base}...{head}","contents_url":"https://api.github.com/repos/xpressengine/xe-core/contents/{+path}","contributors_url":"https://api.github.com/repos/xpressengine/xe-core/contributors","created_at":"2013-02-01T07:16:05Z","default_branch":"master","description":"PHP Open Source CMS","downloads_url":"https://api.github.com/repos/xpressengine/xe-core/downloads","events_url":"https://api.github.com/repos/xpressengine/xe-core/events","fork":0,"forks":143,"forks_count":143,"forks_url":"https://api.github.com/repos/xpressengine/xe-core/forks","full_name":"xpressengine/xe-core","git_commits_url":"https://api.github.com/repos/xpressengine/xe-core/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/xpressengine/xe-core/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/xpressengine/xe-core/git/tags{/sha}","git_url":"git://github.com/xpressengine/xe-core.git","has_downloads":1,"has_issues":1,"has_pages":0,"has_wiki":1,"homepage":"http://www.xpressengine.com","hooks_url":"https://api.github.com/repos/xpressengine/xe-core/hooks","html_url":"https://github.com/xpressengine/xe-core","id":7953576,"issue_comment_url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/{number}","issue_events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/events{/number}","issues_url":"https://api.github.com/repos/xpressengine/xe-core/issues{/number}","keys_url":"https://api.github.com/repos/xpressengine/xe-core/keys{/key_id}","labels_url":"https://api.github.com/repos/xpressengine/xe-core/labels{/name}","language":"PHP","languages_url":"https://api.github.com/repos/xpressengine/xe-core/languages","merges_url":"https://api.github.com/repos/xpressengine/xe-core/merges","milestones_url":"https://api.github.com/repos/xpressengine/xe-core/milestones{/number}","name":"xe-core","notifications_url":"https://api.github.com/repos/xpressengine/xe-core/notifications{?since,all,participating}","open_issues":156,"open_issues_count":156,"owner":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?v=3","events_url":"https://api.github.com/users/xpressengine/events{/privacy}","followers_url":"https://api.github.com/users/xpressengine/followers","following_url":"https://api.github.com/users/xpressengine/following{/other_user}","gists_url":"https://api.github.com/users/xpressengine/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/xpressengine","id":1429259,"login":"xpressengine","organizations_url":"https://api.github.com/users/xpressengine/orgs","received_events_url":"https://api.github.com/users/xpressengine/received_events","repos_url":"https://api.github.com/users/xpressengine/repos","site_admin":0,"starred_url":"https://api.github.com/users/xpressengine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xpressengine/subscriptions","type":"Organization","url":"https://api.github.com/users/xpressengine"},"private":0,"pulls_url":"https://api.github.com/repos/xpressengine/xe-core/pulls{/number}","pushed_at":"2014-12-31T08:52:46Z","releases_url":"https://api.github.com/repos/xpressengine/xe-core/releases{/id}","size":90250,"ssh_url":"git@github.com:xpressengine/xe-core.git","stargazers_count":149,"stargazers_url":"https://api.github.com/repos/xpressengine/xe-core/stargazers","statuses_url":"https://api.github.com/repos/xpressengine/xe-core/statuses/{sha}","subscribers_url":"https://api.github.com/repos/xpressengine/xe-core/subscribers","subscription_url":"https://api.github.com/repos/xpressengine/xe-core/subscription","svn_url":"https://github.com/xpressengine/xe-core","tags_url":"https://api.github.com/repos/xpressengine/xe-core/tags","teams_url":"https://api.github.com/repos/xpressengine/xe-core/teams","trees_url":"https://api.github.com/repos/xpressengine/xe-core/git/trees{/sha}","updated_at":"2014-12-30T00:05:52Z","url":"https://api.github.com/repos/xpressengine/xe-core","watchers":149,"watchers_count":149},"sha":"c3430d1c724f42154ca5dd648637c4df796d1708","user":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?v=3","events_url":"https://api.github.com/users/xpressengine/events{/privacy}","followers_url":"https://api.github.com/users/xpressengine/followers","following_url":"https://api.github.com/users/xpressengine/following{/other_user}","gists_url":"https://api.github.com/users/xpressengine/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/xpressengine","id":1429259,"login":"xpressengine","organizations_url":"https://api.github.com/users/xpressengine/orgs","received_events_url":"https://api.github.com/users/xpressengine/received_events","repos_url":"https://api.github.com/users/xpressengine/repos","site_admin":0,"starred_url":"https://api.github.com/users/xpressengine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xpressengine/subscriptions","type":"Organization","url":"https://api.github.com/users/xpressengine"}},"body":"https://github.com/xpressengine/xe-core/issues/634\\r\\n\\r\\n# Internet Explorer send punycode URL(ASCII) URL and non-alphabet\\r\\nUnicode URL URL as a referer. 인터넷 익스플로러는 리퍼러 주소로 퓨니코드 주소와 유니코드 URL을 섞어\\r\\n쓰고 있습니다. AJAX 통신에는 리퍼러로 Unicode를 사용하고 요청 호스트로는 퓨니코드 URL을 사용(이건 다국어 주소\\r\\n형식으로 접속하려면 이렇게 했어야 할 것)합니다.\\r\\n- XE strictly compare referer and server host for denying CSRF, but\\r\\npunycode URL and Unicode URL should be dealt as a same one. 그런데 XE는 리퍼러의\\r\\n호스트와 서버 호스트를 비교합니다. punycode로 쓰인 주소와 Unicode로 쓰인 주소는 같은 주소를 지시하더라도 문자열이\\r\\n다릅니다. 같은 주소를 지칭하는 다른 문자열을 punycode로 변환해서 같은 주소라고 인식할 수 있게 수정했습니다.\\r\\n- Fix checkCSRF function to deal both form as a same one.\\r\\n- Convert Unicode URL input to punycode URL on the Admin Default URL\\r\\nSettings. 관리자가 유니코드 형식으로 기본 주소를 입력하더라도, 퓨니코드로 변환해 저장하도록 했습니다. 퓨니코드로 저장하는\\r\\n것이 여러모로 유용하기 때문입니다.\\r\\n- For converting punycode URL, include IDNA coverting class. 퓨니코드와 유니코드\\r\\n간 변환을 위해서 IDNA 변환 클래스(LGPL사용권)를 포함시켰습니다.\\r\\n\\r\\n**이 수정을 하면 *한글 도메인에서 글 작성이 가능*합니다. 하지만, *파일 업로드의 경우는 SWF Uploader 이슈로 파일 업로드가 불가능*합니다. 이 문제는, HTML5를 지원하는 파일 업로더를 이용하면 해결됩니다. (워드 프레스 등의 해결법) HTML5를 지원하는 파일 업로더는 AXISJ 업로더 등을 포함해서 XE 공식 홈페이지 자료실에서 다운받아 사용할 수 있습니다.(에디터 변경)**","changed_files":8,"comments":0,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/comments","commits":1,"commits_url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/commits","created_at":"2015-01-01T01:47:43Z","deletions":1,"diff_url":"https://github.com/xpressengine/xe-core/pull/1120.diff","head":{"label":"misol:support_punycode_domain","ref":"support_punycode_domain","repo":{"archive_url":"https://api.github.com/repos/misol/xe-core/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/misol/xe-core/assignees{/user}","blobs_url":"https://api.github.com/repos/misol/xe-core/git/blobs{/sha}","branches_url":"https://api.github.com/repos/misol/xe-core/branches{/branch}","clone_url":"https://github.com/misol/xe-core.git","collaborators_url":"https://api.github.com/repos/misol/xe-core/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/misol/xe-core/comments{/number}","commits_url":"https://api.github.com/repos/misol/xe-core/commits{/sha}","compare_url":"https://api.github.com/repos/misol/xe-core/compare/{base}...{head}","contents_url":"https://api.github.com/repos/misol/xe-core/contents/{+path}","contributors_url":"https://api.github.com/repos/misol/xe-core/contributors","created_at":"2014-12-31T14:41:05Z","default_branch":"master","description":"PHP Open Source CMS","downloads_url":"https://api.github.com/repos/misol/xe-core/downloads","events_url":"https://api.github.com/repos/misol/xe-core/events","fork":1,"forks":0,"forks_count":0,"forks_url":"https://api.github.com/repos/misol/xe-core/forks","full_name":"misol/xe-core","git_commits_url":"https://api.github.com/repos/misol/xe-core/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/misol/xe-core/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/misol/xe-core/git/tags{/sha}","git_url":"git://github.com/misol/xe-core.git","has_downloads":1,"has_issues":0,"has_pages":0,"has_wiki":1,"homepage":"http://www.xpressengine.com","hooks_url":"https://api.github.com/repos/misol/xe-core/hooks","html_url":"https://github.com/misol/xe-core","id":28667946,"issue_comment_url":"https://api.github.com/repos/misol/xe-core/issues/comments/{number}","issue_events_url":"https://api.github.com/repos/misol/xe-core/issues/events{/number}","issues_url":"https://api.github.com/repos/misol/xe-core/issues{/number}","keys_url":"https://api.github.com/repos/misol/xe-core/keys{/key_id}","labels_url":"https://api.github.com/repos/misol/xe-core/labels{/name}","language":"PHP","languages_url":"https://api.github.com/repos/misol/xe-core/languages","merges_url":"https://api.github.com/repos/misol/xe-core/merges","milestones_url":"https://api.github.com/repos/misol/xe-core/milestones{/number}","name":"xe-core","notifications_url":"https://api.github.com/repos/misol/xe-core/notifications{?since,all,participating}","open_issues":0,"open_issues_count":0,"owner":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"},"private":0,"pulls_url":"https://api.github.com/repos/misol/xe-core/pulls{/number}","pushed_at":"2015-01-01T01:36:28Z","releases_url":"https://api.github.com/repos/misol/xe-core/releases{/id}","size":90250,"ssh_url":"git@github.com:misol/xe-core.git","stargazers_count":0,"stargazers_url":"https://api.github.com/repos/misol/xe-core/stargazers","statuses_url":"https://api.github.com/repos/misol/xe-core/statuses/{sha}","subscribers_url":"https://api.github.com/repos/misol/xe-core/subscribers","subscription_url":"https://api.github.com/repos/misol/xe-core/subscription","svn_url":"https://github.com/misol/xe-core","tags_url":"https://api.github.com/repos/misol/xe-core/tags","teams_url":"https://api.github.com/repos/misol/xe-core/teams","trees_url":"https://api.github.com/repos/misol/xe-core/git/trees{/sha}","updated_at":"2014-12-31T14:41:10Z","url":"https://api.github.com/repos/misol/xe-core","watchers":0,"watchers_count":0},"sha":"d2b05732abfd85020335ce272abd37c0ad1c6654","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}},"html_url":"https://github.com/xpressengine/xe-core/pull/1120","id":26739793,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120","locked":0,"mergeable_state":"unknown","merged":0,"number":1120,"patch_url":"https://github.com/xpressengine/xe-core/pull/1120.patch","review_comment_url":"https://api.github.com/repos/xpressengine/xe-core/pulls/comments/{number}","review_comments":0,"review_comments_url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/comments","state":"open","statuses_url":"https://api.github.com/repos/xpressengine/xe-core/statuses/d2b05732abfd85020335ce272abd37c0ad1c6654","title":"fix for Not-Alphabet URL document writing (#634)","updated_at":"2015-01-01T01:47:43Z","url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"PullRequestEvent"} + +-- !sql -- +\N +\N +\N +\N +4748 + +-- !sql -- +135 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.out b/regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.out new file mode 100644 index 00000000000000..4e3b7ce7d52c35 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.out @@ -0,0 +1,11 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !affinityByIssuesAndPRs1 -- +apache/spark 3 3 +rspec/rspec-core 2 2 +golden-warning/giraffedraft-server 15 1 +rspec/rspec-support 1 1 +rspec/rspec-rails 1 1 +rspec/rspec-mocks 1 1 +rspec/rspec-expectations 1 1 +rspec/rspec-dev 1 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.out b/regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.out new file mode 100644 index 00000000000000..d825c03556778b --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !affinityByIssuesAndPRs2 -- +No-CQRT/GooGuns 44 1 +ivolunteerph/ivolunteerph 3 1 +Tribler/tribler 1 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.out b/regression-test/data/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.out new file mode 100644 index 00000000000000..70f693578cad9e --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !authorsWithTheMostPushes -- +github-actions[bot] 1428 806 +seryozha1989 765 12 +KenanSulayman 319 1 +LombiqBot 270 5 +freecall2019 225 1 +hotspotlab 220 1 +hotspot2023 218 1 +renovate[bot] 177 106 +gyuho 170 23 +mirror-updates 168 4 +proxylist-to-bot 164 1 +cageyjames 119 1 +qdm 117 1 +milesholt 107 1 +greatfire 96 2 +Hall-1910 95 1 +apaolacci 95 1 +dependabot[bot] 83 43 +729300gahycus 79 1 +pull[bot] 69 69 +himobi 65 1 +patrick-hudson 61 1 +naijaping 55 1 +fake-name 54 1 +supervpnops 54 2 +brokjad 51 1 +tui590285 49 3 +renovate-bot 47 46 +audreywatters 45 19 +sanliuyi201 45 1 +predictcrypto 44 1 +cm-gerrit 41 24 +B74LABgit 40 3 +PacoReinaCampo 37 37 +vpnsuperapp 37 1 +BlackSnowDot 36 2 +westurner 34 5 +Tower-KevinLi 33 1 +billybobza 32 3 +cato- 32 1 +codertradergambler 32 1 +ivy-root 32 1 +robocdnjs 32 1 +Chourouk-Zioud 31 1 +Warrenty 31 2 +brianmaierjr 31 1 +mhutchinson-witness 31 2 +andrew-nault 30 1 +mouyong 30 2 +megantmcginley 29 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/countingStar1.out b/regression-test/data/variant_doc_snapshot_p2/sql/countingStar1.out new file mode 100644 index 00000000000000..633dfab5e1f157 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/countingStar1.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !countingStar1 -- +4021 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/countingStar2.out b/regression-test/data/variant_doc_snapshot_p2/sql/countingStar2.out new file mode 100644 index 00000000000000..7658cd6fabe28f --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/countingStar2.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !countingStar2 -- +started 4021 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/countingStar3.out b/regression-test/data/variant_doc_snapshot_p2/sql/countingStar3.out new file mode 100644 index 00000000000000..516eb9b73479dd --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/countingStar3.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !countingStar3 -- +42 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.out b/regression-test/data/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.out new file mode 100644 index 00000000000000..ee8916c3a34af6 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.out @@ -0,0 +1,5 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !distributionOfRepositoriesByStarCount -- +1.0 3375 +10.0 6 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/githubRoulette.out b/regression-test/data/variant_doc_snapshot_p2/sql/githubRoulette.out new file mode 100644 index 00000000000000..6db73383708f82 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/githubRoulette.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !githubRoulette -- +LinuxStandardBase/lsb +inf0rmer/blanket +parrt/cs652 +Pathgather/please-wait +jtsternberg/Shortcode_Button +EnterpriseQualityCoding/FizzBuzzEnterpriseEdition +VictiniX888/Illegal-Mod-Sites +robfig/cron +brendangregg/FlameGraph +h5bp/Front-end-Developer-Interview-Questions +pebble/pebblejs +EU-OSHA/osha-website +danielstjules/Stringy +scottjehl/picturefill +letsencrypt/heroku-acme +gaspaio/gearmanui +servo/servo +thlorenz/proxyquire +xpac27/LittleWorld +jpf/the-gannet +drrb/java-rust-example +jcodec/jcodec +mbadolato/iTerm2-Color-Schemes +X1011/git-directory-deploy +bestwnh/IGLDropDownMenu +alvarotrigo/fullPage.js +memsql/memsql-loader +martijnwalraven/meteor-ios +Microsoft/dotnet +cowboy/dotfiles +larrycai/pirate +greatfire/wiki +greatfire/wiki +rapid7/metasploit-framework +tobegit3hub/pirate +evido/wotreplay-parser +Phrogz/SLAXML +beautify-web/js-beautify +django/django +juhl/physicsRus +zingchart/ZingChart-jQuery +tomchristie/django-rest-framework +thephpleague/oauth2-server +cloudflare/golibs +iojs/io.js +golang/go +cppformat/cppformat +google/end-to-end +progrium/duplex +bwlewis/rthreejs + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.out new file mode 100644 index 00000000000000..a75f6cd87d21ea --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheListOfTopRepositoriesChangedOverTheYears1 -- +wasabeef/awesome-android-ui 35 +prakhar1989/awesome-courses 31 +cachethq/Cachet 17 +Pathgather/please-wait 13 +begriffs/postgrest 12 +cssdream/cssgrace 12 +Netflix/ice 9 +gorhill/uBlock 9 +kragniz/json-sempai 9 +wasabeef/awesome-android-libraries 9 +Qihoo360/phptrace 8 +auchenberg/chrome-devtools-app 8 +papers-we-love/papers-we-love 8 +vinta/awesome-python 8 +goagent/goagent 7 +kbandla/APTnotes 7 +lexrus/VPNOn 7 +zhihu/kids 7 +alvarotrigo/fullPage.js 6 +dockerboard/dockerboard 6 +h5bp/Front-end-Developer-Interview-Questions 6 +inf0rmer/blanket 6 +isohuntto/openbay 6 +livid/v2ex 6 +rails/rails-perftest 6 +Reactive-Extensions/RxJS 5 +d235j/360Controller 5 +fcambus/nginx-resources 5 +nemoTyrant/manong 5 +Anchor89/GithubHub 4 +FelisCatus/SwitchyOmega 4 +atom/atom 4 +docker/fig 4 +facebook/react 4 +flarum/core 4 +google/end-to-end 4 +greatfire/wiki 4 +imgix/imgix-emacs 4 +iojs/io.js 4 +josh/cafe-js 4 +leanote/leanote 4 +neilj/Squire 4 +orangeduck/libCello 4 +spf13/hugo 4 +square/PonyDebugger 4 +stackia/SteamFriendsManager 4 +staltz/cycle 4 +tobiasahlin/SpinKit 4 +twbs/bootstrap 4 +zingchart/ZingChart-jQuery 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.out new file mode 100644 index 00000000000000..a510ce81ba1f18 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheListOfTopRepositoriesChangedOverTheYears2 -- +wasabeef/awesome-android-ui 35 +prakhar1989/awesome-courses 31 +cachethq/Cachet 17 +Pathgather/please-wait 13 +begriffs/postgrest 12 +cssdream/cssgrace 12 +Netflix/ice 9 +gorhill/uBlock 9 +kragniz/json-sempai 9 +wasabeef/awesome-android-libraries 9 +Qihoo360/phptrace 8 +auchenberg/chrome-devtools-app 8 +papers-we-love/papers-we-love 8 +vinta/awesome-python 8 +goagent/goagent 7 +kbandla/APTnotes 7 +lexrus/VPNOn 7 +zhihu/kids 7 +alvarotrigo/fullPage.js 6 +dockerboard/dockerboard 6 +h5bp/Front-end-Developer-Interview-Questions 6 +inf0rmer/blanket 6 +isohuntto/openbay 6 +livid/v2ex 6 +rails/rails-perftest 6 +Reactive-Extensions/RxJS 5 +d235j/360Controller 5 +fcambus/nginx-resources 5 +nemoTyrant/manong 5 +Anchor89/GithubHub 4 +FelisCatus/SwitchyOmega 4 +atom/atom 4 +docker/fig 4 +facebook/react 4 +flarum/core 4 +google/end-to-end 4 +greatfire/wiki 4 +imgix/imgix-emacs 4 +iojs/io.js 4 +josh/cafe-js 4 +leanote/leanote 4 +neilj/Squire 4 +orangeduck/libCello 4 +spf13/hugo 4 +square/PonyDebugger 4 +stackia/SteamFriendsManager 4 +staltz/cycle 4 +tobiasahlin/SpinKit 4 +twbs/bootstrap 4 +zingchart/ZingChart-jQuery 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.out new file mode 100644 index 00000000000000..8d2c912415978a --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheListOfTopRepositoriesChangedOverTheYears3 -- +zzarcon/focusable 1 +zwaldowski/BlocksKit 1 +zurb/foundation 1 +zulfajuniadi/riverlevel 1 +zuha/Zuha 1 +zuffdaddy/dynalamp 1 +zorro3/ConfigArgParse 1 +zoomhub/zoomhub 1 +zokis/Python--Faster-Way 1 +ziyasal/node-procexss 1 +zhenchen/Experiment-for-secompax 1 +zeromq/jeromq 1 +zendframework/ZendSkeletonApplication 1 +zenazn/goji 1 +zedapp/zed 1 +zdavatz/spreadsheet 1 +zcweng/ToggleButton 1 +zackkitzmiller/gofish 1 +zachwill/flask-engine 1 +z411/trackma 1 +yyuu/pyenv-installer 1 +yxsicd/yxsimg 1 +ywdarklord/Go-Example 1 +yorikvanhavre/FreeCAD-library 1 +yogiben/meteor-bootstrap 1 +yob/pdf-reader 1 +ymx/RefExplorer 1 +yeoman/generator-angular 1 +yangqi/Htmldom 1 +yahoo/android-range-seek-bar 1 +y-ken/fluent-logger-mruby 1 +xxv/android-lifecycle 1 +xvoland/Extract 1 +xueruini/thuthesis 1 +xsacha/Sachesi 1 +xpac27/LittleWorld 1 +xobs/fernly 1 +xjzhou/500lines 1 +xicilion/fibjs 1 +xiaobozi/youku-lixian 1 +xiaoai/android-waterfall-demo 1 +xfeng/MultiHttpRequest 1 +xero-gateway/xero_gateway 1 +xenith-studios/ataxia 1 +xebia/jackson-lombok 1 +xcltapestry/XCL-Charts 1 +xat/chromecast-player 1 +wymsee/cordova-imagePicker 1 +wycc/arduino-wukong 1 +wycats/handlebars.js 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.out new file mode 100644 index 00000000000000..c23f409ba50117 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheListOfTopRepositoriesChangedOverTheYears4 -- +wasabeef/awesome-android-ui 35 +prakhar1989/awesome-courses 31 +cachethq/Cachet 17 +Pathgather/please-wait 13 +begriffs/postgrest 12 +cssdream/cssgrace 12 +Netflix/ice 9 +gorhill/uBlock 9 +kragniz/json-sempai 9 +wasabeef/awesome-android-libraries 9 +Qihoo360/phptrace 8 +auchenberg/chrome-devtools-app 8 +papers-we-love/papers-we-love 8 +vinta/awesome-python 8 +goagent/goagent 7 +kbandla/APTnotes 7 +lexrus/VPNOn 7 +zhihu/kids 7 +alvarotrigo/fullPage.js 6 +dockerboard/dockerboard 6 +h5bp/Front-end-Developer-Interview-Questions 6 +inf0rmer/blanket 6 +isohuntto/openbay 6 +livid/v2ex 6 +rails/rails-perftest 6 +Reactive-Extensions/RxJS 5 +d235j/360Controller 5 +fcambus/nginx-resources 5 +nemoTyrant/manong 5 +Anchor89/GithubHub 4 +FelisCatus/SwitchyOmega 4 +atom/atom 4 +docker/fig 4 +facebook/react 4 +flarum/core 4 +google/end-to-end 4 +greatfire/wiki 4 +imgix/imgix-emacs 4 +iojs/io.js 4 +josh/cafe-js 4 +leanote/leanote 4 +neilj/Squire 4 +orangeduck/libCello 4 +spf13/hugo 4 +square/PonyDebugger 4 +stackia/SteamFriendsManager 4 +staltz/cycle 4 +tobiasahlin/SpinKit 4 +twbs/bootstrap 4 +zingchart/ZingChart-jQuery 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.out new file mode 100644 index 00000000000000..523224a060b772 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheListOfTopRepositoriesChangedOverTheYears5 -- +wasabeef/awesome-android-ui 35 +prakhar1989/awesome-courses 31 +cachethq/Cachet 17 +Pathgather/please-wait 13 +begriffs/postgrest 12 +cssdream/cssgrace 12 +Netflix/ice 9 +gorhill/uBlock 9 +kragniz/json-sempai 9 +wasabeef/awesome-android-libraries 9 +Qihoo360/phptrace 8 +auchenberg/chrome-devtools-app 8 +papers-we-love/papers-we-love 8 +vinta/awesome-python 8 +goagent/goagent 7 +kbandla/APTnotes 7 +lexrus/VPNOn 7 +zhihu/kids 7 +alvarotrigo/fullPage.js 6 +dockerboard/dockerboard 6 +h5bp/Front-end-Developer-Interview-Questions 6 +inf0rmer/blanket 6 +isohuntto/openbay 6 +livid/v2ex 6 +rails/rails-perftest 6 +Reactive-Extensions/RxJS 5 +d235j/360Controller 5 +fcambus/nginx-resources 5 +nemoTyrant/manong 5 +Anchor89/GithubHub 4 +FelisCatus/SwitchyOmega 4 +atom/atom 4 +docker/fig 4 +facebook/react 4 +flarum/core 4 +google/end-to-end 4 +greatfire/wiki 4 +imgix/imgix-emacs 4 +iojs/io.js 4 +josh/cafe-js 4 +leanote/leanote 4 +neilj/Squire 4 +orangeduck/libCello 4 +spf13/hugo 4 +square/PonyDebugger 4 +stackia/SteamFriendsManager 4 +staltz/cycle 4 +tobiasahlin/SpinKit 4 +twbs/bootstrap 4 +zingchart/ZingChart-jQuery 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.out new file mode 100644 index 00000000000000..3c6e5bbe07fab2 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheListOfTopRepositoriesChangedOverTheYears6 -- +wasabeef/awesome-android-ui 35 +prakhar1989/awesome-courses 31 +cachethq/Cachet 17 +Pathgather/please-wait 13 +begriffs/postgrest 12 +cssdream/cssgrace 12 +Netflix/ice 9 +gorhill/uBlock 9 +kragniz/json-sempai 9 +wasabeef/awesome-android-libraries 9 +Qihoo360/phptrace 8 +auchenberg/chrome-devtools-app 8 +papers-we-love/papers-we-love 8 +vinta/awesome-python 8 +goagent/goagent 7 +kbandla/APTnotes 7 +lexrus/VPNOn 7 +zhihu/kids 7 +alvarotrigo/fullPage.js 6 +dockerboard/dockerboard 6 +h5bp/Front-end-Developer-Interview-Questions 6 +inf0rmer/blanket 6 +isohuntto/openbay 6 +livid/v2ex 6 +rails/rails-perftest 6 +Reactive-Extensions/RxJS 5 +d235j/360Controller 5 +fcambus/nginx-resources 5 +nemoTyrant/manong 5 +Anchor89/GithubHub 4 +FelisCatus/SwitchyOmega 4 +atom/atom 4 +docker/fig 4 +facebook/react 4 +flarum/core 4 +google/end-to-end 4 +greatfire/wiki 4 +imgix/imgix-emacs 4 +iojs/io.js 4 +josh/cafe-js 4 +leanote/leanote 4 +neilj/Squire 4 +orangeduck/libCello 4 +spf13/hugo 4 +square/PonyDebugger 4 +stackia/SteamFriendsManager 4 +staltz/cycle 4 +tobiasahlin/SpinKit 4 +twbs/bootstrap 4 +zingchart/ZingChart-jQuery 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.out b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.out new file mode 100644 index 00000000000000..3e777719e33ae6 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.out @@ -0,0 +1,5 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !howHasTheTotalNumberOfStarsChangedOverTime -- +2015 2725 +2022 1296 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.out new file mode 100644 index 00000000000000..b1db3f8a657623 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments1 -- +5314 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.out new file mode 100644 index 00000000000000..c50a162b2d9787 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments2 -- +GovAlta/ui-components 69 +TTMTT/iCL0udin 34 +apache/spark 31 +CleverRaven/Cataclysm-DDA 29 +cachethq/Cachet 28 +frogsbreath-games/eucre 25 +HabitRPG/habitrpg 23 +tgstation/-tg-station 22 +rust-lang/rust 21 +Youssef1313/samples 20 +backdrop/backdrop-issues 18 +gratipay/inside.gratipay.com 18 +saltstack/salt 17 +lumien231/Custom-Main-Menu 16 +MetaMask/eth-phishing-detect 15 +numenta/nupic.core 15 +Homebrew/homebrew 13 +badrsony/icloudin-support- 13 +Expensify/App 12 +Sanne/testcontainers-java 11 +atom-community/autocomplete-plus 11 +diydrones/ardupilot 11 +kguil/Marvin-Roadmap 11 +kyma-project/kyma 11 +libantioch/antioch 11 +Baystation12/Baystation12 10 +hrydgard/ppsspp 10 +rQAQr/rss 10 +sikozheng/rshb 10 +tipfortip/issues 10 +Mindwerks/wildmidi 9 +NeuroVault/NeuroVault 9 +THE-ESCAPIST/RSSHub 9 +WhisperSystems/TextSecure 9 +XLabs/Xamarin-Forms-Labs 9 +aws/eks-distro 9 +disco-trooper/weather-app 9 +docker-library/docs 9 +expressjs/compression 9 +flutter/flutter 9 +isaacg1/pyth 9 +jscs-dev/node-jscs 9 +orkestral/venom 9 +udondan/jsii 9 +4Nanai/Abot 8 +Blockchain-Dev-Web/hardhat-erc721 8 +DoYana/myrss 8 +Joomla-Bible-Study/Joomla-Bible-Study 8 +JuliaLang/julia 8 +P3TERX/RSSHub 8 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.out new file mode 100644 index 00000000000000..f17b6c34936b9d --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments3 -- +GovAlta/ui-components 69 69 1.0 +TTMTT/iCL0udin 34 1 34.0 +apache/spark 31 12 2.58 +CleverRaven/Cataclysm-DDA 29 13 2.23 +cachethq/Cachet 28 11 2.55 +frogsbreath-games/eucre 25 25 1.0 +HabitRPG/habitrpg 23 10 2.3 +tgstation/-tg-station 22 10 2.2 +rust-lang/rust 21 13 1.62 +Youssef1313/samples 20 20 1.0 +backdrop/backdrop-issues 18 7 2.57 +gratipay/inside.gratipay.com 18 4 4.5 +saltstack/salt 17 7 2.43 +lumien231/Custom-Main-Menu 16 1 16.0 +MetaMask/eth-phishing-detect 15 15 1.0 +numenta/nupic.core 15 6 2.5 +Homebrew/homebrew 13 6 2.17 +badrsony/icloudin-support- 13 2 6.5 +Expensify/App 12 9 1.33 +Sanne/testcontainers-java 11 11 1.0 +atom-community/autocomplete-plus 11 1 11.0 +diydrones/ardupilot 11 8 1.38 +kguil/Marvin-Roadmap 11 2 5.5 +kyma-project/kyma 11 10 1.1 +libantioch/antioch 11 2 5.5 +Baystation12/Baystation12 10 5 2.0 +hrydgard/ppsspp 10 5 2.0 +rQAQr/rss 10 8 1.25 +sikozheng/rshb 10 6 1.67 +tipfortip/issues 10 1 10.0 +Mindwerks/wildmidi 9 9 1.0 +NeuroVault/NeuroVault 9 1 9.0 +THE-ESCAPIST/RSSHub 9 7 1.29 +WhisperSystems/TextSecure 9 8 1.13 +XLabs/Xamarin-Forms-Labs 9 6 1.5 +aws/eks-distro 9 1 9.0 +disco-trooper/weather-app 9 9 1.0 +docker-library/docs 9 4 2.25 +expressjs/compression 9 1 9.0 +flutter/flutter 9 9 1.0 +isaacg1/pyth 9 3 3.0 +jscs-dev/node-jscs 9 6 1.5 +orkestral/venom 9 9 1.0 +udondan/jsii 9 9 1.0 +4Nanai/Abot 8 5 1.6 +Blockchain-Dev-Web/hardhat-erc721 8 1 8.0 +DoYana/myrss 8 6 1.33 +Joomla-Bible-Study/Joomla-Bible-Study 8 1 8.0 +JuliaLang/julia 8 7 1.14 +P3TERX/RSSHub 8 6 1.33 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.out new file mode 100644 index 00000000000000..737f2e33a41ce9 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments4 -- +TTMTT/iCL0udin 1 34 +lumien231/Custom-Main-Menu 7 16 +cachethq/Cachet 173 11 +atom-community/autocomplete-plus 185 11 +saltstack/salt 19253 11 +tipfortip/issues 133 10 +badrsony/icloudin-support- 8 9 +expressjs/compression 25 9 +NeuroVault/NeuroVault 90 9 +gratipay/inside.gratipay.com 93 9 +aws/eks-distro 1398 9 +CleverRaven/Cataclysm-DDA 10643 9 +honeinc/emit-bindings 7 8 +libantioch/antioch 72 8 +alexgrist/ServerGuard 118 8 +Blockchain-Dev-Web/hardhat-erc721 279 8 +kguil/Marvin-Roadmap 362 8 +Joomla-Bible-Study/Joomla-Bible-Study 403 8 +isaacg1/pyth 10 7 +SpongePowered/SpongeAPI 272 7 +backdrop/backdrop-issues 521 7 +apache/spark 3864 7 +apache/spark 3865 7 +YungSang/boot2docker-vagrant-box 18 6 +iChun/Tabula 23 6 +ev3dev/ev3dev.github.io 37 6 +gratipay/inside.gratipay.com 86 6 +scientist-softserv/adventist-dl 117 6 +openfl/lime 301 6 +MinecraftForge/FML 581 6 +stedolan/jq 659 6 +carltonwhitehead/coner 2 5 +box/leche 5 5 +aatxe/irc 11 5 +torch/trepl 12 5 +sfu-natlang/lensingwikipedia 127 5 +numenta/nupic.core 295 5 +AtomLinter/Linter 316 5 +rwaldron/johnny-five 524 5 +blueboxgroup/ursula 670 5 +ankidroid/Anki-Android 680 5 +notsecure/uTox 718 5 +sass/libsass 790 5 +facebook/react 953 5 +nylira/prism-break 1212 5 +numenta/nupic 1694 5 +theCrag/website 1764 5 +HabitRPG/habitrpg 4458 5 +tgstation/-tg-station 6718 5 +hrydgard/ppsspp 7245 5 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.out new file mode 100644 index 00000000000000..a4a6da943a5d9d --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments5 -- +atom-community/autocomplete-plus 185 11 +cachethq/Cachet 173 11 +saltstack/salt 19253 11 +tipfortip/issues 133 10 +CleverRaven/Cataclysm-DDA 10643 9 +NeuroVault/NeuroVault 90 9 +aws/eks-distro 1398 9 +expressjs/compression 25 9 +gratipay/inside.gratipay.com 93 9 +Blockchain-Dev-Web/hardhat-erc721 279 8 +Joomla-Bible-Study/Joomla-Bible-Study 403 8 +alexgrist/ServerGuard 118 8 +kguil/Marvin-Roadmap 362 8 +libantioch/antioch 72 8 +SpongePowered/SpongeAPI 272 7 +apache/spark 3864 7 +apache/spark 3865 7 +backdrop/backdrop-issues 521 7 +MinecraftForge/FML 581 6 +YungSang/boot2docker-vagrant-box 18 6 +ev3dev/ev3dev.github.io 37 6 +gratipay/inside.gratipay.com 86 6 +iChun/Tabula 23 6 +openfl/lime 301 6 +scientist-softserv/adventist-dl 117 6 +stedolan/jq 659 6 +AtomLinter/Linter 316 5 +HabitRPG/habitrpg 4458 5 +Homebrew/homebrew 35404 5 +aatxe/irc 11 5 +ankidroid/Anki-Android 680 5 +blueboxgroup/ursula 670 5 +facebook/react 953 5 +hrydgard/ppsspp 7245 5 +notsecure/uTox 718 5 +numenta/nupic 1694 5 +numenta/nupic.core 295 5 +nylira/prism-break 1212 5 +rwaldron/johnny-five 524 5 +sass/libsass 790 5 +sfu-natlang/lensingwikipedia 127 5 +tgstation/-tg-station 6718 5 +theCrag/website 1764 5 +torch/trepl 12 5 +Expensify/App 12400 4 +Homebrew/homebrew 35194 4 +TelescopeJS/Telescope 666 4 +Unitech/PM2 913 4 +apache/spark 3237 4 +apache/spark 3855 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.out new file mode 100644 index 00000000000000..57af3521197479 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.out @@ -0,0 +1,15 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments6 -- +cachethq/Cachet 173 11 4 +SpongePowered/SpongeAPI 272 7 4 +MinecraftForge/FML 581 6 4 +HabitRPG/habitrpg 4458 5 4 +Homebrew/homebrew 35404 5 4 +ankidroid/Anki-Android 680 5 4 +tgstation/-tg-station 6718 5 4 +Unitech/PM2 913 4 4 +dolphin-emu/dolphin 1798 4 4 +nezhivar/nezhOS 190 4 4 +rust-lang/rust 20364 4 4 +tgstation/-tg-station 6689 4 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.out b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.out new file mode 100644 index 00000000000000..1a3d9f653de29c --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !issuesWithTheMostComments7 -- +mheon/checksims 28 2 +rust-lang/rust 18 1 +reubenhwk/dvd_menu_animator 9 2 +eswordthecat/vgstation13 8 3 +Homebrew/homebrew-science 7 2 +JoeForks/Cachet 7 3 +rene-scheepers/case-life 7 1 +DeEvo/chamilo-lms-utp 6 1 +christophercochran/Genesis-Visual-Hook-Guide 5 1 +ProjectCollaboTeam/Collab 4 2 +Thunderbots-5604/2014-Code 4 1 +botandrose/calagator 4 2 +jdavis/twofactorauth 4 1 +jupitersh/jupitersh.github.io 4 1 +skillrecordings/products 4 1 +vangdfang/libcutter 4 1 +NREL/OpenStudio 3 1 +archaeopterasa/synx 3 2 +att/rcloud 3 2 +hashicorp/boundary-ui 3 1 +honestbleeps/Reddit-Enhancement-Suite 3 1 +japaric/rust 3 1 +AKST/jsgen 2 1 +AnyelinaMarte/saeamt-docente 2 1 +AyaNour333/Dashboard 2 1 +Beiyongcangku/things 2 1 +Brento27/Job-applications 2 1 +ErikZalm/Marlin 2 2 +GijsTimmers/kotnetcli 2 1 +Jamesking56/Cachet 2 1 +Nbodypp/HOW_final 2 2 +PCSX2/pcsx2 2 2 +Tsavsar/CapacitorApp 2 1 +WasabiFan/ev3dev.github.io 2 1 +Whatevering/news-homepage-fm 2 1 +b0wdyy/book-reads 2 1 +batyshkaLenin/alexandr-sidorenko.me 2 1 +cdandrango3/facturas 2 1 +composer/composer 2 1 +dengxqi/jsbbs 2 1 +elikemscott/Assessment 2 1 +george1410/daily-mix-saver 2 1 +giorgiaBertacchini/MLOps-kedro-auto 2 1 +k2wlxda/kernel-msm 2 1 +kmiecik013/test2 2 1 +koajs/koa 2 2 +kripken/emscripten-fastcomp-clang 2 1 +kyrias/pkgbuilds 2 2 +livepeer/livepeer.js 2 1 +lucasjolibois54/futureworld 2 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/load.out b/regression-test/data/variant_doc_snapshot_p2/sql/load.out new file mode 100644 index 00000000000000..4bee99a71a99ea --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/load.out @@ -0,0 +1,23 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +\N +\N +\N +4748 + +-- !sql -- +864 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/4381756?","gravatar_id":"","id":4381756,"login":"qw5414","url":"https://api.github.com/users/qw5414"},"created_at":"2015-01-01T02:06:41Z","id":"2489420466","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"created","comment":{"body":"乃\\r\\n","created_at":"2015-01-01T02:06:40Z","html_url":"https://github.com/xpressengine/xe-core/pull/1120#issuecomment-68478485","id":68478485,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120","updated_at":"2015-01-01T02:06:40Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/68478485","user":{"avatar_url":"https://avatars.githubusercontent.com/u/4381756?v=3","events_url":"https://api.github.com/users/qw5414/events{/privacy}","followers_url":"https://api.github.com/users/qw5414/followers","following_url":"https://api.github.com/users/qw5414/following{/other_user}","gists_url":"https://api.github.com/users/qw5414/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/qw5414","id":4381756,"login":"qw5414","organizations_url":"https://api.github.com/users/qw5414/orgs","received_events_url":"https://api.github.com/users/qw5414/received_events","repos_url":"https://api.github.com/users/qw5414/repos","site_admin":0,"starred_url":"https://api.github.com/users/qw5414/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/qw5414/subscriptions","type":"User","url":"https://api.github.com/users/qw5414"}},"issue":{"body":"https://github.com/xpressengine/xe-core/issues/634\\r\\n\\r\\n# Internet Explorer send punycode URL(ASCII) URL and non-alphabet\\r\\nUnicode URL URL as a referer. 인터넷 익스플로러는 리퍼러 주소로 퓨니코드 주소와 유니코드 URL을 섞어\\r\\n쓰고 있습니다. AJAX 통신에는 리퍼러로 Unicode를 사용하고 요청 호스트로는 퓨니코드 URL을 사용(이건 다국어 주소\\r\\n형식으로 접속하려면 이렇게 했어야 할 것)합니다.\\r\\n- XE strictly compare referer and server host for denying CSRF, but\\r\\npunycode URL and Unicode URL should be dealt as a same one. 그런데 XE는 리퍼러의\\r\\n호스트와 서버 호스트를 비교합니다. punycode로 쓰인 주소와 Unicode로 쓰인 주소는 같은 주소를 지시하더라도 문자열이\\r\\n다릅니다. 같은 주소를 지칭하는 다른 문자열을 punycode로 변환해서 같은 주소라고 인식할 수 있게 수정했습니다.\\r\\n- Fix checkCSRF function to deal both form as a same one.\\r\\n- Convert Unicode URL input to punycode URL on the Admin Default URL\\r\\nSettings. 관리자가 유니코드 형식으로 기본 주소를 입력하더라도, 퓨니코드로 변환해 저장하도록 했습니다. 퓨니코드로 저장하는\\r\\n것이 여러모로 유용하기 때문입니다.\\r\\n- For converting punycode URL, include IDNA coverting class. 퓨니코드와 유니코드\\r\\n간 변환을 위해서 IDNA 변환 클래스(LGPL사용권)를 포함시켰습니다.\\r\\n\\r\\n**이 수정을 하면 *한글 도메인에서 글 작성이 가능*합니다. 하지만, *파일 업로드의 경우는 SWF Uploader 이슈로 파일 업로드가 불가능*합니다. 이 문제는, HTML5를 지원하는 파일 업로더를 이용하면 해결됩니다. (워드 프레스 등의 해결법) HTML5를 지원하는 파일 업로더는 AXISJ 업로더 등을 포함해서 XE 공식 홈페이지 자료실에서 다운받아 사용할 수 있습니다.(에디터 변경)**","comments":1,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/comments","created_at":"2015-01-01T01:47:43Z","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/events","html_url":"https://github.com/xpressengine/xe-core/pull/1120","id":53211000,"labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/labels{/name}","locked":0,"number":1120,"pull_request":{"diff_url":"https://github.com/xpressengine/xe-core/pull/1120.diff","html_url":"https://github.com/xpressengine/xe-core/pull/1120","patch_url":"https://github.com/xpressengine/xe-core/pull/1120.patch","url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120"},"state":"open","title":"fix for Not-Alphabet URL document writing (#634)","updated_at":"2015-01-01T02:06:40Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"IssueCommentEvent"} +4842 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?","gravatar_id":"","id":53764,"login":"bnu","url":"https://api.github.com/users/bnu"},"created_at":"2015-01-01T03:47:41Z","id":"2489448854","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"created","comment":{"body":"@misol 고르기가 어렵네요.\\r\\nplup가 좋은데 GPL이네요^^;","created_at":"2015-01-01T03:47:41Z","html_url":"https://github.com/xpressengine/xe-core/issues/1086#issuecomment-68479786","id":68479786,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","updated_at":"2015-01-01T03:47:41Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/68479786","user":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?v=3","events_url":"https://api.github.com/users/bnu/events{/privacy}","followers_url":"https://api.github.com/users/bnu/followers","following_url":"https://api.github.com/users/bnu/following{/other_user}","gists_url":"https://api.github.com/users/bnu/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/bnu","id":53764,"login":"bnu","organizations_url":"https://api.github.com/users/bnu/orgs","received_events_url":"https://api.github.com/users/bnu/received_events","repos_url":"https://api.github.com/users/bnu/repos","site_admin":0,"starred_url":"https://api.github.com/users/bnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnu/subscriptions","type":"User","url":"https://api.github.com/users/bnu"}},"issue":{"comments":5,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/comments","created_at":"2014-12-12T11:48:03Z","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/events","html_url":"https://github.com/xpressengine/xe-core/issues/1086","id":51797879,"labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/labels{/name}","locked":0,"number":1086,"state":"open","title":"파일 업로더 교체","updated_at":"2015-01-01T03:47:41Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","user":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?v=3","events_url":"https://api.github.com/users/bnu/events{/privacy}","followers_url":"https://api.github.com/users/bnu/followers","following_url":"https://api.github.com/users/bnu/following{/other_user}","gists_url":"https://api.github.com/users/bnu/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/bnu","id":53764,"login":"bnu","organizations_url":"https://api.github.com/users/bnu/orgs","received_events_url":"https://api.github.com/users/bnu/received_events","repos_url":"https://api.github.com/users/bnu/repos","site_admin":0,"starred_url":"https://api.github.com/users/bnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnu/subscriptions","type":"User","url":"https://api.github.com/users/bnu"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"IssueCommentEvent"} +5451 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?","gravatar_id":"","id":3437916,"login":"misol","url":"https://api.github.com/users/misol"},"created_at":"2015-01-01T02:48:28Z","id":"2489433218","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"created","comment":{"body":"Html5 도 같이 지원하는 업로더였으면 좋겠어요! 구글링 해보면 꽤 나와요 :)","created_at":"2015-01-01T02:48:27Z","html_url":"https://github.com/xpressengine/xe-core/issues/1086#issuecomment-68479093","id":68479093,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","updated_at":"2015-01-01T02:48:27Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/68479093","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}},"issue":{"comments":4,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/comments","created_at":"2014-12-12T11:48:03Z","events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/events","html_url":"https://github.com/xpressengine/xe-core/issues/1086","id":51797879,"labels_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086/labels{/name}","locked":0,"number":1086,"state":"open","title":"파일 업로더 교체","updated_at":"2015-01-01T02:48:27Z","url":"https://api.github.com/repos/xpressengine/xe-core/issues/1086","user":{"avatar_url":"https://avatars.githubusercontent.com/u/53764?v=3","events_url":"https://api.github.com/users/bnu/events{/privacy}","followers_url":"https://api.github.com/users/bnu/followers","following_url":"https://api.github.com/users/bnu/following{/other_user}","gists_url":"https://api.github.com/users/bnu/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/bnu","id":53764,"login":"bnu","organizations_url":"https://api.github.com/users/bnu/orgs","received_events_url":"https://api.github.com/users/bnu/received_events","repos_url":"https://api.github.com/users/bnu/repos","site_admin":0,"starred_url":"https://api.github.com/users/bnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bnu/subscriptions","type":"User","url":"https://api.github.com/users/bnu"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"IssueCommentEvent"} +5995 {"actor":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?","gravatar_id":"","id":3437916,"login":"misol","url":"https://api.github.com/users/misol"},"created_at":"2015-01-01T01:47:44Z","id":"2489414108","org":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?","gravatar_id":"","id":1429259,"login":"xpressengine","url":"https://api.github.com/orgs/xpressengine"},"payload":{"action":"opened","number":1120,"pull_request":{"_links":{"comments":{"href":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/comments"},"commits":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/commits"},"html":{"href":"https://github.com/xpressengine/xe-core/pull/1120"},"issue":{"href":"https://api.github.com/repos/xpressengine/xe-core/issues/1120"},"review_comment":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/comments/{number}"},"review_comments":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/comments"},"self":{"href":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120"},"statuses":{"href":"https://api.github.com/repos/xpressengine/xe-core/statuses/d2b05732abfd85020335ce272abd37c0ad1c6654"}},"additions":4748,"base":{"label":"xpressengine:develop","ref":"develop","repo":{"archive_url":"https://api.github.com/repos/xpressengine/xe-core/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/xpressengine/xe-core/assignees{/user}","blobs_url":"https://api.github.com/repos/xpressengine/xe-core/git/blobs{/sha}","branches_url":"https://api.github.com/repos/xpressengine/xe-core/branches{/branch}","clone_url":"https://github.com/xpressengine/xe-core.git","collaborators_url":"https://api.github.com/repos/xpressengine/xe-core/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/xpressengine/xe-core/comments{/number}","commits_url":"https://api.github.com/repos/xpressengine/xe-core/commits{/sha}","compare_url":"https://api.github.com/repos/xpressengine/xe-core/compare/{base}...{head}","contents_url":"https://api.github.com/repos/xpressengine/xe-core/contents/{+path}","contributors_url":"https://api.github.com/repos/xpressengine/xe-core/contributors","created_at":"2013-02-01T07:16:05Z","default_branch":"master","description":"PHP Open Source CMS","downloads_url":"https://api.github.com/repos/xpressengine/xe-core/downloads","events_url":"https://api.github.com/repos/xpressengine/xe-core/events","fork":0,"forks":143,"forks_count":143,"forks_url":"https://api.github.com/repos/xpressengine/xe-core/forks","full_name":"xpressengine/xe-core","git_commits_url":"https://api.github.com/repos/xpressengine/xe-core/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/xpressengine/xe-core/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/xpressengine/xe-core/git/tags{/sha}","git_url":"git://github.com/xpressengine/xe-core.git","has_downloads":1,"has_issues":1,"has_pages":0,"has_wiki":1,"homepage":"http://www.xpressengine.com","hooks_url":"https://api.github.com/repos/xpressengine/xe-core/hooks","html_url":"https://github.com/xpressengine/xe-core","id":7953576,"issue_comment_url":"https://api.github.com/repos/xpressengine/xe-core/issues/comments/{number}","issue_events_url":"https://api.github.com/repos/xpressengine/xe-core/issues/events{/number}","issues_url":"https://api.github.com/repos/xpressengine/xe-core/issues{/number}","keys_url":"https://api.github.com/repos/xpressengine/xe-core/keys{/key_id}","labels_url":"https://api.github.com/repos/xpressengine/xe-core/labels{/name}","language":"PHP","languages_url":"https://api.github.com/repos/xpressengine/xe-core/languages","merges_url":"https://api.github.com/repos/xpressengine/xe-core/merges","milestones_url":"https://api.github.com/repos/xpressengine/xe-core/milestones{/number}","name":"xe-core","notifications_url":"https://api.github.com/repos/xpressengine/xe-core/notifications{?since,all,participating}","open_issues":156,"open_issues_count":156,"owner":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?v=3","events_url":"https://api.github.com/users/xpressengine/events{/privacy}","followers_url":"https://api.github.com/users/xpressengine/followers","following_url":"https://api.github.com/users/xpressengine/following{/other_user}","gists_url":"https://api.github.com/users/xpressengine/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/xpressengine","id":1429259,"login":"xpressengine","organizations_url":"https://api.github.com/users/xpressengine/orgs","received_events_url":"https://api.github.com/users/xpressengine/received_events","repos_url":"https://api.github.com/users/xpressengine/repos","site_admin":0,"starred_url":"https://api.github.com/users/xpressengine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xpressengine/subscriptions","type":"Organization","url":"https://api.github.com/users/xpressengine"},"private":0,"pulls_url":"https://api.github.com/repos/xpressengine/xe-core/pulls{/number}","pushed_at":"2014-12-31T08:52:46Z","releases_url":"https://api.github.com/repos/xpressengine/xe-core/releases{/id}","size":90250,"ssh_url":"git@github.com:xpressengine/xe-core.git","stargazers_count":149,"stargazers_url":"https://api.github.com/repos/xpressengine/xe-core/stargazers","statuses_url":"https://api.github.com/repos/xpressengine/xe-core/statuses/{sha}","subscribers_url":"https://api.github.com/repos/xpressengine/xe-core/subscribers","subscription_url":"https://api.github.com/repos/xpressengine/xe-core/subscription","svn_url":"https://github.com/xpressengine/xe-core","tags_url":"https://api.github.com/repos/xpressengine/xe-core/tags","teams_url":"https://api.github.com/repos/xpressengine/xe-core/teams","trees_url":"https://api.github.com/repos/xpressengine/xe-core/git/trees{/sha}","updated_at":"2014-12-30T00:05:52Z","url":"https://api.github.com/repos/xpressengine/xe-core","watchers":149,"watchers_count":149},"sha":"c3430d1c724f42154ca5dd648637c4df796d1708","user":{"avatar_url":"https://avatars.githubusercontent.com/u/1429259?v=3","events_url":"https://api.github.com/users/xpressengine/events{/privacy}","followers_url":"https://api.github.com/users/xpressengine/followers","following_url":"https://api.github.com/users/xpressengine/following{/other_user}","gists_url":"https://api.github.com/users/xpressengine/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/xpressengine","id":1429259,"login":"xpressengine","organizations_url":"https://api.github.com/users/xpressengine/orgs","received_events_url":"https://api.github.com/users/xpressengine/received_events","repos_url":"https://api.github.com/users/xpressengine/repos","site_admin":0,"starred_url":"https://api.github.com/users/xpressengine/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xpressengine/subscriptions","type":"Organization","url":"https://api.github.com/users/xpressengine"}},"body":"https://github.com/xpressengine/xe-core/issues/634\\r\\n\\r\\n# Internet Explorer send punycode URL(ASCII) URL and non-alphabet\\r\\nUnicode URL URL as a referer. 인터넷 익스플로러는 리퍼러 주소로 퓨니코드 주소와 유니코드 URL을 섞어\\r\\n쓰고 있습니다. AJAX 통신에는 리퍼러로 Unicode를 사용하고 요청 호스트로는 퓨니코드 URL을 사용(이건 다국어 주소\\r\\n형식으로 접속하려면 이렇게 했어야 할 것)합니다.\\r\\n- XE strictly compare referer and server host for denying CSRF, but\\r\\npunycode URL and Unicode URL should be dealt as a same one. 그런데 XE는 리퍼러의\\r\\n호스트와 서버 호스트를 비교합니다. punycode로 쓰인 주소와 Unicode로 쓰인 주소는 같은 주소를 지시하더라도 문자열이\\r\\n다릅니다. 같은 주소를 지칭하는 다른 문자열을 punycode로 변환해서 같은 주소라고 인식할 수 있게 수정했습니다.\\r\\n- Fix checkCSRF function to deal both form as a same one.\\r\\n- Convert Unicode URL input to punycode URL on the Admin Default URL\\r\\nSettings. 관리자가 유니코드 형식으로 기본 주소를 입력하더라도, 퓨니코드로 변환해 저장하도록 했습니다. 퓨니코드로 저장하는\\r\\n것이 여러모로 유용하기 때문입니다.\\r\\n- For converting punycode URL, include IDNA coverting class. 퓨니코드와 유니코드\\r\\n간 변환을 위해서 IDNA 변환 클래스(LGPL사용권)를 포함시켰습니다.\\r\\n\\r\\n**이 수정을 하면 *한글 도메인에서 글 작성이 가능*합니다. 하지만, *파일 업로드의 경우는 SWF Uploader 이슈로 파일 업로드가 불가능*합니다. 이 문제는, HTML5를 지원하는 파일 업로더를 이용하면 해결됩니다. (워드 프레스 등의 해결법) HTML5를 지원하는 파일 업로더는 AXISJ 업로더 등을 포함해서 XE 공식 홈페이지 자료실에서 다운받아 사용할 수 있습니다.(에디터 변경)**","changed_files":8,"comments":0,"comments_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120/comments","commits":1,"commits_url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/commits","created_at":"2015-01-01T01:47:43Z","deletions":1,"diff_url":"https://github.com/xpressengine/xe-core/pull/1120.diff","head":{"label":"misol:support_punycode_domain","ref":"support_punycode_domain","repo":{"archive_url":"https://api.github.com/repos/misol/xe-core/{archive_format}{/ref}","assignees_url":"https://api.github.com/repos/misol/xe-core/assignees{/user}","blobs_url":"https://api.github.com/repos/misol/xe-core/git/blobs{/sha}","branches_url":"https://api.github.com/repos/misol/xe-core/branches{/branch}","clone_url":"https://github.com/misol/xe-core.git","collaborators_url":"https://api.github.com/repos/misol/xe-core/collaborators{/collaborator}","comments_url":"https://api.github.com/repos/misol/xe-core/comments{/number}","commits_url":"https://api.github.com/repos/misol/xe-core/commits{/sha}","compare_url":"https://api.github.com/repos/misol/xe-core/compare/{base}...{head}","contents_url":"https://api.github.com/repos/misol/xe-core/contents/{+path}","contributors_url":"https://api.github.com/repos/misol/xe-core/contributors","created_at":"2014-12-31T14:41:05Z","default_branch":"master","description":"PHP Open Source CMS","downloads_url":"https://api.github.com/repos/misol/xe-core/downloads","events_url":"https://api.github.com/repos/misol/xe-core/events","fork":1,"forks":0,"forks_count":0,"forks_url":"https://api.github.com/repos/misol/xe-core/forks","full_name":"misol/xe-core","git_commits_url":"https://api.github.com/repos/misol/xe-core/git/commits{/sha}","git_refs_url":"https://api.github.com/repos/misol/xe-core/git/refs{/sha}","git_tags_url":"https://api.github.com/repos/misol/xe-core/git/tags{/sha}","git_url":"git://github.com/misol/xe-core.git","has_downloads":1,"has_issues":0,"has_pages":0,"has_wiki":1,"homepage":"http://www.xpressengine.com","hooks_url":"https://api.github.com/repos/misol/xe-core/hooks","html_url":"https://github.com/misol/xe-core","id":28667946,"issue_comment_url":"https://api.github.com/repos/misol/xe-core/issues/comments/{number}","issue_events_url":"https://api.github.com/repos/misol/xe-core/issues/events{/number}","issues_url":"https://api.github.com/repos/misol/xe-core/issues{/number}","keys_url":"https://api.github.com/repos/misol/xe-core/keys{/key_id}","labels_url":"https://api.github.com/repos/misol/xe-core/labels{/name}","language":"PHP","languages_url":"https://api.github.com/repos/misol/xe-core/languages","merges_url":"https://api.github.com/repos/misol/xe-core/merges","milestones_url":"https://api.github.com/repos/misol/xe-core/milestones{/number}","name":"xe-core","notifications_url":"https://api.github.com/repos/misol/xe-core/notifications{?since,all,participating}","open_issues":0,"open_issues_count":0,"owner":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"},"private":0,"pulls_url":"https://api.github.com/repos/misol/xe-core/pulls{/number}","pushed_at":"2015-01-01T01:36:28Z","releases_url":"https://api.github.com/repos/misol/xe-core/releases{/id}","size":90250,"ssh_url":"git@github.com:misol/xe-core.git","stargazers_count":0,"stargazers_url":"https://api.github.com/repos/misol/xe-core/stargazers","statuses_url":"https://api.github.com/repos/misol/xe-core/statuses/{sha}","subscribers_url":"https://api.github.com/repos/misol/xe-core/subscribers","subscription_url":"https://api.github.com/repos/misol/xe-core/subscription","svn_url":"https://github.com/misol/xe-core","tags_url":"https://api.github.com/repos/misol/xe-core/tags","teams_url":"https://api.github.com/repos/misol/xe-core/teams","trees_url":"https://api.github.com/repos/misol/xe-core/git/trees{/sha}","updated_at":"2014-12-31T14:41:10Z","url":"https://api.github.com/repos/misol/xe-core","watchers":0,"watchers_count":0},"sha":"d2b05732abfd85020335ce272abd37c0ad1c6654","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}},"html_url":"https://github.com/xpressengine/xe-core/pull/1120","id":26739793,"issue_url":"https://api.github.com/repos/xpressengine/xe-core/issues/1120","locked":0,"mergeable_state":"unknown","merged":0,"number":1120,"patch_url":"https://github.com/xpressengine/xe-core/pull/1120.patch","review_comment_url":"https://api.github.com/repos/xpressengine/xe-core/pulls/comments/{number}","review_comments":0,"review_comments_url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120/comments","state":"open","statuses_url":"https://api.github.com/repos/xpressengine/xe-core/statuses/d2b05732abfd85020335ce272abd37c0ad1c6654","title":"fix for Not-Alphabet URL document writing (#634)","updated_at":"2015-01-01T01:47:43Z","url":"https://api.github.com/repos/xpressengine/xe-core/pulls/1120","user":{"avatar_url":"https://avatars.githubusercontent.com/u/3437916?v=3","events_url":"https://api.github.com/users/misol/events{/privacy}","followers_url":"https://api.github.com/users/misol/followers","following_url":"https://api.github.com/users/misol/following{/other_user}","gists_url":"https://api.github.com/users/misol/gists{/gist_id}","gravatar_id":"","html_url":"https://github.com/misol","id":3437916,"login":"misol","organizations_url":"https://api.github.com/users/misol/orgs","received_events_url":"https://api.github.com/users/misol/received_events","repos_url":"https://api.github.com/users/misol/repos","site_admin":0,"starred_url":"https://api.github.com/users/misol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/misol/subscriptions","type":"User","url":"https://api.github.com/users/misol"}}},"public":1,"repo":{"id":7953576,"name":"xpressengine/xe-core","url":"https://api.github.com/repos/xpressengine/xe-core"},"type":"PullRequestEvent"} + +-- !sql -- +\N +\N +\N +\N +4748 + +-- !sql -- +135 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/mostForkedRepositories.out b/regression-test/data/variant_doc_snapshot_p2/sql/mostForkedRepositories.out new file mode 100644 index 00000000000000..f516dae12508d2 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/mostForkedRepositories.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !mostForkedRepositories -- +cssdream/cssgrace 5 +labenuexercicios/objetos-template 5 +lambda81/lambda-addons 5 +octocat/Spoon-Knife 5 +prakhar1989/awesome-courses 5 +udacity/frontend-nanodegree-resume 5 +TheOdinProject/css-exercises 3 +ahmadpanah/Music-instrument 3 +bitcoin/bitcoin 3 +detuks/LeagueSharp 3 +neutron-org/testnets 3 +ranerlich7/library_django 3 +twbs/bootstrap 3 +Araq/Nim 2 +BradLarson/GPUImage 2 +ColeTownsend/Balzac-for-Jekyll 2 +EvgeniiMal/HTML-builder 2 +GAWMiners/paycoin 2 +InjectionDev/LeagueSharp 2 +LarryMad/recipes 2 +Qihoo360/phptrace 2 +SublimeHaskell/SublimeHaskell 2 +TORC2137/2137-2014-roboRIO-Labview 2 +Vanna007/Free-RDP 2 +WhisperSystems/TextSecure 2 +Wynncraft/Issues 2 +adobe/brackets 2 +alexvollmer/daemon-spawn 2 +apache/spark 2 +appacademy/active_record_lite 2 +bundler/bundler 2 +clowwindy/ChinaDNS 2 +cocos2d/cocos2d-x 2 +constjs/SmartThings-Devices 2 +deadlyvipers/dojo_rules 2 +discourse/discourse 2 +django-nonrel/django 2 +django/django 2 +firstcontributions/first-contributions 2 +flarum/core 2 +informatika-19/latihan-backend-19421040-bagasdwijayanto 2 +jculvey/roboto 2 +jlord/patchwork 2 +joinpursuit/8-0-react-hooks-lab 2 +julycoding/The-Art-Of-Programming-By-July 2 +learn-co-curriculum/phase-1-practice-toy-tale 2 +lexrus/VPNOn 2 +mmistakes/so-simple-theme 2 +mrkipling/maraschino 2 +nightscout/cgm-remote-monitor 2 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.out b/regression-test/data/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.out new file mode 100644 index 00000000000000..a1a7da60a83429 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !mostPopularCommentsOnGithub -- +🧹 1 +😑 1 +👍 1 +???? 1 +확인 1 +코드가 변경되서 찾지 못하겠어요 1 +정확한 부분의 SQL Language 입니다. 1 +에러 유발한 값들을 같이 찍어주면 더 좋을 것 같네요. 1 +어떻게 issue owner 할당 하나요? 이 이슈를 저한테 할당하려고 합니다. 1 +생성자를 통해 chatButton등을 넘겨받는 것이 좋을 것 같습니다. 1 +매직넘버를 루프로 바꾸는 과정에서 실수로 안바꿔준 부분 같습니다 1 +넵 막 Collaborators로 등록했습니다. 이제 스스로 할당 하실 수 있습니다 :) 1 +권한 적용 완료 1 +非常感谢! 1 +選択肢がそれしかないのを強調するため 1 +跪求大侠们把这bug认领了吧。\r\n我就可以直接开始干SRS3.0了。 1 +越发觉得把按钮从顶栏抽出来非常合理\r\n不过还是算了,我也不会搞(ㅍ_ㅍ) 1 +谢谢您! 1 +请使用stable的版本。 1 +请不要使用中文路径 1 +说解决方案 1 +表示在win也存在这问题,ctrl+c不能复制调试文字。\r\nfixed 就好 1 +有具体的IP列表吗?fakeip没有自动更新的机制 1 +是 han.js 里测试特性的代码中的。 1 +改名 1 +我这边魔改了很多东西,就是同步完,清理仓库 1 +我也遇到这个问题,目前没找到原因。等发现解决了方法再告诉你啊。 1 +想重新焊接一个,我看8822cs支持不好,有没有其他可以支持的模块 1 +微信这么一变,挺伤的。还不知什么时候会正式放出接口。 1 +已经提交了一个 Pull Requests 1 +已经不再用seajs了,browserify的实时打包或许是个正确的选择。恍惚++ 1 +参考資料ありがとうございます。\n 1 +你说的难道不是过滤规则的功能吗? 1 +今年がもっと素敵な一年になりますように。 1 +乃\r\n 1 +メニューへ移動して嬉しそうな機能は全て移し終わりました。\r\n 1 +すごい量!\r\n 1 +これは、(多分)私の仕事ですね。 1 +おめでとうございます! :tada: 1 +مبروك أخي مجد 1 +إنشاء الله أخي مجد 1 +а линтер на что, это же ридми?\r\nЗаменил ссылки 1 +Спасибо. Удалил 1 +Сам нашёл, сам пофиксил - всё правильно. 1 +Готово 1 +you can see them in archery tweaks. this is something I added and committed separately. 1 +you can increase the timeout value to allow for the scripts to run `host.idleTimeOut = 10000` 1 +yey 1 +yes, that's definitely on purpose 1 +yes, look at this: https://github.com/niXman/mingw-builds/pull/628 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.out b/regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.out new file mode 100644 index 00000000000000..661a376e0304fd --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.out @@ -0,0 +1,9 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !organizationsByTheNumberOfRepositories -- +begriffs 1 +cachethq 1 +cssdream 1 +pathgather 1 +prakhar1989 1 +wasabeef 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.out b/regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.out new file mode 100644 index 00000000000000..1d8c3833bf998c --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !organizationsByTheNumberOfStars -- +wasabeef 44 +prakhar1989 32 +google 27 +h0x0er 24 +cachethq 17 +aplus-framework 16 +begriffs 13 +pathgather 13 +cssdream 12 +github 12 +microsoft 12 +netflix 12 +ymatuhin 11 +facebook 10 +gorhill 9 +h5bp 9 +kragniz 9 +qihoo360 9 +sindresorhus 9 +auchenberg 8 +cwrichardkim 8 +docker 8 +lexrus 8 +orangeduck 8 +papers-we-love 8 +projectdiscovery 8 +vinta 8 +atom 7 +dockerboard 7 +goagent 7 +kbandla 7 +nevin31 7 +ossu 7 +square 7 +substack 7 +zhihu 7 +alvarotrigo 6 +apache 6 +billlanyon 6 +inf0rmer 6 +isohuntto 6 +livid 6 +martinothamar 6 +public-apis 6 +rails 6 +spf13 6 +angular 5 +batteringram-dev 5 +cloudflare 5 +d235j 5 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.out b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.out new file mode 100644 index 00000000000000..a188bf2ba95b16 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !proportionsBetweenStarsAndForks1 -- +cssdream/cssgrace 5 12 2.4 +labenuexercicios/objetos-template 5 0 0.0 +lambda81/lambda-addons 5 0 0.0 +octocat/Spoon-Knife 5 0 0.0 +prakhar1989/awesome-courses 5 32 6.4 +udacity/frontend-nanodegree-resume 5 0 0.0 +TheOdinProject/css-exercises 3 1 0.333 +ahmadpanah/Music-instrument 3 1 0.333 +bitcoin/bitcoin 3 0 0.0 +detuks/LeagueSharp 3 0 0.0 +neutron-org/testnets 3 0 0.0 +ranerlich7/library_django 3 0 0.0 +twbs/bootstrap 3 4 1.333 +Araq/Nim 2 0 0.0 +BradLarson/GPUImage 2 2 1.0 +ColeTownsend/Balzac-for-Jekyll 2 0 0.0 +EvgeniiMal/HTML-builder 2 0 0.0 +GAWMiners/paycoin 2 2 1.0 +InjectionDev/LeagueSharp 2 0 0.0 +LarryMad/recipes 2 0 0.0 +Qihoo360/phptrace 2 8 4.0 +SublimeHaskell/SublimeHaskell 2 0 0.0 +TORC2137/2137-2014-roboRIO-Labview 2 0 0.0 +Vanna007/Free-RDP 2 0 0.0 +WhisperSystems/TextSecure 2 0 0.0 +Wynncraft/Issues 2 0 0.0 +adobe/brackets 2 0 0.0 +alexvollmer/daemon-spawn 2 0 0.0 +apache/spark 2 1 0.5 +appacademy/active_record_lite 2 0 0.0 +bundler/bundler 2 0 0.0 +clowwindy/ChinaDNS 2 0 0.0 +cocos2d/cocos2d-x 2 1 0.5 +constjs/SmartThings-Devices 2 0 0.0 +deadlyvipers/dojo_rules 2 0 0.0 +discourse/discourse 2 1 0.5 +django-nonrel/django 2 0 0.0 +django/django 2 1 0.5 +firstcontributions/first-contributions 2 0 0.0 +flarum/core 2 4 2.0 +informatika-19/latihan-backend-19421040-bagasdwijayanto 2 0 0.0 +jculvey/roboto 2 0 0.0 +jlord/patchwork 2 0 0.0 +joinpursuit/8-0-react-hooks-lab 2 0 0.0 +julycoding/The-Art-Of-Programming-By-July 2 1 0.5 +learn-co-curriculum/phase-1-practice-toy-tale 2 0 0.0 +lexrus/VPNOn 2 7 3.5 +mmistakes/so-simple-theme 2 0 0.0 +mrkipling/maraschino 2 0 0.0 +nightscout/cgm-remote-monitor 2 1 0.5 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.out b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.out new file mode 100644 index 00000000000000..75a95a6165e316 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.out @@ -0,0 +1,3 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !proportionsBetweenStarsAndForks2 -- + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.out b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.out new file mode 100644 index 00000000000000..6861250a12a5c1 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.out @@ -0,0 +1,5 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !proportionsBetweenStarsAndForks3 -- +cssdream/cssgrace 5 12 0.42 +prakhar1989/awesome-courses 5 32 0.16 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.out b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.out new file mode 100644 index 00000000000000..1d45fd3b9d46cb --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !proportionsBetweenStarsAndForks4 -- +1289 4021 3.12 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.out b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.out new file mode 100644 index 00000000000000..a0d029cf34a4c8 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !proportionsBetweenStarsAndForks5 -- +12 121 10.08 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.out new file mode 100644 index 00000000000000..7f81112ac7140b --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesByAmountOfModifiedCode -- +liraymond04/SocialFi 2 1 14022 8395 +OutOfSyncStudios/memory-cache 1 1 7258 7248 +ToniAnton22/Recipe-App 1 1 4434 9650 +Automattic/newspack-popups 1 1 8364 4205 +webmd-health-services/BuildMasterAutomation 1 1 6968 4646 +volcain-io/exercism.io 1 1 5797 5192 +Acidburn0zzz/foundation.mozilla.org 3 1 8671 1994 +lawhump/lawhump.github.io 1 1 1371 8813 +Dannnno/Quasar 1 1 8770 1255 +Macaulay2/M2 1 1 6311 3485 +skk-dev/ddskk 1 1 4751 4740 +CoderAllan/vscode-dgmlviewer 1 1 4727 4727 +cypress-io/cypress-documentation 1 1 4824 4584 +moneytree-doug/mt-d3 1 1 1510 7898 +SnowSE/project_aspen 1 1 6686 2494 +kubegems/kubegems 1 1 5365 3775 +novus/nvd3 1 1 985 7898 +T145/cubebots 1 1 2420 6340 +UmamiDAO/metrics-api 1 1 3853 3417 +kyungphill/practice_vue 1 1 4606 2663 +jinqshen/greatEffort 1 1 4433 2767 +lyft/clutch 1 1 3100 4031 +esparzou/site_tiledesign 1 1 4466 2663 +LeagueSharp/LeagueSharpCommon 1 1 3 7094 +metasoccer/TokenBondingCurve 1 1 6070 1017 +Mu-L/PaddleHub 1 1 2519 4554 +andrejv/wxmaxima 1 1 3541 3529 +ionos-cloud/module-ansible 1 1 4089 2962 +fishulla/Torque3D 2 1 3539 3409 +mikeyhodl/kubernetes 1 1 3893 2415 +moqimoqidea/Github-Ranking 1 1 4117 1956 +harrisonho99/react-native-windows-samples 2 1 4352 1564 +Shiker2032/chick-chirick 1 1 667 5157 +hto-projects/be-sound 1 1 3904 1598 +nf-core/tools 1 1 4189 1100 +Melon-Tropics/javascript-action 2 1 1764 3371 +lloydtao/readme-guestbook 2 1 1762 3354 +jdhanotaGU/CRAPS-Game 1 1 2244 2837 +dotiful/netlify-express-api 2 1 2087 2680 +templates-starter/OrchardCore 3 1 2942 1681 +mheap/action-router 1 1 1073 3193 +Torndeco/extdb 1 1 3481 697 +Trestolt/roll20-character-sheets 1 1 2838 1084 +coolsnowwolf/packages 1 1 2077 1836 +Toe-Tet/dmm-cdd 1 1 2582 1265 +maidsafe/MaidSafe-Drive 1 1 1540 2239 +ndelvalle/v-blur 2 1 2330 1146 +mhlabs/cfn-diagram 2 1 463 2894 +Creativice-Oy/graph-sentry 1 1 2584 747 +piwik/piwik 1 1 1979 1339 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.out new file mode 100644 index 00000000000000..a574b61a3df2c1 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesByTheNumberOfPushes -- +greatfire/wiki 48 1 +westurner/sphinxcontrib-srclinks 16 1 +josh/cafe-js 12 1 +miningforpotatoes/miningforpotatoes.github.io 9 1 +ogupte/trope 9 1 +VictiniX888/Illegal-Mod-Sites 8 1 +enfuse/pixled 7 1 +apache/spark 6 1 +cellier/cellier.github.io 6 1 +LemonPi/sal 5 1 +cleesmith/escalate 5 1 +odoo/odoo 5 1 +twbs/bootstrap 5 2 +bluejamesbond/TextJustify-Android 4 1 +chromium/chromium 4 1 +delner/pink_panther 4 1 +kragniz/json-sempai 4 1 +BackWoodsMod/BackWoods-Dev-Website 3 1 +IBM/pwa-lit-template 3 1 +ShouthostLLC/stripe-d 3 1 +TimmyO18/timmyobiso 3 1 +altipla-consulting/i18n-messages 3 1 +ariddell/lda 3 1 +ben-manes/caffeine 3 1 +bohoomil/fontconfig-ultimate 3 1 +cachethq/Cachet 3 2 +cubiclesoft/barebones-cms-shortcode-bb_syntaxhighlight 3 1 +joelpurra/jqnpm 3 1 +jonsterling/hs-abt 3 1 +lhorie/mithril.js 3 1 +nguyenhongson1902/lunar-lander-solver 3 1 +shurcooL/webgl 3 1 +HazyResearch/deepdive 2 1 +Homebrew/homebrew 2 2 +JetBrains/intellij-community 2 1 +Khan/perseus 2 1 +MatthewLymer/ScriptMigrations 2 1 +NodeBB/NodeBB 2 1 +Qmunity/QmunityLib 2 1 +StevenXL/learntoprogram 2 1 +ValcambiSuisseNFT/verify-info 2 1 +getlantern/lantern 2 1 +golang/go 2 1 +laurent22/joplin 2 1 +lhorie/mithril 2 1 +literallysame/Festivus-Mode 2 1 +mantarayforensics/mantaray 2 1 +rapid7/metasploit-framework 2 2 +ropensci/webservices 2 1 +rossdylan/eris 2 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.out new file mode 100644 index 00000000000000..46e1f359ae22de --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.out @@ -0,0 +1,15 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithClickhouse_related_comments1 -- +apache/spark 14 +TTMTT/iCL0udin 3 +blueboxgroup/ursula 3 +apache/arrow 1 +apache/cassandra-dtest 1 +apache/dolphinscheduler 1 +expressjs/compression 1 +fluo-io/fluo-dev 1 +icret/EasyImages2.0 1 +indiebox/ubos-admin 1 +kanaka/websockify 1 +rstudio/pins-r 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.out new file mode 100644 index 00000000000000..66e1d07e44826b --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.out @@ -0,0 +1,15 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithClickhouse_related_comments2 -- +apache/spark 1 14 +TTMTT/iCL0udin 0 3 +blueboxgroup/ursula 0 3 +apache/arrow 0 1 +apache/cassandra-dtest 0 1 +apache/dolphinscheduler 0 1 +expressjs/compression 0 1 +fluo-io/fluo-dev 0 1 +icret/EasyImages2.0 0 1 +indiebox/ubos-admin 0 1 +kanaka/websockify 0 1 +rstudio/pins-r 0 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.out new file mode 100644 index 00000000000000..7f4dbb909dad33 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.out @@ -0,0 +1,9 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithDoris_related_comments1 -- +apache/spark 22 +HabitRPG/habitrpg 1 +python/mypy 1 +rstudio/pins-r 1 +selfhub/selfhub 1 +tesseradata/docs-datadr 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.out new file mode 100644 index 00000000000000..c248e312e3234d --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.out @@ -0,0 +1,9 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithDoris_related_comments2 -- +apache/spark 1 22 +HabitRPG/habitrpg 0 1 +python/mypy 0 1 +rstudio/pins-r 0 1 +selfhub/selfhub 0 1 +tesseradata/docs-datadr 0 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.out new file mode 100644 index 00000000000000..d436dae02bd5dd --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.out @@ -0,0 +1,14 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheHighestGrowthYoY -- +avelino/awesome-go 3 1 3.0 2015-01-01T10:01:25 +torvalds/linux 2 1 2.0 2015-01-01T10:13:15 +esl/MongooseIM 1 1 1.0 2015-01-01T10:37:13 +gitlabhq/gitlabhq 1 1 1.0 2015-01-01T10:37:54 +haoel/leetcode 1 1 1.0 2015-01-01T10:34:53 +sindresorhus/awesome 1 2 0.5 2015-01-01T10:33:57 +github/gitignore 1 3 0.333 2015-01-01T10:25:26 +golang/go 1 3 0.333 2015-01-01T08:05:52 +h5bp/Front-end-Developer-Interview-Questions 2 6 0.333 2015-01-01T08:01:30 +leanote/leanote 1 4 0.25 2015-01-01T09:11:54 +prakhar1989/awesome-courses 1 31 0.032 2015-01-01T08:07 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.out new file mode 100644 index 00000000000000..9d395cfb85f0dd --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumAmountOfIssues1 -- +No-CQRT/GooGuns 44 1 +YGGDRASIL-STUDIO/Discouraged-Workers 16 1 +kcaa/kcaa 13 1 +pddemo/demo 11 1 +GHConnIT/system-test-repo-1667812266 10 1 +LeiDeMing/reading 9 1 +backdrop/backdrop-issues 7 3 +DsooRadha/CDMX013-md-links 6 1 +GunZi200/Memory-Colour 6 1 +antonioortegajr/beerfind.me 6 1 +christophercochran/Genesis-Visual-Hook-Guide 6 1 +starakaj/rnecklace 6 1 +GMOD/Apollo 5 1 +g19-mr/azh 5 1 +getparsec/getparsec 5 1 +huntermcmillian/huntermcmillian 5 1 +leo424y/heysiri.ml 5 1 +waltervr/mejengol 5 1 +ApexKO/issue-tracking 4 1 +Baystation12/Baystation12 4 1 +CTC-CompTech/delivery 4 2 +CrafterKina/ExperiencePower 4 1 +RPMTW/RPMTW-Platform-Mod 4 1 +Shyenaia/prework-study-guide 4 1 +cachethq/Cachet 4 3 +djbouche/glowing-bear 4 1 +hzinner/lab-agile-planning 4 1 +ligershark/side-waffle 4 1 +pvandervelde/cloud-jenkins 4 1 +seadog007/EasyCal 4 1 +BryanDeJesus/CSC-251-GroupProject 3 1 +EKGAPI/webAppEKGAPI 3 1 +GiuseppeFilingeri/upgraded-symmetrical-waddle 3 1 +Kindnesscove/kindnesscove 3 1 +MiYa-Solutions/sbcx 3 2 +NamNguyen911/first_app 3 1 +RahalYesser/Training-Management 3 1 +TechCavern/WaveTact 3 1 +TechnicPack/TechnicLauncher 3 3 +Wel-Alves/lab-agile-planning 3 1 +ac-engine/amusement-creators-engine 3 1 +asiekierka/MagnumOpus 3 1 +bikeindex/bike_index 3 1 +campaul/ph.sh 3 2 +captainkirkby/Gears 3 1 +darinmorrison/type-nats.rs 3 1 +endercrest/ColorCube 3 1 +glasklart/hd 3 1 +ivolunteerph/ivolunteerph 3 1 +kalamuna/kalastatic 3 2 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.out new file mode 100644 index 00000000000000..9bdf6536714856 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumAmountOfIssues2 -- +No-CQRT/GooGuns 44 1 0 +YGGDRASIL-STUDIO/Discouraged-Workers 16 1 0 +kcaa/kcaa 13 1 0 +pddemo/demo 11 1 0 +GHConnIT/system-test-repo-1667812266 10 1 0 +LeiDeMing/reading 9 1 0 +backdrop/backdrop-issues 7 3 0 +DsooRadha/CDMX013-md-links 6 1 0 +GunZi200/Memory-Colour 6 1 0 +antonioortegajr/beerfind.me 6 1 0 +christophercochran/Genesis-Visual-Hook-Guide 6 1 0 +starakaj/rnecklace 6 1 0 +GMOD/Apollo 5 1 0 +g19-mr/azh 5 1 0 +getparsec/getparsec 5 1 0 +huntermcmillian/huntermcmillian 5 1 0 +leo424y/heysiri.ml 5 1 0 +waltervr/mejengol 5 1 0 +ApexKO/issue-tracking 4 1 0 +Baystation12/Baystation12 4 1 0 +CTC-CompTech/delivery 4 2 0 +CrafterKina/ExperiencePower 4 1 0 +RPMTW/RPMTW-Platform-Mod 4 1 0 +Shyenaia/prework-study-guide 4 1 0 +cachethq/Cachet 4 3 17 +djbouche/glowing-bear 4 1 0 +hzinner/lab-agile-planning 4 1 0 +ligershark/side-waffle 4 1 1 +pvandervelde/cloud-jenkins 4 1 0 +seadog007/EasyCal 4 1 0 +BryanDeJesus/CSC-251-GroupProject 3 1 0 +EKGAPI/webAppEKGAPI 3 1 0 +GiuseppeFilingeri/upgraded-symmetrical-waddle 3 1 0 +Kindnesscove/kindnesscove 3 1 0 +MiYa-Solutions/sbcx 3 2 0 +NamNguyen911/first_app 3 1 0 +RahalYesser/Training-Management 3 1 0 +TechCavern/WaveTact 3 1 0 +TechnicPack/TechnicLauncher 3 3 0 +Wel-Alves/lab-agile-planning 3 1 0 +ac-engine/amusement-creators-engine 3 1 0 +asiekierka/MagnumOpus 3 1 0 +bikeindex/bike_index 3 1 0 +campaul/ph.sh 3 2 0 +captainkirkby/Gears 3 1 0 +darinmorrison/type-nats.rs 3 1 0 +endercrest/ColorCube 3 1 0 +glasklart/hd 3 1 0 +ivolunteerph/ivolunteerph 3 1 0 +kalamuna/kalastatic 3 2 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.out new file mode 100644 index 00000000000000..88c4f295960be4 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.out @@ -0,0 +1,9 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumAmountOfIssues3 -- +wasabeef/awesome-android-ui 0 0 35 +prakhar1989/awesome-courses 0 0 32 +Pathgather/please-wait 0 0 13 +cssdream/cssgrace 0 0 12 +begriffs/postgrest 1 1 12 +cachethq/Cachet 4 3 17 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.out new file mode 100644 index 00000000000000..805d935c55b5ea --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumAmountOfIssues4 -- +wasabeef/awesome-android-ui 0 0 35 +prakhar1989/awesome-courses 0 0 32 +Pathgather/please-wait 0 0 13 +cssdream/cssgrace 0 0 12 +Netflix/ice 0 0 9 +gorhill/uBlock 0 0 9 +kragniz/json-sempai 0 0 9 +wasabeef/awesome-android-libraries 0 0 9 +Qihoo360/phptrace 0 0 8 +auchenberg/chrome-devtools-app 0 0 8 +h5bp/Front-end-Developer-Interview-Questions 0 0 8 +papers-we-love/papers-we-love 0 0 8 +vinta/awesome-python 0 0 8 +goagent/goagent 0 0 7 +kbandla/APTnotes 0 0 7 +lexrus/VPNOn 0 0 7 +projectdiscovery/katana 0 0 7 +zhihu/kids 0 0 7 +alvarotrigo/fullPage.js 0 0 6 +dockerboard/dockerboard 0 0 6 +inf0rmer/blanket 0 0 6 +isohuntto/openbay 0 0 6 +livid/v2ex 0 0 6 +martinothamar/Mediator 0 0 6 +ossu/computer-science 0 0 6 +public-apis/public-apis 0 0 6 +rails/rails-perftest 0 0 6 +DovAmir/awesome-design-patterns 0 0 5 +Reactive-Extensions/RxJS 0 0 5 +d235j/360Controller 0 0 5 +fcambus/nginx-resources 0 0 5 +leanote/leanote 0 0 5 +lensterxyz/lenster 0 0 5 +nemoTyrant/manong 0 0 5 +Anchor89/GithubHub 0 0 4 +Byron/gitoxide 0 0 4 +FelisCatus/SwitchyOmega 0 0 4 +avelino/awesome-go 0 0 4 +flarum/core 0 0 4 +github/gitignore 0 0 4 +golang/go 0 0 4 +google/end-to-end 0 0 4 +greatfire/wiki 0 0 4 +imgix/imgix-emacs 0 0 4 +iojs/io.js 0 0 4 +josh/cafe-js 0 0 4 +neilj/Squire 0 0 4 +orangeduck/libCello 0 0 4 +spf13/hugo 0 0 4 +square/PonyDebugger 0 0 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.out new file mode 100644 index 00000000000000..a3eec38c1691bb --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumAmountOfPullRequests1 -- +0xMoJo7/Snapchain 1 1 +102/eslint-plugin-comment-annotations 1 1 +10sr/junks 1 1 +1367944498/rsshub 1 1 +18F/analytics-proxy-nodejs 1 1 +18F/openFEC 1 1 +23technologies/23ke-charts 1 1 +2yd/rsshub 1 1 +3m4q3m4q/repo1 1 1 +4GeeksAcademy/build-your-full-stack-developer-resume 1 1 +4i5/hello-world 1 1 +6shell/windows_exporter 1 1 +77-A/.net3 1 1 +7ackkkkk/rsshub 1 1 +7comp/android_frameworks_opt_telephony 1 1 +ABf1ag/learne 1 1 +ADCP1/airbnb-backend 1 1 +AKJAW/ApolloDataBuilders 1 1 +ATGardner/OSMExport 1 1 +AY2223S1-CS2103T-F12-2/tp 1 1 +AY2223S1-CS2103T-T11-2/tp 1 1 +AY2223S1-CS2103T-T12-1/tp 1 1 +AY2223S1-CS2103T-T17-1/tp 1 1 +AY2223S1-CS2103T-W15-4/tp 1 1 +AZhur771/TLP 1 1 +AbiaEssienRepos/auto-price-estimation-project 1 1 +AcalaNetwork/safe-config-service 1 1 +AdWerx/pronto-ruby 1 1 +AdamHidvegi/CurrencyC 1 1 +AdoptOpenJDK/openjdk-website 1 1 +Aerendir/bundle-aws-ses-monitor 1 1 +AhmadTanvir/vue_lara 1 1 +Airnow-test/aspnetcore 1 1 +Alan-love/language-server-protocol 1 1 +AlanYe-Dev/rsshub-vercel 1 1 +AlessioPrete/packagetest 1 1 +AletheiaOrg/Aletheia 1 1 +AlexLazareva/sarafan 1 1 +Alez05/tesla-interface-react-emotion-poc 1 1 +AlipayDocs/open-docs 1 1 +Alisa1106/vividus-starter-project 1 1 +Aliyamuskan/FirstRepo 1 1 +Alttaab/19.3-flask-survey-exercise 1 1 +Amiiiiiiiin/Escaping-Hell 1 1 +AndroidIDEOfficial/AndroidIDE 1 1 +AnhelinaZhurauleva/vividus-hometask2 1 1 +AnkitParte/astute-line-8992 1 1 +AnttiHal/express-harjoitus 1 1 +Apicurio/apicurio-registry 1 1 +Araq/Nim 1 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.out new file mode 100644 index 00000000000000..2f9adf408a59ae --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumAmountOfPullRequests2 -- +scalr-automation/terraform-scalr-flat-mirror5 13 7 +woowacourse-precourse/java-baseball 7 7 +scalr-automation/terraform-scalr-flat-mirror4 5 4 +google/it-cert-automation-practice 4 4 +neutron-org/testnets 4 4 +selfhub/selfhub 4 4 +WolseyBankWitness/rediffusion 8 3 +mhutchinson/mhutchinson-distributor 8 3 +CleverRaven/Cataclysm-DDA 4 3 +apache/spark 3 3 +rust-lang/rust 3 3 +tgstation/-tg-station 3 3 +cachethq/Cachet 4 2 +eclipse/birt 4 2 +Homebrew/homebrew-cask 3 2 +octokit/octokit.net 3 2 +openshift/sippy 3 2 +Bhargavhs/GitHubWorkShop 2 2 +EKGAPI/KardiaApp 2 2 +JorgeX/dojo_rules 2 2 +JuliaLang/METADATA.jl 2 2 +KSP-CKAN/NetKAN 2 2 +Merchello/Merchello 2 2 +PCSX2/pcsx2 2 2 +Strukturavaltas-03-Frontend-2022/csapatmunka---angular-webshop-01-3-underground 2 2 +TeamGabriel/gabriel 2 2 +WhisperSystems/TextSecure 2 2 +app-sre/qontract-reconcile 2 2 +azelezovs/auto-bootcamp-setup 2 2 +bioconda/bioconda-recipes 2 2 +cnrancher/dashboard 2 2 +coocoo08/LookSt 2 2 +docker/docs 2 2 +googleapis/gapic-generator-ruby 2 2 +myMarketPg/project-mymarket 2 2 +php/php-src 2 2 +quarkusio/quarkus-github-bot 2 2 +rspec/rspec-core 2 2 +slothbear/dojo_rules 2 2 +twitter/scalding 2 2 +frogsbreath-games/eucre 28 1 +Youssef1313/samples 21 1 +DataDog/opentelemetry-collector-contrib 17 1 +golden-warning/giraffedraft-server 15 1 +objectiser/opentelemetry-collector-contrib 13 1 +Sanne/testcontainers-java 10 1 +PCMDI/pcmdi_metrics 9 1 +outofcoffee/testcontainers-java 9 1 +pcwiese/opentelemetry-collector-contrib 9 1 +rmfitzpatrick/opentelemetry-collector-contrib 8 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.out new file mode 100644 index 00000000000000..a2f35081cd978d --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMaximumNumberOfAcceptedInvitations -- +loserskater/M8-GPE 1 2 +wasabeef/awesome-android-ui 0 35 +prakhar1989/awesome-courses 0 32 +cachethq/Cachet 0 17 +Pathgather/please-wait 0 13 +begriffs/postgrest 0 12 +cssdream/cssgrace 0 12 +Netflix/ice 0 9 +gorhill/uBlock 0 9 +kragniz/json-sempai 0 9 +wasabeef/awesome-android-libraries 0 9 +Qihoo360/phptrace 0 8 +auchenberg/chrome-devtools-app 0 8 +h5bp/Front-end-Developer-Interview-Questions 0 8 +papers-we-love/papers-we-love 0 8 +vinta/awesome-python 0 8 +goagent/goagent 0 7 +kbandla/APTnotes 0 7 +lexrus/VPNOn 0 7 +projectdiscovery/katana 0 7 +zhihu/kids 0 7 +alvarotrigo/fullPage.js 0 6 +dockerboard/dockerboard 0 6 +inf0rmer/blanket 0 6 +isohuntto/openbay 0 6 +livid/v2ex 0 6 +martinothamar/Mediator 0 6 +ossu/computer-science 0 6 +public-apis/public-apis 0 6 +rails/rails-perftest 0 6 +DovAmir/awesome-design-patterns 0 5 +Reactive-Extensions/RxJS 0 5 +d235j/360Controller 0 5 +fcambus/nginx-resources 0 5 +leanote/leanote 0 5 +lensterxyz/lenster 0 5 +mastodon/mastodon 0 5 +nemoTyrant/manong 0 5 +Anchor89/GithubHub 0 4 +Byron/gitoxide 0 4 +FelisCatus/SwitchyOmega 0 4 +atom/atom 0 4 +avelino/awesome-go 0 4 +docker/fig 0 4 +facebook/react 0 4 +flarum/core 0 4 +github/gitignore 0 4 +golang/go 0 4 +google/end-to-end 0 4 +greatfire/wiki 0 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.out new file mode 100644 index 00000000000000..cd6c3f13fd95fb --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMostPeopleWhoHavePushAccess1 -- +zzzgydi/clash-verge 0 1 +zzarcon/focusable 0 1 +zylmua/xiaomi 0 1 +zwaldowski/blockskit 0 1 +zurb/foundation 0 1 +zulfajuniadi/riverlevel 0 1 +zuiidea/antd-admin 0 1 +zuha/zuha 0 1 +zuffdaddy/dynalamp 0 1 +zorzalerrante/tsundoku 0 1 +zorro3/configargparse 0 1 +zoomhub/zoomhub 0 1 +zombodb/postgres-parser 0 1 +zokis/python--faster-way 0 1 +zlywilk/klipper4a 0 1 +zjunlp/openue 0 1 +ziyasal/node-procexss 0 1 +ziparchive/ziparchive 0 1 +zigeng/c_p 0 1 +zhoudaxiaa/vpn- 0 1 +zhongyang219/trafficmonitor 0 1 +zhenchen/experiment-for-secompax 0 1 +zhanymkanov/fastapi-best-practices 0 1 +zeromq/jeromq 0 1 +zentyal/zentyal 0 1 +zentific/vmidbg 0 1 +zendframework/zendskeletonapplication 0 1 +zenazn/goji 0 1 +zedapp/zed 0 1 +zdavatz/spreadsheet 0 1 +zcweng/togglebutton 0 1 +zasder3/train-clip 0 1 +zarel/pokemon-showdown-client 0 1 +zackkitzmiller/gofish 0 1 +zachwill/flask-engine 0 1 +zacharypatten/dotnet-console-games 0 1 +zacharydubois/s3-sync 0 1 +zacharydubois/ip-updater 0 1 +z411/trackma 0 1 +z-huang/innertune 0 1 +yyuu/pyenv-installer 0 1 +yxymit/dbx1000 0 1 +ywdarklord/go-example 0 1 +yushen0118/garment_generation 0 1 +yupenghe/methylpy 0 1 +yun-liu/rcf-pytorch 0 1 +yulife/wanderlust-reloaded 0 1 +yorikvanhavre/freecad-library 0 1 +yogiben/meteor-bootstrap 0 1 +yob/pdf-reader 0 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.out new file mode 100644 index 00000000000000..3f2bdf749f1e72 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMostStarsOverOneDay1 -- +wasabeef/awesome-android-ui 2015-01-01 35 +prakhar1989/awesome-courses 2015-01-01 31 +cachethq/Cachet 2015-01-01 17 +Pathgather/please-wait 2015-01-01 13 +begriffs/postgrest 2015-01-01 12 +cssdream/cssgrace 2015-01-01 12 +Netflix/ice 2015-01-01 9 +gorhill/uBlock 2015-01-01 9 +kragniz/json-sempai 2015-01-01 9 +wasabeef/awesome-android-libraries 2015-01-01 9 +Qihoo360/phptrace 2015-01-01 8 +auchenberg/chrome-devtools-app 2015-01-01 8 +papers-we-love/papers-we-love 2015-01-01 8 +vinta/awesome-python 2015-01-01 8 +goagent/goagent 2015-01-01 7 +kbandla/APTnotes 2015-01-01 7 +lexrus/VPNOn 2015-01-01 7 +projectdiscovery/katana 2022-11-08 7 +zhihu/kids 2015-01-01 7 +alvarotrigo/fullPage.js 2015-01-01 6 +dockerboard/dockerboard 2015-01-01 6 +h5bp/Front-end-Developer-Interview-Questions 2015-01-01 6 +inf0rmer/blanket 2015-01-01 6 +isohuntto/openbay 2015-01-01 6 +livid/v2ex 2015-01-01 6 +martinothamar/Mediator 2022-11-08 6 +ossu/computer-science 2022-11-08 6 +public-apis/public-apis 2022-11-08 6 +rails/rails-perftest 2015-01-01 6 +DovAmir/awesome-design-patterns 2022-11-08 5 +Reactive-Extensions/RxJS 2015-01-01 5 +d235j/360Controller 2015-01-01 5 +fcambus/nginx-resources 2015-01-01 5 +nemoTyrant/manong 2015-01-01 5 +Anchor89/GithubHub 2015-01-01 4 +FelisCatus/SwitchyOmega 2015-01-01 4 +atom/atom 2015-01-01 4 +docker/fig 2015-01-01 4 +facebook/react 2015-01-01 4 +flarum/core 2015-01-01 4 +google/end-to-end 2015-01-01 4 +greatfire/wiki 2015-01-01 4 +imgix/imgix-emacs 2015-01-01 4 +iojs/io.js 2015-01-01 4 +josh/cafe-js 2015-01-01 4 +leanote/leanote 2015-01-01 4 +neilj/Squire 2015-01-01 4 +orangeduck/libCello 2015-01-01 4 +spf13/hugo 2015-01-01 4 +square/PonyDebugger 2015-01-01 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.out new file mode 100644 index 00000000000000..4afc1de3f9ac46 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheMostSteadyGrowthOverTime -- +Pierian-Data/Complete-Python-3-Bootcamp 1 2 2.0 +avelino/awesome-go 2 4 2.0 +charmbracelet/vhs 1 2 2.0 +esl/MongooseIM 1 2 2.0 +gitlabhq/gitlabhq 1 2 2.0 +haoel/leetcode 1 2 2.0 +httpie/httpie 1 2 2.0 +laurent22/joplin 1 2 2.0 +starkscan/starkscan-verifier 1 2 2.0 +stashapp/stash 1 2 2.0 +lensterxyz/lenster 3 5 1.6666666666666667 +mastodon/mastodon 3 5 1.6666666666666667 +sindresorhus/awesome 2 3 1.5 +torvalds/linux 2 3 1.5 +trinib/Linux-Bash-Commands 2 3 1.5 +Byron/gitoxide 3 4 1.3333333333333333 +github/gitignore 3 4 1.3333333333333333 +golang/go 3 4 1.3333333333333333 +h5bp/Front-end-Developer-Interview-Questions 6 8 1.3333333333333333 +leanote/leanote 4 5 1.25 +prakhar1989/awesome-courses 31 32 1.032258064516129 +0fflinexd/Calculator 1 1 1.0 +0x192/universal-android-debloater 1 1 1.0 +0x4a6965/VitamioDemo 1 1 1.0 +0xabad1dea/Christmas-Card-2014 1 1 1.0 +18F/midas 1 1 1.0 +19128785540/rxrw-daily_morning 1 1 1.0 +1uphealth/fhir-react 1 1 1.0 +22century/bot-project 1 1 1.0 +2captcha/2captcha-go 1 1 1.0 +3dd13/sample-nw 1 1 1.0 +3m1o/nginx-rtmp-monitoring 1 1 1.0 +42wim/matterbridge 1 1 1.0 +47deg/labs-scala-play-mongo 1 1 1.0 +4lessandrodev/finance-project-ddd 1 1 1.0 +4u4v/ThinkPHP_Backend_System 1 1 1.0 +52inc/learn-ios 1 1 1.0 +6si/shipwright 1 1 1.0 +71104/lambda 1 1 1.0 +9inevolt/betterdgg 1 1 1.0 +AI-Guru/music-generation-research 1 1 1.0 +AUTOMATIC1111/stable-diffusion-webui 1 1 1.0 +AVGP/terminal.js 1 1 1.0 +AbdelrhmanHamouda/locust-k8s-operator 1 1 1.0 +Abecarne/Epitech 1 1 1.0 +Ableton/LinkKit 1 1 1.0 +Activiti/Activiti 1 1 1.0 +AdamNowotny/BuildReactor 1 1 1.0 +AdguardTeam/AdGuardHome 1 1 1.0 +AgentMaker/Paddle-CLIP 1 1 1.0 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.out new file mode 100644 index 00000000000000..eaa089dd02d407 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.out @@ -0,0 +1,9 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoriesWithTheWorstStagnation_order -- +github/gitignore 1 3 0.333 2015-01-01T10:25:26 +golang/go 1 3 0.333 2015-01-01T08:05:52 +h5bp/Front-end-Developer-Interview-Questions 2 6 0.333 2015-01-01T08:01:30 +leanote/leanote 1 4 0.25 2015-01-01T09:11:54 +prakhar1989/awesome-courses 1 31 0.032 2015-01-01T08:07 +sindresorhus/awesome 1 2 0.5 2015-01-01T10:33:57 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList1.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList1.out new file mode 100644 index 00000000000000..bd05ae6ab5cb77 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList1.out @@ -0,0 +1,52 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoryAffinityList1 -- +prakhar1989/awesome-courses 32 +wasabeef/awesome-android-ui 8 +vinta/awesome-python 3 +wasabeef/awesome-android-libraries 3 +fcambus/nginx-resources 2 +papers-we-love/papers-we-love 2 +Activiti/Activiti 1 +Cydrobolt/polr 1 +Developer-Y/cs-video-courses 1 +FortAwesome/Font-Awesome 1 +Netflix/ice 1 +PHPMailer/PHPMailer 1 +Semantic-Org/Semantic-UI 1 +StevenSLXie/Tutorials-for-Web-Developers 1 +alphagov/government-service-design-manual 1 +alvarotrigo/fullPage.js 1 +angular/angular.js 1 +apache/spark 1 +ben-manes/caffeine 1 +benplummer/calendarful 1 +cachethq/Cachet 1 +deshack/pure-less 1 +digitalnature/php-highlight 1 +digitalnature/php-ref 1 +dingo/api 1 +dkhamsing/ios-asset-names 1 +drrb/java-rust-example 1 +flarum/core 1 +foreverjs/forever 1 +gdi2290/angular-websocket 1 +github/gitignore 1 +google/google-api-php-client 1 +gorhill/uBlock 1 +gulpjs/gulp 1 +guzzle/guzzle 1 +iojs/io.js 1 +isohuntto/openbay 1 +iverberk/larasearch 1 +jenssegers/laravel-agent 1 +jenssegers/laravel-mongodb 1 +jsvd/cv 1 +pgmodeler/pgmodeler 1 +serbanghita/Mobile-Detect 1 +thephpleague/csv 1 +thephpleague/flysystem 1 +torvalds/linux 1 +twbs/bootstrap 1 +vhf/free-programming-books 1 +zurb/foundation 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList2.out b/regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList2.out new file mode 100644 index 00000000000000..67482925cf8a88 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/repositoryAffinityList2.out @@ -0,0 +1,9 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !repositoryAffinityList2 -- +Pathgather/please-wait 13 0.08 +begriffs/postgrest 12 0.08 +cssdream/cssgrace 12 0.08 +cachethq/Cachet 16 0.06 +prakhar1989/awesome-courses 32 0.03 +wasabeef/awesome-android-ui 35 0.03 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.out b/regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.out new file mode 100644 index 00000000000000..bbe5da89e0f05c --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.out @@ -0,0 +1,31 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !starsFromHeavyGithubUsers1 -- +Automattic/pocket-casts-android 1 +BYVoid/Batsh 1 +Crzyrndm/FilterExtension 1 +JeffreyWay/Laravel-Model-Validation 1 +MegaBits/SIOSocket 1 +Microsoft/dotnet 1 +Qihoo360/phptrace 1 +SFTtech/openage 1 +arturadib/shelljs 1 +cakephp/cakepackages 1 +cakephp/cakephp-codesniffer 1 +cakephp/csfnavbar 1 +chef-workflow/chef-workflow-example 1 +d235j/360Controller 1 +enaqx/awesome-react 1 +hamstergene/pathmatch 1 +jackc/pgx 1 +jesyspa/book 1 +jonsterling/intersection-types-primer 1 +josegonzalez/cakephp-datatable 1 +lorenzo/slugger 1 +msabramo/setuptools-markdown 1 +nvd3-community/nvd3 1 +opscode/chef 1 +rackt/react-router 1 +serialhex/nano-highlight 1 +sindresorhus/jshint-stylish 1 +xenith-studios/ataxia 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.out b/regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.out new file mode 100644 index 00000000000000..ea9bfe0165297e --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.out @@ -0,0 +1,10 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !starsFromHeavyGithubUsers2 -- +MegaBits/SIOSocket 1 +Qihoo360/phptrace 1 +chef-workflow/chef-workflow-example 1 +jackc/pgx 1 +nvd3-community/nvd3 1 +opscode/chef 1 +xenith-studios/ataxia 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.out b/regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.out new file mode 100644 index 00000000000000..026117bde52966 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theLongestRepositoryNames1 -- +1 the-aws-terraform-samples/terraform-route-53-application-recovery-controller-codepipeline-with-terraform +1 Ayusha-Bhola/-Kisaan-Sahayak-Intelligent-Farmers-e-Marketplace-with-prediction-of-crop-risk-factors. +1 danielPoloWork/EURIS-academy2022-meterial-solidPrinciplesAndDesignPatterns +1 ShadmanShariar/CRUD_Operation_On_Firebase_Database_Using_JavaScript +1 lakshay-arora/Densenet121-Image-Classification-Deployed-using-Flask +1 ArthurZC23/Machine-Learning-A-Probabilistic-Perspective-Solutions +1 deepaktiwari88/HR-Management-and-Geo-Attendance-System-Admin-App +1 HariharanGopinath/Generate-Music-using-a-LSTM-Neural-Network +1 jpsarda/Pixel-based-destructible-ground-with-Cocos2d-iPhone +1 sudharsan13296/Hands-On-Reinforcement-Learning-With-Python +1 SN-RECIT-formation-a-distance/moodle-local_recitdashboard +1 cubiclesoft/barebones-cms-shortcode-bb_syntaxhighlight +1 xilinxfairchild/FPGABasedHighPerformanceTargetChecking +1 NerijusBartosevicius/laravel-insert-update-delete-ids +1 electron-react-boilerplate/electron-react-boilerplate +2 AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +1 Lysergic-Acid/android_device_samsung_galaxys2-common +1 MicrosoftLearning/AZ-104-MicrosoftAzureAdministrator +1 mikeycal/the-video-editors-render-script-for-blender +1 Nevin31/Classification-of-Wisconson-Cancer-Dataset +1 centralnicgroup-opensource/rtldev-middleware-whmcs +1 AmdjedSanero/CodePostal-58-Wilaya-Algerie-With-JS +2 EnterpriseQualityCoding/FizzBuzzEnterpriseEdition +1 SamyPesse/How-to-Make-a-Computer-Operating-System +1 godot-extended-libraries/godot-antialiased-line2d +1 ArnaudBarre/vite-plugin-react-click-to-component +1 Siegener-Anime-und-Manga-Treff-SAMT/SAMT-Website +1 the-aws-terraform-samples/terraform-eks-jumphost +1 RajneeshSingh007/College-Management-Android-App +1 akoskm/vite-react-tailwindcss-browser-extension +1 batteringram-dev/Data-Structures-and-Algorithms +2 billlanyon/js-therapist-react-node-mongo-docker +1 google-github-actions/get-secretmanager-secrets +1 python-semantic-release/python-semantic-release +1 Juan-Carlos-Estevez-Vargas/Estevez-Corporation +1 Learn-Dev/Learn-Dev-Theme---Dashboard-partie-1 +1 rafaelsilverioit/twitter-django-rest-framework +1 webacademyufac/programacao-avancada-backend-t2 +1 BlueRaja/Weighted-Item-Randomizer-for-C-Sharp +1 GoogleCloudPlatform/compute-video-demo-puppet +1 conal/talk-2014-lambdajam-denotational-design +1 elasticsearch/elasticsearch-analysis-kuromoji +1 miningforpotatoes/miningforpotatoes.github.io +1 singwhatiwanna/PinnedHeaderExpandableListView +1 Ebazhanov/linkedin-skill-assessments-quizzes +1 PacktPublishing/ASP.NET-Core-5-for-Beginners +1 Schweinepriester/github-profile-achievements +1 abhisheknaiidu/awesome-github-profile-readme +1 adrianhajdin/project_modern_ui_ux_restaurant +1 billlanyon/js-reform-beauty-node-express-poc + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.out b/regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.out new file mode 100644 index 00000000000000..36e3e58aafa2c5 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theLongestRepositoryNames2 -- +ent/ent 1 +h2o/h2o 1 +jsvd/cv 1 +jsx/JSX 1 +lxc/lxc 1 +lxc/lxd 1 +antfu/ni 1 +gburd/pt 1 +gwoo/hap 1 +hmml/ev3 1 +pkg/sftp 1 +svg/svgo 2 +yui/yui3 2 +18F/midas 1 +Erol/yomu 1 +aasm/aasm 1 +akka/akka 2 +appc/spec 1 +atom/atom 4 +dingo/api 1 +dlwh/puck 1 +fuel/fuel 1 +gazay/gon 1 +glfw/glfw 1 +golang/go 4 +harelba/q 1 +iauns/cpm 1 +iron/iron 1 +ix/kyr.li 1 +jackc/pgx 1 +jlnr/gosu 1 +koajs/koa 1 +koush/ion 1 +kr/pretty 1 +lg/murder 1 +lvgl/lvgl 1 +norx/NORX 1 +odoo/odoo 1 +ossu/math 1 +peco/peco 1 +phan/phan 1 +prql/prql 1 +pyjs/pyjs 1 +rack/rack 2 +tux3/qTox 1 +unjs/ungh 1 +vuejs/vue 1 +zuha/Zuha 1 +BVLC/caffe 1 +DomKM/silk 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.out b/regression-test/data/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.out new file mode 100644 index 00000000000000..6e6f3e7c1308fc --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theMostToughCodeReviews -- +https://github.com/d3athrow/vgstation13/pull/ 4 +https://github.com/CleverRaven/Cataclysm-DDA/pull/ 3 +https://github.com/apache/spark/pull/ 3 +https://github.com/dotnet/runtime/pull/ 3 +https://github.com/facebookincubator/velox/pull/ 3 +https://github.com/kubernetes/kubernetes/pull/ 3 +https://github.com/rust-lang/rfcs/pull/ 3 +https://github.com/sass/libsass/pull/ 3 +https://github.com/selfhub/selfhub/pull/ 3 +https://github.com/tgstation/-tg-station/pull/ 3 +https://github.com/AndreasMadsen/steer-screenshot/pull/ 2 +https://github.com/CienProject2014/OneLevelHero/pull/ 2 +https://github.com/JuliaLang/julia/pull/ 2 +https://github.com/OpenRA/OpenRA/pull/ 2 +https://github.com/RuddockHouse/RuddockWebsite/pull/ 2 +https://github.com/SirCmpwn/ChatSharp/pull/ 2 +https://github.com/YaleSTC/reservations/pull/ 2 +https://github.com/ankidroid/Anki-Android/pull/ 2 +https://github.com/apache/airflow/pull/ 2 +https://github.com/buildbot/buildbot-infra/pull/ 2 +https://github.com/cachethq/Cachet/pull/ 2 +https://github.com/carymrobbins/intellij-haskforce/pull/ 2 +https://github.com/coreycondardo/30-Day-Rule/pull/ 2 +https://github.com/docker-library/docs/pull/ 2 +https://github.com/elastic/kibana/pull/ 2 +https://github.com/grafana/grafana/pull/ 2 +https://github.com/hashintel/hash/pull/ 2 +https://github.com/home-assistant/core/pull/ 2 +https://github.com/mongodb-js/compass/pull/ 2 +https://github.com/mupen64plus/mupen64plus-video-glide64mk2/pull/ 2 +https://github.com/napari/napari/pull/ 2 +https://github.com/odoo/odoo/pull/ 2 +https://github.com/percona/pmm/pull/ 2 +https://github.com/risingwavelabs/risingwave/pull/ 2 +https://github.com/rspec/rspec-core/pull/ 2 +https://github.com/rspec/rspec-rails/pull/ 2 +https://github.com/sebastianbergmann/phpunit/pull/ 2 +https://github.com/sourcegraph/sourcegraph/pull/ 2 +https://github.com/sourcegraph/srclib/pull/ 2 +https://github.com/square/okhttp/pull/ 2 +https://github.com/substack/tape/pull/ 2 +https://github.com/tsuru/tsuru/pull/ 2 +https://github.com/venmo/synx/pull/ 2 +https://github.com/01-edu/public/pull/ 1 +https://github.com/42AGV/ft_transcendence/pull/ 1 +https://github.com/ADCP1/airbnb-backend/pull/ 1 +https://github.com/AMReX-Combustion/PelePhysics/pull/ 1 +https://github.com/AbsaOSS/spline/pull/ 1 +https://github.com/ActiveState/cli/pull/ 1 +https://github.com/Adyen/adyen-dotnet-api-library/pull/ 1 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.out b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.out new file mode 100644 index 00000000000000..5b3c27542e4cd7 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theTotalNumberOfRepositoriesOnGithub -- +31481 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.out b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.out new file mode 100644 index 00000000000000..9fc95405027a14 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theTotalNumberOfUsersOnGithub1 -- +26724 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.out b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.out new file mode 100644 index 00000000000000..37b63bc00b80e5 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theTotalNumberOfUsersOnGithub2 -- +2763 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.out b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.out new file mode 100644 index 00000000000000..f3b520f20bfb42 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theTotalNumberOfUsersOnGithub3 -- +16510 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.out b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.out new file mode 100644 index 00000000000000..11f9d28e41d862 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !theTotalNumberOfUsersOnGithub4 -- +1309 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/topRepositoriesByStars.out b/regression-test/data/variant_doc_snapshot_p2/sql/topRepositoriesByStars.out new file mode 100644 index 00000000000000..47450b19e5af7c --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/topRepositoriesByStars.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !topRepositoriesByStars -- +wasabeef/awesome-android-ui 35 +prakhar1989/awesome-courses 32 +cachethq/Cachet 17 +Pathgather/please-wait 13 +begriffs/postgrest 12 +cssdream/cssgrace 12 +Netflix/ice 9 +gorhill/uBlock 9 +kragniz/json-sempai 9 +wasabeef/awesome-android-libraries 9 +Qihoo360/phptrace 8 +auchenberg/chrome-devtools-app 8 +h5bp/Front-end-Developer-Interview-Questions 8 +papers-we-love/papers-we-love 8 +vinta/awesome-python 8 +goagent/goagent 7 +kbandla/APTnotes 7 +lexrus/VPNOn 7 +projectdiscovery/katana 7 +zhihu/kids 7 +alvarotrigo/fullPage.js 6 +dockerboard/dockerboard 6 +inf0rmer/blanket 6 +isohuntto/openbay 6 +livid/v2ex 6 +martinothamar/Mediator 6 +ossu/computer-science 6 +public-apis/public-apis 6 +rails/rails-perftest 6 +DovAmir/awesome-design-patterns 5 +Reactive-Extensions/RxJS 5 +d235j/360Controller 5 +fcambus/nginx-resources 5 +leanote/leanote 5 +lensterxyz/lenster 5 +mastodon/mastodon 5 +nemoTyrant/manong 5 +Anchor89/GithubHub 4 +Byron/gitoxide 4 +FelisCatus/SwitchyOmega 4 +atom/atom 4 +avelino/awesome-go 4 +docker/fig 4 +facebook/react 4 +flarum/core 4 +github/gitignore 4 +golang/go 4 +google/end-to-end 4 +greatfire/wiki 4 +imgix/imgix-emacs 4 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.out b/regression-test/data/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.out new file mode 100644 index 00000000000000..bc6d2c790e8c34 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !whatIsTheBestDayOfTheWeekToCatchAStar -- +2 366 +3 930 +5 2725 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.out b/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.out new file mode 100644 index 00000000000000..ceb681760b901a --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.out @@ -0,0 +1,53 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !whoAreAllThosePeopleGivingStars1 -- +daweedkob 94 +cliffordfajardo 39 +iloveyuedu 27 +GameCracker 24 +cdleon 24 +whatcool 24 +lootnath 21 +mmestrovic 21 +EyuCoder 19 +raygerrard 16 +miketahani 15 +45H 12 +kazaky 12 +Malerator 11 +zwm5000 10 +cceasy 9 +gotlium 9 +kevindhawkins 9 +Godoctors 8 +jacsonLee 8 +jerson 8 +Github5201314 7 +Nuvini 7 +abhijit1990 7 +bchoomnuan 7 +fengdou902 7 +jameswfoster 7 +lmumar 7 +takuan-osho 7 +zx48 7 +DanielRuf 6 +IssamElbaytam 6 +Jerzerak 6 +ShovelCode 6 +aculich 6 +billlanyon 6 +co-sh 6 +darkpixel 6 +ivan4th 6 +railsjedi 6 +stonelasley 6 +x140yu 6 +DavidAlphaFox 5 +IanLuo 5 +JosephCastro 5 +MedG1 5 +Mrkavindu 5 +Narno 5 +andtxr 5 +athosss23 5 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.out b/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.out new file mode 100644 index 00000000000000..cf1765406f4689 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.out @@ -0,0 +1,4 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !whoAreAllThosePeopleGivingStars2 -- +cliffordfajardo 39 + diff --git a/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.out b/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.out new file mode 100644 index 00000000000000..5c7968ad126c88 --- /dev/null +++ b/regression-test/data/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.out @@ -0,0 +1,41 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !whoAreAllThosePeopleGivingStars3 -- +htmlpreview/htmlpreview.github.com 2 +KuiKui/Octosplit 1 +Nuclides/github-highlight-selected 1 +RReverser/github-editorconfig 1 +Yatser/prettypullrequests 1 +adamburmister/gitprint.com 1 +alexcpendleton/GithubForkConfirmation 1 +anasnakawa/chrome-github-avatars 1 +batmanimal/object-oriented-js 1 +benbernard/CommentTracker 1 +buunguyen/octotree 1 +buunguyen/topbar 1 +camsong/chrome-github-mate 1 +chancancode/blame_parent 1 +cisox/github-approve-deny 1 +dlo/github-issue-filter-chrome-extension 1 +evilbuck/pr-sanity 1 +jasonlong/isometric-contributions 1 +jcouyang/gira 1 +johan/github-improved 1 +lxe/require-navigator 1 +mebjas/github-report 1 +mebjas/movie-name-extractor 1 +mesuutt/github-annotator 1 +mikedougherty/chrome-commit-status 1 +msolomon/github-submodule-links 1 +petebacondarwin/github-pr-helper 1 +rudids/js_sequence_extension 1 +sindresorhus/github-hide-files 1 +sindresorhus/github-issues-all 1 +sindresorhus/github-tab-size 1 +sirkitree/github-issue-utils 1 +skidding/github-issue-template 1 +sqren/github-widescreen 1 +summerblue/github-toc 1 +thieman/github-selfies 1 +typpo/codenav 1 +vieux/github-lgtm 1 + diff --git a/regression-test/data/variant_p0/desc.out b/regression-test/data/variant_p0/desc.out index 9a3be9de83330d..418708a7af8360 100644 --- a/regression-test/data/variant_p0/desc.out +++ b/regression-test/data/variant_p0/desc.out @@ -1,19 +1,19 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.ddd.mxmxm array Yes false \N NONE -- !sql_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -22,7 +22,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -34,7 +34,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -43,7 +43,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -51,7 +51,7 @@ v.c.e double Yes false \N NONE -- !sql_6 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -63,7 +63,7 @@ v.xxxx text Yes false \N NONE -- !sql_7 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -72,13 +72,13 @@ v.xxxx text Yes false \N NONE -- !sql_7_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_7_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -86,7 +86,7 @@ v.c.e double Yes false \N NONE -- !sql_7_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -95,9 +95,9 @@ v.xxxx text Yes false \N NONE -- !sql_8 -- k bigint Yes true \N -v1 variant Yes false \N NONE -v2 variant Yes false \N NONE -v3 variant Yes false \N NONE +v1 variant Yes false \N NONE +v2 variant Yes false \N NONE +v3 variant Yes false \N NONE v1.a smallint Yes false \N NONE v1.b json Yes false \N NONE v1.c.c smallint Yes false \N NONE @@ -112,11 +112,11 @@ v3.c.e double Yes false \N NONE -- !sql_9 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql_9_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -125,7 +125,7 @@ v.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.k1 tinyint Yes false \N NONE v.k2 text Yes false \N NONE v.k3 array Yes false \N NONE @@ -134,8 +134,8 @@ v.k5 json Yes false \N NONE -- !sql_10_1 -- k bigint Yes true \N -v variant Yes false \N NONE -v2 variant Yes false \N NONE +v variant Yes false \N NONE +v2 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -154,7 +154,7 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -173,8 +173,8 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_3 -- k bigint Yes true \N -v variant Yes false \N NONE -v3 variant Yes false \N NONE +v variant Yes false \N NONE +v3 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -193,7 +193,7 @@ v3.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_11 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.!@#^&*() text Yes false \N NONE v.名字 text Yes false \N NONE v.画像.丬文 text Yes false \N NONE @@ -202,11 +202,11 @@ v.金额 smallint Yes false \N NONE -- !sql_12 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql15 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a tinyint Yes false \N NONE v.b tinyint Yes false \N NONE v.c tinyint Yes false \N NONE diff --git a/regression-test/data/variant_p0/doc_snapshot/agg.out b/regression-test/data/variant_p0/doc_snapshot/agg.out new file mode 100644 index 00000000000000..3b62eec4630a0a --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/agg.out @@ -0,0 +1,78 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql1 -- + +-- !sql2 -- +1 \N {"c":[{"a":1}]} +1022 \N {"f":17034,"g":1.111} +1029 \N {"c":1} +1999 \N {"c":1} + +-- !sql3 -- +1 {"a":1,"b":{"c":[{"a":1}]}} +2 [2] +3 3 +4 "4" +5 5 + +-- !sql4 -- +{"c":[{"a":1}]} [{"a":1}] \N +{"f":17034,"g":1.111} \N \N +{"c":1} 1 \N +{"c":1} 1 \N + +-- !sql5 -- + +-- !sql6 -- +{"c":[{"a":1}]} +{"f":17034,"g":1.111} +{"c":1} +{"c":1} + +-- !sql7 -- +1 {"a":1,"b":{"c":[{"a":1}]}} 59 +1022 {"a":1,"b":{"f":17034,"g":1.111}} 12 +1029 {"a":1,"b":{"c":1}} 12 +1999 {"a":1,"b":{"c":1}} 11 + +-- !sql8 -- +1 {"a":1,"b":{"c":[{"a":1}]}} 59 +2 [2] 2 +3 3 3 +4 "4" 4 +5 5 5 +6 "[6]" 6 +7 7 7 +8 8.11111 8 +9 "9999" 9 +10 1000000 10 +11 [123] 11 +12 [123.2] 12 +1022 {"a":1,"b":{"f":17034,"g":1.111}} 12 +1029 {"a":1,"b":{"c":1}} 12 +1999 {"a":1,"b":{"c":1}} 11 +19921 {"a":1,"d":10} 11 + +-- !sql9 -- +0 {"a":11245,"f":["123456"]} +1 {"a":11245,"f":["123456"]} +2 {"a":11245,"f":["123456"]} +3 {"a":11245,"f":["123456"]} +4 {"a":11245,"f":["123456"]} +5 {"a":11245,"f":["123456"]} +6 {"a":11245,"f":["123456"]} +7 {"a":11245,"f":["123456"]} +8 {"a":11245,"f":["123456"]} +9 {"a":11245,"f":["123456"]} + +-- !sql9 -- +1025 {"a":11245,"y":11111111} +1026 {"a":11245,"y":11111111} +1027 {"a":11245,"y":11111111} +1028 {"a":11245,"y":11111111} +1029 {"a":11245,"y":11111111} +1030 {"a":11245,"y":11111111} +1031 {"a":11245,"y":11111111} +1032 {"a":11245,"y":11111111} +1033 {"a":11245,"y":11111111} +1034 {"a":11245,"y":11111111} + diff --git a/regression-test/data/variant_p0/doc_snapshot/delete.json b/regression-test/data/variant_p0/doc_snapshot/delete.json new file mode 100644 index 00000000000000..a40687b133563d --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/delete.json @@ -0,0 +1 @@ +{"k" : 1, "__DORIS_DELETE_SIGN__": 1} diff --git a/regression-test/data/variant_p0/doc_snapshot/delete_update.out b/regression-test/data/variant_p0/doc_snapshot/delete_update.out new file mode 100644 index 00000000000000..9174546798c2ec --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/delete_update.out @@ -0,0 +1,29 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +2 {"updated_value":123} +3 {"a":3,"b":[3],"c":3,"d":[{"o":1}]} +4 {"a":4,"b":[4],"c":4,"d":[{"p":1}]} +5 {"a":5,"b":[5],"c":5,"d":[{"q":1}]} + +-- !sql -- +2 {"updated_value":123} +3 {"a":3,"b":[3],"c":3,"d":[{"o":1}]} +4 {"updated_nested_value":[{"ommm":"123"}]} +5 {"a":5,"b":[5],"c":5,"d":[{"q":1}]} + +-- !sql -- +2 {"updated_nested_value":[{"lalalal":1.111}]} {"updated_value":123} +6 {"a":4,"b":[4],"c":4.1} {"updated_value" : 123} +7 {"updated_value":1111} yyy + +-- !sql -- +2 {"updated_nested_value":[{"lalalal":1.111}]} {"updated_value":123} +6 {"a":4,"b":[4],"c":4.1} {"updated_value" : 123} + +-- !sql -- +1 "ddddddddddd" 1111 199 10 {"new_data1":1} +2 "eeeeee" 2222 299 20 {"new_data2":2} +3 "aaaaa" 3333 399 30 {"new_data3":3} +4 "bbbbbbbb" 4444 499 40 {"new_data4":4} +5 "cccccccccccc" 5555 599 50 {"new_data5":5} + diff --git a/regression-test/data/variant_p0/doc_snapshot/load.out b/regression-test/data/variant_p0/doc_snapshot/load.out new file mode 100644 index 00000000000000..2482619ab39753 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/load.out @@ -0,0 +1,341 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql1 -- +1 [1, 2, 1] +1 [1] +1 [1] +1 [null] + +-- !sql2 -- +1 {"c":1} +1 {"c":[{"a":1}]} +1 {"c":[{"a":1}]} +1 {"c":[{"a":1}]} +1029 {"c":1} +1999 {"c":1} + +-- !sql3 -- +1 [1] +1 {"a":"1223"} +1 {"a":1,"b":{"c":1}} +1 {"a":1,"b":{"c":[{"a":1}]}} +1 {"a":1,"b":{"c":[{"a":1}]}} + +-- !sql4 -- +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N + +-- !sql5 -- +10 +10 + +-- !sql6 -- +{"c":1} +{"c":[{"a":1}]} +{"c":[{"a":1}]} +{"c":[{"a":1}]} +10 +{"c":1} +{"c":1} +10 + +-- !sql1 -- + +-- !sql2 -- +1 {"c":[{"a":1}]} +1029 {"c":1} +1999 {"c":1} + +-- !sql3 -- +1 {"a":1,"b":{"c":[{"a":1}]}} +2 [2] +3 3 +4 "4" +5 5 + +-- !sql4 -- +{"c":[{"a":1}]} [{"a":1}] +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N + +-- !sql5 -- +10 +10 + +-- !sql6 -- +{"c":[{"a":1}]} +10 +{"c":1} +{"c":1} +10 + +-- !sql -- +{"c":"123"} +{"c":123} +{"cc":[123.2]} +{"cc":[123.1]} +{"ccc":123} +{"ccc":123321} +{"cccc":123.22} +{"cccc":123.11} +{"ccccc":[123]} +{"ccccc":[123456789]} +{"b":1111111111111111} +{"b":1.222222} +{"bb":1} +{"bb":214748364711} +{"A":1} + +-- !sql -- +15 + +-- !sql_2 -- +1 +123 +123456 +123456789101112 + +-- !sql_4 -- +123 \N {"A":123} +1 \N {"A":1} +123456 \N {"A":123456} +123456789101112 \N {"A":123456789101112} +\N [123456] {"AA":[123456]} +\N [123456789101112] {"AA":[123456789101112]} + +-- !sql_5 -- +123456 \N {"A":123456} {"A":123456} +123456789101112 \N {"A":123456789101112} {"A":123456789101112} + +-- !sql_6 -- +\N \N +\N \N +123 \N +\N 1 +\N 123 +1.10111 1800 +1.1111 17211 +\N 123456 +123.22 191191 +\N 123456789101112 + +-- !sql_7 -- +2 1 +1 123 +20 1800 +22 17211 +4 123456 +16 191191 +8 123456789101112 + +-- !sql_8 -- +\N 123 +\N 1 +\N 123456 +\N 123456789101112 +\N \N +\N \N + +-- !sql_11 -- +123 +123456 +123456789101112 +191191 +1800 +17211 + +-- !sql_12 -- +123 {"A":123} +123456 {"A":123456} +123456789101112 {"A":123456789101112} +191191 {"A":191191,"a":123.22,"c":123} +1800 {"A":1800,"a":1.10111,"c":[12345]} +17211 {"A":17211,"a":1.1111,"c":111111} + +-- !sql_13 -- +\N 123 +\N 1 +\N 123456 +\N 123456789101112 + +-- !sql_14 -- +123456 {"A":123456} + +-- !sql_18 -- +\N 123 {"A":123} \N +\N 1 {"A":1} \N +\N 123456 {"A":123456} \N +\N 123456789101112 {"A":123456789101112} \N +\N \N {"AA":[123456]} \N +\N \N {"AA":[123456789101112]} \N +123.22 191191 {"A":191191,"a":123.22,"c":123} \N +123 \N {"a":"123","c":123456} \N +1.10111 1800 {"A":1800,"a":1.10111,"c":[12345]} \N +1.1111 17211 {"A":17211,"a":1.1111,"c":111111} \N + +-- !sql_19 -- +\N \N {"oamama":1.1} 1.1 + +-- !sql_20 -- +123456 + +-- !sql_21_1 -- +12 {"xxx":123,"yyy":456} + +-- !sql_21_2 -- +[123456] +[123456789101112] + +-- !sql -- +3 + +-- !sql_22 -- +123 +\N +\N + +-- !sql_23 -- +\N +[123] +\N + +-- !sql_24 -- +\N +\N +[123] + +-- !sql_25 -- +50000 55000.00000000033 6150000 + +-- !sql_26 -- +5000 + +-- !sql_27 -- +16 + +-- !sql_29_1 -- +1 {"kxxxx":123} {"xxxxyyyy":123} +1 {"kyyyy":"123"} {"kxkxkxkx":[123]} + +-- !sql -- +6 + +-- !sql -- +4 + +-- !sql_29 -- +["123",123,[123]] +123 +123456 +[123,"123",1.11111] +[123,1.11,"123"] +[123,{"xx":1}] +[123,{"a":1}] +[{"a":1},123] + +-- !sql_30 -- +7.111 [123,{"xx":1}] {"c":456,"e":7.111} 456 + +-- !sql_30 -- +{"a":1123} +{"a":11245,"b":[123,{"xx":1}],"c":{"c":456,"e":7.111}} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} +{"a":1234,"xxxx":"kaana"} + +-- !sql_31 -- +{"a":1123,"b":[123,{"xx":1}],"c":{"c":456,"e":7.111},"oooo":{"xxxx":{"xxx":123}}} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} +{"a":1234,"ddd":{"aaa":123,"mxmxm":[456, "789"]},"xxxx":"kaana"} + +-- !sql_36_1 -- +1 \N \N +\N \N 1 +\N \N \N +\N \N \N +\N \N \N +\N \N \N +\N \N \N +\N \N \N +\N \N \N +\N \N \N + +-- !sql_36_2 -- +7702 {"id":28677864,"name":"magik6k/BitBuffer","url":"https://api.github.com/repos/magik6k/BitBuffer"} +7701 {"id":18089434,"name":"wllmtrng/wllmtrng.github.io","url":"https://api.github.com/repos/wllmtrng/wllmtrng.github.io"} +7700 {"id":23724137,"name":"ACID-Scripts/TBC","url":"https://api.github.com/repos/ACID-Scripts/TBC"} +7699 {"id":28678128,"name":"chrisjimenez/IpsePuppet","url":"https://api.github.com/repos/chrisjimenez/IpsePuppet"} +7698 {"id":28573267,"name":"antonioortegajr/beerfind.me","url":"https://api.github.com/repos/antonioortegajr/beerfind.me"} +7697 {"id":20463939,"name":"XLabs/Xamarin-Forms-Labs","url":"https://api.github.com/repos/XLabs/Xamarin-Forms-Labs"} +7696 {"id":26995510,"name":"Fathalian/Guild","url":"https://api.github.com/repos/Fathalian/Guild"} +7695 {"id":28652857,"name":"kevinhofmaenner/blackjack","url":"https://api.github.com/repos/kevinhofmaenner/blackjack"} +7694 {"id":27470715,"name":"marklrh/ocaml-cohttp-test","url":"https://api.github.com/repos/marklrh/ocaml-cohttp-test"} +7693 {"id":28498113,"name":"plouc/mozaik","url":"https://api.github.com/repos/plouc/mozaik"} + +-- !sql_36_3 -- +2 {"updated_value":10} + +-- !sql_37 -- +1 {"a":"1"} +1 {"a":"2"} +1 {"a":1} +1 {"a":1} + +-- !sql_38 -- +3 abd {"d":1} + +-- !sql_31 -- +kaana + +-- !sql_39 -- +1 array +2 string +3 bigint +4 double + +-- !sql_39 -- +["CXO0N: 1045901740", "HMkTa: 1348450505", "44 HHD: 915015173", "j9WoJ: -1517316688"] + +-- !sql_39 -- +[1] + +-- !sql_records1 -- +{"id":"85321037218054145","id0":"8301","id12":"32030","id16":"39960","id20":"17202","id24":"24592","id28":"42035","id32":"29819","id36":"4680","id4":"4848","id40":"47892","id44":"29400","id48":"7799","id52":"49678","id56":"40585","id60":"23572","id64":"28579","id68":"11477","id72":"35416","id76":"9577","id8":"25758","id80":"45204","id84":"16132","id88":"1007","id92":"32630","id96":"15443","num10":310671794,"num14":317675907,"num18":173663246,"num2":68835462,"num22":919923967,"num26":989144179,"num30":758415664,"num34":344178710,"num38":603490103,"num42":928353352,"num46":164440235,"num50":272803033,"num54":494457109,"num58":36023952,"num6":345965722,"num62":244316054,"num66":791098758,"num70":59531230,"num74":887460141,"num78":175760447,"num82":93180735,"num86":893826383,"num90":899738404,"num94":132357718,"num98":618243870,"text11":"1露华浓 蜜丝佛陀 欧莱雅 哪 款 粉饼 好啊我 感觉 ","text15":"0写 个 天秤 女 攻略 吧 转帖楼主 救 我 加急 如","text19":"1我 复试 被 人大 刷 了 我 气 得 浑身 颤抖 请 ","text23":"0哇靠 我 是 昨儿 吐槽 太仓 假货 的 妹子百丽 专","text27":"1搓 泥 现象 是什么 原因换 成 乳液可是 早上 还","text3":"1想说 刘伊心 是 来 搞笑 的 吗能 唱 成 她 这样","text31":"0女朋友 发 来 短信 说 离开 我 是 她 最 正确 的","text35":"1做 完 九 次 led 红 蓝光 了 还有 最后 一次 ","text39":"0八一八 你 觉得 哪 位 明星 长 得 很 苦逼 很 苦","text43":"0昨天 楼主 拒绝 了 一个 女生 我 傻逼 吗手机 看","text47":"0818 你 觉得 超 好看 的 动漫 有 哪些 嘛初中","text51":"0借 你 我 的 时间我 能 说 请 豆油 我 吗不行","text55":"1我 在 缅甸 雪 悟 敏 禅修 营 三 个 月谢谢 于","text59":"0八一八 非常了得 吧孟非 明显 是 一 付 很 嫌弃 ","text63":"0我 小 姨 大 病 之后 神仙 附体 之后 几乎 是 一","text67":"0爸爸 去哪儿 明星 家 也是 有 贫富悬殊 的 哇突然","text7":"0曾经 的 成都 洗面桥 小学如果 大家 还 记得 宋 ","text71":"1关于女人 姿色女 活 白富美 音 智 胸 腰腿声音 ","text75":"1直播 贴 2013 02 19 04 00 足总 杯 第","text79":"1昨天 答应 和 ex 见面 了 终于 又 让 他 知道 ","text83":"1谁 能 提供 指 人 儿 的 gtp 谱子 呢 我们 乐","text87":"0近 距离 安 坏 关系我 和 我 儿子 是 近 距离 ","text91":"1刚 看 了 小 时代 1 感动 了我 也是 我 都 3","text95":"0剧终 谢谢 大家 撸 主 和 她 在一起 了我 呸呸 ","text99":"1喜欢 广州 想来 广州 但是嗯嗯 还 不能 在 网上 ","time1":"2012-07-06 17:42:41","time13":"1985-07-23 13:16:34","time17":"1970-07-14 00:30:54","time21":"1981-07-04 03:01:10","time25":"1994-12-20 03:41:44","time29":"1975-06-25 07:25:00","time33":"1979-07-27 03:59:56","time37":"1979-12-25 00:37:57","time41":"1979-11-12 13:09:03","time45":"1998-03-02 15:41:07","time49":"1981-05-22 06:40:29","time5":"1995-02-26 15:11:35","time53":"1985-06-23 23:11:00","time57":"2001-02-05 14:44:11","time61":"1988-01-27 12:28:13","time65":"2024-04-27 04:52:59","time69":"2022-04-18 05:19:02","time73":"2016-03-14 15:55:31","time77":"1977-12-21 23:41:05","time81":"2016-12-02 17:10:12","time85":"1995-09-15 21:40:33","time89":"2014-05-10 14:32:32","time9":"1988-12-08 05:26:13","time93":"2018-08-23 02:01:29","time97":"1990-03-09 07:39:01"} + +-- !sql_records2 -- + +-- !sql_records3 -- +{"id":"85321037218054145","id0":"8301","id12":"32030","id16":"39960","id20":"17202","id24":"24592","id28":"42035","id32":"29819","id36":"4680","id4":"4848","id40":"47892","id44":"29400","id48":"7799","id52":"49678","id56":"40585","id60":"23572","id64":"28579","id68":"11477","id72":"35416","id76":"9577","id8":"25758","id80":"45204","id84":"16132","id88":"1007","id92":"32630","id96":"15443","num10":310671794,"num14":317675907,"num18":173663246,"num2":68835462,"num22":919923967,"num26":989144179,"num30":758415664,"num34":344178710,"num38":603490103,"num42":928353352,"num46":164440235,"num50":272803033,"num54":494457109,"num58":36023952,"num6":345965722,"num62":244316054,"num66":791098758,"num70":59531230,"num74":887460141,"num78":175760447,"num82":93180735,"num86":893826383,"num90":899738404,"num94":132357718,"num98":618243870,"text11":"1露华浓 蜜丝佛陀 欧莱雅 哪 款 粉饼 好啊我 感觉 ","text15":"0写 个 天秤 女 攻略 吧 转帖楼主 救 我 加急 如","text19":"1我 复试 被 人大 刷 了 我 气 得 浑身 颤抖 请 ","text23":"0哇靠 我 是 昨儿 吐槽 太仓 假货 的 妹子百丽 专","text27":"1搓 泥 现象 是什么 原因换 成 乳液可是 早上 还","text3":"1想说 刘伊心 是 来 搞笑 的 吗能 唱 成 她 这样","text31":"0女朋友 发 来 短信 说 离开 我 是 她 最 正确 的","text35":"1做 完 九 次 led 红 蓝光 了 还有 最后 一次 ","text39":"0八一八 你 觉得 哪 位 明星 长 得 很 苦逼 很 苦","text43":"0昨天 楼主 拒绝 了 一个 女生 我 傻逼 吗手机 看","text47":"0818 你 觉得 超 好看 的 动漫 有 哪些 嘛初中","text51":"0借 你 我 的 时间我 能 说 请 豆油 我 吗不行","text55":"1我 在 缅甸 雪 悟 敏 禅修 营 三 个 月谢谢 于","text59":"0八一八 非常了得 吧孟非 明显 是 一 付 很 嫌弃 ","text63":"0我 小 姨 大 病 之后 神仙 附体 之后 几乎 是 一","text67":"0爸爸 去哪儿 明星 家 也是 有 贫富悬殊 的 哇突然","text7":"0曾经 的 成都 洗面桥 小学如果 大家 还 记得 宋 ","text71":"1关于女人 姿色女 活 白富美 音 智 胸 腰腿声音 ","text75":"1直播 贴 2013 02 19 04 00 足总 杯 第","text79":"1昨天 答应 和 ex 见面 了 终于 又 让 他 知道 ","text83":"1谁 能 提供 指 人 儿 的 gtp 谱子 呢 我们 乐","text87":"0近 距离 安 坏 关系我 和 我 儿子 是 近 距离 ","text91":"1刚 看 了 小 时代 1 感动 了我 也是 我 都 3","text95":"0剧终 谢谢 大家 撸 主 和 她 在一起 了我 呸呸 ","text99":"1喜欢 广州 想来 广州 但是嗯嗯 还 不能 在 网上 ","time1":"2012-07-06 17:42:41","time13":"1985-07-23 13:16:34","time17":"1970-07-14 00:30:54","time21":"1981-07-04 03:01:10","time25":"1994-12-20 03:41:44","time29":"1975-06-25 07:25:00","time33":"1979-07-27 03:59:56","time37":"1979-12-25 00:37:57","time41":"1979-11-12 13:09:03","time45":"1998-03-02 15:41:07","time49":"1981-05-22 06:40:29","time5":"1995-02-26 15:11:35","time53":"1985-06-23 23:11:00","time57":"2001-02-05 14:44:11","time61":"1988-01-27 12:28:13","time65":"2024-04-27 04:52:59","time69":"2022-04-18 05:19:02","time73":"2016-03-14 15:55:31","time77":"1977-12-21 23:41:05","time81":"2016-12-02 17:10:12","time85":"1995-09-15 21:40:33","time89":"2014-05-10 14:32:32","time9":"1988-12-08 05:26:13","time93":"2018-08-23 02:01:29","time97":"1990-03-09 07:39:01"} + +-- !sql_records4 -- + +-- !sql_records5 -- +{"id":"85321037218054145","id0":"8301","id12":"32030","id16":"39960","id20":"17202","id24":"24592","id28":"42035","id32":"29819","id36":"4680","id4":"4848","id40":"47892","id44":"29400","id48":"7799","id52":"49678","id56":"40585","id60":"23572","id64":"28579","id68":"11477","id72":"35416","id76":"9577","id8":"25758","id80":"45204","id84":"16132","id88":"1007","id92":"32630","id96":"15443","num10":310671794,"num14":317675907,"num18":173663246,"num2":68835462,"num22":919923967,"num26":989144179,"num30":758415664,"num34":344178710,"num38":603490103,"num42":928353352,"num46":164440235,"num50":272803033,"num54":494457109,"num58":36023952,"num6":345965722,"num62":244316054,"num66":791098758,"num70":59531230,"num74":887460141,"num78":175760447,"num82":93180735,"num86":893826383,"num90":899738404,"num94":132357718,"num98":618243870,"text11":"1露华浓 蜜丝佛陀 欧莱雅 哪 款 粉饼 好啊我 感觉 ","text15":"0写 个 天秤 女 攻略 吧 转帖楼主 救 我 加急 如","text19":"1我 复试 被 人大 刷 了 我 气 得 浑身 颤抖 请 ","text23":"0哇靠 我 是 昨儿 吐槽 太仓 假货 的 妹子百丽 专","text27":"1搓 泥 现象 是什么 原因换 成 乳液可是 早上 还","text3":"1想说 刘伊心 是 来 搞笑 的 吗能 唱 成 她 这样","text31":"0女朋友 发 来 短信 说 离开 我 是 她 最 正确 的","text35":"1做 完 九 次 led 红 蓝光 了 还有 最后 一次 ","text39":"0八一八 你 觉得 哪 位 明星 长 得 很 苦逼 很 苦","text43":"0昨天 楼主 拒绝 了 一个 女生 我 傻逼 吗手机 看","text47":"0818 你 觉得 超 好看 的 动漫 有 哪些 嘛初中","text51":"0借 你 我 的 时间我 能 说 请 豆油 我 吗不行","text55":"1我 在 缅甸 雪 悟 敏 禅修 营 三 个 月谢谢 于","text59":"0八一八 非常了得 吧孟非 明显 是 一 付 很 嫌弃 ","text63":"0我 小 姨 大 病 之后 神仙 附体 之后 几乎 是 一","text67":"0爸爸 去哪儿 明星 家 也是 有 贫富悬殊 的 哇突然","text7":"0曾经 的 成都 洗面桥 小学如果 大家 还 记得 宋 ","text71":"1关于女人 姿色女 活 白富美 音 智 胸 腰腿声音 ","text75":"1直播 贴 2013 02 19 04 00 足总 杯 第","text79":"1昨天 答应 和 ex 见面 了 终于 又 让 他 知道 ","text83":"1谁 能 提供 指 人 儿 的 gtp 谱子 呢 我们 乐","text87":"0近 距离 安 坏 关系我 和 我 儿子 是 近 距离 ","text91":"1刚 看 了 小 时代 1 感动 了我 也是 我 都 3","text95":"0剧终 谢谢 大家 撸 主 和 她 在一起 了我 呸呸 ","text99":"1喜欢 广州 想来 广州 但是嗯嗯 还 不能 在 网上 ","time1":"2012-07-06 17:42:41","time13":"1985-07-23 13:16:34","time17":"1970-07-14 00:30:54","time21":"1981-07-04 03:01:10","time25":"1994-12-20 03:41:44","time29":"1975-06-25 07:25:00","time33":"1979-07-27 03:59:56","time37":"1979-12-25 00:37:57","time41":"1979-11-12 13:09:03","time45":"1998-03-02 15:41:07","time49":"1981-05-22 06:40:29","time5":"1995-02-26 15:11:35","time53":"1985-06-23 23:11:00","time57":"2001-02-05 14:44:11","time61":"1988-01-27 12:28:13","time65":"2024-04-27 04:52:59","time69":"2022-04-18 05:19:02","time73":"2016-03-14 15:55:31","time77":"1977-12-21 23:41:05","time81":"2016-12-02 17:10:12","time85":"1995-09-15 21:40:33","time89":"2014-05-10 14:32:32","time9":"1988-12-08 05:26:13","time93":"2018-08-23 02:01:29","time97":"1990-03-09 07:39:01"} + +-- !sql -- +1 {"a":10} +2 {"b":11} + +-- !sql -- +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +\N + diff --git a/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel1.csv b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel1.csv new file mode 100644 index 00000000000000..4ba84bb7785ff2 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel1.csv @@ -0,0 +1,5 @@ +1,"ddddddddddd" +2,"eeeeee" +3,"aaaaa" +4,"bbbbbbbb" +5,"cccccccccccc" diff --git a/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel2.csv b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel2.csv new file mode 100644 index 00000000000000..1560d6d3261218 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel2.csv @@ -0,0 +1,5 @@ +1,1111,199 +2,2222,299 +3,3333,399 +4,4444,499 +5,5555,599 diff --git a/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel3.csv b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel3.csv new file mode 100644 index 00000000000000..17abeef1a9cf9c --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel3.csv @@ -0,0 +1,5 @@ +1,10,{"new_data1" : 1} +2,20,{"new_data2" : 2} +3,30,{"new_data3" : 3} +4,40,{"new_data4" : 4} +5,50,{"new_data5" : 5} diff --git a/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel4.csv b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel4.csv new file mode 100644 index 00000000000000..0a7cbd412faab3 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/partial_update_parallel4.csv @@ -0,0 +1,3 @@ +1,1 +3,1 +5,1 diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/load.out b/regression-test/data/variant_p0/doc_snapshot/predefine/load.out new file mode 100644 index 00000000000000..e8a902e23494e6 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/load.out @@ -0,0 +1,113 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +1 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} +2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +3 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} +4 4 {"a":{"b":{"c":678910,"d":33.222}}} +5 5 \N +6 6 \N +7 7 {"xxx":12345} +8 8 {"yyy":111.111} +9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +10 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} +11 4 {"a":{"b":{"c":678910,"d":33.222}}} +12 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} + +-- !sql -- +127.0.0.1 +127.0.0.1 +127.0.0.1 +127.0.0.1 +127.0.0.1 +127.0.0.1 + +-- !sql -- +123.456000000 +123.456000000 + +-- !sql -- +123.456000000 +456.123000000 +789.123000000 +\N +\N +\N +\N +\N +456.123000000 +123.456000000 +\N +789.123000000 + +-- !sql -- +2022-01-01 11:11:11 +2022-01-01 11:11:11 + +-- !sql -- +2022-01-01 11:11:11 +2022-01-01 11:11:11 + +-- !sql -- +2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} + +-- !sql -- +1 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} +2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +3 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} +9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +10 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} +12 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} + +-- !sql -- +1 {"predefine_col1":1024} +2 {"predefine_col2":1.11111} +3 {"predefine_col3":"11111.00000"} +4 {"predefine_col4":"2020-01-01-01"} +5 {"PREDEFINE_COL1":1024} +6 {"PREDEFINE_COL2":1.11111} +7 {"PREDEFINE_COL3":"11111.00000"} +8 {"PREDEFINE_COL4":"2020-01-01-01"} + +-- !sql -- +1 {"array_boolean":[1, 0, 1],"array_date":["2021-01-01", "2022-01-01", "2023-01-01"],"array_datetime":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datev2":["2021-01-01", "2022-01-01", "2023-01-01"],"array_decimal":[1.100000000, 2.200000000, 3.300000000],"array_float":[1.111110000],"array_int":[1, 2, 3],"array_ipv4":["127.0.0.1", "172.0.1.1"],"array_ipv6":["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"],"array_string":["a", "b", "c"],"boolean_":1,"date_":"2022-01-01","datetime_":"2022-01-01 11:11:11","datetimev2_":"2022-01-01 11:11:11.999999","datev2_":"2022-01-01","decimal_":188118222.011121920,"float_":128.111000000,"int_":11111122,"ipv4_":"127.0.0.1","ipv6_":"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe","string_":"12111222113","varchar_":"hello world"} +2 {"array_boolean":[1, 0, 1, 0, 1],"array_date":["2021-01-01", "2022-01-01", "2023-01-01"],"array_datetime":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datev2":["2021-01-01", "2022-01-01", "2023-01-01"],"array_decimal":[1.100000000, 2.200000000, 3.300000000],"array_float":[2.222220000],"array_int":[1, 2, 3],"array_ipv4":["127.0.0.1", "172.0.1.1"],"array_ipv6":["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"],"array_string":["a", "b", "c"],"boolean_":1,"date_":"2022-01-01","datetime_":"2022-01-01 11:11:11","datetimev2_":"2022-01-01 11:11:11.999999","datev2_":"2022-01-01","decimal_":219911111111.011121933,"float_":1.111111111,"ipv4_":"127.0.0.1","ipv6_":"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe","string_":"12111222113","varchar_":"world hello"} +3 {"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"],"boolean_":1,"date_":"2022-01-01","decimal_":219911111111.011121933,"float_":1.111111111,"ipv4_":"127.0.0.1","varchar_":"world hello"} +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 -- +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 -- +1 {"nested":[{"a":123,"b":"456"}]} +1 {"nested":[{"a":123,"b":"456"}]} +1 {"nested":[{"a":123,"b":"456"}]} +1 {"nested":[{"a":123,"b":"456"}]} +1 {"nested":[{"a":123,"b":"456"}]} + +-- !sql -- +[{"a":123,"b":"456"}] +[{"a":123,"b":"456"}] +[{"a":123,"b":"456"}] +[{"a":123,"b":"456"}] +[{"a":123,"b":"456"}] + +-- !sql -- +\N +\N +\N +\N +\N + +-- !sql_arr_null_1 -- +3 {"array_decimal":[null, 2.200000000, 3.300000000, 4.400000000]} + +-- !sql_arr_null_2 -- +1 {"array_decimal":[1.100000000, 2.200000000, 3.300000000, null]} +2 {"array_decimal":[1.100000000, 2.200000000, null, 4.400000000]} +3 {"array_decimal":[null, 2.200000000, 3.300000000, 4.400000000]} +4 {"array_decimal":[1.100000000, null, 3.300000000, 4.400000000]} +5 {"array_decimal":[1.100000000, 2.200000000, 3.300000000, 4.400000000]} + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_multi_index_nonCurrent.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_multi_index_nonCurrent.out new file mode 100644 index 00000000000000..d03042f00b5109 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_multi_index_nonCurrent.out @@ -0,0 +1,28 @@ +-- 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"} + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out new file mode 100644 index 00000000000000..4b787f3c133cb9 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out @@ -0,0 +1,21 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +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 -- +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +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 -- +2 + +-- !sql -- +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -- +3 + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out new file mode 100644 index 00000000000000..438f45d55c1cfa --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/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 Yes false \N NONE + +-- !sql -- +id bigint Yes true \N +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_pattern.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_pattern.out new file mode 100644 index 00000000000000..9d641a233fa1c3 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_pattern.out @@ -0,0 +1,85 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +1 {"*cc":"123","ab":"123","b?b":"123","bb3":"123","bxx":"123"} +2 {"*cc":"456","ab":"456","b?b":"456","bb3":"456","bxx":"456"} +3 {"*cc":"789","ab":"789","b?b":"789","bb3":"789","bxx":"789"} +4 {"*cc":"100","ab":"100","b?b":"100","bb3":"100","bxx":"100"} +5 {"*cc":"111","ab":"111","b?b":"111","bb3":"111","bxx":"111"} + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 {"*cc":"123","ab":"123","b?b":"123","bb3":"123","bxx":"123"} +2 {"*cc":"456","ab":"456","b?b":"456","bb3":"456","bxx":"456"} +3 {"*cc":"789","ab":"789","b?b":"789","bb3":"789","bxx":"789"} +4 {"*cc":"100","ab":"100","b?b":"100","bb3":"100","bxx":"100"} +5 {"*cc":"111","ab":"111","b?b":"111","bb3":"111","bxx":"111"} + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 {"a":{"*":"789","b":"789","b1":"789","bxc":"789","c2323":"789"}} +2 {"a":{"*":"111","b":"111","b1":"111","bxc":"111","c2323":"111"}} +3 {"a":{"*":"222","b":"222","b1":"222","bxc":"222","c2323":"222"}} + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 {"a":{"*":"789","b":"789","b1":"789","bxc":"789","c2323":"789"}} +2 {"a":{"*":"111","b":"111","b1":"111","bxc":"111","c2323":"111"}} +3 {"a":{"*":"222","b":"222","b1":"222","bxc":"222","c2323":"222"}} + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +1 + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out new file mode 100644 index 00000000000000..37b7d3e7f448df --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out @@ -0,0 +1,23 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +2 + +-- !sql -- +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -- +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} + +-- !sql -- +2 + +-- !sql -- +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 +1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -- +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out new file mode 100644 index 00000000000000..c92f5ad437c568 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out @@ -0,0 +1,79 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} + +-- !sql -- +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +2 {"path":{"decimal":456.456789123456,"int":456,"string":"world"}} +3 {"path":{"decimal":789.789123456789,"int":789,"string":"hello"}} +4 {"path":{"decimal":100.100123456789,"int":100,"string":"world"}} +5 {"path":{"decimal":111.111111111111,"int":111,"string":"hello"}} + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +3 + +-- !sql -- +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} + +-- !sql -- +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} +2 {"path":{"decimal":456.456789123456,"int":456,"string":"world"}} +3 {"path":{"decimal":789.789123456789,"int":789,"string":"hello"}} +4 {"path":{"decimal":100.100123456789,"int":100,"string":"world"}} +5 {"path":{"decimal":111.111111111111,"int":111,"string":"hello"}} + +-- !sql -- +1 + +-- !sql -- +1 + +-- !sql -- +13 + +-- !sql -- +10 + +-- !sql -- +20 + +-- !sql -- +Bright Red + +-- !sql -- +Bright Red + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out new file mode 100644 index 00000000000000..0afb7064bb1f67 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out @@ -0,0 +1,423 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql_1 -- +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} +2 {"a":"1"} +3 {"x":[3]} +3 {"x":[3]} +4 {"y":1} +4 {"y":1} +5 {"z":2} +5 {"z":2} +6 {"x":111} +6 {"x":111} +7 {"m":1} +7 {"m":1} +8 {"l":2} +8 {"l":2} +9 {"g":1.11} +9 {"g":1.11} +10 {"z":1.1111} +10 {"z":1.1111} +11 {"sala":0} +11 {"sala":0} +12 {"dddd":0.1} +12 {"dddd":0.1} +13 {"a":1} +13 {"a":1} +14 {"a":[[[1]]]} +14 {"a":[[[1]]]} +15 {"a":1} +15 {"a":1} +16 {"a":"1223"} +16 {"a":"1223"} +17 {"a":[1]} +17 {"a":[1]} +18 {"a":["2"]} +18 {"a":["2"]} +19 {"a":1,"b":{"c":1}} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +14 [null] +17 [1] +17 [1] +18 [2] +18 [2] + +-- !sql_3 -- +19 1 {"c":1} +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1029 1 {"c":1} +1999 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +10 \N +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +10 \N +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] + +-- !sql_11 -- +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} +2 {"a":"1"} +3 {"x":[3]} +3 {"x":[3]} +4 {"y":1} +4 {"y":1} +5 {"z":2} +5 {"z":2} +6 {"x":111} +6 {"x":111} +7 {"m":1} +7 {"m":1} +8 {"l":2} +8 {"l":2} +9 {"g":1.11} +9 {"g":1.11} +10 {"z":1.1111} +10 {"z":1.1111} +11 {"sala":0} +11 {"sala":0} +12 {"dddd":0.1} +12 {"dddd":0.1} +13 {"a":1} +13 {"a":1} +14 {"a":[[[1]]]} +14 {"a":[[[1]]]} +15 {"a":1} +15 {"a":1} +16 {"a":"1223"} +16 {"a":"1223"} +17 {"a":[1]} +17 {"a":[1]} +18 {"a":["2"]} +18 {"a":["2"]} +19 {"a":1,"b":{"c":1}} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +14 [null] +17 [1] +17 [1] +18 [2] +18 [2] + +-- !sql_33 -- +19 1 {"c":1} +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1029 1 {"c":1} +1999 1 {"c":1} +1999 1 {"c":1} + +-- !sql_55 -- +10 \N +10 \N +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +10 \N +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] + +-- !sql_1 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["2"]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +17 [1] +18 [2] + +-- !sql_3 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_11 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["2"]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +17 [1] +18 [2] + +-- !sql_33 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_55 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_1 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["2"]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +17 [1] +18 [2] + +-- !sql_3 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_11 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["2"]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +17 [1] +18 [2] + +-- !sql_33 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_55 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !select -- +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} + +-- !select -- +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} + +-- !select -- +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} + +-- !select -- +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} + +-- !select -- +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} + +-- !select -- +1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} +5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} + diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out b/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out new file mode 100644 index 00000000000000..c38288f973c38a --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out @@ -0,0 +1,18 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +1 + +-- !sql -- +944935233 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":30,"b":"40","c":50,"d":60,"e":70,"f":80,"g":90,"h":100,"i":110,"j":120} +944935234 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":31,"b":"41","c":51,"d":61,"e":71,"f":81,"g":91,"h":101,"i":111,"j":121} +944935235 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":32,"b":"42","c":52,"d":62,"e":72,"f":82,"g":92,"h":102,"i":112,"j":122} +944935236 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":33,"b":"43","c":53,"d":63,"e":73,"f":83,"g":93,"h":103,"i":113,"j":123} +944935237 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":34,"b":"44","c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124} + +-- !sql -- +944935233 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":30,"b":"40","c":50,"d":60,"e":70,"f":80,"g":90,"h":100,"i":110,"j":120} +944935234 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":31,"b":"41","c":51,"d":61,"e":71,"f":81,"g":91,"h":101,"i":111,"j":121} +944935235 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":32,"b":"42","c":52,"d":62,"e":72,"f":82,"g":92,"h":102,"i":112,"j":122} +944935236 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":33,"b":"43","c":53,"d":63,"e":73,"f":83,"g":93,"h":103,"i":113,"j":123} +944935237 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":34,"b":"44","c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124} + diff --git a/regression-test/data/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.out b/regression-test/data/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.out new file mode 100644 index 00000000000000..f646f83bb0351d --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.out @@ -0,0 +1,37 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +PushEvent 2489368070 2015-01-01T00:00:00Z +PushEvent 2489395767 2015-01-01T01:00:00Z +PushEvent 2489418154 2015-01-01T02:00:00Z +PullRequestEvent 2489436569 2015-01-01T03:00:01Z +PushEvent 2489368072 2015-01-01T00:00:00Z +PushEvent 2489395768 2015-01-01T01:00:00Z +PushEvent 2489418155 2015-01-01T02:00:00Z +GollumEvent 2489436580 2015-01-01T03:00:02Z +CreateEvent 2489368089 2015-01-01T00:00:01Z +PullRequestEvent 2489395770 2015-01-01T01:00:02Z + +-- !sql -- +PushEvent 2489368070 2015-01-01T00:00:00Z +PushEvent 2489395767 2015-01-01T01:00:00Z +PushEvent 2489418154 2015-01-01T02:00:00Z +PullRequestEvent 2489436569 2015-01-01T03:00:01Z +PushEvent 2489368072 2015-01-01T00:00:00Z +PushEvent 2489395768 2015-01-01T01:00:00Z +PushEvent 2489418155 2015-01-01T02:00:00Z +GollumEvent 2489436580 2015-01-01T03:00:02Z +CreateEvent 2489368089 2015-01-01T00:00:01Z +PullRequestEvent 2489395770 2015-01-01T01:00:02Z + +-- !sql -- +2 [{"sha":"56688cc528224d40679b7e83c105b27367443a8c","author":{"email":"61dcbbf08c9f7aaa2b1d0a9ce0b90608a83988c2@ucr.edu","name":"Jamal Moon"},"message":"Can be run from outside of bin. Fixed multi-line issue","distinct":true,"url":"https://api.github.com/repos/jmoon018/rshell-unit-tester/commits/56688cc528224d40679b7e83c105b27367443a8c"}] +2 [{"sha":"defdbe78db98ad69d72f42b09194309f47616592","author":{"email":"5f33e8ddd36b0c849687df732835b9abbe9b347b@twistedmatrix.com","name":"Christopher Armstrong"},"message":"put the auto-generated API docs in the repository so readthedocs will work.\\nsigh.","distinct":true,"url":"https://api.github.com/repos/radix/effect/commits/defdbe78db98ad69d72f42b09194309f47616592"}] +2 [{"sha":"f38a055078e5e19a19f9e58ac975c7e815d09a24","author":{"email":"f9bad8375b9564f6e0f50984c0171ad9df9a017d@gmail.com","name":"Earnestly"},"message":"Change the PFM family to monospace from serif.","distinct":true,"url":"https://api.github.com/repos/Earnestly/fncp6/commits/f38a055078e5e19a19f9e58ac975c7e815d09a24"}] +3 [{"sha":"a9df8f52df7bea62a9ddbd2779a22755aa7d2258","author":{"email":"efaae62f337a1f70859f6f43996fca5b241e0786@jiubao.org","name":"Kubo Takehiro"},"message":"Use SSE4.2 to calculate crc32c.","distinct":true,"url":"https://api.github.com/repos/kubo/snzip/commits/a9df8f52df7bea62a9ddbd2779a22755aa7d2258"}] +4 [{"sha":"216d05c696eac3fa606289c7f1934f965ffa8f5b","author":{"email":"bd02fa4a4ee63436bd157864cccdf8b3a026562b@appnexus.com","name":"Oliver Gupte"},"message":"updated manifests","distinct":true,"url":"https://api.github.com/repos/ogupte/trope/commits/216d05c696eac3fa606289c7f1934f965ffa8f5b"}] +4 [{"sha":"4bb12488d56ea651c56d9688996b464b99095582","author":{"email":"291c18f3fb7528c712d9098b0e50a515ea0b91d5@cloudera.com","name":"Sean Owen"},"message":"SPARK-2757 [BUILD] [STREAMING] Add Mima test for Spark Sink after 1.10 is released\\n\\nRe-enable MiMa for Streaming Flume Sink module, now that 1.1.0 is released, per the JIRA TO-DO. That's pretty much all there is to this.\\n\\nAuthor: Sean Owen \\n\\nCloses #3842 from srowen/SPARK-2757 and squashes the following commits:\\n\\n50ff80e [Sean Owen] Exclude apparent false positive turned up by re-enabling MiMa checks for Streaming Flume Sink\\n0e5ba5c [Sean Owen] Re-enable MiMa for Streaming Flume Sink module","distinct":true,"url":"https://api.github.com/repos/apache/spark/commits/4bb12488d56ea651c56d9688996b464b99095582"}] +4 [{"sha":"ec572201658b566373845657a8aca7bc6d6214a4","author":{"email":"9ec2b9d5f2203d75c2b0f7885bd663d9d57a2d20@squareup.com","name":"Jake Wharton"},"message":"Remove unused method.","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/ec572201658b566373845657a8aca7bc6d6214a4"},{"sha":"bfa25f05bd5786c990fccb513f56375a4f98d95b","author":{"email":"a5c95b3d7cb4d0ae05a15c79c79ab458dc2c8f9e@swank.ca","name":"Jesse Wilson"},"message":"Merge pull request #1262 from square/jw/unused\\n\\nRemove unused method.","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/bfa25f05bd5786c990fccb513f56375a4f98d95b"},{"sha":"6909923b89d98fef39600a170aa50e566dbb730a","author":{"email":"a64cc9f76231f0ec4acb28039b9f699588583cb0@gmail.com","name":"Christian Becker"},"message":"Update CHANGELOG.md","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/6909923b89d98fef39600a170aa50e566dbb730a"},{"sha":"2ca6dfd055d480a4ef3520af39ad4b7ba02d5491","author":{"email":"a5c95b3d7cb4d0ae05a15c79c79ab458dc2c8f9e@swank.ca","name":"Jesse Wilson"},"message":"Merge pull request #1263 from ChristianBecker/patch-1\\n\\nUpdate CHANGELOG.md","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/2ca6dfd055d480a4ef3520af39ad4b7ba02d5491"},{"sha":"5527a1764d973d293faffe31faddf205e3f37641","author":{"email":"b559ba3411cf55dd74bd9675d6ce4d094c2e3438@squareup.com","name":"Jesse Wilson"},"message":"We now fall back to TLS 1.0.","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/5527a1764d973d293faffe31faddf205e3f37641"},{"sha":"31ec212f84edbe04b9b705f521ed7dc3bd7ddc3a","author":{"email":"9ec2b9d5f2203d75c2b0f7885bd663d9d57a2d20@squareup.com","name":"Jake Wharton"},"message":"Skip buffer allocation when not needed.","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/31ec212f84edbe04b9b705f521ed7dc3bd7ddc3a"},{"sha":"7756c4e4fe1cd703cff07d218da2fecb30f916c6","author":{"email":"a5c95b3d7cb4d0ae05a15c79c79ab458dc2c8f9e@swank.ca","name":"Jesse Wilson"},"message":"Merge pull request #1264 from square/jw/kill-two-allocations\\n\\nSkip buffer allocation when not needed.","distinct":false,"url":"https://api.github.com/repos/square/okhttp/commits/7756c4e4fe1cd703cff07d218da2fecb30f916c6"},{"sha":"bc9aa8a0c999232d2675cf5ba60e9c9d03f2a806","author":{"email":"9ec2b9d5f2203d75c2b0f7885bd663d9d57a2d20@squareup.com","name":"Jake Wharton"},"message":"Add a web socket call concept for connecting.\\n\\nSimilar to HTTP and Call, the WebSocketCall is a representation of a pending HTTP request and subsequent upgrade to speak web sockets. Upon synchronous execution you are handed a WebSocket instance for synchronous writing and also pass in a WebSocketListener for async callbacks due to reading.\\n\\nThe API changes in this commits also generalize WebSocket such that it's agnostic to being a client or server peer.","distinct":true,"url":"https://api.github.com/repos/square/okhttp/commits/bc9aa8a0c999232d2675cf5ba60e9c9d03f2a806"}] +5 [{"sha":"97a402b54bfd562b8cefd11f1361cd5af41b0535","author":{"email":"0b727f1f5f209fb32b7d5f0f03dfd6734cdab338@gmail.com","name":"Mohit"},"message":"init","distinct":true,"url":"https://api.github.com/repos/git4ruby/movie_review1/commits/97a402b54bfd562b8cefd11f1361cd5af41b0535"}] +6 [{"sha":"0fb2391e7aabeb57f358d5d51c70c766e6fa00d1","author":{"email":"821f468726cd384db724fde38ddabae6642cf80c@gmail.com","name":"Uygun BODUR"},"message":".","distinct":true,"url":"https://api.github.com/repos/uygunuks/AsalSayiKalibi/commits/0fb2391e7aabeb57f358d5d51c70c766e6fa00d1"}] +6 [{"sha":"fe5a3431a486388f6011fa8db52fba8a53f9aa70","author":{"email":"50f3f01caa053693ce619d596e14b0ff3901ab49@twistedlogik.net","name":"Cole Campbell"},"message":"Update README.md","distinct":false,"url":"https://api.github.com/repos/tlgkccampbell/ultraviolet/commits/fe5a3431a486388f6011fa8db52fba8a53f9aa70"},{"sha":"c71669b93924abc498af58855f8fe86564146673","author":{"email":"50f3f01caa053693ce619d596e14b0ff3901ab49@twistedlogik.net","name":"Cole Campbell"},"message":"Added missing update scripts for sample dependencies","distinct":false,"url":"https://api.github.com/repos/tlgkccampbell/ultraviolet/commits/c71669b93924abc498af58855f8fe86564146673"},{"sha":"e52d8a048be944e6d410a94ecec0cecc959e3dd4","author":{"email":"50f3f01caa053693ce619d596e14b0ff3901ab49@twistedlogik.net","name":"Cole Campbell"},"message":"Merge master","distinct":true,"url":"https://api.github.com/repos/tlgkccampbell/ultraviolet/commits/e52d8a048be944e6d410a94ecec0cecc959e3dd4"}] + diff --git a/regression-test/data/variant_p0/doc_snapshot/test_compaction.out b/regression-test/data/variant_p0/doc_snapshot/test_compaction.out new file mode 100644 index 00000000000000..17d62480897fe5 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/test_compaction.out @@ -0,0 +1,345 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql_1 -- +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} +2 {"a":"1"} +3 {"x":[3]} +3 {"x":[3]} +4 {"y":1} +4 {"y":1} +5 {"z":2} +5 {"z":2} +6 {"x":111} +6 {"x":111} +7 {"m":1} +7 {"m":1} +8 {"l":2} +8 {"l":2} +9 {"g":1.11} +9 {"g":1.11} +10 {"z":1.1111} +10 {"z":1.1111} +11 {"sala":0} +11 {"sala":0} +12 {"dddd":0.1} +12 {"dddd":0.1} +13 {"a":1} +13 {"a":1} +14 {"a":[[[1]]]} +14 {"a":[[[1]]]} +15 {"a":1} +15 {"a":1} +16 {"a":"1223"} +16 {"a":"1223"} +17 {"a":[1]} +17 {"a":[1]} +18 {"a":["1", 2, 1.1]} +18 {"a":["1", 2, 1.1]} +19 {"a":1,"b":{"c":1}} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +14 [null] +17 [1] +17 [1] +18 [1, 2, 1] +18 [1, 2, 1] + +-- !sql_3 -- +19 1 {"c":1} +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1029 1 {"c":1} +1999 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +10 \N +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +10 \N +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] + +-- !sql_11 -- +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} +2 {"a":"1"} +3 {"x":[3]} +3 {"x":[3]} +4 {"y":1} +4 {"y":1} +5 {"z":2} +5 {"z":2} +6 {"x":111} +6 {"x":111} +7 {"m":1} +7 {"m":1} +8 {"l":2} +8 {"l":2} +9 {"g":1.11} +9 {"g":1.11} +10 {"z":1.1111} +10 {"z":1.1111} +11 {"sala":0} +11 {"sala":0} +12 {"dddd":0.1} +12 {"dddd":0.1} +13 {"a":1} +13 {"a":1} +14 {"a":[[[1]]]} +14 {"a":[[[1]]]} +15 {"a":1} +15 {"a":1} +16 {"a":"1223"} +16 {"a":"1223"} +17 {"a":[1]} +17 {"a":[1]} +19 {"a":1,"b":{"c":1}} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +14 [null] +17 [1] +17 [1] +18 [1, 2, 1] +18 [1, 2, 1] + +-- !sql_33 -- +19 1 {"c":1} +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1029 1 {"c":1} +1999 1 {"c":1} +1999 1 {"c":1} + +-- !sql_1 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["1", 2, 1.1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_3 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_11 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_33 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_1 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["1", 2, 1.1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_3 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_11 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_33 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + diff --git a/regression-test/data/variant_p0/doc_snapshot/test_outfile_csv_variant_type.out b/regression-test/data/variant_p0/doc_snapshot/test_outfile_csv_variant_type.out new file mode 100644 index 00000000000000..e1ba2b4df1a304 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/test_outfile_csv_variant_type.out @@ -0,0 +1,39 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select_base1 -- +1 doris1 [9,99,999] +2 doris2 [8,88] +3 doris3 {"a":123} +4 doris4 \N +5 doris5 [1,null,2] +6 doris6 {"aaaa":"111111"} +7 doris7 {"bbbb":1.1111} +8 doris8 {"xxx":[111.11]} + +-- !select_load1 -- +1 doris1 [9,99,999] +2 doris2 [8,88] +3 doris3 {"a":123} +4 doris4 \N +5 doris5 [1,null,2] +6 doris6 {"aaaa":"111111"} +7 doris7 {"bbbb":1.1111} +8 doris8 {"xxx":[111.11]} + +-- !select_base2 -- +1 doris1 [9,99,999] +2 doris2 [8,88] +3 doris3 {"a":123} +5 doris5 [1,null,2] +6 doris6 {"aaaa":"111111"} +7 doris7 {"bbbb":1.1111} +8 doris8 {"xxx":[111.11]} + +-- !select_load2 -- +1 doris1 [9,99,999] +2 doris2 [8,88] +3 doris3 {"a":123} +5 doris5 [1,null,2] +6 doris6 {"aaaa":"111111"} +7 doris7 {"bbbb":1.1111} +8 doris8 {"xxx":[111.11]} + diff --git a/regression-test/data/variant_p0/doc_snapshot/test_variant_compaction_with_sparse_limit.out b/regression-test/data/variant_p0/doc_snapshot/test_variant_compaction_with_sparse_limit.out new file mode 100644 index 00000000000000..a5c4281ee9879c --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/test_variant_compaction_with_sparse_limit.out @@ -0,0 +1,381 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql_1 -- +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} +2 {"a":"1"} +3 {"x":[3]} +3 {"x":[3]} +4 {"y":1} +4 {"y":1} +5 {"z":2} +5 {"z":2} +6 {"x":111} +6 {"x":111} +7 {"m":1} +7 {"m":1} +8 {"l":2} +8 {"l":2} +9 {"g":1.11} +9 {"g":1.11} +10 {"z":1.1111} +10 {"z":1.1111} +11 {"sala":0} +11 {"sala":0} +12 {"dddd":0.1} +12 {"dddd":0.1} +13 {"a":1} +13 {"a":1} +14 {"a":[[[1]]]} +14 {"a":[[[1]]]} +15 {"a":1} +15 {"a":1} +16 {"a":"1223"} +16 {"a":"1223"} +17 {"a":[1]} +17 {"a":[1]} +18 {"a":["1",2,1.1]} +18 {"a":["1",2,1.1]} +19 {"a":1,"b":{"c":1}} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +14 [null] +17 [1] +17 [1] +18 [1, 2, 1] +18 [1, 2, 1] + +-- !sql_3 -- +19 1 {"c":1} +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1029 1 {"c":1} +1999 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +10 \N +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +10 \N +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] + +-- !sql_11 -- +1 {"x":[1]} +1 {"x":[1]} +2 {"a":"1"} +2 {"a":"1"} +3 {"x":[3]} +3 {"x":[3]} +4 {"y":1} +4 {"y":1} +5 {"z":2} +5 {"z":2} +6 {"x":111} +6 {"x":111} +7 {"m":1} +7 {"m":1} +8 {"l":2} +8 {"l":2} +9 {"g":1.11} +9 {"g":1.11} +10 {"z":1.1111} +10 {"z":1.1111} +11 {"sala":0} +11 {"sala":0} +12 {"dddd":0.1} +12 {"dddd":0.1} +13 {"a":1} +13 {"a":1} +14 {"a":[[[1]]]} +14 {"a":[[[1]]]} +15 {"a":1} +15 {"a":1} +16 {"a":"1223"} +16 {"a":"1223"} +17 {"a":[1]} +17 {"a":[1]} +18 {"a":["1",2,1.1]} +18 {"a":["1",2,1.1]} +19 {"a":1,"b":{"c":1}} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +14 [null] +17 [1] +17 [1] +18 [1, 2, 1] +18 [1, 2, 1] + +-- !sql_33 -- +19 1 {"c":1} +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1029 1 {"c":1} +1999 1 {"c":1} +1999 1 {"c":1} + +-- !sql_55 -- +10 \N +10 \N +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +{"c":1} 1 +10 \N +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] + +-- !sql_1 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["1",2,1.1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_3 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_11 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["1",2,1.1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_33 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_55 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_1 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["1",2,1.1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_2 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_3 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_5 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + +-- !sql_11 -- +1 {"x":[1]} +2 {"a":"1"} +3 {"x":[3]} +4 {"y":1} +5 {"z":2} +6 {"x":111} +7 {"m":1} +8 {"l":2} +9 {"g":1.11} +10 {"z":1.1111} +11 {"sala":0} +12 {"dddd":0.1} +13 {"a":1} +14 {"a":[[[1]]]} +15 {"a":1} +16 {"a":"1223"} +17 {"a":[1]} +18 {"a":["1",2,1.1]} +19 {"a":1,"b":{"c":1}} +20 {"a":1,"b":{"c":[{"a":1}]}} +21 {"a":1,"b":{"c":[{"a":1}]}} +22 {"a":1,"b":{"c":[{"a":1}]}} +1022 {"a":1,"b":10} +1029 {"a":1,"b":{"c":1}} +1999 {"a":1,"b":{"c":1}} +19921 {"a":1,"b":10} + +-- !sql_22 -- +14 [null] +17 [1] +18 [1, 2, 1] + +-- !sql_33 -- +19 1 {"c":1} +20 1 {"c":[{"a":1}]} +21 1 {"c":[{"a":1}]} +22 1 {"c":[{"a":1}]} +1029 1 {"c":1} +1999 1 {"c":1} + +-- !sql_55 -- +10 \N +{"c":1} 1 +{"c":1} 1 +10 \N +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":[{"a":1}]} [{"a":1}] +{"c":1} 1 + diff --git a/regression-test/data/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.out b/regression-test/data/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.out new file mode 100644 index 00000000000000..6503d559891a08 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.out @@ -0,0 +1,162 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !many_1 -- +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +8 0 +9 0 + +-- !many_2 -- +5 50 +6 50 +7 50 +8 50 +9 50 + +-- !many_3 -- +9 99 + +-- !many_4 -- +10 + +-- !mixed_1 -- +1 1 +2 10 +3 100 +4 1000 + +-- !mixed_2 -- +1 2 + +-- !mixed_3 -- +2 3 + +-- !mixed_4 -- +3 4 + +-- !mixed_5 -- +4 5 + +-- !mixed_after_compact_1 -- +1 1 +2 10 +3 100 +4 1000 + +-- !mixed_after_compact_2 -- +4 + +-- !nested_1 -- +1 value +2 value2 +3 \N +4 \N + +-- !nested_2 -- +2 123 + +-- !nested_3 -- +1 +2 + +-- !nested_4 -- +1 +2 + +-- !array_1 -- +1 [1, 2, 3] +2 [10, 20, 30, 40] +3 \N +4 \N + +-- !array_2 -- +1 +2 + +-- !evolution_1 -- +1 1 +2 2 +3 3 +4 \N + +-- !evolution_2 -- +1 \N +2 2 +3 3 +4 \N + +-- !evolution_3 -- +1 \N +2 \N +3 3 +4 \N + +-- !evolution_4 -- +1 \N +2 \N +3 \N +4 10 + +-- !evolution_5 -- +1 \N +2 \N +3 \N +4 20 + +-- !special_1 -- +1 1 + +-- !special_2 -- +2 2 + +-- !special_3 -- +3 3 + +-- !null_1 -- +1 \N +2 1 +3 \N + +-- !null_2 -- +3 + +-- !null_3 -- +1 +3 + +-- !null_4 -- +2 + +-- !large_1 -- +1 10000 +2 5 + +-- !large_2 -- +1 + +-- !toggle_1 -- +1 1 +2 2 +3 3 + +-- !toggle_2 -- +2 2 +3 3 + +-- !toggle_3 -- +3 3 + +-- !toggle_after_compact_1 -- +1 1 +2 2 +3 3 + +-- !toggle_after_compact_2 -- +2 2 +3 3 + diff --git a/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out b/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out new file mode 100644 index 00000000000000..24179544e53235 --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out @@ -0,0 +1,64 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +-3 {"a":1,"b":1.5,"c":[1, 2, 3]} +-2 {"a":11245,"b":[123,{"xx":1}],"c":{"c":456,"d":"null","e":7.111}} +-1 {"a":1123} +0 {"a":1234,"xxxx":"kaana"} +1 {"a":1234,"xxxx":"kaana"} +2 {"a":1234,"xxxx":"kaana"} +3 {"a":1234,"xxxx":"kaana"} +4 {"a":1234,"xxxx":"kaana"} +5 {"a":1234,"xxxx":"kaana"} +6 {"a":1234,"xxxx":"kaana"} + +-- !sql -- +[1, 2, 3] +{"c":456,"d":"null","e":7.111} + +-- !sql -- +1.5 +[123,{"xx":1}] + +-- !sql1 -- +12345 +[1, 2, 3] +{"c":456,"d":"null","e":7.111} + +-- !sql2 -- +12345 +[1, 2, 3] +{"c":456,"d":"null","e":7.111} + +-- !sql -- +{"d":2} +{} +{"d":6} + +-- !sql -- +{"d":2.00000} +{} +{"d":6.00000} +\N +\N + +-- !sql -- +{"a":1,"b":2,"c":{"d":2.00000}} +{"a":3,"b":4} +{"c":{"d":6.00000}} +\N +{} + +-- !sql -- +1 {} {} +2 {} {} +3 \N {"a":1,"b":2,"c":3,"d":4} + +-- !sql -- +3 \N {"a":1,"b":2,"c":3,"d":4} + +-- !sql -- +{} +{"age":30,"name":"John"} +{} +{"age":30,"name":"John"} + diff --git a/regression-test/data/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.out b/regression-test/data/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.out new file mode 100644 index 00000000000000..b33f51d0928c4c --- /dev/null +++ b/regression-test/data/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.out @@ -0,0 +1,1008 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +12 + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- + +-- !sql -- + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2017-01-01 021603e7dcfe65d44af0efd0e5aee154 {"inventors":["n"]} +2017-01-01 48a33ec3453a28bce84b8f96fe161956 {"inventors":["m"]} +2017-01-01 6afef581285b6608bf80d5a4e46cf839 {"inventors":["a", "b", "c"]} +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a3 \N +2017-01-01 8fcb57ae675f0af4d613d9e6c0e8a2a4 \N +2017-01-01 9fcb57ae675f0af4d613d9e6c0e8a2a2 {"inventors":["o"]} +2017-01-01 d93d942d985a8fb7547c72dada8d332d {"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]} +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + +-- !sql -- +2019-01-01 0974e7a82e30d1af83205e474fadd0a2 {"inventors":["w"]} +2019-01-01 26823b3995ee38bd145ddd910b2f6300 {"inventors":["x"]} +2019-01-01 a648a447b8f71522f11632eba4b4adde {"inventors":["p", "q", "r", "s", "t"]} +2019-01-01 a9fb5c985c90bf05f3bee5ca3ae95260 {"inventors":["u", "v"]} +2019-01-01 ee27ee1da291e46403c408e220bed6e1 {"inventors":["y"]} + diff --git a/regression-test/data/variant_p0/nested.out b/regression-test/data/variant_p0/nested.out index 6c3ff0802bcb73..877bd665f21e5e 100644 --- a/regression-test/data/variant_p0/nested.out +++ b/regression-test/data/variant_p0/nested.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.aaa array Yes false \N NONE v.nested.ax1111 array Yes false \N NONE diff --git a/regression-test/data/variant_p0/nested2.out b/regression-test/data/variant_p0/nested2.out index 357f76927e714d..d9bd80f4316c49 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 Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -50,7 +50,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -169,7 +169,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_4 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -218,7 +218,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_5 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array 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 index 0c0929b0266375..0b1bf6b37ff889 100644 --- 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 @@ -8,13 +8,13 @@ -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.tinyint_1 tinyint Yes false \N NONE -- !sql -- @@ -25,13 +25,13 @@ var.tinyint_1 tinyint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.smallint_1 smallint Yes false \N NONE -- !sql -- @@ -45,13 +45,13 @@ var.smallint_1 smallint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.int_1 int Yes false \N NONE -- !sql -- @@ -69,13 +69,13 @@ var.int_1 int Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.bigint_1 bigint Yes false \N NONE -- !sql -- @@ -98,13 +98,13 @@ var.bigint_1 bigint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.largeint_1 largeint Yes false \N NONE -- !sql -- @@ -133,13 +133,13 @@ var.largeint_1 largeint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.char_1 text Yes false \N NONE -- !sql -- @@ -175,13 +175,13 @@ var.char_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -225,13 +225,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -283,13 +283,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.double_1 double Yes false \N NONE -- !sql -- @@ -350,13 +350,13 @@ var.double_1 double Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal32_1 decimal(8,2) Yes false \N NONE -- !sql -- @@ -427,13 +427,13 @@ var.decimal32_1 decimal(8,2) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal64_1 decimal(16,9) Yes false \N NONE -- !sql -- @@ -515,13 +515,13 @@ var.decimal64_1 decimal(16,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal128_1 decimal(36,9) Yes false \N NONE -- !sql -- @@ -615,13 +615,13 @@ var.decimal128_1 decimal(36,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -728,13 +728,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.datetime_1 datetime 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -854,13 +854,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.date_1 date 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.date_1 date Yes false \N NONE -- !sql -- @@ -994,13 +994,13 @@ var.date_1 date Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.ipv4_1 ipv4 Yes false \N NONE -- !sql -- @@ -1149,13 +1149,13 @@ var.ipv4_1 ipv4 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1320,13 +1320,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_boolean_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1507,13 +1507,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_tinyint_1 array Yes false \N NONE -- !sql -- @@ -1712,13 +1712,13 @@ var.array_tinyint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_smallint_1 array Yes false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_smallint_1 array Yes false \N NONE -- !sql -- @@ -1936,13 +1936,13 @@ var.array_smallint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_int_1 array Yes false \N NONE var.array_smallint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_int_1 array Yes false \N NONE -- !sql -- @@ -2180,13 +2180,13 @@ var.array_int_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_int_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE -- !sql -- @@ -2445,13 +2445,13 @@ var.array_bigint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_largeint_1 array Yes false \N NONE -- !sql -- @@ -2732,13 +2732,13 @@ var.array_largeint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE -- !sql -- @@ -3042,13 +3042,13 @@ var.array_char_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_string_1 array Yes false \N NONE -- !sql -- @@ -3376,13 +3376,13 @@ var.array_string_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_float_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_float_1 array Yes false \N NONE -- !sql -- @@ -3735,13 +3735,13 @@ var.array_float_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_double_1 array Yes false \N NONE var.array_float_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_double_1 array Yes false \N NONE -- !sql -- @@ -4120,13 +4120,13 @@ var.array_double_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_double_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE -- !sql -- @@ -4532,13 +4532,13 @@ var.array_decimal32_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal64_1 array Yes false \N NONE -- !sql -- @@ -4972,13 +4972,13 @@ var.array_decimal64_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE -- !sql -- @@ -5441,13 +5441,13 @@ var.array_decimal128_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal256_1 array Yes false \N NONE -- !sql -- @@ -5940,13 +5940,13 @@ var.array_decimal256_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_datetime_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_datetime_1 array Yes false \N NONE -- !sql -- @@ -6470,13 +6470,13 @@ var.array_datetime_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_datetime_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE -- !sql -- @@ -7032,13 +7032,13 @@ var.array_date_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_ipv4_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE -- !sql -- @@ -7627,13 +7627,13 @@ var.array_ipv4_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv6_1 array Yes false \N NONE -- !sql -- @@ -8256,13 +8256,13 @@ var.array_ipv6_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_sparse_hash_shard_count" = "3")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.other_1 text Yes false \N NONE -- !sql -- diff --git a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out index a65c3ec1fb5c4b..438f45d55c1cfa 100644 --- a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out +++ b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out @@ -1,11 +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 Yes false \N NONE +var variant Yes false \N NONE -- !sql -- id bigint Yes true \N -var variant Yes false \N NONE -var2 variant Yes false \N NONE -var3 variant Yes false \N NONE +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE diff --git a/regression-test/data/variant_p1/doc_snapshot/load.out b/regression-test/data/variant_p1/doc_snapshot/load.out new file mode 100644 index 00000000000000..1e6975623acbab --- /dev/null +++ b/regression-test/data/variant_p1/doc_snapshot/load.out @@ -0,0 +1,91 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +apache/spark +apache/spark +apache/spark +apache/incubator-pekko +apache/spark +apache/spark +apache/spark +apache/spark +apache/infrastructure-puppet +apache/spark + +-- !sql -- +AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +Avaiga/taipy-core +BrightspaceUI/core +ChutimaNakaew/lab11-core +ChutimaNakaew/lab11-core +CtrlAltT0m/Cyber-Core-Skills-Course +CyanogenMod/android_system_core +CyanogenMod/android_system_core +CyanogenMod/android_system_core + +-- !sql -- +xpressengine/xe-core +xpressengine/xe-core +xpressengine/xe-core +xpressengine/xe-core + +-- !sql -- +Jennyhz7/Container-Apache +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/arrow +apache/arrow + +-- !sql -- +AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +Avaiga/taipy-core +BrightspaceUI/core +ChutimaNakaew/lab11-core +ChutimaNakaew/lab11-core +CtrlAltT0m/Cyber-Core-Skills-Course +CyanogenMod/android_system_core +CyanogenMod/android_system_core +CyanogenMod/android_system_core + +-- !sql -- +xpressengine/xe-core +xpressengine/xe-core +xpressengine/xe-core +xpressengine/xe-core + +-- !sql -- +Jennyhz7/Container-Apache +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/airflow +apache/arrow +apache/arrow + +-- !sql -- +AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +AttackOnDobby/iOS-Core-Animation-Advanced-Techniques +Avaiga/taipy-core +BrightspaceUI/core +ChutimaNakaew/lab11-core +ChutimaNakaew/lab11-core +CtrlAltT0m/Cyber-Core-Skills-Course +CyanogenMod/android_system_core +CyanogenMod/android_system_core +CyanogenMod/android_system_core + +-- !sql -- +xpressengine/xe-core +xpressengine/xe-core +xpressengine/xe-core +xpressengine/xe-core + 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 17e26f0f4a0e86..c633cb7476c383 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 @@ -18,7 +18,11 @@ suite("create_nestedtypes_with_schemachange", "p0") { def create_nested_table_and_schema_change = {testTablex, nested_type, column_name, error -> // create basic type - sql "set default_variant_max_subcolumns_count = 0" + sql "set default_variant_max_subcolumns_count = 0" + sql "set default_variant_enable_typed_paths_to_sparse = false" + sql "set default_variant_max_sparse_column_statistics_size = 0" + sql "set default_variant_sparse_hash_shard_count = 0" + sql "set default_variant_enable_doc_snapshot_mode = false" sql "DROP TABLE IF EXISTS $testTablex" sql """ CREATE TABLE $testTablex ( col0 BIGINT NOT NULL, col2 int NOT NULL, col3 array NULL, col4 map NULL, col5 struct NULL diff --git a/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy b/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy index 9ea95a287b7ec7..9871a0772a20b4 100644 --- a/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy +++ b/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy @@ -25,6 +25,7 @@ suite("test_outfile_csv_variant_type", "p0") { // open nereids sql """ set enable_nereids_planner=true """ sql """ set enable_fallback_to_original_planner=false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ String ak = getS3AK() String sk = getS3SK() 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 88b228258306e6..f40f23f908e1b2 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 @@ -45,6 +45,7 @@ suite("test_compaction_variant_with_sparse_limit", "nonConcurrent") { if (max_subcolumns_count == 1) { max_subcolumns_count = 0 } + sql """ set default_variant_enable_doc_snapshot_mode = false """ def create_table = { tableName, buckets="auto", key_type="DUPLICATE" -> sql "DROP TABLE IF EXISTS ${tableName}" def var_def = "variant " diff --git a/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy b/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy index 28e9b03dce30cd..e947a97acb70e2 100644 --- a/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy +++ b/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy @@ -57,7 +57,7 @@ suite("test_local_schema_change_storge_format", "p0") { } } } - + sql """ set default_variant_doc_snapshot_min_rows = 0 """ def table_name = "github_events" sql """DROP TABLE IF EXISTS ${table_name}""" sql """ diff --git a/regression-test/suites/variant_doc_snapshot_p2/load.groovy b/regression-test/suites/variant_doc_snapshot_p2/load.groovy new file mode 100644 index 00000000000000..2cca09f538a0ff --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/load.groovy @@ -0,0 +1,181 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite("test_doc_snapshot_p2", "nonConcurrent,p2"){ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + // prepare test table + def timeout = 300000 + def delta_time = 1000 + def alter_res = "null" + def useTime = 0 + def wait_for_latest_op_on_table_finish = { table_name, OpTimeout -> + for(int t = delta_time; t <= OpTimeout; t += delta_time){ + alter_res = sql """SHOW ALTER TABLE COLUMN WHERE TableName = "${table_name}" ORDER BY CreateTime DESC LIMIT 1;""" + alter_res = alter_res.toString() + if(alter_res.contains("FINISHED")) { + sleep(10000) // wait change table state to normal + logger.info(table_name + " 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 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 table_name = "github_events" + sql """DROP TABLE IF EXISTS ${table_name}""" + sql "set enable_variant_flatten_nested = true" + table_name = "github_events" + int rand_subcolumns_count = Math.floor(Math.random() * (611 - 511 + 1)) + 511 + if ((rand_subcolumns_count % 2) == 0) { + rand_subcolumns_count = 0 + } + sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql "set enable_variant_flatten_nested = true" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant + -- 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" = "false", "inverted_index_storage_format"= "v2"); + """ + // 2015 + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-1.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-2.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-3.json'}""") + + // // build inverted index at middle of loading the data + // ADD INDEX + sql """ ALTER TABLE github_events ADD INDEX idx_var (`v`) USING INVERTED PROPERTIES("parser" = "english", "support_phrase" = "true") """ + wait_for_latest_op_on_table_finish("github_events", timeout) + + // 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'}""") + + // BUILD INDEX + if (!isCloudMode()) { + test { + sql """ BUILD INDEX idx_var ON github_events""" + exception "The idx_var index can not be built on the v column, because it is a variant type column" + } + } + + + // // add bloom filter at the end of loading data + + def tablets = sql_return_maparray """ show tablets from github_events; """ + // trigger compactions for all tablets in github_events + trigger_and_wait_compaction("github_events", "full") + + sql """set enable_match_without_inverted_index = false""" + sql """ set enable_common_expr_pushdown = true """ + // filter by bloom filter + qt_sql """select cast(v["payload"]["pull_request"]["additions"] as int) from github_events where cast(v["repo"]["name"] as string) = 'xpressengine/xe-core' order by 1;""" + + sql """ALTER TABLE github_events SET("bloom_filter_columns" = "v")""" + + waitForSchemaChangeDone { + sql """SHOW ALTER TABLE COLUMN WHERE IndexName='github_events' ORDER BY createtime DESC LIMIT 1""" + time 600 + } + + qt_sql """select * from github_events where cast(v["repo"]["name"] as string) = 'xpressengine/xe-core' order by 1 limit 10""" + sql """select * from github_events order by k limit 10""" + + sql "DROP TABLE IF EXISTS github_events2" + sql """ + CREATE TABLE IF NOT EXISTS github_events2 ( + k bigint, + v variant not null + ) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 4 + properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_enable_flatten_nested" = "false", "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 ;""" + sql """select v['payload']['commits'] from github_events2 order by k ;""" + + // query with inverted index + qt_sql """select cast(v["payload"]["pull_request"]["additions"] as int) from github_events where v["repo"]["name"] match 'xpressengine' order by 1;""" + qt_sql """select count() from github_events where v["repo"]["name"] match 'apache' order by 1;""" + + sql """ALTER TABLE github_events SET("bloom_filter_columns" = "k,v")""" + + waitForSchemaChangeDone { + sql """SHOW ALTER TABLE COLUMN WHERE IndexName='github_events' ORDER BY createtime DESC LIMIT 1""" + time 600 + } + + sql """ALTER TABLE github_events2 SET("bloom_filter_columns" = "k,v")""" + + waitForSchemaChangeDone { + sql """SHOW ALTER TABLE COLUMN WHERE IndexName='github_events' ORDER BY createtime DESC LIMIT 1""" + time 600 + } + + // specify schema + // sql "alter table github_events2 modify column v variant<`payload.comment.id`:int,`payload.commits.url`:text,`payload.forkee.has_pages`:tinyint>" + // load_json_data.call("github_events2", """${getS3Url() + '/regression/gharchive.m/2022-11-07-23.json'}""") + // qt_sql "select * from github_events2 WHERE 1=1 ORDER BY k DESC LIMIT 10" + // qt_sql "select v['payload']['commits'] from github_events2 WHERE 1=1 ORDER BY k DESC LIMIT 10" + // qt_sql "select v['payload']['commits']['url'] from github_events2 WHERE 1=1 ORDER BY k DESC LIMIT 10" +} diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.sql new file mode 100644 index 00000000000000..55c3589753fb73 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs1.sql @@ -0,0 +1,14 @@ +SELECT + cast(v["repo"]["name"] as string), + count() AS prs, + count(distinct cast(v["actor"]["login"] as string)) AS authors +FROM github_events +WHERE (cast(v["type"] as string) = 'PullRequestEvent') AND (cast(v["payload"]["action"] as string) = 'opened') AND (cast(v["actor"]["login"] as string) IN +( + SELECT cast(v["actor"]["login"] as string) + FROM github_events + WHERE (cast(v["type"] as string) = 'PullRequestEvent') AND (cast(v["payload"]["action"] as string)= 'opened') AND (cast(v["repo"]["name"] as string) IN ('rspec/rspec-core', 'golden-warning/giraffedraft-server', 'apache/spark')) +)) AND (lower(cast(v["repo"]["name"] as string)) NOT LIKE '%clickhouse%') +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY authors DESC, prs DESC, cast(v["repo"]["name"] as string) DESC +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.sql new file mode 100644 index 00000000000000..e9158f8246b532 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/affinityByIssuesAndPRs2.sql @@ -0,0 +1,14 @@ +SELECT + cast(v["repo"]["name"] as string), + count() AS prs, + count(distinct cast(v["actor"]["login"] as string)) AS authors +FROM github_events +WHERE (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') AND (cast(v["actor"]["login"] as string) IN +( + SELECT cast(v["actor"]["login"] as string) + FROM github_events + WHERE (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') AND (cast(v["repo"]["name"] as string) IN ('No-CQRT/GooGuns', 'ivolunteerph/ivolunteerph', 'Tribler/tribler')) +)) AND (lower(cast(v["repo"]["name"] as string)) NOT LIKE '%clickhouse%') +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY authors DESC, prs DESC, cast(v["repo"]["name"] as string) ASC +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.sql new file mode 100644 index 00000000000000..2e8bf32009814e --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/authorsWithTheMostPushes.sql @@ -0,0 +1,9 @@ +SELECT + cast(v["actor"]["login"] as string), + count() AS c, + count(distinct cast(v["repo"]["name"] as string)) AS repos + FROM github_events + WHERE cast(v["type"] as string) = 'PushEvent' + GROUP BY cast(v["actor"]["login"] as string) + ORDER BY c DESC, 1, 3 + LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar1.sql new file mode 100644 index 00000000000000..8b2d615acd052e --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar1.sql @@ -0,0 +1 @@ +SELECT count() FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar2.sql new file mode 100644 index 00000000000000..057a410e0caeeb --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar2.sql @@ -0,0 +1 @@ +SELECT cast(v["payload"]["action"] as string), count() FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY cast(v["payload"]["action"] as string) \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar3.sql new file mode 100644 index 00000000000000..9b5f41288901d7 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/countingStar3.sql @@ -0,0 +1 @@ +SELECT count() FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND cast(v["repo"]["name"] as string) IN ('apache/spark', 'GunZi200/Memory-Colour', 'isohuntto/openbay', 'wasabeef/awesome-android-ui') GROUP BY cast(v["payload"]["action"] as string) \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.sql new file mode 100644 index 00000000000000..e2d987afe6510b --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/distributionOfRepositoriesByStarCount.sql @@ -0,0 +1,14 @@ +SELECT + pow(10, floor(log10(c))) AS stars, + count(distinct k) +FROM +( + SELECT + cast(v["repo"]["name"] as string) as k, + count() AS c + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' + GROUP BY cast(v["repo"]["name"] as string) +) t +GROUP BY stars +ORDER BY stars ASC diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/githubRoulette.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/githubRoulette.sql new file mode 100644 index 00000000000000..0b9ea42f77d8ea --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/githubRoulette.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string) FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' ORDER BY cast(v["created_at"] as datetime), cast(v["repo"]["name"] as string) LIMIT 50 \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.sql new file mode 100644 index 00000000000000..95389cb9a0651c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears1.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND year(cast(v["created_at"] as datetime)) = '2015' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.sql new file mode 100644 index 00000000000000..95389cb9a0651c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears2.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND year(cast(v["created_at"] as datetime)) = '2015' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.sql new file mode 100644 index 00000000000000..67b5d0d3d18969 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears3.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND year(cast(v["created_at"] as datetime)) = '2015' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars, cast(v["repo"]["name"] as string) DESC LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.sql new file mode 100644 index 00000000000000..95389cb9a0651c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears4.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND year(cast(v["created_at"] as datetime)) = '2015' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.sql new file mode 100644 index 00000000000000..95389cb9a0651c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears5.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND year(cast(v["created_at"] as datetime)) = '2015' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.sql new file mode 100644 index 00000000000000..95389cb9a0651c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears6.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND year(cast(v["created_at"] as datetime)) = '2015' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears7.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears7.sql new file mode 100644 index 00000000000000..ee2fbef43b3f53 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheListOfTopRepositoriesChangedOverTheYears7.sql @@ -0,0 +1,30 @@ +-- FIXME: UNSTABLE +-- SELECT +-- repo, +-- year, +-- cnt +-- FROM +-- ( +-- SELECT +-- row_number() OVER (PARTITION BY year ORDER BY cnt DESC) AS r, +-- repo, +-- year, +-- cnt +-- FROM +-- ( +-- SELECT +-- lower(cast(v["repo"]["name"] as string)) AS repo, +-- year(cast(v["created_at"] as datetime)) AS year, +-- count() AS cnt +-- FROM github_events +-- WHERE (cast(v["type"] as string) = 'WatchEvent') AND (year(cast(v["created_at"] as datetime)) >= 2015) +-- GROUP BY +-- repo, +-- year +-- ) t +-- ) t2 +-- WHERE r <= 10 +-- ORDER BY +-- year ASC, +-- cnt DESC, repo +-- \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.sql new file mode 100644 index 00000000000000..5291ab5100649a --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/howHasTheTotalNumberOfStarsChangedOverTime.sql @@ -0,0 +1,2 @@ +SELECT year(cast(v["created_at"] as datetime)) AS year, count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY year ORDER BY year + diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.sql new file mode 100644 index 00000000000000..0117055d53e7f6 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments1.sql @@ -0,0 +1 @@ +SELECT count() FROM github_events WHERE cast(v["type"] as string) = 'IssueCommentEvent' diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.sql new file mode 100644 index 00000000000000..25e96fe731ebc7 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments2.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() FROM github_events WHERE cast(v["type"] as string) = 'IssueCommentEvent' GROUP BY cast(v["repo"]["name"] as string) ORDER BY count() DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.sql new file mode 100644 index 00000000000000..c32210845e3a7b --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments3.sql @@ -0,0 +1,17 @@ +SELECT + repo_name, + comments, + issues, + round(comments / issues, 2) AS ratio +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + count() AS comments, + count(distinct cast(v["payload"]["issue"]["number"] as int)) AS issues + FROM github_events + WHERE cast(v["type"] as string) = 'IssueCommentEvent' + GROUP BY cast(v["repo"]["name"] as string) +) t +ORDER BY comments DESC, 1, 3, 4 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.sql new file mode 100644 index 00000000000000..ad8e5c104ccfc2 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments4.sql @@ -0,0 +1,9 @@ +SELECT + cast(v["repo"]["name"] as string), + cast(v["payload"]["issue"]["number"] as int) as number, + count() AS comments +FROM github_events +WHERE cast(v["type"] as string) = 'IssueCommentEvent' AND (cast(v["payload"]["action"] as string) = 'created') +GROUP BY cast(v["repo"]["name"] as string), number +ORDER BY comments DESC, number ASC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.sql new file mode 100644 index 00000000000000..0520ed0b8dc768 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments5.sql @@ -0,0 +1,9 @@ +SELECT + cast(v["repo"]["name"] as string), + cast(v["payload"]["issue"]["number"] as int) as number, + count() AS comments +FROM github_events +WHERE cast(v["type"] as string) = 'IssueCommentEvent' AND (cast(v["payload"]["action"] as string) = 'created') AND (cast(v["payload"]["issue"]["number"] as int) > 10) +GROUP BY cast(v["repo"]["name"] as string), number +ORDER BY comments DESC, cast(v["repo"]["name"] as string), number +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.sql new file mode 100644 index 00000000000000..edab4d50e26300 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments6.sql @@ -0,0 +1,11 @@ +SELECT + cast(v["repo"]["name"] as string), + cast(v["payload"]["issue"]["number"] as int) as number, + count() AS comments, + count(distinct cast(v["actor"]["login"] as string)) AS authors +FROM github_events +WHERE cast(v["type"] as string) = 'IssueCommentEvent' AND (cast(v["payload"]["action"] as string) = 'created') AND (cast(v["payload"]["issue"]["number"] as int) > 10) +GROUP BY cast(v["repo"]["name"] as string), number +HAVING authors >= 4 +ORDER BY comments DESC, cast(v["repo"]["name"] as string) +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.sql new file mode 100644 index 00000000000000..047f2d7a1d48fe --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments7.sql @@ -0,0 +1,9 @@ +SELECT + cast(v["repo"]["name"] as string), + count() AS comments, + count(distinct cast(v["actor"]["login"] as string)) AS authors +FROM github_events +WHERE cast(v["type"] as string) = 'CommitCommentEvent' +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY count() DESC, 1, 3 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments8.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments8.sql new file mode 100644 index 00000000000000..e6890c1e23505f --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/issuesWithTheMostComments8.sql @@ -0,0 +1,13 @@ +-- SELECT +-- concat('https://github.com/', cast(v["repo"]["name"] as string), '/commit/', cast(v["payload"]["commit_id"] as string)) URL, +-- cast(v["payload"]["commit_id"] as string) AS commit_id, +-- count() AS comments, +-- count(distinct cast(v["actor"]["login"] as string)) AS authors +-- FROM github_events +-- WHERE (cast(v["type"] as string) = 'CommitCommentEvent') AND commit_id != "" +-- GROUP BY +-- cast(v["repo"]["name"] as string), +-- commit_id +-- HAVING authors >= 10 +-- ORDER BY count() DESC, URL, authors +-- LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/mostForkedRepositories.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/mostForkedRepositories.sql new file mode 100644 index 00000000000000..aab10cb79335a8 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/mostForkedRepositories.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS forks FROM github_events WHERE cast(v["type"] as string) = 'ForkEvent' GROUP BY cast(v["repo"]["name"] as string) ORDER BY forks DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.sql new file mode 100644 index 00000000000000..c36efe7561b7e8 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/mostPopularCommentsOnGithub.sql @@ -0,0 +1 @@ +SELECT cast(v["payload"]["comment"]["body"] as string), count() FROM github_events WHERE cast(v["payload"]["comment"]["body"] as string) != "" AND length(cast(v["payload"]["comment"]["body"] as string)) < 100 GROUP BY cast(v["payload"]["comment"]["body"] as string) ORDER BY count(), 1 DESC LIMIT 50 \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.sql new file mode 100644 index 00000000000000..d943c07de6a45f --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfRepositories.sql @@ -0,0 +1,14 @@ +SELECT + lower(split_part(repo_name, '/', 1)) AS org, + count(distinct repo_name) AS repos +FROM +( + SELECT cast(v["repo"]["name"] as string) as repo_name + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' + GROUP BY cast(v["repo"]["name"] as string) + HAVING count() >= 10 +) t +GROUP BY org +ORDER BY repos DESC, org ASC +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.sql new file mode 100644 index 00000000000000..22f0a8cbba706e --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheNumberOfStars.sql @@ -0,0 +1,8 @@ +SELECT + lower(split_part(cast(v["repo"]["name"] as string), '/', 1)) AS org, + count() AS stars +FROM github_events +WHERE cast(v["type"] as string) = 'WatchEvent' +GROUP BY org +ORDER BY stars DESC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheSizeOfCommunity.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheSizeOfCommunity.sql new file mode 100644 index 00000000000000..e445e7db3e9657 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/organizationsByTheSizeOfCommunity.sql @@ -0,0 +1,23 @@ +-- SELECT +-- lower(split_part(cast(v["repo"]["name"] as string), '/', 1)) AS org, +-- count(distinct cast(v["actor"]["login"] as string)) AS authors, +-- count(distinct pr_author) AS pr_authors, +-- count(distinct issue_author) AS issue_authors, +-- count(distinct comment_author) AS comment_authors, +-- count(distinct review_author) AS review_authors, +-- count(distinct push_author) AS push_authors +-- FROM +-- ( +-- SELECT +-- cast(v["repo"]["name"] as string), +-- cast(v["actor"]["login"] as string), +-- CASE WHEN cast(v["type"] as string) = 'PullRequestEvent' THEN cast(v["actor"]["login"] as string) ELSE NULL END pr_author, +-- CASE WHEN cast(v["type"] as string) = 'IssuesEvent' THEN cast(v["actor"]["login"] as string) ELSE NULL END issue_author, +-- CASE WHEN cast(v["type"] as string) = 'IssueCommentEvent' THEN cast(v["actor"]["login"] as string) ELSE NULL END comment_author, +-- CASE WHEN cast(v["type"] as string) = 'PullRequestReviewCommentEvent' THEN cast(v["actor"]["login"] as string) ELSE NULL END review_author, +-- CASE WHEN cast(v["type"] as string) = 'PushEvent' THEN cast(v["actor"]["login"] as string) ELSE NULL END push_author +-- FROM github_events +-- WHERE cast(v["type"] as string) IN ('PullRequestEvent', 'IssuesEvent', 'IssueCommentEvent', 'PullRequestReviewCommentEvent', 'PushEvent') +-- ) t +-- GROUP BY org +-- ORDER BY authors DESC diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.sql new file mode 100644 index 00000000000000..65ab889b2511a6 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks1.sql @@ -0,0 +1,17 @@ +SELECT + repo_name, + sum(fork) AS forks, + sum(star) AS stars, + round(sum(star) / sum(fork), 3) AS ratio +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'ForkEvent' THEN 1 ELSE 0 END AS fork, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events + WHERE cast(v["type"] as string) IN ('ForkEvent', 'WatchEvent') +) t +GROUP BY repo_name +ORDER BY forks DESC, 1, 3, 4 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.sql new file mode 100644 index 00000000000000..ffff95dfdc64c0 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks2.sql @@ -0,0 +1,18 @@ +SELECT + repo_name, + sum(fork) AS forks, + sum(star) AS stars, + round(sum(star) / sum(fork), 3) AS ratio +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'ForkEvent' THEN 1 ELSE 0 END AS fork, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events + WHERE cast(v["type"] as string) IN ('ForkEvent', 'WatchEvent') +) t +GROUP BY repo_name +HAVING (stars > 20) AND (forks >= 10) +ORDER BY ratio DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.sql new file mode 100644 index 00000000000000..f47c5163302b9c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks3.sql @@ -0,0 +1,18 @@ +SELECT + repo_name, + sum(fork) AS forks, + sum(star) AS stars, + round(sum(fork) / sum(star), 2) AS ratio +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'ForkEvent' THEN 1 ELSE 0 END AS fork, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events + WHERE cast(v["type"] as string) IN ('ForkEvent', 'WatchEvent') +) t +GROUP BY repo_name +HAVING (stars > 4) AND (forks > 4) +ORDER BY ratio DESC +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.sql new file mode 100644 index 00000000000000..66c67db1b86f7e --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks4.sql @@ -0,0 +1,13 @@ +SELECT + sum(fork) AS forks, + sum(star) AS stars, + round(sum(star) / sum(fork), 2) AS ratio +FROM +( + SELECT + cast(v["repo"]["name"] as string), + CASE WHEN cast(v["type"] as string) = 'ForkEvent' THEN 1 ELSE 0 END AS fork, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events + WHERE cast(v["type"] as string) IN ('ForkEvent', 'WatchEvent') +) t diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.sql new file mode 100644 index 00000000000000..3579b794114e08 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/proportionsBetweenStarsAndForks5.sql @@ -0,0 +1,21 @@ +SELECT + sum(forks) AS forks, + sum(stars) AS stars, + round(sum(stars) / sum(forks), 2) AS ratio +FROM +( + SELECT + sum(fork) AS forks, + sum(star) AS stars + FROM + ( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'ForkEvent' THEN 1 ELSE 0 END AS fork, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events + WHERE cast(v["type"] as string) IN ('ForkEvent', 'WatchEvent') + ) t + GROUP BY repo_name + HAVING stars > 10 +) t2 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.sql new file mode 100644 index 00000000000000..6c1632769f3d9f --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByAmountOfModifiedCode.sql @@ -0,0 +1,12 @@ +SELECT /*+SET_VAR(enable_fallback_to_original_planner=false,disable_streaming_preaggregations=false) */ + cast(v["repo"]["name"] as string) as repo_name, + count() AS prs, + count(distinct cast(v["actor"]["login"] as string)) AS authors, + sum(cast(v["payload"]["pull_request"]["additions"] as int)) AS adds, + sum(cast(v["payload"]["pull_request"]["deletions"] as int)) AS dels +FROM github_events +WHERE (cast(v["type"] as string) = 'PullRequestEvent') AND (cast(v["payload"]["action"] as string) = 'opened') AND (cast(v["payload"]["pull_request"]["additions"] as int) < 10000) AND (cast(v["payload"]["pull_request"]["deletions"] as int) < 10000) +GROUP BY repo_name +HAVING (adds / dels) < 10 +ORDER BY adds + dels DESC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.sql new file mode 100644 index 00000000000000..e37ced4083887d --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesByTheNumberOfPushes.sql @@ -0,0 +1,17 @@ +SELECT + cast(v["repo"]["name"] as string), + count() AS pushes, + count(distinct cast(v["actor"]["login"] as string)) AS authors +FROM github_events +WHERE (cast(v["type"] as string) = 'PushEvent') AND (cast(v["repo"]["name"] as string) IN +( + SELECT cast(v["repo"]["name"] as string) + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' + GROUP BY cast(v["repo"]["name"] as string) + ORDER BY count() DESC + LIMIT 10000 +)) +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY count() DESC, cast(v["repo"]["name"] as string) +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.sql new file mode 100644 index 00000000000000..1dba0577e78d9e --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments1.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() FROM github_events WHERE lower(cast(v["payload"]["comment"]["body"] as string)) LIKE '%apache%' GROUP BY cast(v["repo"]["name"] as string) ORDER BY count() DESC, cast(v["repo"]["name"] as string) ASC LIMIT 50 \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.sql new file mode 100644 index 00000000000000..15b5adf3fb2bb8 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithClickhouse_related_comments2.sql @@ -0,0 +1,17 @@ +SELECT + repo_name, + sum(num_star) AS num_stars, + sum(num_comment) AS num_comments +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS num_star, + CASE WHEN lower(cast(v["payload"]["comment"]["body"] as string)) LIKE '%apache%' THEN 1 ELSE 0 END AS num_comment + FROM github_events + WHERE (lower(cast(v["payload"]["comment"]["body"] as string)) LIKE '%apache%') OR (cast(v["type"] as string) = 'WatchEvent') +) t +GROUP BY repo_name +HAVING num_comments > 0 +ORDER BY num_stars DESC,num_comments DESC, repo_name ASC +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.sql new file mode 100644 index 00000000000000..15f7de0c3b9239 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments1.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() FROM github_events WHERE lower(cast(v["payload"]["comment"]["body"] as string)) LIKE '%spark%' GROUP BY cast(v["repo"]["name"] as string) ORDER BY count() DESC, cast(v["repo"]["name"] as string) ASC LIMIT 50 \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.sql new file mode 100644 index 00000000000000..17a055f65495b4 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithDoris_related_comments2.sql @@ -0,0 +1,17 @@ +SELECT + repo_name, + sum(num_star) AS num_stars, + sum(num_comment) AS num_comments +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS num_star, + CASE WHEN lower(cast(v["payload"]["comment"]["body"] as string)) LIKE '%spark%' THEN 1 ELSE 0 END AS num_comment + FROM github_events + WHERE (lower(cast(v["payload"]["comment"]["body"] as string)) LIKE '%spark%') OR (cast(v["type"] as string) = 'WatchEvent') +) t +GROUP BY repo_name +HAVING num_comments > 0 +ORDER BY num_stars DESC,num_comments DESC,repo_name ASC +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.sql new file mode 100644 index 00000000000000..b5270ee38f1098 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheHighestGrowthYoY.sql @@ -0,0 +1,20 @@ +SELECT + repo_name, + sum(created_at_2022) AS stars2022, + sum(created_at_2015) AS stars2015, + round(sum(created_at_2022) / sum(created_at_2015), 3) AS yoy, + min(created_at) AS first_seen +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE year(cast(v["created_at"] as datetime)) WHEN 2022 THEN 1 ELSE 0 END AS created_at_2022, + CASE year(cast(v["created_at"] as datetime)) WHEN 2015 THEN 1 ELSE 0 END AS created_at_2015, + cast(v["created_at"] as datetime) as created_at + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' +) t +GROUP BY repo_name +HAVING (min(created_at) <= '2023-01-01 00:00:00') AND (stars2022 >= 1) and (stars2015 >= 1) +ORDER BY yoy DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.sql new file mode 100644 index 00000000000000..93164a4cfe1d41 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues1.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS c, count(distinct cast(v["actor"]["login"] as string)) AS u FROM github_events WHERE cast(v["type"] as string) = 'IssuesEvent' AND cast(v["payload"]["action"] as string) = 'opened' GROUP BY cast(v["repo"]["name"] as string) ORDER BY c DESC, cast(v["repo"]["name"] as string) LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.sql new file mode 100644 index 00000000000000..cfddc738371827 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues2.sql @@ -0,0 +1,18 @@ +SELECT + repo_name, + sum(issue_created) AS c, + count(distinct actor_login) AS u, + sum(star) AS stars +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') THEN 1 ELSE 0 END AS issue_created, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star, + CASE WHEN (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') THEN cast(v["actor"]["login"] as string) ELSE NULL END AS actor_login + FROM github_events + WHERE cast(v["type"] as string) IN ('IssuesEvent', 'WatchEvent') +) t +GROUP BY repo_name +ORDER BY c DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.sql new file mode 100644 index 00000000000000..60759a10199068 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues3.sql @@ -0,0 +1,19 @@ +SELECT + repo_name, + sum(issue_created) AS c, + count(distinct actor_login) AS u, + sum(star) AS stars +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') THEN 1 ELSE 0 END AS issue_created, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star, + CASE WHEN (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') THEN cast(v["actor"]["login"] as string) ELSE NULL END AS actor_login + FROM github_events + WHERE cast(v["type"] as string) IN ('IssuesEvent', 'WatchEvent') +) t +GROUP BY repo_name +HAVING stars >= 10 +ORDER BY c, u, stars DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.sql new file mode 100644 index 00000000000000..756e6f6bd95da5 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfIssues4.sql @@ -0,0 +1,18 @@ +SELECT + repo_name, + sum(issue_created) AS c, + count(distinct actor_login) AS u, + sum(star) AS stars +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') THEN 1 ELSE 0 END AS issue_created, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star, + CASE WHEN (cast(v["type"] as string) = 'IssuesEvent') AND (cast(v["payload"]["action"] as string) = 'opened') THEN cast(v["actor"]["login"] as string) ELSE NULL END AS actor_login + FROM github_events + WHERE cast(v["type"] as string) IN ('IssuesEvent', 'WatchEvent') +) t +GROUP BY repo_name +ORDER BY u, c, stars DESC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.sql new file mode 100644 index 00000000000000..f0c505210633a6 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests1.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string) as repo_name, count(), count(distinct cast(v["actor"]["login"] as string)) FROM github_events WHERE cast(v["type"] as string) = 'PullRequestEvent' AND cast(v["payload"]["action"] as string) = 'opened' GROUP BY cast(v["repo"]["name"] as string) ORDER BY 2,1,3 DESC LIMIT 50 \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.sql new file mode 100644 index 00000000000000..bba2a4c898107d --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumAmountOfPullRequests2.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count(), count(distinct cast(v["actor"]["login"] as string)) AS u FROM github_events WHERE cast(v["type"] as string) = 'PullRequestEvent' AND cast(v["payload"]["action"] as string) = 'opened' GROUP BY cast(v["repo"]["name"] as string) ORDER BY u DESC, 2 DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.sql new file mode 100644 index 00000000000000..36aa448c66acba --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMaximumNumberOfAcceptedInvitations.sql @@ -0,0 +1,17 @@ +SELECT + repo_name, + sum(invitation) AS invitations, + sum(star) AS stars +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE WHEN cast(v["type"] as string) = 'MemberEvent' THEN 1 ELSE 0 END AS invitation, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events + WHERE cast(v["type"] as string) IN ('MemberEvent', 'WatchEvent') +) t +GROUP BY repo_name +HAVING stars >= 2 +ORDER BY invitations DESC, stars DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.sql new file mode 100644 index 00000000000000..329cfc908b6654 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess1.sql @@ -0,0 +1,13 @@ +SELECT + repo_name, + count(distinct actor_login) AS u, + sum(star) AS stars +FROM +( + SELECT + lower(cast(v["repo"]["name"] as string)) as repo_name, + CASE WHEN cast(v["type"] as string) = 'PushEvent' THEN cast(v["actor"]["login"] as string) ELSE NULL END AS actor_login, + CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star + FROM github_events WHERE cast(v["type"] as string) IN ('PushEvent', 'WatchEvent') AND cast(v["repo"]["name"] as string) != '/' +) t +GROUP BY repo_name ORDER BY u, stars, repo_name DESC LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess2.sql new file mode 100644 index 00000000000000..410f69c47a58c9 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess2.sql @@ -0,0 +1,13 @@ +-- SELECT +-- cast(v["repo"]["name"] as string), +-- count(distinct cast(v["actor"]["login"] as string)) AS u, +-- sum(star) AS stars +-- FROM +-- ( +-- SELECT +-- cast(v["repo"]["name"] as string), +-- CASE WHEN cast(v["type"] as string) = 'PushEvent' AND (ref LIKE '%/master' OR ref LIKE '%/main') THEN cast(v["actor"]["login"] as string) ELSE NULL END AS cast(v["actor"]["login"] as string), +-- CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star +-- FROM github_events WHERE cast(v["type"] as string) IN ('PushEvent', 'WatchEvent') AND cast(v["repo"]["name"] as string) != '/' +-- ) t +-- GROUP BY cast(v["repo"]["name"] as string) ORDER BY u DESC LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess3.sql new file mode 100644 index 00000000000000..dbcf16db2ac195 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostPeopleWhoHavePushAccess3.sql @@ -0,0 +1,16 @@ +-- SELECT +-- cast(v["repo"]["name"] as string), +-- count(distinct cast(v["actor"]["login"] as string)) AS u, +-- sum(star) AS stars +-- FROM +-- ( +-- SELECT +-- cast(v["repo"]["name"] as string), +-- CASE WHEN cast(v["type"] as string) = 'PushEvent' AND (ref LIKE '%/master' OR ref LIKE '%/main') THEN cast(v["actor"]["login"] as string) ELSE NULL END AS cast(v["actor"]["login"] as string), +-- CASE WHEN cast(v["type"] as string) = 'WatchEvent' THEN 1 ELSE 0 END AS star +-- FROM github_events WHERE cast(v["type"] as string) IN ('PushEvent', 'WatchEvent') AND cast(v["repo"]["name"] as string) != '/' +-- ) t +-- GROUP BY cast(v["repo"]["name"] as string) +-- HAVING stars >= 100 +-- ORDER BY u DESC +-- LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.sql new file mode 100644 index 00000000000000..1e6fdb4b769348 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay1.sql @@ -0,0 +1,25 @@ +SELECT + repo_name, + day, + stars +FROM +( + SELECT + row_number() OVER (PARTITION BY repo_name ORDER BY stars DESC) AS rank, + repo_name, + day, + stars + FROM + ( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + to_date(cast(v["created_at"] as datetime)) AS day, + count() AS stars + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' + GROUP BY cast(v["repo"]["name"] as string), day + ) t1 +) t2 +WHERE rank = 1 +ORDER BY stars DESC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay2.sql new file mode 100644 index 00000000000000..92a1c9a9c6e005 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay2.sql @@ -0,0 +1,25 @@ +-- SELECT +-- cast(v["repo"]["name"] as string), +-- day, +-- stars +-- FROM +-- ( +-- SELECT +-- row_number() OVER (PARTITION BY cast(v["repo"]["name"] as string) ORDER BY stars DESC) AS rank, +-- cast(v["repo"]["name"] as string), +-- day, +-- stars +-- FROM +-- ( +-- SELECT +-- cast(v["repo"]["name"] as string), +-- to_date(cast(v["created_at"] as datetime)) AS day, +-- count() AS stars +-- FROM github_events +-- WHERE cast(v["type"] as string) = 'WatchEvent' +-- GROUP BY cast(v["repo"]["name"] as string), day +-- ) t1 +-- ) t2 +-- WHERE rank = 1 +-- ORDER BY stars DESC +-- LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay3.sql new file mode 100644 index 00000000000000..29fd779ffa3b44 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostStarsOverOneDay3.sql @@ -0,0 +1 @@ +-- SELECT cast(v["repo"]["name"] as string), cast(v["created_at"] as datetime), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY cast(v["repo"]["name"] as string), cast(v["created_at"] as datetime) ORDER BY count() DESC LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.sql new file mode 100644 index 00000000000000..5d05e3cb8db80c --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheMostSteadyGrowthOverTime.sql @@ -0,0 +1,20 @@ +SELECT + repo_name, + max(stars) AS daily_stars, + sum(stars) AS total_stars, + sum(stars) / max(stars) AS rate +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + to_date(cast(v["created_at"] as datetime)) AS day, + count() AS stars + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' + GROUP BY + repo_name, + day +) t +GROUP BY repo_name +ORDER BY rate DESC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.sql new file mode 100644 index 00000000000000..f0019d643306fc --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoriesWithTheWorstStagnation_order.sql @@ -0,0 +1,20 @@ +SELECT + repo_name, + sum(created_at_2022) AS stars2022, + sum(created_at_2015) AS stars2015, + round(sum(created_at_2022) / sum(created_at_2015), 3) AS yoy, + min(created_at) AS first_seen +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + CASE year(cast(v["created_at"] as datetime)) WHEN 2022 THEN 1 ELSE 0 END AS created_at_2022, + CASE year(cast(v["created_at"] as datetime)) WHEN 2015 THEN 1 ELSE 0 END AS created_at_2015, + cast(v["created_at"] as datetime) as created_at + FROM github_events + WHERE cast(v["type"] as string) = 'WatchEvent' +) t +GROUP BY repo_name +HAVING (min(created_at) <= '2019-01-01 00:00:00') AND (max(created_at) >= '2020-06-01 00:00:00') AND (stars2015 >= 2) +ORDER BY yoy, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList1.sql new file mode 100644 index 00000000000000..d1c3b8150d6a34 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList1.sql @@ -0,0 +1,13 @@ +SELECT + cast(v["repo"]["name"] as string) as repo_name, + count() AS stars +FROM github_events +WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["actor"]["login"] as string) IN +( + SELECT cast(v["actor"]["login"] as string) + FROM github_events + WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["repo"]["name"] as string) IN ('apache/spark', 'prakhar1989/awesome-courses')) +)) AND (cast(v["repo"]["name"] as string) NOT IN ('ClickHouse/ClickHouse', 'yandex/ClickHouse')) +GROUP BY repo_name +ORDER BY stars DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList2.sql new file mode 100644 index 00000000000000..293f4b90396189 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/repositoryAffinityList2.sql @@ -0,0 +1,23 @@ +SELECT + repo_name, + total_stars, + round(spark_stars / total_stars, 2) AS ratio +FROM +( + SELECT + cast(v["repo"]["name"] as string) as repo_name, + count(distinct cast(v["actor"]["login"] as string)) AS total_stars + FROM github_events + WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["repo"]["name"] as string) NOT IN ('apache/spark')) + GROUP BY repo_name + HAVING total_stars >= 10 +) t1 +JOIN +( + SELECT + count(distinct cast(v["actor"]["login"] as string)) AS spark_stars + FROM github_events + WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["repo"]["name"] as string) IN ('apache/spark')) +) t2 +ORDER BY ratio DESC, repo_name +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.sql new file mode 100644 index 00000000000000..ba9f4ab2604644 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers1.sql @@ -0,0 +1,13 @@ +SELECT + cast(v["repo"]["name"] as string), + count() +FROM github_events +WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["actor"]["login"] as string) IN +( + SELECT cast(v["actor"]["login"] as string) + FROM github_events + WHERE (cast(v["type"] as string) = 'PullRequestEvent') AND (cast(v["payload"]["action"] as string) = 'opened') +)) +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY count() DESC, cast(v["repo"]["name"] as string) +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.sql new file mode 100644 index 00000000000000..c55c37a294ad6e --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/starsFromHeavyGithubUsers2.sql @@ -0,0 +1,15 @@ +SELECT + cast(v["repo"]["name"] as string), + count() +FROM github_events +WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["actor"]["login"] as string) IN +( + SELECT cast(v["actor"]["login"] as string) + FROM github_events + WHERE (cast(v["type"] as string) = 'PullRequestEvent') AND (cast(v["payload"]["action"] as string) = 'opened') + GROUP BY cast(v["actor"]["login"] as string) + HAVING count() >= 2 +)) +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY 1, count() DESC, 1 +LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.sql new file mode 100644 index 00000000000000..117dc222667faa --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames1.sql @@ -0,0 +1 @@ +SELECT count(), cast(v["repo"]["name"] as string) FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY cast(v["repo"]["name"] as string) ORDER BY length(cast(v["repo"]["name"] as string)) DESC, cast(v["repo"]["name"] as string) LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.sql new file mode 100644 index 00000000000000..203b253d8897e9 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theLongestRepositoryNames2.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND cast(v["repo"]["name"] as string) LIKE '%_/_%' GROUP BY cast(v["repo"]["name"] as string) ORDER BY length(cast(v["repo"]["name"] as string)) ASC, cast(v["repo"]["name"] as string) LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.sql new file mode 100644 index 00000000000000..670a70ff725e63 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theMostToughCodeReviews.sql @@ -0,0 +1,10 @@ +SELECT + concat('https://github.com/', cast(v["repo"]["name"] as string), '/pull/') AS URL, + count(distinct cast(v["actor"]["login"] as string)) AS authors +FROM github_events +WHERE (cast(v["type"] as string) = 'PullRequestReviewCommentEvent') AND (cast(v["payload"]["action"] as string) = 'created') +GROUP BY + cast(v["repo"]["name"] as string), + cast(v["payload"]["issue"]["number"] as string) +ORDER BY authors DESC, URL ASC +LIMIT 50 \ No newline at end of file diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.sql new file mode 100644 index 00000000000000..9fdc19bfcef5ad --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfRepositoriesOnGithub.sql @@ -0,0 +1 @@ +SELECT count(distinct cast(v["repo"]["name"] as string)) FROM github_events diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.sql new file mode 100644 index 00000000000000..56f9ddf94732b7 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub1.sql @@ -0,0 +1 @@ +SELECT count(distinct cast(v["actor"]["login"] as string)) FROM github_events diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.sql new file mode 100644 index 00000000000000..f2ed81a78bd086 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub2.sql @@ -0,0 +1 @@ +SELECT count(distinct cast(v["actor"]["login"] as string)) FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.sql new file mode 100644 index 00000000000000..3a2dd0c08b3431 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub3.sql @@ -0,0 +1 @@ +SELECT count(distinct cast(v["actor"]["login"] as string)) FROM github_events WHERE cast(v["type"] as string) = 'PushEvent' diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.sql new file mode 100644 index 00000000000000..59410fa57bc72d --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/theTotalNumberOfUsersOnGithub4.sql @@ -0,0 +1 @@ +SELECT count(distinct cast(v["actor"]["login"] as string)) FROM github_events WHERE cast(v["type"] as string) = 'PullRequestEvent' AND cast(v["payload"]["action"] as string) = 'opened' diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels1.sql new file mode 100644 index 00000000000000..8e4ae36dd63ab3 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels1.sql @@ -0,0 +1,9 @@ +-- SELECT +-- label, +-- count() AS c +-- FROM github_events +-- LATERAL VIEW explode_split(labels, ',') t AS label +-- WHERE (cast(v["type"] as string) IN ('IssuesEvent', 'PullRequestEvent', 'IssueCommentEvent')) AND (action IN ('created', 'opened', 'labeled')) +-- GROUP BY label +-- ORDER BY c DESC +-- LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels2.sql new file mode 100644 index 00000000000000..302e08519a1e02 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels2.sql @@ -0,0 +1,9 @@ +-- SELECT +-- label, +-- count() AS c +-- FROM github_events +-- LATERAL VIEW explode_split(labels, ',') t AS label +-- WHERE (cast(v["type"] as string) IN ('IssuesEvent', 'PullRequestEvent', 'IssueCommentEvent')) AND (action IN ('created', 'opened', 'labeled')) AND ((lower(label) LIKE '%bug%') OR (lower(label) LIKE '%feature%')) +-- GROUP BY label +-- ORDER BY c DESC +-- LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels3.sql new file mode 100644 index 00000000000000..30c6e7ee8be8d0 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/topLabels3.sql @@ -0,0 +1,14 @@ +-- SELECT +-- sum(bug) AS bugs, +-- sum(feature) AS feature, +-- sum(bug) / sum(feature) AS ratio +-- FROM +-- ( +-- SELECT +-- CASE WHEN lower(label) LIKE '%bug%' THEN 1 ELSE 0 END AS bug, +-- CASE WHEN lower(label) LIKE '%feature%' THEN 1 ELSE 0 END AS feature +-- FROM github_events +-- LATERAL VIEW explode_split(labels, ',') t AS label +-- WHERE (cast(v["type"] as string) IN ('IssuesEvent', 'PullRequestEvent', 'IssueCommentEvent')) AND (action IN ('created', 'opened', 'labeled')) AND ((lower(label) LIKE '%bug%') OR (lower(label) LIKE '%feature%')) +-- ) t +-- LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/topRepositoriesByStars.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/topRepositoriesByStars.sql new file mode 100644 index 00000000000000..8ca99e182b75d8 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/topRepositoriesByStars.sql @@ -0,0 +1 @@ +SELECT cast(v["repo"]["name"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY cast(v["repo"]["name"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.sql new file mode 100644 index 00000000000000..116fe5ca57cc18 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/whatIsTheBestDayOfTheWeekToCatchAStar.sql @@ -0,0 +1 @@ +SELECT dayofweek(cast(v["created_at"] as datetime)) AS day, count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY day ORDER BY day diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.sql new file mode 100644 index 00000000000000..445853c2efa15a --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars1.sql @@ -0,0 +1 @@ +SELECT cast(v["actor"]["login"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' GROUP BY cast(v["actor"]["login"] as string) ORDER BY stars DESC, 1 LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.sql new file mode 100644 index 00000000000000..1fc9a6158edf48 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars2.sql @@ -0,0 +1 @@ +SELECT cast(v["actor"]["login"] as string), count() AS stars FROM github_events WHERE cast(v["type"] as string) = 'WatchEvent' AND cast(v["actor"]["login"] as string) = 'cliffordfajardo' GROUP BY cast(v["actor"]["login"] as string) ORDER BY stars DESC LIMIT 50 diff --git a/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.sql b/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.sql new file mode 100644 index 00000000000000..43426a2c9e4b81 --- /dev/null +++ b/regression-test/suites/variant_doc_snapshot_p2/sql/whoAreAllThosePeopleGivingStars3.sql @@ -0,0 +1,13 @@ +SELECT + cast(v["repo"]["name"] as string), + count() AS stars +FROM github_events +WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["repo"]["name"] as string) IN +( + SELECT cast(v["repo"]["name"] as string) + FROM github_events + WHERE (cast(v["type"] as string) = 'WatchEvent') AND (cast(v["actor"]["login"] as string) = 'cliffordfajardo') +)) +GROUP BY cast(v["repo"]["name"] as string) +ORDER BY stars DESC, cast(v["repo"]["name"] as string) +LIMIT 50 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 1374160f32aa92..1cc21c115612b3 100644 --- a/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy +++ b/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy @@ -75,6 +75,7 @@ suite("regression_test_variant_github_events_p2", "nonConcurrent,p2"){ if ((rand_subcolumns_count % 2) == 0) { rand_subcolumns_count = 0 } + sql """ set default_variant_enable_doc_snapshot_mode = false """ sql "set enable_variant_flatten_nested = true" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( diff --git a/regression-test/suites/variant_p0/agg.groovy b/regression-test/suites/variant_p0/agg.groovy index cec9d0ba520bee..d9dd5309a85551 100644 --- a/regression-test/suites/variant_p0/agg.groovy +++ b/regression-test/suites/variant_p0/agg.groovy @@ -23,6 +23,7 @@ suite("regression_test_variant_agg"){ if (max_subcolumns_count % 2 == 0) { var = "variant <'d' : int, 'b.f' : int, 'xxxx' : string, 'point' : bigint, properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")> replace" } + sql """ set default_variant_enable_doc_snapshot_mode = false """ sql """ CREATE TABLE IF NOT EXISTS var_agg ( k bigint, diff --git a/regression-test/suites/variant_p0/compaction/test_compaction.groovy b/regression-test/suites/variant_p0/compaction/test_compaction.groovy index 082c2c30b56e36..e7fbdfe03e89c7 100644 --- a/regression-test/suites/variant_p0/compaction/test_compaction.groovy +++ b/regression-test/suites/variant_p0/compaction/test_compaction.groovy @@ -57,6 +57,8 @@ suite("test_compaction_variant") { """ } + sql """ set default_variant_enable_doc_snapshot_mode = false; """ + def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"] // def key_types = ["AGGREGATE"] for (int i = 0; i < key_types.size(); i++) { diff --git a/regression-test/suites/variant_p0/delete_update.groovy b/regression-test/suites/variant_p0/delete_update.groovy index f7c27b55dc8237..2c2bafdd0a899b 100644 --- a/regression-test/suites/variant_p0/delete_update.groovy +++ b/regression-test/suites/variant_p0/delete_update.groovy @@ -25,7 +25,7 @@ suite("regression_test_variant_delete_and_update", "variant_type"){ sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, - v variant + v variant ) UNIQUE KEY(`k`) DISTRIBUTED BY HASH(k) BUCKETS 3 diff --git a/regression-test/suites/variant_p0/desc.groovy b/regression-test/suites/variant_p0/desc.groovy index 0c9abea9589532..6d131daf019959 100644 --- a/regression-test/suites/variant_p0/desc.groovy +++ b/regression-test/suites/variant_p0/desc.groovy @@ -79,6 +79,7 @@ suite("regression_test_variant_desc", "p0"){ try { sql """set default_variant_max_subcolumns_count = 2""" sql "set default_variant_sparse_hash_shard_count = 0" + sql """ set default_variant_enable_doc_snapshot_mode = false """ // sparse columns def table_name = "sparse_columns" create_table table_name diff --git a/regression-test/suites/variant_p0/doc_snapshot/agg.groovy b/regression-test/suites/variant_p0/doc_snapshot/agg.groovy new file mode 100644 index 00000000000000..eda49fe5dc3009 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/agg.groovy @@ -0,0 +1,72 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_variant_agg_doc_snapshot", "p0"){ + sql """DROP TABLE IF EXISTS var_agg""" + sql """ set default_variant_enable_doc_snapshot_mode = true """ + + int max_subcolumns_count = Math.floor(Math.random() * 10) + def var = "variant replace" + if (max_subcolumns_count % 2 == 0) { + 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 ( + k bigint, + v ${var}, + s bigint sum + ) + AGGREGATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 4 + 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);""" + sql """insert into var_agg values (3, '3', 3),(1, '{"a" : 1}', 3), (1, '{"a" : [1]}', 3);""" + sql """insert into var_agg values (4, '"4"', 4),(1, '{"a" : "1223"}', 4);""" + sql """insert into var_agg values (5, '5', 5),(1, '{"a" : [1]}', 5);""" + sql """insert into var_agg values (6, '"[6]"', 6),(1, '{"a" : ["1", 2, 1.1]}', 6);""" + sql """insert into var_agg values (7, '7', 7),(1, '{"a" : 1, "b" : {"c" : 1}}', 7);""" + sql """insert into var_agg values (8, '8.11111', 8),(1, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}', 8);""" + sql """insert into var_agg values (9, '"9999"', 9),(1, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}', 9);""" + sql """insert into var_agg values (10, '1000000', 10),(1, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}', 10);""" + sql """insert into var_agg values (11, '[123.0]', 11),(1999, '{"a" : 1, "b" : {"c" : 1}}', 11),(19921, '{"a" : 1, "d" : 10}', 11);""" + sql """insert into var_agg values (12, '[123.2]', 12),(1022, '{"a" : 1, "b" : {"f" : 17034, "g" :1.111 }}', 12),(1029, '{"a" : 1, "b" : {"c" : 1}}', 12);""" + qt_sql1 "select k, cast(v['a'] as array) from var_agg where size(cast(v['a'] as array)) > 0 order by k, cast(v['a'] as string) asc" + qt_sql2 "select k, cast(v as int), cast(v['b'] as string) from var_agg where length(cast(v['b'] as string)) > 4 order by k, cast(v as string), cast(v['b'] as string) " + qt_sql3 "select k, v from var_agg order by k, cast(v as string) limit 5" + qt_sql4 "select v['b'], v['b']['c'], cast(v as int) from var_agg where cast(v['b'] as string) is not null and length(v['b']) >4 order by k,cast(v as string) desc limit 10000;" + qt_sql5 "select v['b'] from var_agg where cast(v['b'] as int) > 0;" + qt_sql6 "select cast(v['b'] as string) from var_agg where cast(v['b'] as string) is not null and length(v['b']) >4 order by k, cast(v['b'] as string) " + qt_sql7 "select * from var_agg where cast(v['b'] as string) is not null and length(v['b']) >4 order by k, cast(v['b'] as string) " + qt_sql8 "select * from var_agg order by 1, cast(2 as string), 3" + trigger_and_wait_compaction("var_agg", "cumulative") + sql "alter table var_agg drop column s" + sql """insert into var_agg select 5, '{"a" : 1234, "xxxx" : "fffff", "point" : 42000}' as json_str + union all select 5, '{"a": 1123}' as json_str union all select *, '{"a": 11245, "x" : 42005}' as json_str from numbers("number" = "1024") limit 1024;""" + sql """insert into var_agg select 5, '{"a" : 1234, "xxxx" : "fffff", "point" : 42000}' as json_str + union all select 5, '{"a": 1123}' as json_str union all select *, '{"a": 11245, "y" : 11111111}' as json_str from numbers("number" = "2048") where number > 1024 limit 1024;""" + sql """insert into var_agg select 5, '{"a" : 1234, "xxxx" : "fffff", "point" : 42000}' as json_str + union all select 5, '{"a": 1123}' as json_str union all select *, '{"a": 11245, "c" : 1.11}' as json_str from numbers("number" = "1024") limit 1024;""" + sql """insert into var_agg select 5, '{"a" : 1234, "xxxx" : "fffff", "point" : 42000}' as json_str + union all select 5, '{"a": 1123}' as json_str union all select *, '{"a": 11245, "e" : [123456]}' as json_str from numbers("number" = "1024") limit 1024;""" + sql """insert into var_agg select 5, '{"a" : 1234, "xxxx" : "fffff", "point" : 42000}' as json_str + union all select 5, '{"a": 1123}' as json_str union all select *, '{"a": 11245, "f" : ["123456"]}' as json_str from numbers("number" = "1024") limit 1024;""" + trigger_and_wait_compaction("var_agg", "cumulative") + qt_sql9 "select * from var_agg order by cast(2 as string), 3, 1 limit 10" + qt_sql9 "select * from var_agg where k > 1024 order by cast(2 as string), 3, 1 limit 10" +} \ No newline at end of file diff --git a/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy b/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy new file mode 100644 index 00000000000000..4bfdab43408b92 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy @@ -0,0 +1,176 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite("variant_delete_and_update_doc_snapshot", "p0"){ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + // MOR + def table_name = "var_delete_update" + sql "DROP TABLE IF EXISTS ${table_name}" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant + ) + 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"); + """ + // test mor table + + sql """insert into ${table_name} values (1, '{"a":1,"b":[1],"c":1.0, "d" : [{"x" : 1}]}')""" + sql """insert into ${table_name} values (2, '{"a":2,"b":[1],"c":2.0, "d" : [{"y" : 1}]}')""" + sql """insert into ${table_name} values (3, '{"a":3,"b":[3],"c":3.0, "d" : [{"o" : 1}]}')""" + sql """insert into ${table_name} values (4, '{"a":4,"b":[4],"c":4.0, "d" : [{"p" : 1}]}')""" + sql """insert into ${table_name} values (5, '{"a":5,"b":[5],"c":5.0, "d" : [{"q" : 1}]}')""" + + sql "delete from ${table_name} where k = 1" + sql """update ${table_name} set v = '{"updated_value":123}' where k = 2""" + qt_sql "select * from ${table_name} order by k" + sql """update ${table_name} set v = '{"updated_nested_value":[{"ommm" : "123"}]}' where k = 4""" + qt_sql "select * from ${table_name} order by k" + + // MOW + table_name = "var_delete_update_mow" + sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_max_subcolumns_count = 3""" + sql "DROP TABLE IF EXISTS ${table_name}" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant, + vs string + ) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 4 + properties("replication_num" = "1", "enable_unique_key_merge_on_write" = "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" + sql "delete from ${table_name} where k in (select k from var_delete_update_mow where k in (3, 4, 5))" + + sql """insert into var_delete_update_mow values (6, '{"a":4,"b":[4],"c":4.1}', 'xxx')""" + sql """insert into var_delete_update_mow values (7, '{"a":4,"b":[4],"c":4.1}', 'yyy')""" + sql """update var_delete_update_mow set vs = '{"updated_value" : 123}' where k = 6""" + sql """update var_delete_update_mow set v = '{"updated_value":1111}' where k = 7""" + sql """update var_delete_update_mow set v = '{"updated_nested_value":[{"lalalal": 1.111}]}' where k = 2""" + qt_sql "select * from var_delete_update_mow order by k" + + sql """delete from ${table_name} where v = 'xxx' or vs = 'yyy'""" + sql """delete from ${table_name} where vs = 'xxx' or vs = 'yyy'""" + qt_sql "select * from ${table_name} order by k" + + // delete & insert concurrently + sql "set enable_unique_key_partial_update=true;" + sql "sync" + def t1 = Thread.startDaemon { + for (int k = 1; k <= 60; k++) { + int x = new Random().nextInt(61) % 10; + sql """insert into ${table_name}(k,vs) values(${x}, '{"k${x}" : ${x}}'),(${x+1}, '{"k${x+1}" : ${x+1}}'),(${x+2}, '{"k${x+2}" : ${x+2}}'),(${x+3}, '{"k${x+3}" : ${x+3}}')""" + } + } + def t2 = Thread.startDaemon { + for (int k = 1; k <= 60; k++) { + int x = new Random().nextInt(61) % 10; + sql """insert into ${table_name}(k,v) values(${x}, '{"k${x}" : ${x}}'),(${x+1}, '{"k${x+1}" : ${x+1}}'),(${x+2}, '{"k${x+2}" : ${x+2}}'),(${x+3}, '{"k${x+3}" : ${x+3}}')""" + } + } + def t3 = Thread.startDaemon { + for (int k = 1; k <= 60; k++) { + int x = new Random().nextInt(61) % 10; + sql """insert into ${table_name}(k,v) values(${x}, '{"k${x}" : ${x}}'),(${x+1}, '{"k${x+1}" : ${x+1}}'),(${x+2}, '{"k${x+2}" : ${x+2}}'),(${x+3}, '{"k${x+3}" : ${x+3}}')""" + } + } + t1.join() + t2.join() + t3.join() + sql "sync" + + sql "set enable_unique_key_partial_update=false;" + // case 1: concurrent partial update + def tableName = "test_primary_key_partial_update_parallel" + sql """ DROP TABLE IF EXISTS ${tableName} """ + sql """ + CREATE TABLE IF NOT EXISTS ${tableName} ( + `id` int(11) NOT NULL COMMENT "用户 ID", + `name` varchar(65533) NOT NULL COMMENT "用户姓名", + `score` int(11) NOT NULL COMMENT "用户得分", + `test` int(11) NULL COMMENT "null test", + `dft` int(11) DEFAULT "4321", + `var` variant NULL) + UNIQUE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES("replication_num" = "1", "enable_unique_key_merge_on_write" = "true", "disable_auto_compaction" = "true", "store_row_column" = "true") + """ + + sql """insert into ${tableName} values + (2, "doris2", 2000, 223, 2, '{"id":2, "name":"doris2","score":2000,"test":223,"dft":2}'), + (1, "doris", 1000, 123, 1, '{"id":1, "name":"doris","score":1000,"test":123,"dft":1}'), + (5, "doris5", 5000, 523, 5, '{"id":5, "name":"doris5","score":5000,"test":523,"dft":5}'), + (4, "doris4", 4000, 423, 4, '{"id":4, "name":"doris4","score":4000,"test":423,"dft":4}'), + (3, "doris3", 3000, 323, 3, '{"id":3, "name":"doris3","score":3000,"test":323,"dft":3}');""" + + t1 = Thread.startDaemon { + streamLoad { + table "${tableName}" + + set 'column_separator', ',' + set 'format', 'csv' + set 'partial_columns', 'true' + set 'columns', 'id,name' + + file 'partial_update_parallel1.csv' + time 10000 // limit inflight 10s + } + } + + t2 = Thread.startDaemon { + streamLoad { + table "${tableName}" + + set 'column_separator', ',' + set 'format', 'csv' + set 'partial_columns', 'true' + set 'columns', 'id,score,test' + + file 'partial_update_parallel2.csv' + time 10000 // limit inflight 10s + } + } + + t3 = Thread.startDaemon { + streamLoad { + table "${tableName}" + + set 'column_separator', ',' + set 'format', 'csv' + set 'partial_columns', 'true' + set 'columns', 'id,dft,var' + + file 'partial_update_parallel3.csv' + time 10000 // limit inflight 10s + } + } + + t1.join() + t2.join() + t3.join() + + sql "sync" + + qt_sql """ select * from ${tableName} order by id;""" +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/load.groovy b/regression-test/suites/variant_p0/doc_snapshot/load.groovy new file mode 100644 index 00000000000000..8e65b389bd6f32 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/load.groovy @@ -0,0 +1,484 @@ +// 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_doc_snapshot", "p0"){ + + sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_doc_snapshot_min_rows = 0 """ + 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 verify = { table_name -> + sql "sync" + qt_sql """select count() from ${table_name}""" + } + + def create_table = { table_name, key_type="DUPLICATE", buckets=(new Random().nextInt(15) + 1).toString() -> + sql "DROP TABLE IF EXISTS ${table_name}" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant + ) + ${key_type} KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS ${buckets} + properties("replication_num" = "1", "disable_auto_compaction" = "false"); + """ + } + + def set_be_config = { key, value -> + String backend_id; + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + backend_id = backendId_to_backendIP.keySet()[0] + def (code, out, err) = update_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), key, value) + logger.info("update config: code=" + code + ", out=" + out + ", err=" + err) + } + sql "set experimental_enable_nereids_planner=true" + sql "set enable_fallback_to_original_planner=false" + + try { + def key_types = ["DUPLICATE", "UNIQUE"] + for (int i = 0; i < key_types.size(); i++) { + def table_name = "simple_variant_${key_types[i]}" + // 1. simple cases + create_table.call(table_name, key_types[i]) + sql """insert into ${table_name} values (1, '[1]'),(1, '{"a" : 1}');""" + sql """insert into ${table_name} values (2, '[2]'),(1, '{"a" : [[[1]]]}');""" + sql """insert into ${table_name} values (3, '3'),(1, '{"a" : 1}'), (1, '{"a" : [1]}');""" + sql """insert into ${table_name} values (4, '"4"'),(1, '{"a" : "1223"}');""" + sql """insert into ${table_name} values (5, '5'),(1, '{"a" : [1]}');""" + sql """insert into ${table_name} values (6, '"[6]"'),(1, '{"a" : ["1", 2, 1.1]}');""" + sql """insert into ${table_name} values (7, '7'),(1, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${table_name} values (8, '8.11111'),(1, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${table_name} values (9, '"9999"'),(1, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${table_name} values (10, '1000000'),(1, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${table_name} values (11, '[123.1]'),(1999, '{"a" : 1, "b" : {"c" : 1}}'),(19921, '{"a" : 1, "b" : 10}');""" + sql """insert into ${table_name} values (12, '[123.2]'),(1022, '{"a" : 1, "b" : 10}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + qt_sql1 "select k, cast(v['a'] as array) from ${table_name} where size(cast(v['a'] as array)) > 0 order by k, cast(v['a'] as string) asc" + qt_sql2 "select k, cast(v['b'] as string) from ${table_name} where length(cast(v['b'] as string)) > 4 order by k, cast(v as string), cast(v['b'] as string) " + qt_sql3 "select k, v from ${table_name} order by k, cast(v as string) limit 5" + qt_sql4 "select v['b'], v['b']['c'] from ${table_name} where cast(v['b'] as string) != 'null' and cast(v['b'] as string) is not null and cast(v['b'] as string) != '{}' order by k,cast(v as string) desc limit 10000;" + qt_sql5 "select v['b'] from ${table_name} where cast(v['b'] as int) > 0;" + qt_sql6 "select cast(v['b'] as string) from ${table_name} where cast(v['b'] as string) != 'null' and cast(v['b'] as string) is not null and cast(v['b'] as string) != '{}' order by k, cast(v['b'] as string) " + // verify table_name + } + sql "insert into simple_variant_DUPLICATE select k, cast(v as string) from simple_variant_UNIQUE;" + + // 2. type confilct cases + def table_name = "type_conflict_resolution" + create_table table_name + sql """insert into ${table_name} values (1, '{"c" : "123"}');""" + sql """insert into ${table_name} values (2, '{"c" : 123}');""" + sql """insert into ${table_name} values (3, '{"cc" : [123.2]}');""" + sql """insert into ${table_name} values (4, '{"cc" : [123.1]}');""" + sql """insert into ${table_name} values (5, '{"ccc" : 123}');""" + sql """insert into ${table_name} values (6, '{"ccc" : 123321}');""" + sql """insert into ${table_name} values (7, '{"cccc" : 123.22}');""" + sql """insert into ${table_name} values (8, '{"cccc" : 123.11}');""" + sql """insert into ${table_name} values (9, '{"ccccc" : [123]}');""" + sql """insert into ${table_name} values (10, '{"ccccc" : [123456789]}');""" + sql """insert into ${table_name} values (11, '{"b" : 1111111111111111}');""" + sql """insert into ${table_name} values (12, '{"b" : 1.222222}');""" + sql """insert into ${table_name} values (13, '{"bb" : 1}');""" + sql """insert into ${table_name} values (14, '{"bb" : 214748364711}');""" + sql """insert into ${table_name} values (15, '{"A" : 1}');""" + qt_sql """select v from type_conflict_resolution order by k;""" + verify table_name + + // 3. simple variant sub column select + table_name = "simple_select_variant" + create_table table_name + sql """insert into ${table_name} values (1, '{"A" : 123}');""" + sql """insert into ${table_name} values (2, '{"A" : 1}');""" + sql """insert into ${table_name} values (4, '{"A" : 123456}');""" + sql """insert into ${table_name} values (8, '{"A" : 123456789101112}');""" + qt_sql_2 "select v['A'] from ${table_name} order by cast(v['A'] as bigint)" + sql """insert into ${table_name} values (12, '{"AA" : [123456]}');""" + sql """insert into ${table_name} values (14, '{"AA" : [123456789101112]}');""" + qt_sql_4 "select cast(v['A'] as string), v['AA'], v from ${table_name} order by k" + qt_sql_5 "select v['A'], v['AA'], v, v from ${table_name} where cast(v['A'] as bigint) > 123 order by k" + + sql """insert into ${table_name} values (16, '{"a" : 123.22, "A" : 191191, "c": 123}');""" + sql """insert into ${table_name} values (18, '{"a" : "123", "c" : 123456}');""" + sql """insert into ${table_name} values (20, '{"a" : 1.10111, "A" : 1800, "c" : [12345]}');""" + // sql """insert into ${table_name} values (12, '{"a" : [123]}, "c": "123456"');""" + sql """insert into ${table_name} values (22, '{"a" : 1.1111, "A" : 17211, "c" : 111111}');""" + sql "sync" + qt_sql_6 "select cast(v['a'] as string), v['A'] from ${table_name} order by cast(v['A'] as bigint), k" + qt_sql_7 "select k, v['A'] from ${table_name} where cast(v['A'] as bigint) >= 1 order by cast(v['A'] as bigint), k" + + qt_sql_8 "select cast(v['a'] as string), v['A'] from ${table_name} where cast(v['a'] as json) is null order by k" + + qt_sql_11 "select v['A'] from ${table_name} where cast(v['A'] as bigint) > 1 order by k" + + // ----%%---- + qt_sql_12 "select v['A'], v from ${table_name} where cast(v['A'] as bigint) > 1 order by k" + // ----%%---- + qt_sql_13 "select v['a'], v['A'] from simple_select_variant where 1=1 and cast(v['a'] as json) is null and cast(v['A'] as bigint) >= 1 order by k;" + qt_sql_14 """select v['A'], v from simple_select_variant where cast(v['A'] as bigint) > 0 and cast(v['A'] as bigint) = 123456 limit 1;""" + + sql """insert into simple_select_variant values (12, '{"oamama": 1.1}')""" + qt_sql_18 "select cast(v['a'] as text), v['A'], v, v['oamama'] from simple_select_variant where cast(v['oamama'] as double) is null order by k;" + qt_sql_19 """select v['a'], v['A'], v, v['oamama'] from simple_select_variant where cast(v['oamama'] as double) is not null order by k""" + qt_sql_20 """select v['A'] from simple_select_variant where cast(v['A'] as bigint) > 0 and cast(v['A'] as bigint) = 123456 limit 1;""" + + sql "truncate table simple_select_variant" + sql """insert into simple_select_variant values (11, '{"x": [123456]}');""" + sql """insert into simple_select_variant values (12, '{"x": [123456789101112]}');""" + sql """insert into simple_select_variant values (12, '{"xxx" : 123, "yyy" : 456}');""" + qt_sql_21_1 """select * from simple_select_variant where cast(v['x'] as json) is null""" + qt_sql_21_2 """select cast(v['x'] as json) from simple_select_variant where cast(v['x'] as json) is not null order by k;""" + + // 4. multi variant in single table + table_name = "multi_variant" + sql "DROP TABLE IF EXISTS ${table_name}" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v1 variant, + v2 variant, + v3 variant + + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY RANDOM BUCKETS 5 + properties("replication_num" = "1", "disable_auto_compaction" = "false"); + """ + sql """insert into ${table_name} values (1, '{"A" : 123}', '{"B" : 123}', '{"C" : 456}');""" + sql """insert into ${table_name} values (2, '{"C" : "123"}', '{"D" : [123]}', '{"E" : 789}');""" + sql """insert into ${table_name} values (3, '{"C" : "123"}', '{"C" : [123]}', '{"E" : "789"}');""" + sql "sync" + verify table_name + qt_sql_22 "select v1['A'] from multi_variant order by k;" + qt_sql_23 "select v2['D'] from multi_variant order by k;" + qt_sql_24 "select v2['C'] from multi_variant order by k;" + + // 5. multi tablets concurrent load + table_name = "t_json_parallel" + create_table table_name + sql """INSERT INTO t_json_parallel SELECT *, '{"k1":1, "k2": "some", "k3" : [1234], "k4" : 1.10000, "k5" : [[123]]}' FROM numbers("number" = "50000");""" + qt_sql_25 """ SELECT sum(cast(v['k1'] as int)), sum(cast(v['k4'] as double)), sum(cast(json_extract(v['k5'], "\$.[0].[0]") as int)) from t_json_parallel; """ + //50000 61700000 55000.00000000374 6150000 + // 7. gh data + table_name = "ghdata" + create_table table_name + load_json_data.call(table_name, """${getS3Url() + '/regression/load/ghdata_sample.json'}""") + qt_sql_26 "select count() from ${table_name}" + + // 8. json empty string + table_name = "empty_string" + create_table table_name + sql """INSERT INTO empty_string VALUES (1, ''), (2, '{"k1": 1, "k2": "v1"}'), (3, '{}'), (4, '{"k1": 2}');""" + sql """INSERT INTO empty_string VALUES (3, null), (4, '{"k1": 1, "k2": "v1"}'), (3, '{}'), (4, '{"k1": 2}');""" + sql """INSERT INTO empty_string VALUES (3, null), (4, null), (3, '{}'), (4, '{"k1": 2}');""" + sql """INSERT INTO empty_string VALUES (3, ''), (4, null), (3, '{}'), (4, null);""" + qt_sql_27 "SELECT count() FROM ${table_name};" + + // // // 9. btc data + // // table_name = "btcdata" + // // create_table table_name + // // load_json_data.call(table_name, """${getS3Url() + '/regression/load/btc_transactions.json'}""") + // // qt_sql_28 "select count() from ${table_name}" + + // 10. alter add variant + table_name = "alter_variant" + create_table table_name + sql """INSERT INTO ${table_name} VALUES (1, ''), (1, '{"k1": 1, "k2": "v1"}'), (1, '{}'), (1, '{"k1": 2}');""" + sql "alter table ${table_name} add column v2 variant default null" + sql """INSERT INTO ${table_name} VALUES (1, '{"kyyyy" : "123"}', '{"kxkxkxkx" : [123]}'), (1, '{"kxxxx" : 123}', '{"xxxxyyyy": 123}');""" + qt_sql_29_1 """select * from alter_variant where length(cast(v2 as string)) > 2 and cast(v2 as string) != 'null' order by k, cast(v as string), cast(v2 as string);""" + verify table_name + + // 11. boolean values + table_name = "boolean_values" + create_table table_name + sql """INSERT INTO ${table_name} VALUES (1, ''), (2, '{"k1": true, "k2": false}'), (3, '{}'), (4, '{"k1": false}');""" + verify table_name + + // 12. jsonb values + table_name = "jsonb_values" + create_table.call(table_name, "DUPLICATE", "1") + sql """insert into ${table_name} values (1, '{"a" : ["123", 123, [123]]}')""" + // FIXME array -> jsonb will parse error + // sql """insert into ${table_name} values (2, '{"a" : ["123"]}')""" + sql """insert into ${table_name} values (3, '{"a" : "123"}')""" + sql """insert into ${table_name} values (4, '{"a" : 123456}')""" + sql """insert into ${table_name} values (5, '{"a" : [123, "123", 1.11111]}')""" + sql """insert into ${table_name} values (6, '{"a" : [123, 1.11, "123"]}')""" + sql """insert into ${table_name} values(7, '{"a" : [123, {"xx" : 1}], "b" : {"c" : 456, "d" : null, "e" : 7.111}}')""" + // FIXME data bellow is invalid at present + // sql """insert into ${table_name} values (8, '{"a" : [123, 111........]}')""" + sql """insert into ${table_name} values (9, '{"a" : [123, {"a" : 1}]}')""" + sql """insert into ${table_name} values (10, '{"a" : [{"a" : 1}, 123]}')""" + sql "select v['a'] from ${table_name} order by k" + trigger_and_wait_compaction(table_name, "full") + qt_sql_29 "select cast(v['a'] as string) from ${table_name} order by k" + // b? 7.111 [123,{"xx":1}] {"b":{"c":456,"e":7.111}} 456 + qt_sql_30 "select v['b']['e'], v['a'], v['b'], v['b']['c'] from jsonb_values where cast(v['b']['e'] as double) > 1;" + + // 13. sparse columns + table_name = "sparse_columns" + create_table table_name + sql """insert into sparse_columns select * from (select 0, '{"a": 11245, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}}' as json_str + union all select 1, '{"a": 1123}' as json_str union all select 2, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" = "4096"))t order by 1 limit 4096 ;""" + qt_sql_30 """ select v from sparse_columns where json_extract_string(v, "\$") != "{}" order by cast(v as string) limit 10""" + sql "truncate table sparse_columns" + sql """insert into sparse_columns select * from (select 0, '{"a": 1123, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}, "zzz" : null, "oooo" : {"akakaka" : null, "xxxx" : {"xxx" : 123}}}' as json_str + union all select 1, '{"a" : 1234, "xxxx" : "kaana", "ddd" : {"aaa" : 123, "mxmxm" : [456, "789"]}}' as json_str from numbers("number" = "4096"))t order by 1 limit 4096 ;""" + qt_sql_31 """ select v from sparse_columns where json_extract_string(v, "\$") != "{}" order by cast(v as string) limit 10""" + sql "truncate table sparse_columns" + + table_name = "github_events" + sql """DROP TABLE IF EXISTS ${table_name}""" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant + ) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 4 + properties("replication_num" = "1", "disable_auto_compaction" = "true"); + """ + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""") + sql """insert into ${table_name} values (1, '{"a" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (2, '{"b" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (2, '{"c" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (3, '{"d" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (3, '{"e" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (4, '{"f" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (4, '{"g" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (5, '{"h" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (5, '{"i" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (6, '{"j" : 1}'), (1, '{"a" : 1}')""" + sql """insert into ${table_name} values (6, '{"k" : 1}'), (1, '{"a" : 1}')""" + sql "select /*+SET_VAR(batch_size=4064,broker_load_batch_size=16352,disable_streaming_preaggregations=false,enable_distinct_streaming_aggregation=true,parallel_pipeline_task_num=4,profile_level=1,enable_pipeline_engine=true,enable_parallel_scan=true,parallel_scan_max_scanners_count=16,parallel_scan_min_rows_per_scanner=128,enable_fold_constant_by_be=true,enable_rewrite_element_at_to_slot=true,runtime_filter_type=2,enable_parallel_result_sink=false,sort_phase_num=0,enable_nereids_planner=true,rewrite_or_to_in_predicate_threshold=2,enable_function_pushdown=true,enable_common_expr_pushdown=true,enable_local_exchange=true,partition_pruning_expand_threshold=10,enable_share_hash_table_for_broadcast_join=true,enable_two_phase_read_opt=true,enable_common_expr_pushdown_for_inverted_index=false,spill_min_revocable_mem=33554432,fetch_remote_schema_timeout_seconds=120,max_fetch_remote_schema_tablet_count=512,enable_spill=false,enable_force_spill=false,data_queue_max_blocks=1,spill_streaming_agg_mem_limit=268435456,spill_aggregation_partition_count=5) */ * from ${table_name}" + qt_sql_36_1 "select cast(v['a'] as int), cast(v['b'] as int), cast(v['c'] as int) from ${table_name} order by k limit 10" + sql "DELETE FROM ${table_name} WHERE k=1" + sql "select * from ${table_name}" + qt_sql_36_2 """select k, json_extract(cast(v as text), "\$.repo") from ${table_name} where k > 3 order by k desc limit 10""" + sql "insert into ${table_name} select * from ${table_name}" + sql """UPDATE ${table_name} set v = '{"updated_value" : 10}' where k = 2""" + qt_sql_36_3 """select * from ${table_name} where k = 2""" + + // delete sign + load_json_data.call(table_name, """delete.json""") + + // FIXME + // // filter invalid variant + // table_name = "invalid_variant" + // set_be_config.call("max_filter_ratio_for_variant_parsing", "1") + // create_table.call(table_name, "DUPLICATE", "4") + // sql """insert into ${table_name} values (1, '{"a" : 1}'), (1, '{"a" 1}')""" + // sql """insert into ${table_name} values (1, '{"a" 1}'), (1, '{"a" 1}')""" + // set_be_config.call("max_filter_ratio_for_variant_parsing", "0.05") + // sql """insert into ${table_name} values (1, '{"a" : 1}'), (1, '{"a" 1}')""" + // sql """insert into ${table_name} values (1, '{"a" 1}'), (1, '{"a" 1}')""" + // sql "select * from ${table_name}" + + // test all sparse columns + table_name = "all_sparse_columns" + create_table.call(table_name, "DUPLICATE", "1") + sql """insert into ${table_name} values (1, '{"a" : 1}'), (1, '{"a": "1"}')""" + sql """insert into ${table_name} values (1, '{"a" : 1}'), (1, '{"a": "2"}')""" + qt_sql_37 "select * from ${table_name} order by k, cast(v as string)" + + // test mow with delete + table_name = "variant_mow" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + k1 string, + v variant + ) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 4 + properties("replication_num" = "1", "disable_auto_compaction" = "false", "enable_unique_key_merge_on_write" = "true"); + """ + sql """insert into ${table_name} values (1, "abc", '{"a" : 1}'), (1, "cde", '{"b" : 1}')""" + sql """insert into ${table_name} values (2, "abe", '{"c" : 1}')""" + sql """insert into ${table_name} values (3, "abd", '{"d" : 1}')""" + sql "delete from ${table_name} where k in (select k from variant_mow where k in (1, 2))" + qt_sql_38 "select * from ${table_name} order by k limit 10" + + // read text from sparse col + sql """insert into sparse_columns select * from (select 0, '{"a": 1123, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : null, "e" : 7.111}, "zzz" : null, "oooo" : {"akakaka" : null, "xxxx" : {"xxx" : 123}}}' as json_str + union all select 1, '{"a" : 1234, "xxxx" : "kaana", "ddd" : {"aaa" : 123, "mxmxm" : [456, "789"]}}' as json_str from numbers("number" = "4096"))t order by 1 limit 4096 ;""" + qt_sql_31 """select cast(v['xxxx'] as string) from sparse_columns where cast(v['xxxx'] as string) != 'null' order by k limit 1;""" + sql "truncate table sparse_columns" + + // test cast + table_name = "variant_cast" + create_table.call(table_name, "DUPLICATE", "1") + sql """ + insert into variant_cast values(1,'["CXO0N: 1045901740", "HMkTa: 1348450505", "44 HHD: 915015173", "j9WoJ: -1517316688"]'),(2,'"[1]"'),(3,'123456'),(4,'1.11111') + """ + qt_sql_39 "select k, json_type(cast(v as json), '\$') from variant_cast order by k" + qt_sql_39 "select cast(v as array) from variant_cast where k = 1 order by k" + qt_sql_39 "select cast(v as string) from variant_cast where k = 2 order by k" + + sql "DROP TABLE IF EXISTS records" + sql """ + CREATE TABLE `records` ( + `id` VARCHAR(20) NOT NULL, + `entity_id` VARCHAR(20) NOT NULL, + `value` VARIANT NOT NULL, + INDEX idx_value (`value`) USING INVERTED PROPERTIES("parser" = "unicode", "lower_case" = "true") COMMENT 'inverted index for value' + ) ENGINE=OLAP + UNIQUE KEY(`id`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`id`) BUCKETS 10 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "min_load_replica_num" = "-1", + "is_being_synced" = "false", + "storage_medium" = "hdd", + "storage_format" = "V2", + "inverted_index_storage_format" = "V2", + "enable_unique_key_merge_on_write" = "true", + "light_schema_change" = "true", + "store_row_column" = "true", + "disable_auto_compaction" = "false", + "enable_single_replica_compaction" = "false", + "group_commit_interval_ms" = "10000", + "group_commit_data_bytes" = "134217728" + ); + """ + sql """ + insert into records values ('85321037218054145', 'A100', '{"id":"85321037218054145","id0":"8301","id12":"32030","id16":"39960","id20":"17202","id24":"24592","id28":"42035","id32":"29819","id36":"4680","id4":"4848","id40":"47892","id44":"29400","id48":"7799","id52":"49678","id56":"40585","id60":"23572","id64":"28579","id68":"11477","id72":"35416","id76":"9577","id8":"25758","id80":"45204","id84":"16132","id88":"1007","id92":"32630","id96":"15443","num10":310671794,"num14":317675907,"num18":173663246,"num2":68835462,"num22":919923967,"num26":989144179,"num30":758415664,"num34":344178710,"num38":603490103,"num42":928353352,"num46":164440235,"num50":272803033,"num54":494457109,"num58":36023952,"num6":345965722,"num62":244316054,"num66":791098758,"num70":59531230,"num74":887460141,"num78":175760447,"num82":93180735,"num86":893826383,"num90":899738404,"num94":132357718,"num98":618243870,"text11":"1露华浓 蜜丝佛陀 欧莱雅 哪 款 粉饼 好啊我 感觉 ","text15":"0写 个 天秤 女 攻略 吧 转帖楼主 救 我 加急 如","text19":"1我 复试 被 人大 刷 了 我 气 得 浑身 颤抖 请 ","text23":"0哇靠 我 是 昨儿 吐槽 太仓 假货 的 妹子百丽 专","text27":"1搓 泥 现象 是什么 原因换 成 乳液可是 早上 还","text3":"1想说 刘伊心 是 来 搞笑 的 吗能 唱 成 她 这样","text31":"0女朋友 发 来 短信 说 离开 我 是 她 最 正确 的","text35":"1做 完 九 次 led 红 蓝光 了 还有 最后 一次 ","text39":"0八一八 你 觉得 哪 位 明星 长 得 很 苦逼 很 苦","text43":"0昨天 楼主 拒绝 了 一个 女生 我 傻逼 吗手机 看","text47":"0818 你 觉得 超 好看 的 动漫 有 哪些 嘛初中","text51":"0借 你 我 的 时间我 能 说 请 豆油 我 吗不行","text55":"1我 在 缅甸 雪 悟 敏 禅修 营 三 个 月谢谢 于","text59":"0八一八 非常了得 吧孟非 明显 是 一 付 很 嫌弃 ","text63":"0我 小 姨 大 病 之后 神仙 附体 之后 几乎 是 一","text67":"0爸爸 去哪儿 明星 家 也是 有 贫富悬殊 的 哇突然","text7":"0曾经 的 成都 洗面桥 小学如果 大家 还 记得 宋 ","text71":"1关于女人 姿色女 活 白富美 音 智 胸 腰腿声音 ","text75":"1直播 贴 2013 02 19 04 00 足总 杯 第","text79":"1昨天 答应 和 ex 见面 了 终于 又 让 他 知道 ","text83":"1谁 能 提供 指 人 儿 的 gtp 谱子 呢 我们 乐","text87":"0近 距离 安 坏 关系我 和 我 儿子 是 近 距离 ","text91":"1刚 看 了 小 时代 1 感动 了我 也是 我 都 3","text95":"0剧终 谢谢 大家 撸 主 和 她 在一起 了我 呸呸 ","text99":"1喜欢 广州 想来 广州 但是嗯嗯 还 不能 在 网上 ","time1":"2012-07-06 17:42:41","time13":"1985-07-23 13:16:34","time17":"1970-07-14 00:30:54","time21":"1981-07-04 03:01:10","time25":"1994-12-20 03:41:44","time29":"1975-06-25 07:25:00","time33":"1979-07-27 03:59:56","time37":"1979-12-25 00:37:57","time41":"1979-11-12 13:09:03","time45":"1998-03-02 15:41:07","time49":"1981-05-22 06:40:29","time5":"1995-02-26 15:11:35","time53":"1985-06-23 23:11:00","time57":"2001-02-05 14:44:11","time61":"1988-01-27 12:28:13","time65":"2024-04-27 04:52:59","time69":"2022-04-18 05:19:02","time73":"2016-03-14 15:55:31","time77":"1977-12-21 23:41:05","time81":"2016-12-02 17:10:12","time85":"1995-09-15 21:40:33","time89":"2014-05-10 14:32:32","time9":"1988-12-08 05:26:13","time93":"2018-08-23 02:01:29","time97":"1990-03-09 07:39:01"}'); + """ + qt_sql_records1 """SELECT value FROM records WHERE value['text3'] MATCH_ALL '刘伊心 是 来 搞笑 的' OR ( value['text83'] MATCH_ALL '攻略 吧 转帖楼主 救' ) OR ( value['text15'] MATCH_ALL '个 天秤 女 攻略 吧 转帖楼主 ' ) LIMIT 0, 100""" + qt_sql_records2 """SELECT value FROM records WHERE entity_id = 'A100' and value['id16'] = '39960' AND ( value['text59'] = '非 明显 是 一 付 很 嫌') AND ( value['text99'] = '来 广州 但是嗯嗯 还 不能 在') LIMIT 0, 100;""" + qt_sql_records3 """SELECT value FROM records WHERE value['text99'] MATCH_ALL '来 广州 但是嗯嗯 还 不能 在' OR ( value['text47'] MATCH_ALL '你 觉得 超 好看 的 动' ) OR ( value['text43'] MATCH_ALL ' 楼主 拒绝 了 一个 女生 我 傻逼 吗手' ) LIMIT 0, 100""" + qt_sql_records4 """SELECT value FROM records WHERE value['id16'] = '39960' AND ( value['text59'] = '非 明显 是 一 付 很 嫌') AND ( value['text99'] = '来 广州 但是嗯嗯 还 不能 在 ') """ + qt_sql_records5 """SELECT value FROM records WHERE value['text3'] MATCH_ALL '伊心 是 来 搞笑 的' LIMIT 0, 100""" + + test { + sql "select v['a'] from ${table_name} group by v['a']" + exception("errCode = 2, detailMessage = Doris hll, bitmap, array, map, struct, jsonb, variant column must use with specific function, and don't support filter, group by or order by") + } + + test { + sql """ + create table var( + `key` int, + `content` variant + ) + DUPLICATE KEY(`key`) + distributed by hash(`content`) buckets 8 + properties( + "replication_allocation" = "tag.location.default: 1" + ); + """ + exception("errCode = 2, detailMessage = Hash distribution info should not contain variant columns") + } + + test { + sql """ + CREATE TABLE `var_as_key` ( + `key` int NULL, + `var` variant NULL + ) ENGINE=OLAP + DUPLICATE KEY(`key`, `var`) + COMMENT 'OLAP' + DISTRIBUTED BY RANDOM BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + exception("errCode = 2, detailMessage = Variant type should not be used in key") + } + sql "DROP TABLE IF EXISTS var_as_key" + sql """ + CREATE TABLE `var_as_key` ( + `k` int NULL, + `var` variant NULL + ) ENGINE=OLAP + DISTRIBUTED BY RANDOM BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + sql """insert into var_as_key values(1, '{"a" : 10}')""" + sql """insert into var_as_key values(2, '{"b" : 11}')""" + qt_sql "select * from var_as_key order by k" + + if (!isCloudMode()) { + test { + sql """ + create table var( + `key` int, + `content` variant + ) + DUPLICATE KEY(`key`) + distributed by hash(`key`) buckets 8 + properties( + "replication_allocation" = "tag.location.default: 1", + "light_schema_change" = "false" + ); + """ + exception("errCode = 2, detailMessage = Variant type rely on light schema change") + } + } + + table_name = "variant_type_test" + sql """ DROP TABLE IF EXISTS ${table_name} """ + sql """ + CREATE TABLE ${table_name} ( + k int, + v variant NULL + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "replication_num" = "1" + ); + """ + sql """ insert into ${table_name} values (1, '{"a": 1122323232313223, "b": 1.2, "c" : "ddddd", "d" : {"e": 1.2, "f": "ggggg"}}'), (2, NULL) """ + qt_sql """ select variant_type(v) from ${table_name} """ + } finally { + // reset flags + } +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy new file mode 100644 index 00000000000000..cc839f2581d088 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy @@ -0,0 +1,355 @@ +// 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_variant_predefine_doc_snapshot", "p0"){ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """DROP TABLE IF EXISTS test_predefine""" + def count = new Random().nextInt(10); + if (new Random().nextInt(100) < 50) { + count = "1000" + } + sql """ set default_variant_max_subcolumns_count = ${count} """ + sql """ set enable_variant_flatten_nested = true """ + sql """ + CREATE TABLE `test_predefine` ( + `id` bigint NOT NULL, + `type` varchar(30) NULL, + `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"); + """ + + 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"}')""" + sql """insert into test_predefine values(2, '2', '{"a" : {"b" : {"c" : 678910, "d" : 22.222}}, "ss" : "29999111", "dcm" : "456.123", "dt" : "2022-01-01 11:11:11", "ip" : "127.0.0.1"}')""" + sql """insert into test_predefine values(3, '3', '{"dcm" : 789.123, "dt" : "2025-01-01 11:11:11.1", "ip" : "127.0.0.1"}')""" + sql """insert into test_predefine values(4, '4', '{"a" : {"b" : {"c" : "678910", "d" : "33.222"}}}')""" + sql """insert into test_predefine values(5, '5', null)""" + sql """insert into test_predefine values(6, '6', null)""" + sql """insert into test_predefine values(7, '7', '{"xxx" : 12345}')""" + sql """insert into test_predefine values(8, '8', '{"yyy" : 111.111}')""" + sql """insert into test_predefine values(9, '2', '{"a" : {"b" : {"c" : 678910, "d" : 22.222}}, "ss" : "29999111", "dcm" : "456.123", "dt" : "2022-01-01 11:11:11", "ip" : "127.0.0.1"}')""" + sql """insert into test_predefine values(10, '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"}')""" + 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""" + + 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';""" + qt_sql """select v1['dcm'] from test_predefine order by id;""" + qt_sql """select v1['dt'] from test_predefine where cast(v1['dt'] as datetime) = '2022-01-01 11:11:11';""" + qt_sql """select v1['dt'] from test_predefine where cast(v1['dt'] as datetime) = '2022-01-01 11:11:11' order by id limit 10""" + qt_sql """select * from test_predefine where cast(v1['dt'] as datetime) = '2022-01-01 11:11:11' order by id limit 10;""" + qt_sql """select * from test_predefine where v1['dt'] is not null order by id limit 10;""" + + sql """DROP TABLE IF EXISTS test_predefine1""" + sql """ + CREATE TABLE `test_predefine1` ( + `id` bigint NOT NULL, + `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"); + """ + sql """insert into test_predefine1 values(1, '{"predefine_col1" : 1024}')""" + sql """insert into test_predefine1 values(2, '{"predefine_col2" : 1.11111}')""" + sql """insert into test_predefine1 values(3, '{"predefine_col3" : "11111.00000"}')""" + sql """insert into test_predefine1 values(4, '{"predefine_col4" : "2020-01-01-01"}')""" + + sql """insert into test_predefine1 values(5, '{"PREDEFINE_COL1" : 1024}')""" + sql """insert into test_predefine1 values(6, '{"PREDEFINE_COL2" : 1.11111}')""" + 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 """select * from test_predefine1 order by id""" + + + // complex types with scalar types + sql "DROP TABLE IF EXISTS test_predefine2" + sql """ + CREATE TABLE `test_predefine2` ( + `id` bigint NOT NULL, + `v1` variant< + 'array_int':array, + 'array_string':array, + 'array_decimal':array, + 'array_datetime':array, + 'array_datetimev2':array, + 'array_date':array, + 'array_datev2':array, + 'array_ipv4':array, + 'array_ipv6':array, + 'array_float':array, + 'array_boolean':array, + 'int_':int, + 'string_':string, + 'decimal_':decimalv3(26,9), + 'datetime_':datetime, + 'datetimev2_':datetimev2(6), + 'date_':date, + 'datev2_':datev2, + 'ipv4_':ipv4, + 'ipv6_':ipv6, + 'float_':decimalv3(26,9), + 'boolean_':boolean, + '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"); + """ + def json1 = """ + { + "array_int" : [1, 2, 3], + "array_string" : ["a", "b", "c"], + "array_decimal" : [1.1, 2.2, 3.3], + "array_datetime" : ["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"], + "array_datetimev2" : ["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"], + "array_date" : ["2021-01-01", "2022-01-01", "2023-01-01"], + "array_datev2" : ["2021-01-01", "2022-01-01", "2023-01-01"], + "array_ipv4" : ["127.0.0.1", "172.0.1.1"], + "array_ipv6" : ["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"], + "array_float" : ["1.11111"], + "array_boolean" : [true, false, true], + "int_" : 11111122, + "string_" : 12111222113.0, + "decimal_" : 188118222.011121933, + "datetime_" : "2022-01-01 11:11:11", + "datetimev2_" : "2022-01-01 11:11:11.999999", + "date_" : "2022-01-01", + "datev2_" : "2022-01-01", + "ipv4_" : "127.0.0.1", + "ipv6_" : "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe", + "float_" : "128.111", + "boolean_" : true, + "varchar_" : "hello world" + } + """ + def json2 = """ + { + "array_int" : ["1", "2", 3], + "array_string" : ["a", "b", "c"], + "array_decimal" : [1.1, 2.2, 3.3], + "array_datetime" : ["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"], + "array_datetimev2" : ["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"], + "array_date" : ["2021-01-01", "2022-01-01", "2023-01-01"], + "array_datev2" : ["2021-01-01", "2022-01-01", "2023-01-01"], + "array_ipv4" : ["127.0.0.1", "172.0.1.1"], + "array_ipv6" : ["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"], + "array_float" : [2.22222], + "array_boolean" : [1, 0, 1, 0, 1], + "int_" : "3333333333", + "string_" : 12111222113.0, + "decimal_" : "219911111111.011121933", + "datetime_" : "2022-01-01 11:11:11", + "datetimev2_" : "2022-01-01 11:11:11.999999", + "date_" : "2022-01-01", + "datev2_" : "2022-01-01", + "ipv4_" : "127.0.0.1", + "ipv6_" : "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe", + "float_" : 1.111111111, + "boolean_" : true, + "varchar_" : "world hello" + } + """ + def json3 = """ + { + "array_int" : ["1", "2", 3], + "array_string" : ["a", "b", "c"], + "array_datetimev2" : ["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"], + "int_" : "3333333333", + "decimal_" : "219911111111.011121933", + "date_" : "2022-01-01", + "ipv4_" : "127.0.0.1", + "float_" : 1.111111111, + "boolean_" : true, + "varchar_" : "world hello" + } + """ + def json4 = """ + { + "array_int" : ["1", "2", 3], + "array_string" : ["a", "b", "c"], + "array_datetimev2" : ["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"], + "ipv4_" : "127.0.0.1", + "float_" : 1.111111111, + "varchar_" : "world hello", + "ext_1" : 1.111111, + "ext_2" : "this is an extra field", + "ext_3" : [1, 2, 3] + } + """ + sql "insert into test_predefine2 values(1, '${json1}')" + sql "insert into test_predefine2 values(2, '${json2}')" + sql "insert into test_predefine2 values(3, '${json3}')" + sql "insert into test_predefine2 values(4, '${json4}')" + + qt_sql """select * from test_predefine2 order by id""" + + for (int i = 10; i < 100; i++) { + sql "insert into test_predefine2 values(${i}, '${json4}')" + } + + // // schema change + // // 1. add column + sql "alter table test_predefine1 add column v2 variant<'dcm':decimal(38, 9),'dt':datetime> default null" + sql """insert into test_predefine1 values(101, '{"a" :1}', '{"dcm": 1111111}')""" + sql "alter table test_predefine1 add column v3 variant<'dcm':decimal(38, 9),'dt':datetime,'ip':ipv6> default null" + sql """insert into test_predefine1 values(102, '{"a" :1}', '{"dcm": 1111111}', '{"dcm": 1111111}');""" + // 2. todo support alter column type + // sql "alter table test_predefine1 modify column v3 variant" + 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 + sql "alter table test_predefine1 drop column v3" + + sql "DROP TABLE IF EXISTS test_predefine3" + sql """CREATE TABLE `test_predefine3` ( + `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" = "false", "disable_auto_compaction" = "true");""" + + // test alter nested no effect at present + sql "truncate table test_predefine3" + sql """insert into test_predefine3 values (1, '{"nested" : [{"a" : 123, "b" : "456"}]}')""" + // sql "alter table test_predefine3 modify column v variant<`nested.a`: string>" + sql """insert into test_predefine3 values (1, '{"nested" : [{"a" : 123, "b" : "456"}]}')""" + sql """insert into test_predefine3 values (1, '{"nested" : [{"a" : 123, "b" : "456"}]}')""" + sql """insert into test_predefine3 values (1, '{"nested" : [{"a" : 123, "b" : "456"}]}')""" + sql """insert into test_predefine3 values (1, '{"nested" : [{"a" : 123, "b" : "456"}]}')""" + qt_sql "select * from test_predefine3" + qt_sql "select v['nested'] from test_predefine3" + qt_sql "select v['nested']['a'] from test_predefine3" + + // test use auto type detect first then alter to modify type + sql "truncate table test_predefine3" + sql """insert into test_predefine3 values (1, '{"auto_type" : 1234.1111}')""" + // sql "alter table test_predefine3 modify column v variant<`auto_type`: int>" + sql """insert into test_predefine3 values (1, '{"auto_type" : "124511111"}')""" + sql """insert into test_predefine3 values (1, '{"auto_type" : 1111122334}')""" + sql """insert into test_predefine3 values (1, '{"auto_type" : 111223341111}')""" + sql """insert into test_predefine3 values (1, '{"auto_type" : true}')""" + sql """insert into test_predefine3 values (1, '{"auto_type" : 1}')""" + 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}')""" + trigger_and_wait_compaction("test_predefine3", "full") + + // test array + sql "DROP TABLE IF EXISTS region_insert" + sql """ + CREATE TABLE `region_insert` ( + `k` bigint NULL, + `var` variant<'c_acctbal':text,'c_address':text,'c_comment':text,'c_custkey':text,'c_mktsegment':text,'c_name':text,'c_nationkey':text,'c_phone':text,'p_brand':float,'p_comment':text,'p_container':text,'p_mfgr':text,'p_name':text,'p_partkey':text,'p_retailprice':text,'p_size':text,'p_type':text,'r_comment':text,'r_name':text,'r_regionkey':text,'ps_availqty':text,'ps_comment':text,'ps_none':text,'ps_partkey':text,'ps_suppkey':text,'ps_supplycost':text,'key_46':text,'key_47':text,'key_48':text,'o_clerk':text,'o_comment':text,'o_custkey':text,'o_orderdate':text,'o_orderkey':text,'o_orderpriority':text,'o_orderstatus':text,'o_shippriority':text,'o_totalprice':text,'key_80':array> NULL, + `OfvZr` variant NULL + ) ENGINE=OLAP + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 5 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "min_load_replica_num" = "-1", + "is_being_synced" = "false", + "storage_medium" = "hdd", + "storage_format" = "V2", + "inverted_index_storage_format" = "V2", + "light_schema_change" = "true", + "store_row_column" = "true", + "row_store_page_size" = "16384", + "disable_auto_compaction" = "false", + "enable_single_replica_compaction" = "false", + "group_commit_interval_ms" = "10000", + "group_commit_data_bytes" = "134217728" + ); + """ + sql """ + insert into region_insert (k,var,OfvZr) values(1550,'{"key_48":"2024-12-17 20:27:12","key_11":"2024-12-17 20:27:12","key_53":"2024-12-17 20:27:12","key_30":"2024-12-17 20:27:12","key_3":"2024-12-17 20:27:12","key_93":"1HYdNTPvNA","key_40":true,"key_61":"N5LU74i0Nb","key_55":"2024-12-17 20:27:12","key_45":"mMj4f8k8gH","key_58":"2024-12-17 20:27:12","key_71":true,"key_51":"2024-12-17 20:27:12","key_79":"2024-12-17 20:27:12","key_7":"8QJFB23Rug","key_75":31,"key_50":"2024-12-17 20:27:12","key_24":86,"key_33":98,"key_69":16,"key_57":86,"key_86":"2024-12-17 20:27:12","key_99":24,"key_66":"oTZgDxKvcc","key_18":false,"key_49":"2024-12-17 20:27:12","key_2":false,"key_64":"h3DxAvBG8D","key_87":87,"key_37":42,"key_29":"wb29lruo8E","key_96":88,"key_9":83,"key_52":6,"key_97":"X7y409riGJ","key_72":false,"key_26":"2024-12-17 20:27:12","key_12":66,"key_88":false,"key_32":false,"key_6":true,"key_80":false,"key_89":"2024-12-17 20:27:12","key_1":false,"key_35":"2024-12-17 20:27:12","key_23":70,"key_95":23,"key_76":false,"key_92":true,"key_47":"zYM9IJXSxk","key_22":"2024-12-17 20:27:12","key_38":"P9arsVnb3q","key_56":"LU4SdelM46","key_28":24,"key_4":"GKXCKn1Kf9","key_83":29,"key_20":90,"key_43":"VA8xyYskJ1","key_81":22,"key_16":"2024-12-17 20:27:12","key_82":true,"key_84":"2024-12-17 20:27:12"}','{"key_87":"900oLqWX9Q","key_32":63,"key_79":true,"key_42":3,"key_98":20,"key_35":false,"key_19":"2024-12-17 20:27:12","key_89":"NO0TLqKAvS","key_77":"2024-12-17 20:27:12","key_34":false,"key_43":false,"key_30":true,"key_21":"2024-12-17 20:27:12","key_3":"oDDa0SZ7Bs","key_72":"2024-12-17 20:27:12","key_67":38,"key_82":"2024-12-17 20:27:12","key_37":"VWLDmiZbMr","key_16":true,"key_58":"42Mju9EbAS","key_94":false,"key_50":"cqv3qYmYuJ","key_28":28,"key_78":43,"key_2":"omTAZB0CxT","key_75":"4tAlWmcvnY","key_40":50,"key_33":"2024-12-17 20:27:12","key_70":"2024-12-17 20:27:12","key_25":"2024-12-17 20:27:12","key_54":false,"key_11":"2024-12-17 20:27:12","key_5":"ritjh4q9pJ","key_51":"DzQGqKQ95I","key_73":false,"key_10":"bPI94fvfL4","key_26":"AF5DtNU5Dj","key_80":66,"key_9":69,"key_83":false,"key_59":48,"key_24":"2024-12-17 20:27:12","key_84":36,"key_17":true,"key_44":18,"key_97":"JBw2ZZhDtF","key_74":15,"key_96":true,"key_62":"2024-12-17 20:27:12","key_65":"6iWPCv8FDR","key_53":"2024-12-17 20:27:12","key_95":false,"key_56":"3zyjHDYMJG","key_60":false,"key_23":"2024-12-17 20:27:12","key_8":"zbNpgWWYWS","key_81":"2024-12-17 20:27:12"}') + """ + sql "DROP TABLE IF EXISTS test_bf_with_bool" + // test bf with bool + sql """ + CREATE TABLE `test_bf_with_bool` ( + `k` bigint NULL, + `var` variant<'c_bool':boolean> + ) ENGINE=OLAP + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 5 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "min_load_replica_num" = "-1", + "bloom_filter_columns" = "var" + ); + """ + + // array with nulls + + sql "DROP TABLE IF EXISTS test_array_with_nulls" + // test bf with bool + sql """ + CREATE TABLE `test_array_with_nulls` ( + `k` bigint NULL, + `var` variant> + ) ENGINE=OLAP + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "min_load_replica_num" = "-1" + ); + """ + sql """insert into test_array_with_nulls values(3, '{"array_decimal" : [null, 2.2, 3.3, 4.4]}')""" + qt_sql_arr_null_1 "select * from test_array_with_nulls order by k" + sql """insert into test_array_with_nulls values(1, '{"array_decimal" : [1.1, 2.2, 3.3, null]}')""" + sql """insert into test_array_with_nulls values(2, '{"array_decimal" : [1.1, 2.2, null, 4.4]}')""" + sql """insert into test_array_with_nulls values(4, '{"array_decimal" : [1.1, null, 3.3, 4.4]}')""" + sql """insert into test_array_with_nulls values(5, '{"array_decimal" : [1.1, 2.2, 3.3, 4.4]}')""" + sql """insert into test_array_with_nulls values(6, '{"array_decimal" : []}')""" + sql """insert into test_array_with_nulls values(7, '{"array_decimal" : [null, null]}')""" + qt_sql_arr_null_2 "select * from test_array_with_nulls order by k limit 5" + + // test variant_type + sql "DROP TABLE IF EXISTS test_variant_type" + sql """ + CREATE TABLE `test_variant_type` ( + `k` bigint NULL, + `var` variant> + ) ENGINE=OLAP + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "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]}')""" + sql """insert into test_variant_type values(1, null)""" + + sql "DROP TABLE IF EXISTS test_variant_type_not_null" + sql """ + CREATE TABLE `test_variant_type_not_null` ( + `k` bigint NULL, + `var` variant> not null + ) ENGINE=OLAP + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "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/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy new file mode 100644 index 00000000000000..ddd2bfd68987cd --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.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("predefine_insert_into_select_doc_snashot", "p0"){ + + sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + def count = new Random().nextInt(5); + sql """ set default_variant_doc_snapshot_min_rows = ${count} """ + + sql "DROP TABLE IF EXISTS fromTable" + sql """CREATE TABLE fromTable ( + `id` bigint NULL, + `var` variant< + MATCH_NAME 'a' : date, + MATCH_NAME 'b' : decimal(20,12), + MATCH_NAME 'c' : datetime, + 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")""" + 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 + ) 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 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""" + boolean findException = false + try { + sql """ insert into toTable_without_define select * from fromTable""" + } catch (Exception e) { + logger.info(e.getMessage()) + findException = true + } + assertTrue(findException) + + order_qt_sql """ select * from toTable_without_define""" + + sql "DROP TABLE IF EXISTS toTable_with_define" + sql """CREATE TABLE toTable_with_define ( + `id` bigint NULL, + `var` variant< + MATCH_NAME 'a' : date, + 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")""" + 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) { + logger.info(e.getMessage()) + findException = true + } + assertTrue(findException) + + order_qt_sql """ select * from toTable_with_define""" + + sql "DROP TABLE IF EXISTS toTable" + sql """ create table toTable like fromTable""" + // qt_sql """ show create table toTable""" + qt_sql """ insert into toTable select * from fromTable""" + order_qt_sql """ select * from toTable""" + + sql """insert into toTable 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 """ set enable_match_without_inverted_index = false """ + sql """ set enable_common_expr_pushdown = true """ + order_qt_sql """ select count() from toTable where cast (var['d'] as string) match '123' """ +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy new file mode 100644 index 00000000000000..5c58b92dbb41d2 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy @@ -0,0 +1,106 @@ +// 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("variant_predefine_base_doc_snapshot", "p0"){ + sql """ set describe_extend_variant_column = true """ + sql """ set enable_match_without_inverted_index = false """ + sql """ set enable_common_expr_pushdown = true """ + sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ + def count = new Random().nextInt(5) + def tableName = "base_match_name_variant_test" + sql "DROP TABLE IF EXISTS ${tableName}" + sql """CREATE TABLE ${tableName} ( + `id` bigint NULL, + `var` variant< + MATCH_NAME 'ab' : string, + MATCH_NAME '*cc' : string, + MATCH_NAME 'b?b' : string, + MATCH_NAME_GLOB 'bb*' : 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")""" + + 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}')""" + sql """insert into ${tableName} values(3, '{"ab" : 789, "*cc" : 789, "b?b" : 789, "bb3" : 789, "bxx" : 789}')""" + sql """insert into ${tableName} values(4, '{"ab" : 100, "*cc" : 100, "b?b" : 100, "bb3" : 100, "bxx" : 100}')""" + sql """insert into ${tableName} values(5, '{"ab" : 111, "*cc" : 111, "b?b" : 111, "bb3" : 111, "bxx" : 111}')""" + qt_sql """select * from ${tableName} order by id""" + qt_sql """ select count() from ${tableName} where cast(var['ab'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['*cc'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['b?b'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['bb3'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['bxx'] as string) match '789' """ + + + trigger_and_wait_compaction(tableName, "full") + + qt_sql """select * from ${tableName} order by id""" + qt_sql """ select count() from ${tableName} where cast(var['ab'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['*cc'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['b?b'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['bb3'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['bxx'] as string) match '789' """ + + + + sql "DROP TABLE IF EXISTS ${tableName}" + sql """CREATE TABLE ${tableName} ( + `id` bigint NULL, + `var` variant< + MATCH_NAME 'a.b' : string, + 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, + 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")""" + + 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}}')""" + sql """insert into ${tableName} values(3, '{"a" : {"b" : 222, "*" : 222, "b1" : 222, "bxc" : 222, "c2323" : 222}}')""" + + qt_sql """select * from ${tableName} order by id""" + qt_sql """ select count() from ${tableName} where cast(var['a']['b'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['*'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['b1'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['bxc'] as string) match '789' """ +qt_sql """ select count() from ${tableName} where cast(var['a']['c2323'] as string) match '789' """ + + trigger_and_wait_compaction(tableName, "full") + + qt_sql """select * from ${tableName} order by id""" + qt_sql """ select count() from ${tableName} where cast(var['a']['b'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['*'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['b1'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['bxc'] as string) match '789' """ + qt_sql """ select count() from ${tableName} where cast(var['a']['c2323'] as string) match '789' """ + +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy new file mode 100644 index 00000000000000..0c941e2116aec0 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy @@ -0,0 +1,56 @@ +// 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("predefine_schema_change_doc_snapshot", "p0"){ + def tableName = "test_predefine_schema_change" + sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql "DROP TABLE IF EXISTS ${tableName}" + sql """CREATE TABLE ${tableName} ( + `id` bigint NULL, + `var` variant< + MATCH_NAME 'a' : date, + MATCH_NAME 'b' : decimal(20,12), + MATCH_NAME 'c' : datetime, + 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")""" + 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');""" + + sql """ set enable_match_without_inverted_index = false """ + sql """ set enable_common_expr_pushdown = true """ + qt_sql """ select count() from ${tableName} where cast (var['d'] as string) match '123' """ + qt_sql """ select * from ${tableName} """ + qt_sql """ select variant_type(var) from ${tableName} """ + + sql """ alter table ${tableName} modify column col1 varchar(200) NULL """ + + waitForSchemaChangeDone { + sql """ SHOW ALTER TABLE COLUMN WHERE TableName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ + time 60 + } + + qt_sql """ select count() from ${tableName} where cast (var['d'] as string) match '123' """ + qt_sql """ select * from ${tableName} """ + qt_sql """ select variant_type(var) from ${tableName} """ + +} \ No newline at end of file diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy new file mode 100644 index 00000000000000..47848ee0673c42 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy @@ -0,0 +1,114 @@ +// 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("variant_predefine_index_doc_snapshot", "p0"){ + sql """ set describe_extend_variant_column = true """ + sql """ set enable_match_without_inverted_index = false """ + sql """ set enable_common_expr_pushdown = true """ + sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + + def tableName = "test_variant_predefine_index_type" + sql "DROP TABLE IF EXISTS ${tableName}" + sql """CREATE TABLE ${tableName} ( + `id` bigint NULL, + `var` variant < + MATCH_NAME 'path.int' : int, + MATCH_NAME 'path.decimal' : DECIMAL(15, 12), + 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")""" + + sql """insert into ${tableName} values(1, '{"path" : {"int" : 123, "decimal" : 123.123456789012, "string" : "hello"}}'), + (2, '{"path" : {"int" : 456, "decimal" : 456.456789123456, "string" : "world"}}'), + (3, '{"path" : {"int" : 789, "decimal" : 789.789123456789, "string" : "hello"}}'), + (4, '{"path" : {"int" : 100, "decimal" : 100.100123456789, "string" : "world"}}'), + (5, '{"path" : {"int" : 111, "decimal" : 111.111111111111, "string" : "hello"}}')""" + + qt_sql """ select variant_type(var) from ${tableName} """ + qt_sql """select * from ${tableName} order by id""" + sql """ set profile_level = 2""" + sql """ set inverted_index_skip_threshold = 0 """ + sql """ set enable_common_expr_pushdown = true """ + sql """ set enable_match_without_inverted_index = false """ + qt_sql """ select count() from ${tableName} where cast(var['path']['int'] as int) = 789 """ + qt_sql """ select count() from ${tableName} where cast(var['path']['decimal'] as DECIMAL(15, 12)) = 789.789123456789 """ + qt_sql """ select count() from ${tableName} where var['path']['string'] match 'hello' """ + + for (int i = 0; i < 10; i++) { + sql """ insert into ${tableName} values(1, '{"path" : {"int" : 123, "decimal" : 123.123456789012, "string" : "hello"}}') """ + } + + trigger_and_wait_compaction(tableName, "cumulative") + + qt_sql """ select variant_type(var) from ${tableName} order by id """ + qt_sql """select * from ${tableName} order by id""" + qt_sql """ select count() from ${tableName} where cast(var['path']['int'] as int) = 789 """ + qt_sql """ select count() from ${tableName} where cast(var['path']['decimal'] as DECIMAL(15, 12)) = 789.789123456789 """ + qt_sql """ select count() from ${tableName} where var['path']['string'] match 'hello' """ + + // object table + sql "DROP TABLE IF EXISTS objects" + sql """ + CREATE TABLE `objects` ( + `id` int NOT NULL, + `overflow_properties` variant< + MATCH_NAME 'color' : text, + MATCH_NAME 'tags' : array, + 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") + ) ENGINE=OLAP + DUPLICATE KEY(`id`) + DISTRIBUTED BY RANDOM BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "min_load_replica_num" = "-1", + "is_being_synced" = "false", + "storage_medium" = "hdd", + "storage_format" = "V2", + "inverted_index_storage_format" = "V2", + "light_schema_change" = "true", + "enable_single_replica_compaction" = "false", + "group_commit_interval_ms" = "10000", + "group_commit_data_bytes" = "134217728", + "disable_auto_compaction" = "true" + ); + """ + for (int i = 0; i < 10; i++) { + sql """ + INSERT INTO objects (id, overflow_properties) + VALUES + (6, '{"color":"Bright Red","description":"A bright red circular object with a metallic shine","shape":"Large Circle","tags":["metallic","reflective"]}'), + (7, '{"color":"Deep Blue","description":"Opaque square made of plastic in deep blue","shape":"Small Square","tags":["opaque","plastic"]}'), + (8, '{"color":"Green","description":"Tall green triangle carved from wood","shape":"Tall Triangle","tags":["matte","wood"]}'), + (9, '{"color":"Reddish Orange","description":"Glossy ceramic hexagon with reddish orange tint","shape":"Flat Hexagon","tags":["glossy","ceramic"]}'), + (10, '{"color":"Yellow","description":"Shiny yellow circular badge","shape":"Wide Circle","tags":["shiny","plastic"]}'); + """ + } + trigger_and_wait_compaction(tableName, "cumulative") + sql "set enable_match_without_inverted_index = false" + qt_sql "select count() from objects where (overflow_properties['color'] MATCH_PHRASE 'Blue')" + qt_sql "select count() from objects where (array_contains(cast(overflow_properties['tags'] as array), 'plastic'))" + qt_sql "select cast(overflow_properties['color'] as string) from objects where overflow_properties['color'] IS NOT NULL and id = 6 limit 1" + qt_sql "select overflow_properties['color'] from objects where overflow_properties['color'] IS NOT NULL and id = 6 limit 1" +} \ No newline at end of file diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy new file mode 100644 index 00000000000000..7362483144ce1a --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy @@ -0,0 +1,120 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods +import org.awaitility.Awaitility + +suite("variant_predefine_with_sparse_limit_doc_snapshot", "p0") { + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + sql """ set default_variant_enable_doc_snapshot_mode = true """ + try { + String backend_id = backendId_to_backendIP.keySet()[0] + def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) + logger.info("Show config: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def configList = parseJson(out.trim()) + assert configList instanceof List + + boolean disableAutoCompaction = true + for (Object ele in (List) configList) { + assert ele instanceof List + if (((List) ele)[0] == "disable_auto_compaction") { + disableAutoCompaction = Boolean.parseBoolean(((List) ele)[2]) + } + } + + int max_sparse_column_statistics_size = 2 + def create_table = { tableName, buckets="auto", key_type="DUPLICATE" -> + sql "DROP TABLE IF EXISTS ${tableName}" + def var_def = "variant " + if (key_type == "AGGREGATE") { + var_def = "variant replace" + } + + sql """ + CREATE TABLE IF NOT EXISTS ${tableName} ( + k bigint, + v ${var_def} + ) + ${key_type} KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS ${buckets} + properties("replication_num" = "1", "disable_auto_compaction" = "true"); + """ + def create_tbl_res = sql """ show create table ${tableName} """ + logger.info("${create_tbl_res}") + assertTrue(create_tbl_res.toString().contains("variant_max_sparse_column_statistics_size")) + } + def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"] + // def key_types = ["AGGREGATE"] + for (int i = 0; i < key_types.size(); i++) { + def tableName = "simple_variant_${key_types[i]}" + // 1. simple cases + create_table.call(tableName, "1", key_types[i]) + def insert1 = { + sql """insert into ${tableName} values (1, '{"x" : [1]}'),(13, '{"a" : 1}');""" + sql """insert into ${tableName} values (2, '{"a" : "1"}'),(14, '{"a" : [[[1]]]}');""" + sql """insert into ${tableName} values (3, '{"x" : [3]}'),(15, '{"a" : 1}')""" + sql """insert into ${tableName} values (4, '{"y": 1}'),(16, '{"a" : "1223"}');""" + sql """insert into ${tableName} values (5, '{"z" : 2.0}'),(17, '{"a" : [1]}');""" + sql """insert into ${tableName} values (6, '{"x" : 111}'),(18, '{"a" : ["2"]}');""" + sql """insert into ${tableName} values (7, '{"m" : 1}'),(19, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${tableName} values (8, '{"l" : 2}'),(20, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${tableName} values (9, '{"g" : 1.11}'),(21, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${tableName} values (10, '{"z" : 1.1111}'),(22, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${tableName} values (11, '{"sala" : 0}'),(1999, '{"a" : 1, "b" : {"c" : 1}}'),(19921, '{"a" : 1, "b" : 10}');""" + sql """insert into ${tableName} values (12, '{"dddd" : 0.1}'),(1022, '{"a" : 1, "b" : 10}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + } + insert1.call(); + insert1.call(); + qt_sql_1 "SELECT * FROM ${tableName} ORDER BY k, cast(v as string); " + qt_sql_2 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" + qt_sql_3 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" + qt_sql_5 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != 'null' and cast(v['b'] as string) != '{}' order by k desc, 1, 2 limit 10;" + + // trigger compactions for all tablets in ${tableName} + trigger_and_wait_compaction(tableName, "cumulative") + qt_sql_11 "SELECT * FROM ${tableName} ORDER BY k, cast(v as string); " + qt_sql_22 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" + qt_sql_33 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" + qt_sql_55 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != 'null' and cast(v['b'] as string) != '{}' order by k desc limit 10;" + } + for (int i = 0; i < key_types.size(); i++) { + def tableName = "simple_variant_${key_types[i]}" + def insert2 = { + sql """insert into ${tableName} values (1, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${tableName} values (2, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${tableName} values (3, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${tableName} values (4, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${tableName} values (5, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + } + insert2.call(); + insert2.call(); + trigger_and_wait_compaction(tableName, "cumulative") + sql "set topn_opt_limit_threshold = 1" + order_qt_select "select * from ${tableName} order by k, cast(v as string) limit 5;" + sql "set topn_opt_limit_threshold = 10" + order_qt_select "select * from ${tableName} order by k, cast(v as string) limit 5;" + } + } finally { + // sql "DROP TABLE IF EXISTS simple_variant_DUPLICATE" + // sql "DROP TABLE IF EXISTS simple_variant_UNIQUE" + // sql "DROP TABLE IF EXISTS simple_variant_AGGREGATE" + } +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy new file mode 100644 index 00000000000000..68a34c05df3baa --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy @@ -0,0 +1,76 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("variant_predefine_with_mow_doc_snapshot", "p0") { + sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_doc_snapshot_min_rows = 0 """ + sql "DROP TABLE IF EXISTS var_mow" + sql """ + CREATE TABLE `var_mow` ( + `PORTALID` int NOT NULL, + `OBJECTTYPEID` varchar(65533) NOT NULL, + `OBJECTIDHASH` tinyint NOT NULL, + `OBJECTID` bigint NOT NULL, + `DELETED` boolean NULL DEFAULT "FALSE", + `INGESTIONTIMESTAMP` bigint NOT NULL, + `PROCESSEDTIMESTAMP` bigint NOT NULL, + `VERSION` bigint NULL DEFAULT "0", + `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`) + DISTRIBUTED BY HASH(`PORTALID`, `OBJECTTYPEID`, `OBJECTIDHASH`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "enable_unique_key_merge_on_write" = "true", + "function_column.sequence_col" = "VERSION", + "disable_auto_compaction" = "true" + ); + """ + + sql """ insert into var_mow values(944935233, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 30, "b": 40, "c": 50, "d": 60, "e": 70, "f": 80, "g": 90, "h": 100, "i": 110, "j": 120}'); """ + sql """ insert into var_mow values(944935234, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 31, "b": 41, "c": 51, "d": 61, "e": 71, "f": 81, "g": 91, "h": 101, "i": 111, "j": 121}'); """ + sql """ insert into var_mow values(944935235, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 32, "b": 42, "c": 52, "d": 62, "e": 72, "f": 82, "g": 92, "h": 102, "i": 112, "j": 122}'); """ + sql """ insert into var_mow values(944935236, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 33, "b": 43, "c": 53, "d": 63, "e": 73, "f": 83, "g": 93, "h": 103, "i": 113, "j": 123}'); """ + sql """ insert into var_mow values(944935237, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 34, "b": 44, "c": 54, "d": 64, "e": 74, "f": 84, "g": 94, "h": 104, "i": 114, "j": 124}'); """ + sql """ insert into var_mow values(944935238, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 35, "b": 45, "c": 55, "d": 65, "e": 75, "f": 85, "g": 95, "h": 105, "i": 115, "j": 125}'); """ + sql """ insert into var_mow values(944935239, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 36, "b": 46, "c": 56, "d": 66, "e": 76, "f": 86, "g": 96, "h": 106, "i": 116, "j": 126}'); """ + sql """ insert into var_mow values(944935240, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 37, "b": 47, "c": 57, "d": 67, "e": 77, "f": 87, "g": 97, "h": 107, "i": 117, "j": 127}'); """ + sql """ insert into var_mow values(944935241, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 38, "b": 48, "c": 58, "d": 68, "e": 78, "f": 88, "g": 98, "h": 108, "i": 118, "j": 128}'); """ + sql """ insert into var_mow values(944935242, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 39, "b": 49, "c": 59, "d": 69, "e": 79, "f": 89, "g": 99, "h": 109, "i": 119, "j": 129}'); """ + sql """ insert into var_mow values(944935243, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 40, "b": 50, "c": 60, "d": 70, "e": 80, "f": 90, "g": 100, "h": 110, "i": 120, "j": 130}'); """ + sql """ insert into var_mow values(944935244, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 41, "b": 51, "c": 61, "d": 71, "e": 81, "f": 91, "g": 101, "h": 111, "i": 121, "j": 131}'); """ + sql """ insert into var_mow values(944935245, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 42, "b": 52, "c": 62, "d": 72, "e": 82, "f": 92, "g": 102, "h": 112, "i": 122, "j": 132}'); """ + sql """ insert into var_mow values(944935246, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 43, "b": 53, "c": 63, "d": 73, "e": 83, "f": 93, "g": 103, "h": 113, "i": 123, "j": 133}'); """ + sql """ insert into var_mow values(944935247, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 44, "b": 54, "c": 64, "d": 74, "e": 84, "f": 94, "g": 104, "h": 114, "i": 124, "j": 134}'); """ + sql """ insert into var_mow values(944935248, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 45, "b": 55, "c": 65, "d": 75, "e": 85, "f": 95, "g": 105, "h": 115, "i": 125, "j": 135}'); """ + sql """ insert into var_mow values(944935249, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 46, "b": 56, "c": 66, "d": 76, "e": 86, "f": 96, "g": 106, "h": 116, "i": 126, "j": 136}'); """ + sql """ insert into var_mow values(944935250, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 47, "b": 57, "c": 67, "d": 77, "e": 87, "f": 97, "g": 107, "h": 117, "i": 127, "j": 137}'); """ + sql """ insert into var_mow values(944935251, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 48, "b": 58, "c": 68, "d": 78, "e": 88, "f": 98, "g": 108, "h": 118, "i": 128, "j": 138}'); """ + sql """ insert into var_mow values(944935252, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 49, "b": 59, "c": 69, "d": 79, "e": 89, "f": 99, "g": 109, "h": 119, "i": 129, "j": 139}'); """ + sql """ insert into var_mow values(944935253, '2', 1, 1, 'TRUE', 1741682404960657985, 1741682404960657985, 0, '{"a": 50, "b": 60, "c": 70, "d": 80, "e": 90, "f": 100, "g": 110, "h": 120, "i": 130, "j": 140}'); """ + + trigger_and_wait_compaction("var_mow", "full") + + qt_sql """ select objectId from var_mow objects_alias where objects_alias.portalid = 944935233 and objects_alias.objectTypeId = '2' limit 100 """ + // topn two phase enabled + qt_sql """select * from var_mow order by portalid limit 5""" + // topn two phase disabled + qt_sql """select * from var_mow order by portalid + OBJECTIDHASH limit 5""" +} \ No newline at end of file diff --git a/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy b/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy new file mode 100644 index 00000000000000..3cf17f88e3ae7c --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy @@ -0,0 +1,127 @@ +// 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("double_write_schema_change_doc_snapshot", "nonConcurrent") { + sql """ set default_variant_enable_doc_snapshot_mode = true """ + def set_be_config = { key, value -> + String backend_id; + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + backend_id = backendId_to_backendIP.keySet()[0] + def (code, out, err) = update_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), key, value) + logger.info("update config: code=" + code + ", out=" + out + ", err=" + err) + } + + 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' + 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 table_name = "github_events" + sql """DROP TABLE IF EXISTS ${table_name}""" + sql "set enable_variant_flatten_nested = true" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant, + change_column double, + INDEX idx_var(v) USING INVERTED PROPERTIES("parser" = "english") COMMENT '' + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 2 + properties("replication_num" = "1", "disable_auto_compaction" = "false", "variant_enable_flatten_nested" = "false"); + """ + + set_be_config.call("memory_limitation_per_thread_for_schema_change_bytes", "6294967296") + set_be_config.call("write_buffer_size", "10240") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-1.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-2.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-3.json'}""") + + def getJobState = { indexName -> + def jobStateResult = sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${indexName}' ORDER BY createtime DESC LIMIT 1 """ + return jobStateResult[0][9] + } + + def insert_sql = """ insert into ${table_name} values(1, '{"id":"25061216922","type":"PushEvent","actor":{"id":100067519,"login":"savorfamily","display_login":"savorfamily","gravatar_id":"123","url":"https://api.github.com/users/savorfamily","avatar_url":"https://avatars.githubusercontent.com/u/100067519?"},"repo":{"id":461434218,"name":"savorfamily/upptime","url":"https://api.github.com/repos/savorfamily/upptime"},"payload":{"push_id":11572320522,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"81106d369f763cb729d9d77610ace252c9db53f0","before":"2bf823a4febcf809da126828ecef7617c8cc48ea","commits":[{"sha":"81106d369f763cb729d9d77610ace252c9db53f0","author":{"email":"73812536+upptime-bot@users.noreply.github.com","name":"Upptime Bot"},"message":":bento: Update graphs [skip ci]","distinct":true,"url":"https://api.github.com/repos/savorfamily/upptime/commits/81106d369f763cb729d9d77610ace252c9db53f0"}]},"public":true,"created_at":"2022-11-07T02:00:00Z"}', "123111.0") """ + + def double_write = { -> + int max_try_time = 3000 + while (max_try_time--){ + String result = getJobState(table_name) + if (result == "FINISHED") { + sleep(3000) + break + } else { + if (result == "RUNNING") { + sql insert_sql + } + sleep(200) + if (max_try_time < 1){ + assertEquals(1,2) + } + } + } + } + + qt_sql "select v['type'], v['id'], v['created_at'] from ${table_name} where cast(v['id'] as bigint) != 25061216922 order by k, cast(v['id'] as bigint) limit 10" + + sql """ ALTER TABLE ${table_name} modify COLUMN change_column text""" + double_write.call() + + sql """ALTER TABLE ${table_name} drop index idx_var""" + double_write.call() + qt_sql "select v['type'], v['id'], v['created_at'] from ${table_name} where cast(v['id'] as bigint) != 25061216922 order by k, cast(v['id'] as bigint) limit 10" + + sql "set enable_two_phase_read_opt = false" + sql """select * from github_events order by k limit 10""" + sql "set enable_two_phase_read_opt = true" + sql """select * from github_events order by k limit 10""" + order_qt_sql """select k, v['payload']['commits'] from github_events where length(cast(v['payload']['commits'] as text)) > 100 and k > 1 order by k, cast(v['payload']['commits'] as text) limit 10""" + + // createMV("create materialized view xxx as select k, sum(k) from ${table_name} group by k order by k;") + // qt_sql "select v['type'], v['id'], v['created_at'] from ${table_name} where cast(v['id'] as bigint) != 25061216922 order by k, cast(v['id'] as bigint) limit 10" + // restore configs + set_be_config.call("memory_limitation_per_thread_for_schema_change_bytes", "2147483648") + set_be_config.call("write_buffer_size", "209715200") +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy new file mode 100644 index 00000000000000..201f087ea72da4 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy @@ -0,0 +1,118 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods +import org.awaitility.Awaitility + +suite("compaction_variant_doc_snapshot", "p0") { + sql """ set default_variant_enable_doc_snapshot_mode = true; """ + try { + String backend_id; + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + backend_id = backendId_to_backendIP.keySet()[0] + def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) + + logger.info("Show config: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def configList = parseJson(out.trim()) + assert configList instanceof List + + boolean disableAutoCompaction = true + for (Object ele in (List) configList) { + assert ele instanceof List + if (((List) ele)[0] == "disable_auto_compaction") { + disableAutoCompaction = Boolean.parseBoolean(((List) ele)[2]) + } + } + def create_table = { tableName, buckets="auto", key_type="DUPLICATE" -> + sql "DROP TABLE IF EXISTS ${tableName}" + def var_def = "variant" + if (key_type == "AGGREGATE") { + var_def = "variant replace" + } + sql """ + CREATE TABLE IF NOT EXISTS ${tableName} ( + k bigint, + v ${var_def} + ) + ${key_type} KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS ${buckets} + properties("replication_num" = "1", "disable_auto_compaction" = "true"); + """ + } + + + + def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"] + // def key_types = ["AGGREGATE"] + for (int i = 0; i < key_types.size(); i++) { + def tableName = "simple_variant_${key_types[i]}" + // 1. simple cases + create_table.call(tableName, "1", key_types[i]) + def insert = { + sql """insert into ${tableName} values (1, '{"x" : [1]}'),(13, '{"a" : 1}');""" + sql """insert into ${tableName} values (2, '{"a" : "1"}'),(14, '{"a" : [[[1]]]}');""" + sql """insert into ${tableName} values (3, '{"x" : [3]}'),(15, '{"a" : 1}')""" + sql """insert into ${tableName} values (4, '{"y": 1}'),(16, '{"a" : "1223"}');""" + sql """insert into ${tableName} values (5, '{"z" : 2.0}'),(17, '{"a" : [1]}');""" + sql """insert into ${tableName} values (6, '{"x" : 111}'),(18, '{"a" : ["1", 2, 1.1]}');""" + sql """insert into ${tableName} values (7, '{"m" : 1}'),(19, '{"a" : 1, "b" : {"c" : 1}}');""" + sql """insert into ${tableName} values (8, '{"l" : 2}'),(20, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${tableName} values (9, '{"g" : 1.11}'),(21, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${tableName} values (10, '{"z" : 1.1111}'),(22, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" + sql """insert into ${tableName} values (11, '{"sala" : 0}'),(1999, '{"a" : 1, "b" : {"c" : 1}}'),(19921, '{"a" : 1, "b" : 10}');""" + sql """insert into ${tableName} values (12, '{"dddd" : 0.1}'),(1022, '{"a" : 1, "b" : 10}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" + } + insert.call(); + insert.call(); + qt_sql_1 "SELECT * FROM ${tableName} ORDER BY k, cast(v as string); " + qt_sql_2 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" + qt_sql_3 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" + qt_sql_5 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != null or cast(v['b'] as string) != '{}' or cast(v['b'] as string) is not null or v['b'] is not null order by k desc, 1, 2 limit 10;" + + + //TabletId,ReplicaId,BackendId,SchemaHash,Version,LstSuccessVersion,LstFailedVersion,LstFailedTime,LocalDataSize,RemoteDataSize,RowCount,State,LstConsistencyCheckTime,CheckVersion,VersionCount,QueryHits,PathHash,MetaUrl,CompactionStatus + def tablets = sql_return_maparray """ show tablets from ${tableName}; """ + + // trigger compactions for all tablets in ${tableName} + trigger_and_wait_compaction(tableName, "cumulative") + + int rowCount = 0 + for (def tablet in tablets) { + String tablet_id = tablet.TabletId + (code, out, err) = curl("GET", tablet.CompactionStatus) + logger.info("Show tablets status: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def tabletJson = parseJson(out.trim()) + assert tabletJson.rowsets instanceof List + for (String rowset in (List) tabletJson.rowsets) { + rowCount += Integer.parseInt(rowset.split(" ")[1]) + } + } + // assert (rowCount < 8) + qt_sql_11 "SELECT * FROM ${tableName} where k != 18 ORDER BY k, cast(v as string); " + qt_sql_22 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" + qt_sql_33 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" + } + + } finally { + // try_sql("DROP TABLE IF EXISTS ${tableName}") + } +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy new file mode 100644 index 00000000000000..21d0a21c5db4ef --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy @@ -0,0 +1,141 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +import java.nio.charset.StandardCharsets +import java.nio.file.Files +import java.nio.file.Paths + +suite("outfile_csv_variant_doc_snapshot", "p0") { + // open nereids + sql """ set enable_nereids_planner=true """ + sql """ set enable_fallback_to_original_planner=false """ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + + String ak = getS3AK() + String sk = getS3SK() + String s3_endpoint = getS3Endpoint() + String region = getS3Region() + String bucket = context.config.otherConfigs.get("s3BucketName"); + + + def export_table_name = "outfile_csv_variant_export_test" + def load_table_name = "outfile_csv_variant_type_load_test" + def outFilePath = "${bucket}/outfile/csv/variant_type/exp_" + + + def create_table = {table_name, struct_field -> + sql """ DROP TABLE IF EXISTS ${table_name} """ + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + `user_id` LARGEINT NOT NULL COMMENT "用户id", + `name` STRING COMMENT "用户年龄", + ${struct_field} + ) + DISTRIBUTED BY HASH(user_id) PROPERTIES("replication_num" = "1"); + """ + } + + def outfile_to_S3 = { + // select ... into outfile ... + def res = sql """ + SELECT * FROM ${export_table_name} t ORDER BY user_id + INTO OUTFILE "s3://${outFilePath}" + FORMAT AS CSV + PROPERTIES ( + "s3.endpoint" = "${s3_endpoint}", + "s3.region" = "${region}", + "s3.secret_key"="${sk}", + "s3.access_key" = "${ak}" + ); + """ + + return res[0][3] + } + + + // 1. test NULL variant + try { + def struct_field_define = "`a_info` VARIANT NULL" + // create table to export data + create_table(export_table_name, struct_field_define) + // create table to load data + create_table(load_table_name, struct_field_define) + + + // insert data + sql """ insert into ${export_table_name} values (1, 'doris1', '[9, 99, 999]'), (2, 'doris2', '[8, 88]'); """ + sql """ insert into ${export_table_name} values (3, 'doris3', '{"a" : 123}'); """ + sql """ insert into ${export_table_name} values (4, 'doris4', null); """ + sql """ insert into ${export_table_name} values (5, 'doris5', '[1, null, 2]'); """ + sql """ insert into ${export_table_name} values (6, 'doris6', '{"aaaa" : "111111"}'); """ + sql """ insert into ${export_table_name} values (7, 'doris7', '{"bbbb" : 1.1111}'); """ + sql """ insert into ${export_table_name} values (8, 'doris8', '{"xxx" : [111.11]}'); """ + + + // test base data + qt_select_base1 """ SELECT * FROM ${export_table_name} t ORDER BY user_id; """ + + def outfile_url = outfile_to_S3() + + qt_select_load1 """ SELECT * FROM S3 ( + "uri" = "http://${bucket}.${s3_endpoint}${outfile_url.substring(5 + bucket.length(), outfile_url.length() - 1)}0.csv", + "ACCESS_KEY"= "${ak}", + "SECRET_KEY" = "${sk}", + "format" = "csv", + "region" = "${region}" + ); + """ + } finally { + } + + + // 2. test NOT NULL VARIANT + try { + def struct_field_define = "`a_info` VARIANT NOT NULL" + // create table to export data + create_table(export_table_name, struct_field_define) + // create table to load data + create_table(load_table_name, struct_field_define) + + + // insert data + // insert data + sql """ insert into ${export_table_name} values (1, 'doris1', '[9, 99, 999]'), (2, 'doris2', '[8, 88]'); """ + sql """ insert into ${export_table_name} values (3, 'doris3', '{"a" : 123}'); """ + sql """ insert into ${export_table_name} values (5, 'doris5', '[1, null, 2]'); """ + sql """ insert into ${export_table_name} values (6, 'doris6', '{"aaaa" : "111111"}'); """ + sql """ insert into ${export_table_name} values (7, 'doris7', '{"bbbb" : 1.1111}'); """ + sql """ insert into ${export_table_name} values (8, 'doris8', '{"xxx" : [111.11]}'); """ + + // test base data + qt_select_base2 """ SELECT * FROM ${export_table_name} t ORDER BY user_id; """ + + def outfile_url = outfile_to_S3() + + qt_select_load2 """ SELECT * FROM S3 ( + "uri" = "http://${bucket}.${s3_endpoint}${outfile_url.substring(5 + bucket.length(), outfile_url.length() - 1)}0.csv", + "ACCESS_KEY"= "${ak}", + "SECRET_KEY" = "${sk}", + "format" = "csv", + "region" = "${region}" + ); + """ + } finally { + } +} diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy new file mode 100644 index 00000000000000..6262990e78341f --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy @@ -0,0 +1,277 @@ +// 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("variant_external_meta_doc_snapshot", "p0") { + sql """ set default_variant_enable_doc_snapshot_mode = true """ + def set_be_config = { key, value -> + String backend_id; + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + backend_id = backendId_to_backendIP.keySet()[0] + def (code, out, err) = update_be_config(backendId_to_backendIP.get(backend_id), + backendId_to_backendHttpPort.get(backend_id), + key, value) + logger.info("update config: code=" + code + ", out=" + out + ", err=" + err) + } + + // Test 2: Many subcolumns (test performance and correctness) + sql "DROP TABLE IF EXISTS test_many_subcolumns" + sql """ + CREATE TABLE test_many_subcolumns ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + // Generate JSON with 100 subcolumns + def generateLargeJson = { int numFields -> + def fields = [] + for (int i = 0; i < numFields; i++) { + fields.add("\"field_${i}\": ${i}") + } + return "{" + fields.join(", ") + "}" + } + + // external meta enabled by table property + // Insert rows with different numbers of subcolumns + for (int row = 0; row < 10; row++) { + int numFields = (row + 1) * 10 // 10, 20, 30, ..., 100 fields + def json = generateLargeJson(numFields) + sql """insert into test_many_subcolumns values (${row}, '${json}')""" + } + + qt_many_1 "select k, v['field_0'] from test_many_subcolumns order by k" + qt_many_2 "select k, v['field_50'] from test_many_subcolumns where cast(v['field_50'] as int) is not null order by k" + qt_many_3 "select k, v['field_99'] from test_many_subcolumns where cast(v['field_99'] as int) is not null order by k" + qt_many_4 "select count(*) from test_many_subcolumns" + + // Test 3: Mixed old and new format segments + sql "DROP TABLE IF EXISTS test_mixed_format" + sql """ + CREATE TABLE test_mixed_format ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + // Write with old format (V2) + sql """insert into test_mixed_format values (1, '{"a": 1, "b": 2}')""" + sql """insert into test_mixed_format values (2, '{"a": 10, "c": 3}')""" + + // Switch to new format (V2.1) and write more rows + sql """insert into test_mixed_format values (3, '{"a": 100, "d": 4}')""" + sql """insert into test_mixed_format values (4, '{"a": 1000, "e": 5}')""" + + // Query should work across all segments + qt_mixed_1 "select k, v['a'] from test_mixed_format order by k" + qt_mixed_2 "select k, v['b'] from test_mixed_format where cast(v['b'] as int) is not null order by k" + qt_mixed_3 "select k, v['c'] from test_mixed_format where cast(v['c'] as int) is not null order by k" + qt_mixed_4 "select k, v['d'] from test_mixed_format where cast(v['d'] as int) is not null order by k" + qt_mixed_5 "select k, v['e'] from test_mixed_format where cast(v['e'] as int) is not null order by k" + + // Trigger compaction and verify + trigger_and_wait_compaction("test_mixed_format", "full") + + qt_mixed_after_compact_1 "select k, v['a'] from test_mixed_format order by k" + qt_mixed_after_compact_2 "select count(distinct k) from test_mixed_format" + + // Test 4: Nested structures with external meta + sql "DROP TABLE IF EXISTS test_nested_external" + sql """ + CREATE TABLE test_nested_external ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + sql """insert into test_nested_external values (1, '{"nested": {"level1": {"level2": "value"}}}')""" + sql """insert into test_nested_external values (2, '{"nested": {"level1": {"level2": "value2", "level2_b": 123}}}')""" + sql """insert into test_nested_external values (3, '{"nested": {"level1": null}}')""" + sql """insert into test_nested_external values (4, '{"nested": null}')""" + + qt_nested_1 "select k, v['nested']['level1']['level2'] from test_nested_external order by k" + qt_nested_2 "select k, v['nested']['level1']['level2_b'] from test_nested_external where cast(v['nested']['level1']['level2_b'] as int) is not null order by k" + qt_nested_3 "select k from test_nested_external where v['nested'] is not null order by k" + qt_nested_4 "select k from test_nested_external where v['nested']['level1'] is not null order by k" + + // Test 5: Array types with external meta + sql "DROP TABLE IF EXISTS test_array_external" + sql """ + CREATE TABLE test_array_external ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + sql """insert into test_array_external values (1, '{"arr": [1, 2, 3]}')""" + sql """insert into test_array_external values (2, '{"arr": [10, 20, 30, 40]}')""" + sql """insert into test_array_external values (3, '{"arr": []}')""" + sql """insert into test_array_external values (4, '{"arr": null}')""" + + qt_array_1 "select k, v['arr'] from test_array_external order by k" + qt_array_2 "select k from test_array_external where v['arr'] is not null order by k" + + // Test 6: Schema evolution - adding subcolumns over time + sql "DROP TABLE IF EXISTS test_schema_evolution" + sql """ + CREATE TABLE test_schema_evolution ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + sql """insert into test_schema_evolution values (1, '{"a": 1}')""" + + // Segment 2: add field 'b' + sql """insert into test_schema_evolution values (2, '{"a": 2, "b": 2}')""" + + // Segment 3: add field 'c' + sql """insert into test_schema_evolution values (3, '{"a": 3, "b": 3, "c": 3}')""" + + // Segment 4: completely different schema + sql """insert into test_schema_evolution values (4, '{"x": 10, "y": 20}')""" + + qt_evolution_1 "select k, v['a'] from test_schema_evolution order by k" + qt_evolution_2 "select k, v['b'] from test_schema_evolution order by k" + qt_evolution_3 "select k, v['c'] from test_schema_evolution order by k" + qt_evolution_4 "select k, v['x'] from test_schema_evolution order by k" + qt_evolution_5 "select k, v['y'] from test_schema_evolution order by k" + + // Test 7: Special characters in field names + sql "DROP TABLE IF EXISTS test_special_chars" + sql """ + CREATE TABLE test_special_chars ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + sql """insert into test_special_chars values (1, '{"field-with-dash": 1}')""" + sql """insert into test_special_chars values (2, '{"field.with.dot": 2}')""" + sql """insert into test_special_chars values (3, '{"field_with_underscore": 3}')""" + + qt_special_1 "select k, v['field-with-dash'] from test_special_chars where cast(v['field-with-dash'] as int) is not null order by k" + qt_special_2 "select k, v['field.with.dot'] from test_special_chars where cast(v['field.with.dot'] as int) is not null order by k" + qt_special_3 "select k, v['field_with_underscore'] from test_special_chars where cast(v['field_with_underscore'] as int) is not null order by k" + + // Test 8: NULL handling + sql "DROP TABLE IF EXISTS test_null_handling" + sql """ + CREATE TABLE test_null_handling ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + sql """insert into test_null_handling values (1, '{"a": null}')""" + sql """insert into test_null_handling values (2, '{"a": 1}')""" + sql """insert into test_null_handling values (3, null)""" + + qt_null_1 "select k, v['a'] from test_null_handling order by k" + qt_null_2 "select k from test_null_handling where v is null order by k" + qt_null_3 "select k from test_null_handling where v['a'] is null order by k" + qt_null_4 "select k from test_null_handling where v['a'] is not null order by k" + + // Test 9: Large string values + sql "DROP TABLE IF EXISTS test_large_strings" + sql """ + CREATE TABLE test_large_strings ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + def largeString = "x" * 10000 // 10KB string + sql """insert into test_large_strings values (1, '{"large_field": "${largeString}"}')""" + sql """insert into test_large_strings values (2, '{"large_field": "small"}')""" + + qt_large_1 "select k, length(cast(v['large_field'] as string)) from test_large_strings order by k" + qt_large_2 "select k from test_large_strings where length(cast(v['large_field'] as string)) > 100 order by k" + + // Test 10: Config toggle during operation + sql "DROP TABLE IF EXISTS test_config_toggle" + sql """ + CREATE TABLE test_config_toggle ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "true", "storage_format" = "V3"); + """ + + // Start with new format (V2.1) + sql """insert into test_config_toggle values (1, '{"a": 1}')""" + + // Switch to legacy (V2) + sql """insert into test_config_toggle values (2, '{"a": 2, "b": 2}')""" + + // Enable again (V2.1) + sql """insert into test_config_toggle values (3, '{"a": 3, "b": 3, "c": 3}')""" + + // All queries should work regardless of config state + qt_toggle_1 "select k, v['a'] from test_config_toggle order by k" + qt_toggle_2 "select k, v['b'] from test_config_toggle where cast(v['b'] as int) is not null order by k" + qt_toggle_3 "select k, v['c'] from test_config_toggle where cast(v['c'] as int) is not null order by k" + + // Compact and verify + trigger_and_wait_compaction("test_config_toggle", "full") + + qt_toggle_after_compact_1 "select k, v['a'] from test_config_toggle order by k" + qt_toggle_after_compact_2 "select k, v['b'] from test_config_toggle where cast(v['b'] as int) is not null order by k" + + // Cleanup + sql "DROP TABLE IF EXISTS test_empty_subcolumns" + sql "DROP TABLE IF EXISTS test_many_subcolumns" + sql "DROP TABLE IF EXISTS test_mixed_format" + sql "DROP TABLE IF EXISTS test_nested_external" + sql "DROP TABLE IF EXISTS test_array_external" + sql "DROP TABLE IF EXISTS test_schema_evolution" + sql "DROP TABLE IF EXISTS test_special_chars" + sql "DROP TABLE IF EXISTS test_null_handling" + sql "DROP TABLE IF EXISTS test_large_strings" + sql "DROP TABLE IF EXISTS test_config_toggle" + +} + + diff --git a/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy b/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy new file mode 100644 index 00000000000000..01154bf84e7527 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy @@ -0,0 +1,116 @@ +// 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("variant_hirachinal_doc_snapshot", "p0"){ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + def set_be_config = { key, value -> + String backend_id; + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + backend_id = backendId_to_backendIP.keySet()[0] + def (code, out, err) = update_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), key, value) + logger.info("update config: code=" + code + ", out=" + out + ", err=" + err) + } + + def table_name = "var_rs" + sql "DROP TABLE IF EXISTS ${table_name}" + + sql "set default_variant_enable_doc_snapshot_mode = false" + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "false"); + """ + sql """insert into ${table_name} values (-3, '{"a" : 1, "b" : 1.5, "c" : [1, 2, 3]}')""" + sql """insert into ${table_name} select * from (select -2, '{"a": 11245, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : "null", "e" : 7.111}}' as json_str + union all select -1, '{"a": 1123}' as json_str union all select *, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" = "4096"))t order by 1 limit 4098 ;""" + qt_sql "select * from ${table_name} order by k limit 10" + qt_sql "select cast(v['c'] as string) from ${table_name} where k = -3 or k = -2 order by k" + qt_sql "select v['b'] from ${table_name} where k = -3 or k = -2" + sql """insert into ${table_name} values (-3, '{"c" : 12345}')""" + order_qt_sql1 "select cast(v['c'] as string) from var_rs where k = -3 or k = -2 or k = -4 or (k = 1 and v['c'] = 1024) order by k" + order_qt_sql2 "select cast(v['c'] as string) from var_rs where k = -3 or k = -2 or k = 1 order by k, cast(v['c'] as text) limit 3" + + + table_name = "var_rs2" + sql "DROP TABLE IF EXISTS ${table_name}" + + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "false"); + """ + + sql """insert into ${table_name} values (1, '{"a": 1, "b": 2, "c" : {"d" : 2}}'), (2, '{"a": 3, "b": 4}');""" + sql """insert into ${table_name} values (3, '{"c": {"d": 6}}');""" + + qt_sql """select v['c'] from ${table_name} order by k;""" + + sql "DROP TABLE IF EXISTS ${table_name}" + + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant<'c.d' : decimal(10, 5), properties("variant_max_subcolumns_count" = "2", "variant_enable_typed_paths_to_sparse" = "true")> + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(k) BUCKETS 1 + properties("replication_num" = "1", "disable_auto_compaction" = "false"); + """ + + sql """insert into ${table_name} values (1, '{"a": 1, "b": 2, "c" : {"d" : 2}}'), (2, '{"a": 3, "b": 4}');""" + sql """insert into ${table_name} values (3, '{"c": {"d": 6}}');""" + sql """insert into ${table_name} values (4, NULL);""" + sql """insert into ${table_name} values (5, '{}');""" + + qt_sql """select v['c'] from ${table_name} order by k;""" + qt_sql """select v from ${table_name} order by k;""" + + sql "DROP TABLE IF EXISTS t" + sql """create table t(a int, v variant, vn variant not null) PROPERTIES ("replication_allocation" = "tag.location.default: 1");""" + sql """insert into t values(1, '{}', '{}');""" + sql """insert into t values(2, '{}', '{}');""" + sql """insert into t values(3, NULL, '{"a" : 1, "b" : 2, "c" : 3, "d" : 4}');""" + qt_sql """select * from t order by a;""" + qt_sql """select * from t where v is null;""" + + sql "DROP TABLE IF EXISTS ${table_name}" + sql """ + CREATE TABLE ${table_name} ( + `k` bigint NULL, + `v` variant NULL + ) ENGINE=OLAP + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + sql """insert into ${table_name} values (1, '{"a": 1}'), (2, '{"a" : 1, "profile" : {"name" : "John", "age" : 30}, "profile_id" : 123}');""" + sql """insert into ${table_name} values (3, '{"a": 1}'), (4, '{"a" : 1, "profile" : {"name" : "John", "age" : 30}, "profile2" : 123}'); """ + qt_sql """select v['profile'] from ${table_name} order by k;""" +} \ No newline at end of file diff --git a/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy b/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy new file mode 100644 index 00000000000000..8589170b2e91c8 --- /dev/null +++ b/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy @@ -0,0 +1,114 @@ +// 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("array_contains_with_index_doc_snapshot", "p0") { + // prepare test table + def indexTblName = "tai" + setFeConfigTemporary([enable_inverted_index_v1_for_variant: true]) { + + // If we use common expr pass to inverted index , we should set enable_common_expr_pushdown = true + sql """ set enable_common_expr_pushdown = true; """ + sql """ set enable_common_expr_pushdown_for_inverted_index = true; """ + sql """ set enable_profile = true;""" + + sql "DROP TABLE IF EXISTS ${indexTblName}" + sql """ set default_variant_enable_doc_snapshot_mode = true """ + // create 1 replica table + def storageFormat = new Random().nextBoolean() ? "V1" : "V2" + if (storageFormat == "V1" && isCloudMode()) { + return; + } + sql """ + CREATE TABLE IF NOT EXISTS `${indexTblName}` ( + `apply_date` date NULL COMMENT '', + `id` varchar(60) NOT NULL COMMENT '', + `inventors` variant< + MATCH_NAME 'inventors' : array + > NULL COMMENT '', + INDEX index_inverted_inventors(inventors) USING INVERTED PROPERTIES( "field_pattern" = "inventors", "support_phrase" = "true", "parser" = "english", "lower_case" = "true") COMMENT '' + ) ENGINE=OLAP + DUPLICATE KEY(`apply_date`, `id`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1", + "is_being_synced" = "false", + "storage_format" = "V2", + "light_schema_change" = "true", + "disable_auto_compaction" = "false", + "enable_single_replica_compaction" = "false", + "inverted_index_storage_format" = "$storageFormat" + ); + """ + + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2017-01-01', '6afef581285b6608bf80d5a4e46cf839', '{"inventors":["a", "b", "c"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2017-01-01', 'd93d942d985a8fb7547c72dada8d332d', '{"inventors":["d", "e", "f", "g", "h", "i", "j", "k", "l"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2017-01-01', '48a33ec3453a28bce84b8f96fe161956', '{"inventors":["m"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2017-01-01', '021603e7dcfe65d44af0efd0e5aee154', '{"inventors":["n"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2017-01-01', '9fcb57ae675f0af4d613d9e6c0e8a2a2', '{"inventors":["o"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`) VALUES ('2017-01-01', '8fcb57ae675f0af4d613d9e6c0e8a2a3'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2017-01-01', '8fcb57ae675f0af4d613d9e6c0e8a2a4', NULL); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2019-01-01', 'a648a447b8f71522f11632eba4b4adde', '{"inventors":["p", "q", "r", "s", "t"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2019-01-01', 'a9fb5c985c90bf05f3bee5ca3ae95260', '{"inventors":["u", "v"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2019-01-01', '0974e7a82e30d1af83205e474fadd0a2', '{"inventors":["w"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2019-01-01', '26823b3995ee38bd145ddd910b2f6300', '{"inventors":["x"]}'); """ + sql """ INSERT INTO `${indexTblName}`(`apply_date`, `id`, `inventors`) VALUES ('2019-01-01', 'ee27ee1da291e46403c408e220bed6e1', '{"inventors":["y"]}'); """ + sql """ set enable_common_expr_pushdown = true """ + + qt_sql """ select count() from ${indexTblName}""" + def param_contains = ["'s'", "''", null] + for (int i = 0 ; i < param_contains.size(); ++i) { + def p = param_contains[i] + log.info("param: ${p}") + order_qt_sql """ select * from tai where array_contains(cast(inventors['inventors'] as array), ${p}) order by id; """ + order_qt_sql """ select * from tai where array_contains(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select * from tai where array_contains(cast(inventors['inventors'] as array), ${p}) and apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select * from tai where array_contains(cast(inventors['inventors'] as array), ${p}) or apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select * from tai where !array_contains(cast(inventors['inventors'] as array), ${p}) order by id; """ + order_qt_sql """ select * from tai where !array_contains(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select * from tai where !array_contains(cast(inventors['inventors'] as array), ${p}) and apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select * from tai where !array_contains(cast(inventors['inventors'] as array), ${p}) or apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select * from tai where (array_contains(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01') or apply_date = '2019-01-01' order by id; """ + } + + // test arrays_overlap with inverted index + // now if we use inverted index we will not eval exprs + def param = [["'s'", "'t'"], [], null, ["'s'", "''", "'t'"], ["'s'", null, "'t'"], [null, "''"], ["'s'", null, "'t'", "''"]] // null for arrays_overlap will return null which in predicate will lead to return empty set + for (int i = 0 ; i < param.size(); ++i) { + def p = param[i] + log.info("param: ${p}") + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) or apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where arrays_overlap(cast(inventors['inventors'] as array), ${p}) or apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) or apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where !arrays_overlap(cast(inventors['inventors'] as array), ${p}) or apply_date = '2017-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = true)*/ * from tai where (arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01') or apply_date = '2019-01-01' order by id; """ + order_qt_sql """ select /*+SET_VAR(enable_common_expr_pushdown = false)*/ * from tai where (arrays_overlap(cast(inventors['inventors'] as array), ${p}) and apply_date = '2017-01-01') or apply_date = '2019-01-01' order by id; """ + } + } +} diff --git a/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy b/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy index 029200519e9be8..1ed673efb7a334 100644 --- a/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy +++ b/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy @@ -34,7 +34,7 @@ suite("test_variant_external_meta_edge_cases", "nonConcurrent") { sql """ CREATE TABLE test_empty_subcolumns ( k bigint, - v variant + v variant ) DUPLICATE KEY(`k`) DISTRIBUTED BY HASH(k) BUCKETS 1 diff --git a/regression-test/suites/variant_p0/load.groovy b/regression-test/suites/variant_p0/load.groovy index f5cd6e77a3482f..d02dd9a3629207 100644 --- a/regression-test/suites/variant_p0/load.groovy +++ b/regression-test/suites/variant_p0/load.groovy @@ -76,7 +76,7 @@ suite("regression_test_variant", "p0"){ } sql "set experimental_enable_nereids_planner=true" sql "set enable_fallback_to_original_planner=false" - + sql """ set default_variant_enable_doc_snapshot_mode = false """ try { def key_types = ["DUPLICATE", "UNIQUE"] for (int i = 0; i < key_types.size(); i++) { diff --git a/regression-test/suites/variant_p0/nested.groovy b/regression-test/suites/variant_p0/nested.groovy index 047de391ca02d2..4c44c55fdb5012 100644 --- a/regression-test/suites/variant_p0/nested.groovy +++ b/regression-test/suites/variant_p0/nested.groovy @@ -20,6 +20,10 @@ suite("regression_test_variant_nested", "p0"){ def backendId_to_backendHttpPort = [:] getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_max_subcolumns_count = 0" + sql "set default_variant_sparse_hash_shard_count = 0" + sql "set default_variant_enable_typed_paths_to_sparse = false" try { def table_name = "var_nested" diff --git a/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy b/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy index 09bffa8cd695fc..83ff5655aace70 100644 --- a/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy +++ b/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy @@ -18,6 +18,10 @@ // this test is used to test the nested in top array suite("nested_in_top_array", "p0"){ + sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_max_subcolumns_count = 0" + sql "set default_variant_sparse_hash_shard_count = 0" + sql "set default_variant_enable_typed_paths_to_sparse = false" try { // create a table with nested in top array diff --git a/regression-test/suites/variant_p0/nested2.groovy b/regression-test/suites/variant_p0/nested2.groovy index 853234c72868a2..36287446bfd10c 100644 --- a/regression-test/suites/variant_p0/nested2.groovy +++ b/regression-test/suites/variant_p0/nested2.groovy @@ -18,6 +18,10 @@ // this test is used to test the type conflict of nested array suite("variant_nested_type_conflict", "p0"){ + sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_max_subcolumns_count = 0" + sql "set default_variant_sparse_hash_shard_count = 0" + sql "set default_variant_enable_typed_paths_to_sparse = false" try { def table_name = "var_nested_type_conflict" diff --git a/regression-test/suites/variant_p0/predefine/load.groovy b/regression-test/suites/variant_p0/predefine/load.groovy index 3df4136568f686..65171739c20908 100644 --- a/regression-test/suites/variant_p0/predefine/load.groovy +++ b/regression-test/suites/variant_p0/predefine/load.groovy @@ -16,6 +16,7 @@ // under the License. suite("regression_test_variant_predefine_schema", "p0"){ + sql """ set default_variant_enable_doc_snapshot_mode = false """ sql """DROP TABLE IF EXISTS test_predefine""" def count = new Random().nextInt(10); if (new Random().nextInt(100) < 50) { @@ -59,7 +60,7 @@ suite("regression_test_variant_predefine_schema", "p0"){ sql """ CREATE TABLE `test_predefine1` ( `id` bigint NOT NULL, - `v1` variant NULL, + `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"); @@ -219,7 +220,7 @@ suite("regression_test_variant_predefine_schema", "p0"){ sql "DROP TABLE IF EXISTS test_predefine3" sql """CREATE TABLE `test_predefine3` ( `id` bigint NOT NULL, - `v` variant<'nested.a':string> NULL) + `v` variant<'nested.a':string, properties("variant_enable_doc_snapshot_mode" = "false")> NULL) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_enable_flatten_nested" = "false", "disable_auto_compaction" = "true");""" 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 index f6be5bb8c5e94d..7c5dcb1c6d54dc 100644 --- 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 @@ -18,6 +18,7 @@ suite("test_all_prdefine_type_to_sparse", "p0"){ sql """ set describe_extend_variant_column = true """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ def tableName = "test_all_prdefine_type_to_sparse" sql "set enable_decimal256 = true" 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 61512328f4ee80..3d25ac3b06067e 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 @@ -20,6 +20,7 @@ suite("test_variant_multi_index_file", "p0, nonConcurrent"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql "set default_variant_max_subcolumns_count = 100" + sql """ set default_variant_doc_snapshot_min_rows = 0 """ def tableName = "test_variant_multi_index_nonCurrent" sql "DROP TABLE IF EXISTS ${tableName}" 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 1b422fd244e852..24dca60e2e22fa 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 @@ -20,6 +20,7 @@ suite("test_variant_multi_index_nonCurrent", "p0, nonConcurrent") { sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_doc_snapshot_min_rows = 0 """ def queryAndCheck = { String sqlQuery, int expectedFilteredRows = -1, boolean checkFilterUsed = true -> def checkpoints_name = "segment_iterator.inverted_index.filtered_rows" @@ -400,7 +401,7 @@ suite("test_variant_multi_index_nonCurrent", "p0, nonConcurrent") { trigger_and_wait_compaction(tableName, "cumulative") sql "set enable_two_phase_read_opt = true" qt_sql "select * from ${tableName} order by id limit 10" - qt_sql "select variant_type(var) from ${tableName} where id = 1" + //qt_sql "select variant_type(var) from ${tableName} where id = 1" accurateCheckIndexWithQueries() findException = false try { 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 47d5849035f6cf..68b4f0eef74bb6 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 @@ -18,6 +18,7 @@ suite("test_predefine_insert_into_select", "p0"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ sql "DROP TABLE IF EXISTS fromTable" sql """CREATE TABLE fromTable ( 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 99ec6d84088471..f68c7d2fc86c25 100644 --- a/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy +++ b/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy @@ -36,6 +36,12 @@ suite("test_predefine_ddl", "p0") { assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") } + sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_max_subcolumns_count = 10 """ + sql """ set default_variant_max_sparse_column_statistics_size = 10 """ + sql """ set default_variant_sparse_hash_shard_count = 10 """ + def tableName = "test_ddl_table" test { @@ -122,7 +128,7 @@ suite("test_predefine_ddl", "p0") { test { sql """ alter table ${tableName} modify column var variant NULL """ - exception("Can not change variant schema templates") + exception("Can not change variant") } test { @@ -157,7 +163,7 @@ suite("test_predefine_ddl", "p0") { 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 variant variant""") + exception("""Duplicate field name ab in variant""") } test { 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 382dd6c0e769cf..8d5ff4036aaeca 100644 --- a/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy +++ b/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy @@ -20,6 +20,7 @@ suite("test_variant_predefine_base", "p0"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ def count = new Random().nextInt(5) def tableName = "base_match_name_variant_test" sql "DROP TABLE IF EXISTS ${tableName}" 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 2feb4efb57cd04..9c55d0fec14d45 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 @@ -18,6 +18,7 @@ suite("test_predefine_schema_change", "p0"){ def tableName = "test_predefine_schema_change" sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ sql "DROP TABLE IF EXISTS ${tableName}" sql """CREATE TABLE ${tableName} ( `id` bigint NULL, 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 3f1f0dd6e6854e..a1335b3b230ac4 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 @@ -20,6 +20,7 @@ suite("test_variant_predefine_index_type", "p0"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ def tableName = "test_variant_predefine_index_type" sql "DROP TABLE IF EXISTS ${tableName}" 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 5b129ac13638fb..8c7f9cdf3dda2d 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 @@ -23,6 +23,7 @@ suite("test_compaction_variant_predefine_with_sparse_limit", "nonConcurrent") { def backendId_to_backendHttpPort = [:] getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + sql """ set default_variant_enable_doc_snapshot_mode = false """ try { String backend_id = backendId_to_backendIP.keySet()[0] def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) 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 e13a3b2ec0e4bc..b8bd5aa854d1ca 100644 --- a/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy +++ b/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy @@ -16,6 +16,7 @@ // under the License. suite("variant_predefine_with_mow") { + sql """ set default_variant_enable_doc_snapshot_mode = false """ sql "DROP TABLE IF EXISTS var_mow" sql """ CREATE TABLE `var_mow` ( diff --git a/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy b/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy index 3bad6181251234..7fb20562529e85 100644 --- a/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy +++ b/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy @@ -61,7 +61,7 @@ suite("double_write_schema_change_with_variant", "nonConcurrent") { sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, - v variant, + v variant, change_column double, INDEX idx_var(v) USING INVERTED PROPERTIES("parser" = "english") COMMENT '' ) 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 2c7ba11f580c0b..f051ce20df7bec 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 @@ -20,6 +20,7 @@ suite("test_variant_is_null_expr", "p0, nonConcurrent") { // define a sql table def testTable = "test_variant_is_null_expr" sql "set default_variant_max_subcolumns_count = 10" + sql "set default_variant_doc_snapshot_min_rows = 0" sql """ DROP TABLE IF EXISTS ${testTable} """ sql """ CREATE TABLE ${testTable} ( diff --git a/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy b/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy index 0571dcc2f0b38e..ce5a5848867a51 100644 --- a/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy +++ b/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy @@ -17,6 +17,7 @@ suite("test_variant_search_subcolumn") { def table_name = "test_variant_search_subcolumn" + sql "set default_variant_doc_snapshot_min_rows = 0" sql "DROP TABLE IF EXISTS ${table_name}" diff --git a/regression-test/suites/variant_p0/variant_hirachinal.groovy b/regression-test/suites/variant_p0/variant_hirachinal.groovy index 8ec3fde007c4ce..b8a6df5f2ccfae 100644 --- a/regression-test/suites/variant_p0/variant_hirachinal.groovy +++ b/regression-test/suites/variant_p0/variant_hirachinal.groovy @@ -30,6 +30,7 @@ suite("regression_test_variant_hirachinal", "variant_type"){ def table_name = "var_rs" sql "DROP TABLE IF EXISTS ${table_name}" + sql "set default_variant_enable_doc_snapshot_mode = false" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, @@ -41,7 +42,7 @@ suite("regression_test_variant_hirachinal", "variant_type"){ """ sql """insert into ${table_name} values (-3, '{"a" : 1, "b" : 1.5, "c" : [1, 2, 3]}')""" sql """insert into ${table_name} select * from (select -2, '{"a": 11245, "b" : [123, {"xx" : 1}], "c" : {"c" : 456, "d" : "null", "e" : 7.111}}' as json_str - union all select -1, '{"a": 1123}' as json_str union all select *, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" = "4096"))t order by 1 limit 4096 ;""" + union all select -1, '{"a": 1123}' as json_str union all select *, '{"a" : 1234, "xxxx" : "kaana"}' as json_str from numbers("number" = "4096"))t order by 1 limit 4098 ;""" qt_sql "select * from ${table_name} order by k limit 10" qt_sql "select cast(v['c'] as string) from ${table_name} where k = -3 or k = -2 order by k" qt_sql "select v['b'] from ${table_name} where k = -3 or k = -2" 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 a725400c328c12..fa716432dd91b3 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 @@ -26,6 +26,7 @@ suite("test_array_contains_with_inverted_index") { sql """ set enable_profile = true;""" sql "DROP TABLE IF EXISTS ${indexTblName}" + sql """ set default_variant_enable_doc_snapshot_mode = false """ // create 1 replica table def storageFormat = new Random().nextBoolean() ? "V1" : "V2" if (storageFormat == "V1" && isCloudMode()) { diff --git a/regression-test/suites/variant_p1/doc_snapshot/load.groovy b/regression-test/suites/variant_p1/doc_snapshot/load.groovy new file mode 100644 index 00000000000000..7bdbdd70609d67 --- /dev/null +++ b/regression-test/suites/variant_p1/doc_snapshot/load.groovy @@ -0,0 +1,113 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite("predefine_type_multi_index_doc_snapshot", "p1"){ + + sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = true """ + + 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 table_name = "github_events" + sql """DROP TABLE IF EXISTS ${table_name}""" + table_name = "github_events" + // int rand_subcolumns_count = Math.floor(Math.random() * (611 - 511 + 1)) + 400 + // int rand_subcolumns_count = 0; + sql """ drop table if exists github_events_2 """ + sql """ + CREATE TABLE IF NOT EXISTS ${table_name} ( + k bigint, + v variant< + MATCH_NAME 'repo.name' : string, + MATCH_NAME 'payload.pull_request.additions' : int, + MATCH_NAME 'actor.login' : string, + MATCH_NAME 'type' : string, + MATCH_NAME 'payload.action' : string, + MATCH_NAME 'created_at' : datetime, + MATCH_NAME 'payload.issue.number' : int, + MATCH_NAME 'payload.comment.body' : string, + MATCH_NAME 'type.name' : string + > 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" = "false"); + """ + + // 2015 + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-0.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-1.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-2.json'}""") + load_json_data.call(table_name, """${getS3Url() + '/regression/gharchive.m/2015-01-01-3.json'}""") + + // 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'}""") + 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'}""") + + sql """set enable_match_without_inverted_index = false""" + sql """ set enable_common_expr_pushdown = true """ + + qt_sql """select cast(v["repo"]["name"] as string) from github_events where v["repo"]["name"] match 'apache' order by k limit 10;""" + qt_sql """select cast(v["repo"]["name"] as string) from github_events where cast(v["repo"]["name"] as string) match 'xpressengine/xe-core' order by 1 limit 10;""" + qt_sql """select cast(v["repo"]["name"] as string) from github_events where cast(v["repo"]["name"] as string) = 'xpressengine/xe-core' order by 1 limit 10""" + + sql """ drop table if exists github_events_2 """ + sql """ create table github_events_2 like github_events """ + sql """ insert into github_events_2 select * from github_events """ + + trigger_and_wait_compaction(table_name, "cumulative") + qt_sql """select cast(v["repo"]["name"] as string) from github_events where v["repo"]["name"] match 'apache' order by 1 limit 10;""" + qt_sql """select cast(v["repo"]["name"] as string) from github_events where cast(v["repo"]["name"] as string) match 'xpressengine/xe-core' order by 1 limit 10;""" + qt_sql """select cast(v["repo"]["name"] as string) from github_events where cast(v["repo"]["name"] as string) = 'xpressengine/xe-core' order by 1 limit 10""" + + qt_sql """select cast(v["repo"]["name"] as string) from github_events_2 where v["repo"]["name"] match 'apache' order by 1 limit 10;""" + qt_sql """select cast(v["repo"]["name"] as string) from github_events_2 where cast(v["repo"]["name"] as string) match 'xpressengine/xe-core' order by 1 limit 10;""" + qt_sql """select cast(v["repo"]["name"] as string) from github_events_2 where cast(v["repo"]["name"] as string) = 'xpressengine/xe-core' order by 1 limit 10""" +} diff --git a/regression-test/suites/variant_p1/predefine/load.groovy b/regression-test/suites/variant_p1/predefine/load.groovy index 0872d896680db1..7f24eea8592b92 100644 --- a/regression-test/suites/variant_p1/predefine/load.groovy +++ b/regression-test/suites/variant_p1/predefine/load.groovy @@ -20,6 +20,7 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite("test_predefine_type_multi_index", "p1"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_snapshot_mode = false """ def load_json_data = {table_name, file_name -> // load the json data From 274f6183343c5f9e49411e07b3a086edfe25b609 Mon Sep 17 00:00:00 2001 From: csun5285 Date: Tue, 23 Dec 2025 17:12:56 +0800 Subject: [PATCH 2/6] rename something --- .../variant/hierarchical_data_iterator.cpp | 2 +- .../variant/sparse_column_extract_iterator.h | 2 +- .../variant/variant_column_reader.cpp | 40 ++--- .../variant/variant_column_reader.h | 4 +- .../variant/variant_column_writer_impl.cpp | 94 ++++++------ .../variant/variant_column_writer_impl.h | 8 +- .../variant/variant_doc_snapshot_iterator.cpp | 28 ++-- .../variant/variant_doc_snapshot_iterator.h | 12 +- .../variant_doc_snpashot_compact_iterator.h | 16 +- .../segment_v2/variant/variant_statistics.h | 2 +- .../segment_v2/variant/variant_util.cpp | 2 +- be/src/olap/tablet_meta.cpp | 4 +- be/src/olap/tablet_schema.cpp | 2 +- be/src/olap/tablet_schema.h | 6 +- be/src/vec/columns/column_variant.cpp | 112 +++++++------- be/src/vec/columns/column_variant.h | 26 ++-- be/src/vec/common/schema_util.cpp | 8 +- be/src/vec/common/schema_util.h | 2 +- be/src/vec/data_types/data_type_variant.cpp | 10 +- .../functions/function_variant_element.cpp | 10 +- be/src/vec/json/parse2column.cpp | 4 +- .../variant_column_writer_reader_test.cpp | 18 +-- .../org/apache/doris/catalog/VariantType.java | 2 +- .../doris/common/util/PropertyAnalyzer.java | 4 +- .../doris/nereids/types/VariantType.java | 2 +- gensrc/proto/olap_file.proto | 2 +- gensrc/proto/segment_v2.proto | 2 +- gensrc/thrift/Descriptors.thrift | 2 +- .../create_nestedtypes_with_schemachange.out | 12 +- regression-test/data/variant_p0/desc.out | 50 +++--- .../predefine/test_predefine_ddl.out | 8 +- regression-test/data/variant_p0/nested.out | 2 +- regression-test/data/variant_p0/nested2.out | 8 +- .../test_all_prdefine_type_to_sparse.out | 144 +++++++++--------- .../predefine/test_predefine_ddl.out | 8 +- .../suites/variant_p0/delete_update.groovy | 2 +- .../doc_snapshot/predefine/load.groovy | 2 +- ...st_variant_external_meta_edge_cases.groovy | 2 +- .../suites/variant_p0/predefine/load.groovy | 4 +- ...est_double_write_when_schema_change.groovy | 2 +- 40 files changed, 335 insertions(+), 335 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp index 2b94ab1aad14b1..bbb6cc2765ac5d 100644 --- a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp @@ -299,7 +299,7 @@ Status HierarchicalDataIterator::_init_container(vectorized::MutableColumnPtr& c RETURN_IF_ERROR(_process_sparse_column(container_variant, nrows)); } - container_variant.get_doc_snapshot_column()->assume_mutable()->resize(nrows); + container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); container_variant.set_num_rows(nrows); return Status::OK(); } diff --git a/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h b/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h index fc4f689e0421c8..0037358f28ed39 100644 --- a/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h @@ -161,7 +161,7 @@ class SparseColumnExtractIterator : public BaseSparseColumnProcessor { _sparse_column_cache->binary_column->size()); var.incr_num_rows(_sparse_column_cache->binary_column->size()); var.get_sparse_column()->assume_mutable()->resize(var.rows()); - var.get_doc_snapshot_column()->assume_mutable()->resize(var.rows()); + var.get_doc_value_column()->assume_mutable()->resize(var.rows()); ENABLE_CHECK_CONSISTENCY(&var); } 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 52a6e55d52e671..8ba1758a112cf7 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 @@ -633,12 +633,12 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& } // read root - if (root->path == relative_path && !_doc_snapshot_column_readers.empty()) { + if (root->path == relative_path && !_doc_value_column_readers.empty()) { plan->kind = ReadKind::DOC_SNAPSHOT_ALL; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; plan->root = root; - for (const auto& [bucket_value, _] : _doc_snapshot_column_readers) { + for (const auto& [bucket_value, _] : _doc_value_column_readers) { plan->doc_snapshot_buckets.push_back(bucket_value); } return Status::OK(); @@ -738,7 +738,7 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& // find if path exists in doc snapshot column auto picked_doc_snapshot_buckets = - _pick_doc_snapshot_column_buckets(relative_path.get_path()); + _pick_doc_value_column_buckets(relative_path.get_path()); if (!picked_doc_snapshot_buckets.empty()) { plan->kind = ReadKind::DOC_SNAPSHOT_EXTRACT; plan->type = create_variant_type(target_col); @@ -816,7 +816,7 @@ Status VariantColumnReader::_create_iterator_from_plan( case ReadKind::DOC_SNAPSHOT: { DCHECK(plan.doc_snapshot_buckets.size() == 1); ColumnIteratorUPtr inner_iter; - RETURN_IF_ERROR(_doc_snapshot_column_readers.at(plan.doc_snapshot_buckets[0]) + RETURN_IF_ERROR(_doc_value_column_readers.at(plan.doc_snapshot_buckets[0]) ->new_iterator(&inner_iter, nullptr)); *iterator = std::make_unique(std::move(inner_iter)); return Status::OK(); @@ -824,27 +824,27 @@ Status VariantColumnReader::_create_iterator_from_plan( case ReadKind::DOC_SNAPSHOT_EXTRACT: { DCHECK(plan.doc_snapshot_buckets.size() >= 1); - std::vector doc_snapshot_column_caches; + std::vector doc_value_column_caches; for (const auto& bucket : plan.doc_snapshot_buckets) { std::string path = DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket); - BinaryColumnCacheSPtr doc_snapshot_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, path, _doc_snapshot_column_readers.at(bucket))); - doc_snapshot_column_caches.push_back(std::move(doc_snapshot_column_cache)); + BinaryColumnCacheSPtr doc_value_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, path, _doc_value_column_readers.at(bucket))); + doc_value_column_caches.push_back(std::move(doc_value_column_cache)); } *iterator = std::make_unique( - std::move(doc_snapshot_column_caches), plan.relative_path.get_path()); + std::move(doc_value_column_caches), plan.relative_path.get_path()); if (opt && opt->stats) { opt->stats->variant_subtree_doc_snapshot_extract_iter_count++; } return Status::OK(); } case ReadKind::DOC_SNAPSHOT_ALL: { - std::vector doc_snapshot_column_caches; + std::vector doc_value_column_caches; for (const auto& bucket : plan.doc_snapshot_buckets) { std::string path = DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket); - BinaryColumnCacheSPtr doc_snapshot_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, path, _doc_snapshot_column_readers.at(bucket))); - doc_snapshot_column_caches.push_back(std::move(doc_snapshot_column_cache)); + BinaryColumnCacheSPtr doc_value_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, path, _doc_value_column_readers.at(bucket))); + doc_value_column_caches.push_back(std::move(doc_value_column_cache)); } std::unique_ptr root_column_reader; DCHECK(plan.root); @@ -853,7 +853,7 @@ Status VariantColumnReader::_create_iterator_from_plan( std::make_unique(_root_column_reader), plan.root->data.file_column_type); *iterator = std::make_unique( - std::move(doc_snapshot_column_caches), std::move(root_column_reader)); + std::move(doc_value_column_caches), std::move(root_column_reader)); if (opt && opt->stats) { opt->stats->variant_subtree_doc_snapshot_all_iter_count++; } @@ -980,13 +980,13 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce int bucket_value = std::stoi(rel_str.substr(bucket + 1)); std::shared_ptr column_reader; RETURN_IF_ERROR(ColumnReader::create(opts, col, num_rows, file_reader, &column_reader)); - _doc_snapshot_column_readers.emplace(bucket_value, std::move(column_reader)); + _doc_value_column_readers.emplace(bucket_value, std::move(column_reader)); const auto& variant_stats = col.variant_statistics(); std::set> paths; - for (const auto& [subpath, size] : variant_stats.doc_snapshot_column_non_null_size()) { + for (const auto& [subpath, size] : variant_stats.doc_value_column_non_null_size()) { paths.insert(subpath); } - _statistics->doc_snapshot_column_paths[bucket_value] = std::move(paths); + _statistics->doc_value_column_paths[bucket_value] = std::move(paths); *handled = true; return Status::OK(); } @@ -1323,11 +1323,11 @@ Status DefaultNestedColumnIterator::read_by_rowids(const rowid_t* rowids, const return Status::OK(); } -std::vector VariantColumnReader::_pick_doc_snapshot_column_buckets( +std::vector VariantColumnReader::_pick_doc_value_column_buckets( const std::string& path) { std::vector bucket_values; - for (const auto& [bucket_value, reader] : _doc_snapshot_column_readers) { - const auto& doc_snapshot_stats = _statistics->doc_snapshot_column_paths[bucket_value]; + for (const auto& [bucket_value, reader] : _doc_value_column_readers) { + const auto& doc_snapshot_stats = _statistics->doc_value_column_paths[bucket_value]; const std::string& prefix = path + "."; if (doc_snapshot_stats.find(path) != doc_snapshot_stats.end() || (doc_snapshot_stats.lower_bound(prefix) != doc_snapshot_stats.end() && 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 49806dc6ae72cc..ce0b86b444d780 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 @@ -369,7 +369,7 @@ class VariantColumnReader : public ColumnReader { PathToBinaryColumnCache* binary_column_cache_ptr, const std::string& path, std::shared_ptr binary_column_reader); - std::vector _pick_doc_snapshot_column_buckets(const std::string& path); + std::vector _pick_doc_value_column_buckets(const std::string& path); // Protect `_subcolumns_meta_info` and `_statistics` when loading external meta. // english only in comments @@ -391,7 +391,7 @@ class VariantColumnReader : public ColumnReader { uint64_t _num_rows {0}; uint32_t _root_unique_id {0}; - std::unordered_map> _doc_snapshot_column_readers; + std::unordered_map> _doc_value_column_readers; // call-once guard moved into VariantExternalMetaReader }; 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 2dcb597283ce69..05f7c8485f2baa 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 @@ -393,19 +393,19 @@ Status VariantDocSnapShotWriter::init(const TabletColumn* parent_column, int buc SegmentFooterPB* footer) { _bucket_num = bucket_num; _first_column_id = column_id; - _doc_snapshot_column_writers.resize(_bucket_num); - _doc_snapshot_column_opts.resize(_bucket_num); + _doc_value_column_writers.resize(_bucket_num); + _doc_value_column_opts.resize(_bucket_num); for (int b = 0; b < _bucket_num; ++b) { const TabletColumn& bucket_column = - vectorized::schema_util::create_doc_snapshot_column(*parent_column, b); - _doc_snapshot_column_opts[b] = opts; - _doc_snapshot_column_opts[b].meta = footer->add_columns(); - _init_column_meta(_doc_snapshot_column_opts[b].meta, column_id, bucket_column, + vectorized::schema_util::create_doc_value_column(*parent_column, b); + _doc_value_column_opts[b] = opts; + _doc_value_column_opts[b].meta = footer->add_columns(); + _init_column_meta(_doc_value_column_opts[b].meta, column_id, bucket_column, opts.compression_type); - RETURN_IF_ERROR(ColumnWriter::create_map_writer(_doc_snapshot_column_opts[b], + RETURN_IF_ERROR(ColumnWriter::create_map_writer(_doc_value_column_opts[b], &bucket_column, opts.file_writer, - &_doc_snapshot_column_writers[b])); - RETURN_IF_ERROR(_doc_snapshot_column_writers[b]->init()); + &_doc_value_column_writers[b])); + RETURN_IF_ERROR(_doc_value_column_writers[b]->init()); ++column_id; } return Status::OK(); @@ -415,7 +415,7 @@ Status VariantDocSnapShotWriter::append_data(const TabletColumn* parent_column, const vectorized::ColumnVariant& src, size_t num_rows, vectorized::OlapBlockDataConvertor* converter) { const auto [paths_col, values_col] = src.get_doc_snapshot_data_paths_and_values(); - const auto& offsets = src.serialized_doc_snapshot_column_offsets(); + const auto& offsets = src.serialized_doc_value_column_offsets(); std::vector tmp_maps(_bucket_num); for (int b = 0; b < _bucket_num; ++b) { @@ -445,22 +445,22 @@ Status VariantDocSnapShotWriter::append_data(const TabletColumn* parent_column, for (int b = 0; b < _bucket_num; ++b) { TabletColumn bucket_column = - vectorized::schema_util::create_doc_snapshot_column(*parent_column, b); + vectorized::schema_util::create_doc_value_column(*parent_column, b); converter->add_column_data_convertor(bucket_column); int this_col_id = _first_column_id + b; RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( {tmp_maps[b]->get_ptr(), nullptr, ""}, 0, num_rows, this_col_id)); auto [status, column] = converter->convert_column_data(this_col_id); RETURN_IF_ERROR(status); - RETURN_IF_ERROR(_doc_snapshot_column_writers[b]->append(column->get_nullmap(), + RETURN_IF_ERROR(_doc_value_column_writers[b]->append(column->get_nullmap(), column->get_data(), num_rows)); converter->clear_source_content(this_col_id); - _doc_snapshot_column_opts[b].meta->set_num_rows(num_rows); - auto* stats = _doc_snapshot_column_opts[b].meta->mutable_variant_statistics(); - auto* doc_snapshot_column_non_null_size = - stats->mutable_doc_snapshot_column_non_null_size(); + _doc_value_column_opts[b].meta->set_num_rows(num_rows); + auto* stats = _doc_value_column_opts[b].meta->mutable_variant_statistics(); + auto* doc_value_column_non_null_size = + stats->mutable_doc_value_column_non_null_size(); for (const auto& [k, cnt] : bucket_path_counts[b]) { - (*doc_snapshot_column_non_null_size)[k.to_string()] = cnt; + (*doc_value_column_non_null_size)[k.to_string()] = cnt; } } @@ -469,28 +469,28 @@ Status VariantDocSnapShotWriter::append_data(const TabletColumn* parent_column, uint64_t VariantDocSnapShotWriter::estimate_buffer_size() const { uint64_t size = 0; - for (const auto& writer : _doc_snapshot_column_writers) { + for (const auto& writer : _doc_value_column_writers) { size += writer->estimate_buffer_size(); } return size; } Status VariantDocSnapShotWriter::finish() { - for (auto& writer : _doc_snapshot_column_writers) { + for (auto& writer : _doc_value_column_writers) { RETURN_IF_ERROR(writer->finish()); } return Status::OK(); } Status VariantDocSnapShotWriter::write_data() { - for (auto& writer : _doc_snapshot_column_writers) { + for (auto& writer : _doc_value_column_writers) { RETURN_IF_ERROR(writer->write_data()); } return Status::OK(); } Status VariantDocSnapShotWriter::write_ordinal_index() { - for (auto& writer : _doc_snapshot_column_writers) { + for (auto& writer : _doc_value_column_writers) { RETURN_IF_ERROR(writer->write_ordinal_index()); } return Status::OK(); @@ -665,13 +665,13 @@ Status VariantColumnWriterImpl::_process_sparse_column( return Status::OK(); } -Status VariantColumnWriterImpl::_process_doc_snapshot_column( +Status VariantColumnWriterImpl::_process_doc_value_column( vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id) { - if (!_tablet_column->variant_enable_doc_snapshot_mode()) { + if (!_tablet_column->variant_enable_doc_mode()) { return Status::OK(); } - ptr->reconstruct_and_sort_doc_snapshot_column(); + ptr->reconstruct_and_sort_doc_value_column(); const int bucket_num = std::max(1, _tablet_column->variant_doc_snapshot_shard_count()); RETURN_IF_ERROR( _doc_snapshot_writer.init(_tablet_column, bucket_num, column_id, _opts, _opts.footer)); @@ -735,7 +735,7 @@ Status VariantColumnWriterImpl::finalize() { _process_sparse_column(ptr, olap_data_convertor.get(), num_rows, column_id)); RETURN_IF_ERROR( - _process_doc_snapshot_column(ptr, olap_data_convertor.get(), num_rows, column_id)); + _process_doc_value_column(ptr, olap_data_convertor.get(), num_rows, column_id)); } _is_finalized = true; @@ -1000,7 +1000,7 @@ Status VariantCompactionDocSnapshotWriter::finish() { for (auto& column_writer : _subcolumn_writers) { RETURN_IF_ERROR(column_writer->finish()); } - RETURN_IF_ERROR(_doc_snapshot_column_writer->finish()); + RETURN_IF_ERROR(_doc_value_column_writer->finish()); return Status::OK(); } Status VariantCompactionDocSnapshotWriter::write_data() { @@ -1010,7 +1010,7 @@ Status VariantCompactionDocSnapshotWriter::write_data() { for (auto& column_writer : _subcolumn_writers) { RETURN_IF_ERROR(column_writer->write_data()); } - RETURN_IF_ERROR(_doc_snapshot_column_writer->write_data()); + RETURN_IF_ERROR(_doc_value_column_writer->write_data()); return Status::OK(); } Status VariantCompactionDocSnapshotWriter::write_ordinal_index() { @@ -1018,7 +1018,7 @@ Status VariantCompactionDocSnapshotWriter::write_ordinal_index() { for (auto& column_writer : _subcolumn_writers) { RETURN_IF_ERROR(column_writer->write_ordinal_index()); } - RETURN_IF_ERROR(_doc_snapshot_column_writer->write_ordinal_index()); + RETURN_IF_ERROR(_doc_value_column_writer->write_ordinal_index()); return Status::OK(); } @@ -1029,7 +1029,7 @@ Status VariantCompactionDocSnapshotWriter::write_zone_map() { RETURN_IF_ERROR(_subcolumn_writers[i]->write_zone_map()); } } - RETURN_IF_ERROR(_doc_snapshot_column_writer->write_zone_map()); + RETURN_IF_ERROR(_doc_value_column_writer->write_zone_map()); return Status::OK(); } @@ -1040,7 +1040,7 @@ Status VariantCompactionDocSnapshotWriter::write_inverted_index() { RETURN_IF_ERROR(_subcolumn_writers[i]->write_inverted_index()); } } - RETURN_IF_ERROR(_doc_snapshot_column_writer->write_inverted_index()); + RETURN_IF_ERROR(_doc_value_column_writer->write_inverted_index()); return Status::OK(); } Status VariantCompactionDocSnapshotWriter::write_bloom_filter_index() { @@ -1050,7 +1050,7 @@ Status VariantCompactionDocSnapshotWriter::write_bloom_filter_index() { RETURN_IF_ERROR(_subcolumn_writers[i]->write_bloom_filter_index()); } } - RETURN_IF_ERROR(_doc_snapshot_column_writer->write_bloom_filter_index()); + RETURN_IF_ERROR(_doc_value_column_writer->write_bloom_filter_index()); return Status::OK(); } Status VariantCompactionDocSnapshotWriter::append_nullable(const uint8_t* null_map, @@ -1073,7 +1073,7 @@ Status VariantCompactionDocSnapshotWriter::finalize() { std::unordered_map subcolumns; auto [column_key, column_value] = variant_column->get_doc_snapshot_data_paths_and_values(); - const auto& column_offsets = variant_column->serialized_doc_snapshot_column_offsets(); + const auto& column_offsets = variant_column->serialized_doc_value_column_offsets(); for (int64_t i = 0; i < num_rows; ++i) { size_t start = column_offsets[i - 1]; @@ -1172,32 +1172,32 @@ Status VariantCompactionDocSnapshotWriter::finalize() { } } - std::string doc_snapshot_column_path = _tablet_column->path_info_ptr()->get_path(); - size_t pos = doc_snapshot_column_path.rfind("."); - int bucket_value = std::stoi(doc_snapshot_column_path.substr(pos + 1)); - TabletColumn doc_snapshot_column = - vectorized::schema_util::create_doc_snapshot_column(parent_column, bucket_value); - _init_column_meta(_opts.meta, column_id, doc_snapshot_column, _opts.compression_type); - RETURN_IF_ERROR(ColumnWriter::create_map_writer(_opts, &doc_snapshot_column, _opts.file_writer, - &_doc_snapshot_column_writer)); - RETURN_IF_ERROR(_doc_snapshot_column_writer->init()); + std::string doc_value_column_path = _tablet_column->path_info_ptr()->get_path(); + size_t pos = doc_value_column_path.rfind("."); + int bucket_value = std::stoi(doc_value_column_path.substr(pos + 1)); + TabletColumn doc_value_column = + vectorized::schema_util::create_doc_value_column(parent_column, bucket_value); + _init_column_meta(_opts.meta, column_id, doc_value_column, _opts.compression_type); + RETURN_IF_ERROR(ColumnWriter::create_map_writer(_opts, &doc_value_column, _opts.file_writer, + &_doc_value_column_writer)); + RETURN_IF_ERROR(_doc_value_column_writer->init()); // convert root column data from engine format to storage layer format - converter->add_column_data_convertor(doc_snapshot_column); + converter->add_column_data_convertor(doc_value_column); // Convert MutableColumnPtr to ColumnPtr by creating a shared pointer from the raw pointer // The ownership is maintained by _column, so this is safe RETURN_IF_ERROR(converter->set_source_content_with_specifid_column( - {variant_column->get_doc_snapshot_column(), nullptr, ""}, 0, num_rows, column_id)); + {variant_column->get_doc_value_column(), nullptr, ""}, 0, num_rows, column_id)); auto [status, column] = converter->convert_column_data(column_id); RETURN_IF_ERROR(status); - RETURN_IF_ERROR(_doc_snapshot_column_writer->append(column->get_nullmap(), column->get_data(), + RETURN_IF_ERROR(_doc_value_column_writer->append(column->get_nullmap(), column->get_data(), num_rows)); converter->clear_source_content(column_id); _opts.meta->set_num_rows(num_rows); auto [column_key, column_value] = variant_column->get_doc_snapshot_data_paths_and_values(); - const auto& column_offsets = variant_column->serialized_doc_snapshot_column_offsets(); + const auto& column_offsets = variant_column->serialized_doc_value_column_offsets(); std::map column_stats; for (int64_t i = 0; i < num_rows; ++i) { size_t start = column_offsets[i - 1]; @@ -1208,9 +1208,9 @@ Status VariantCompactionDocSnapshotWriter::finalize() { } } auto* stats = _opts.meta->mutable_variant_statistics(); - auto* doc_snapshot_column_non_null_size = stats->mutable_doc_snapshot_column_non_null_size(); + auto* doc_value_column_non_null_size = stats->mutable_doc_value_column_non_null_size(); for (const auto& [k, cnt] : column_stats) { - (*doc_snapshot_column_non_null_size)[k.to_string()] = cnt; + (*doc_value_column_non_null_size)[k.to_string()] = cnt; } _is_finalized = true; return Status::OK(); diff --git a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h index ccd837cbf40a9c..400887f1207312 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h @@ -72,8 +72,8 @@ class VariantDocSnapShotWriter : public VariantBinaryWriter { private: int _bucket_num = 0; int _first_column_id = -1; - std::vector> _doc_snapshot_column_writers; - std::vector _doc_snapshot_column_opts; + std::vector> _doc_value_column_writers; + std::vector _doc_value_column_opts; }; // Unifies writing of Variant sparse data in two modes: @@ -161,7 +161,7 @@ class VariantColumnWriterImpl { Status _process_subcolumns(vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id); - Status _process_doc_snapshot_column(vectorized::ColumnVariant* ptr, + Status _process_doc_value_column(vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id); // prepare a column for finalize @@ -239,7 +239,7 @@ class VariantCompactionDocSnapshotWriter : public ColumnWriter { const TabletColumn* _tablet_column = nullptr; ColumnWriterOptions _opts; bool _is_finalized = false; - std::unique_ptr _doc_snapshot_column_writer; + std::unique_ptr _doc_value_column_writer; std::vector> _subcolumn_writers; std::vector _subcolumns_indexes; std::vector _subcolumn_opts; diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp index 21fb98c75e9559..83463e66729b4b 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.cpp @@ -35,32 +35,32 @@ namespace doris::segment_v2 { #include "common/compile_check_begin.h" VariantDocSnapshotIteratorBase::VariantDocSnapshotIteratorBase( - std::vector&& doc_snapshot_column_caches) - : _doc_snapshot_column_caches(std::move(doc_snapshot_column_caches)) {} + std::vector&& doc_value_column_caches) + : _doc_value_column_caches(std::move(doc_value_column_caches)) {} Status VariantDocSnapshotIteratorBase::init(const ColumnIteratorOptions& opts) { - for (const auto& cache : _doc_snapshot_column_caches) { + for (const auto& cache : _doc_value_column_caches) { RETURN_IF_ERROR(cache->init(opts)); } return Status::OK(); } Status VariantDocSnapshotIteratorBase::seek_to_ordinal(ordinal_t ord) { - for (const auto& cache : _doc_snapshot_column_caches) { + for (const auto& cache : _doc_value_column_caches) { RETURN_IF_ERROR(cache->seek_to_ordinal(ord)); } return Status::OK(); } ordinal_t VariantDocSnapshotIteratorBase::get_current_ordinal() const { - DCHECK(!_doc_snapshot_column_caches.empty()); - return _doc_snapshot_column_caches[0]->get_current_ordinal(); + DCHECK(!_doc_value_column_caches.empty()); + return _doc_value_column_caches[0]->get_current_ordinal(); } VariantDocSnapshotRootIterator::VariantDocSnapshotRootIterator( - std::vector&& doc_snapshot_column_caches, + std::vector&& doc_value_column_caches, std::unique_ptr&& root_reader) - : VariantDocSnapshotIteratorBase(std::move(doc_snapshot_column_caches)), + : VariantDocSnapshotIteratorBase(std::move(doc_value_column_caches)), _root_reader(std::move(root_reader)) {} Status VariantDocSnapshotRootIterator::init(const ColumnIteratorOptions& opts) { @@ -149,10 +149,10 @@ Status VariantDocSnapshotRootIterator::_merge_doc_snapshot_into_variant( MutableColumnPtr container = ColumnVariant::create(variant.max_subcolumns_count(), root_type, root_nullable_column->assume_mutable()); auto& container_variant = assert_cast(*container); - vectorized::MutableColumnPtr doc_snapshot_column = + vectorized::MutableColumnPtr doc_value_column = vectorized::ColumnVariant::create_binary_column_fn(); - auto& column_map = assert_cast(*doc_snapshot_column); + auto& column_map = assert_cast(*doc_value_column); auto& dst_doc_snapshot_data_paths = assert_cast(column_map.get_keys()); auto& dst_doc_snapshot_data_values = @@ -182,7 +182,7 @@ Status VariantDocSnapshotRootIterator::_merge_doc_snapshot_into_variant( dst_doc_snapshot_data_offsets.push_back(dst_doc_snapshot_data_paths.size()); } - container_variant.set_doc_snapshot_column(std::move(doc_snapshot_column)); + container_variant.set_doc_value_column(std::move(doc_value_column)); if (null_map) { if (_root_reader->column->is_nullable()) { @@ -202,8 +202,8 @@ Status VariantDocSnapshotRootIterator::_merge_doc_snapshot_into_variant( } VariantDocSnapshotPathIterator::VariantDocSnapshotPathIterator( - std::vector&& doc_snapshot_column_caches, std::string path) - : VariantDocSnapshotIteratorBase(std::move(doc_snapshot_column_caches)), + std::vector&& doc_value_column_caches, std::string path) + : VariantDocSnapshotIteratorBase(std::move(doc_value_column_caches)), _path(std::move(path)) {} Status VariantDocSnapshotPathIterator::next_batch(size_t* n, vectorized::MutableColumnPtr& dst, @@ -318,7 +318,7 @@ Status VariantDocSnapshotPathIterator::_merge_doc_snapshot_into_variant( subcolumn.insert_default(); } } - container_variant.serialized_doc_snapshot_column_offsets().push_back(0); + container_variant.serialized_doc_value_column_offsets().push_back(0); if (null_map) { if (has_data) { null_map->push_back(false); diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h index de19353d45049e..f7614c594d624d 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h @@ -26,7 +26,7 @@ namespace doris::segment_v2 { class VariantDocSnapshotIteratorBase : public ColumnIterator { public: explicit VariantDocSnapshotIteratorBase( - std::vector&& doc_snapshot_column_caches); + std::vector&& doc_value_column_caches); ~VariantDocSnapshotIteratorBase() override = default; Status init(const ColumnIteratorOptions& opts) override; @@ -43,8 +43,8 @@ class VariantDocSnapshotIteratorBase : public ColumnIterator { ReaderFunc&& reader_func, std::vector* doc_snapshot_data_buckets) { doc_snapshot_data_buckets->clear(); - doc_snapshot_data_buckets->reserve(_doc_snapshot_column_caches.size()); - for (const auto& cache : _doc_snapshot_column_caches) { + doc_snapshot_data_buckets->reserve(_doc_value_column_caches.size()); + for (const auto& cache : _doc_value_column_caches) { DCHECK(cache); RETURN_IF_ERROR(reader_func(cache.get())); DCHECK(cache->binary_column); @@ -53,12 +53,12 @@ class VariantDocSnapshotIteratorBase : public ColumnIterator { return Status::OK(); } - std::vector _doc_snapshot_column_caches; + std::vector _doc_value_column_caches; }; class VariantDocSnapshotRootIterator final : public VariantDocSnapshotIteratorBase { public: - VariantDocSnapshotRootIterator(std::vector&& doc_snapshot_column_caches, + VariantDocSnapshotRootIterator(std::vector&& doc_value_column_caches, std::unique_ptr&& root_reader); Status init(const ColumnIteratorOptions& opts) override; @@ -78,7 +78,7 @@ class VariantDocSnapshotRootIterator final : public VariantDocSnapshotIteratorBa class VariantDocSnapshotPathIterator final : public VariantDocSnapshotIteratorBase { public: - VariantDocSnapshotPathIterator(std::vector&& doc_snapshot_column_caches, + VariantDocSnapshotPathIterator(std::vector&& doc_value_column_caches, std::string path); Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override; diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h b/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h index 70ff95eced4b7d..c17c1d2ea25ee3 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h @@ -35,18 +35,18 @@ class VariantDocSnapshotCompactIterator : public ColumnIterator { } Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override { - vectorized::MutableColumnPtr doc_snapshot_column = + vectorized::MutableColumnPtr doc_value_column = vectorized::ColumnVariant::create_binary_column_fn(); - RETURN_IF_ERROR(_doc_snapshot_iterator->next_batch(n, doc_snapshot_column, has_null)); - return _set_doc_snapshot_into_variant(dst, std::move(doc_snapshot_column), *n); + RETURN_IF_ERROR(_doc_snapshot_iterator->next_batch(n, doc_value_column, has_null)); + return _set_doc_snapshot_into_variant(dst, std::move(doc_value_column), *n); } Status read_by_rowids(const rowid_t* rowids, const size_t count, vectorized::MutableColumnPtr& dst) override { - vectorized::MutableColumnPtr doc_snapshot_column = + vectorized::MutableColumnPtr doc_value_column = vectorized::ColumnVariant::create_binary_column_fn(); - RETURN_IF_ERROR(_doc_snapshot_iterator->read_by_rowids(rowids, count, doc_snapshot_column)); - return _set_doc_snapshot_into_variant(dst, std::move(doc_snapshot_column), count); + RETURN_IF_ERROR(_doc_snapshot_iterator->read_by_rowids(rowids, count, doc_value_column)); + return _set_doc_snapshot_into_variant(dst, std::move(doc_value_column), count); } ordinal_t get_current_ordinal() const override { @@ -55,13 +55,13 @@ class VariantDocSnapshotCompactIterator : public ColumnIterator { private: Status _set_doc_snapshot_into_variant(vectorized::MutableColumnPtr& dst, - vectorized::MutableColumnPtr&& doc_snapshot_column, + vectorized::MutableColumnPtr&& doc_value_column, size_t count) const { auto& variant = assert_cast(*dst); vectorized::MutableColumnPtr container = vectorized::ColumnVariant::create(variant.max_subcolumns_count(), count); auto& container_variant = assert_cast(*container); - container_variant.set_doc_snapshot_column(std::move(doc_snapshot_column)); + container_variant.set_doc_value_column(std::move(doc_value_column)); variant.insert_range_from(container_variant, 0, count); return Status::OK(); } diff --git a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h index c82b7aceaaadbe..b1261ecb61a2d2 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h @@ -33,7 +33,7 @@ struct VariantStatistics { std::map sparse_column_non_null_size; // doc snapshot column non-null size for each bucket - std::unordered_map>> doc_snapshot_column_paths; + std::unordered_map>> doc_value_column_paths; void to_pb(VariantStatisticsPB* stats) const { auto* sparse_map = stats->mutable_sparse_column_non_null_size(); diff --git a/be/src/olap/rowset/segment_v2/variant/variant_util.cpp b/be/src/olap/rowset/segment_v2/variant/variant_util.cpp index 5a1639aff24d37..2bc6dab793aa38 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_util.cpp +++ b/be/src/olap/rowset/segment_v2/variant/variant_util.cpp @@ -141,7 +141,7 @@ Status parse_variant_columns(vectorized::Block& block, const TabletSchema& table const auto& column = tablet_schema.column(variant_column_pos[i]); if (column.is_variant_type()) { // enable doc snapshot mode - if (column.variant_enable_doc_snapshot_mode()) { + if (column.variant_enable_doc_mode()) { // if has schema template, no need to parse to doc snapshot, when writing data, we // will parse to doc snapshot if (column.get_sub_columns().empty()) { diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index 0a2c0e258778b4..c08567087966c6 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -542,8 +542,8 @@ void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& tco if (tcolumn.__isset.variant_sparse_hash_shard_count) { column->set_variant_sparse_hash_shard_count(tcolumn.variant_sparse_hash_shard_count); } - if (tcolumn.__isset.variant_enable_doc_snapshot_mode) { - column->set_variant_enable_doc_snapshot_mode(tcolumn.variant_enable_doc_snapshot_mode); + if (tcolumn.__isset.variant_enable_doc_mode) { + column->set_variant_enable_doc_snapshot_mode(tcolumn.variant_enable_doc_mode); } if (tcolumn.__isset.variant_doc_snapshot_min_rows) { column->set_variant_doc_snapshot_min_rows(tcolumn.variant_doc_snapshot_min_rows); diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp index e644dadceabd41..91d777207cc58b 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -669,7 +669,7 @@ void TabletColumn::init_from_pb(const ColumnPB& column) { _variant_sparse_hash_shard_count = column.variant_sparse_hash_shard_count(); } if (column.has_variant_enable_doc_snapshot_mode()) { - _variant_enable_doc_snapshot_mode = column.variant_enable_doc_snapshot_mode(); + _variant_enable_doc_snapshot_mode = column.variant_enable_doc_mode(); } if (column.has_variant_doc_snapshot_min_rows()) { _variant_doc_snapshot_min_rows = column.variant_doc_snapshot_min_rows(); diff --git a/be/src/olap/tablet_schema.h b/be/src/olap/tablet_schema.h index a6ce0cc170bf42..6d7c487a3de4a0 100644 --- a/be/src/olap/tablet_schema.h +++ b/be/src/olap/tablet_schema.h @@ -231,7 +231,7 @@ class TabletColumn : public MetadataAdder { int32_t variant_sparse_hash_shard_count() const { return _variant_sparse_hash_shard_count; } - bool variant_enable_doc_snapshot_mode() const { return _variant_enable_doc_snapshot_mode; } + bool variant_enable_doc_mode() const { return _variant_enable_doc_snapshot_mode; } int64_t variant_doc_snapshot_min_rows() const { return _variant_doc_snapshot_min_rows; } @@ -254,8 +254,8 @@ class TabletColumn : public MetadataAdder { _variant_sparse_hash_shard_count = variant_sparse_hash_shard_count; } - void set_variant_enable_doc_snapshot_mode(bool variant_enable_doc_snapshot_mode) { - _variant_enable_doc_snapshot_mode = variant_enable_doc_snapshot_mode; + void set_variant_enable_doc_snapshot_mode(bool variant_enable_doc_mode) { + _variant_enable_doc_snapshot_mode = variant_enable_doc_mode; } void set_variant_enable_typed_paths_to_sparse(bool variant_enable_typed_paths_to_sparse) { diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp index 6f9a32fc59e0fe..68d7ab13e43e65 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -438,8 +438,8 @@ MutableColumnPtr ColumnVariant::apply_for_columns(Func&& func) const { } auto sparse_column = func(serialized_sparse_column); res->serialized_sparse_column = sparse_column->assume_mutable(); - auto doc_snapshot_column = func(serialized_doc_snapshot_column); - res->serialized_doc_snapshot_column = doc_snapshot_column->assume_mutable(); + auto doc_value_column = func(serialized_doc_value_column); + res->serialized_doc_value_column = doc_value_column->assume_mutable(); res->num_rows = res->serialized_sparse_column->size(); ENABLE_CHECK_CONSISTENCY(res.get()); return res; @@ -456,7 +456,7 @@ void ColumnVariant::resize(size_t n) { subcolumn->data.pop_back(num_rows - n); } serialized_sparse_column->pop_back(num_rows - n); - serialized_doc_snapshot_column->pop_back(num_rows - n); + serialized_doc_value_column->pop_back(num_rows - n); } num_rows = n; @@ -615,7 +615,7 @@ ColumnVariant::ColumnVariant(int32_t max_subcolumns_count, DataTypePtr root_type subcolumns.create_root( Subcolumn(std::move(root_column), root_type, is_nullable, true /*root*/)); serialized_sparse_column->resize(num_rows); - serialized_doc_snapshot_column->resize(num_rows); + serialized_doc_value_column->resize(num_rows); ENABLE_CHECK_CONSISTENCY(this); } @@ -631,7 +631,7 @@ ColumnVariant::ColumnVariant(int32_t max_subcolumns_count, Subcolumns&& subcolum max_subcolumns_count, subcolumns_.size()); } serialized_sparse_column->resize(num_rows); - serialized_doc_snapshot_column->resize(num_rows); + serialized_doc_value_column->resize(num_rows); } ColumnVariant::ColumnVariant(int32_t max_subcolumns_count, size_t size) @@ -655,10 +655,10 @@ void ColumnVariant::check_consistency() const { "unmatched sparse column:, expeted rows: {}, but meet: {}", num_rows, serialized_sparse_column->size()); } - if (num_rows != serialized_doc_snapshot_column->size()) { + if (num_rows != serialized_doc_value_column->size()) { throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, "unmatched doc snapshot column:, expeted rows: {}, but meet: {}", - num_rows, serialized_doc_snapshot_column->size()); + num_rows, serialized_doc_value_column->size()); } } @@ -681,7 +681,7 @@ size_t ColumnVariant::byte_size() const { res += entry->data.byteSize(); } res += serialized_sparse_column->byte_size(); - res += serialized_doc_snapshot_column->byte_size(); + res += serialized_doc_value_column->byte_size(); return res; } @@ -691,7 +691,7 @@ size_t ColumnVariant::allocated_bytes() const { res += entry->data.allocatedBytes(); } res += serialized_sparse_column->allocated_bytes(); - res += serialized_doc_snapshot_column->allocated_bytes(); + res += serialized_doc_value_column->allocated_bytes(); return res; } @@ -702,7 +702,7 @@ void ColumnVariant::for_each_subcolumn(ColumnCallback callback) { } } callback(serialized_sparse_column); - callback(serialized_doc_snapshot_column); + callback(serialized_doc_value_column); // callback may be filter, so the row count may be changed num_rows = serialized_sparse_column->size(); ENABLE_CHECK_CONSISTENCY(this); @@ -716,7 +716,7 @@ void ColumnVariant::insert_from(const IColumn& src, size_t n) { src_v->subcolumns.get_root()->data.get(n, field); subcolumns.get_mutable_root()->data.insert(field); serialized_sparse_column->insert_from(*src_v->get_sparse_column(), n); - serialized_doc_snapshot_column->insert_from(*src_v->get_doc_snapshot_column(), n); + serialized_doc_value_column->insert_from(*src_v->get_doc_value_column(), n); num_rows++; } else { return try_insert((*src_v)[n]); @@ -728,7 +728,7 @@ void ColumnVariant::try_insert(const Field& field) { const auto& object = field.get(); for (const auto& [key, value] : object) { if (key.get_path() == "__DORIS_VARIANT_DOC_SNAPSHOT__") { - insert_to_doc_snapshot_column(value.field); + insert_to_doc_value_column(value.field); continue; } if (!has_subcolumn(key)) { @@ -761,8 +761,8 @@ void ColumnVariant::try_insert(const Field& field) { } } serialized_sparse_column->insert_default(); - if (serialized_doc_snapshot_column->size() == old_size) { - serialized_doc_snapshot_column->insert_default(); + if (serialized_doc_value_column->size() == old_size) { + serialized_doc_value_column->insert_default(); } ++num_rows; ENABLE_CHECK_CONSISTENCY(this); @@ -773,7 +773,7 @@ void ColumnVariant::insert_default() { entry->data.insert_default(); } serialized_sparse_column->insert_default(); - serialized_doc_snapshot_column->insert_default(); + serialized_doc_value_column->insert_default(); ++num_rows; ENABLE_CHECK_CONSISTENCY(this); } @@ -783,7 +783,7 @@ void ColumnVariant::insert_many_defaults(size_t length) { entry->data.insert_many_defaults(length); } serialized_sparse_column->resize(num_rows + length); - serialized_doc_snapshot_column->resize(num_rows + length); + serialized_doc_value_column->resize(num_rows + length); num_rows += length; ENABLE_CHECK_CONSISTENCY(this); } @@ -936,30 +936,30 @@ void ColumnVariant::get(size_t n, Field& res) const { .precision = data.second.precision, .scale = data.second.scale}); } - try_get_from_doc_snapshot_column(n, res); + try_get_from_doc_value_column(n, res); if (object.empty()) { res = Field(); } } -bool ColumnVariant::has_doc_snapshot_column(size_t n) const { - const auto& offsets = serialized_doc_snapshot_column_offsets(); +bool ColumnVariant::has_doc_value_column(size_t n) const { + const auto& offsets = serialized_doc_value_column_offsets(); return offsets[n - 1] < offsets[n]; } -void ColumnVariant::try_get_from_doc_snapshot_column(size_t n, Field& res) const { - if (!has_doc_snapshot_column(n)) { +void ColumnVariant::try_get_from_doc_value_column(size_t n, Field& res) const { + if (!has_doc_value_column(n)) { return; } FieldWithDataType field_with_data_type; - serialized_doc_snapshot_column->get(n, field_with_data_type.field); + serialized_doc_value_column->get(n, field_with_data_type.field); auto& object = res.get(); object.try_emplace(PathInData("__DORIS_VARIANT_DOC_SNAPSHOT__"), std::move(field_with_data_type)); } -void ColumnVariant::insert_to_doc_snapshot_column(const Field& field) { - serialized_doc_snapshot_column->insert(field); +void ColumnVariant::insert_to_doc_value_column(const Field& field) { + serialized_doc_value_column->insert(field); CHECK(subcolumns.size() == 1) << "subcolumns size should be 1"; } @@ -1077,7 +1077,7 @@ void ColumnVariant::insert_range_from(const IColumn& src, size_t start, size_t l insert_from_sparse_column_and_fill_remaing_dense_column( src_object, std::move(sorted_src_subcolumn_for_sparse_column), start, length); - serialized_doc_snapshot_column->insert_range_from(*src_object.serialized_doc_snapshot_column, + serialized_doc_value_column->insert_range_from(*src_object.serialized_doc_value_column, start, length); num_rows += length; // finalize(); @@ -1216,7 +1216,7 @@ void ColumnVariant::pop_back(size_t length) { entry->data.pop_back(length); } serialized_sparse_column->pop_back(length); - serialized_doc_snapshot_column->pop_back(length); + serialized_doc_value_column->pop_back(length); num_rows -= length; ENABLE_CHECK_CONSISTENCY(this); } @@ -1568,11 +1568,11 @@ bool ColumnVariant::is_visible_root_value(size_t nrow) const { } } - const auto& doc_snapshot_column_map = - assert_cast(*serialized_doc_snapshot_column); + const auto& doc_value_column_map = + assert_cast(*serialized_doc_value_column); // doc snapshot column is not empty - if (doc_snapshot_column_map.get_offsets()[nrow - 1] != - doc_snapshot_column_map.get_offsets()[nrow]) { + if (doc_value_column_map.get_offsets()[nrow - 1] != + doc_value_column_map.get_offsets()[nrow]) { return false; } return !root->data.is_null_at(nrow); @@ -1581,7 +1581,7 @@ bool ColumnVariant::is_visible_root_value(size_t nrow) const { void ColumnVariant::serialize_from_doc_snapshot_to_json_format(int64_t row_num, BufferWritable& output, bool* is_null) const { - const auto& column_map = assert_cast(*serialized_doc_snapshot_column); + const auto& column_map = assert_cast(*serialized_doc_value_column); const auto& doc_snapshot_data_offsets = column_map.get_offsets(); size_t doc_snapshot_data_offset = doc_snapshot_data_offsets[static_cast(row_num) - 1]; size_t doc_snapshot_data_end = doc_snapshot_data_offsets[static_cast(row_num)]; @@ -1650,10 +1650,10 @@ void ColumnVariant::serialize_one_row_to_json_format( subcolumns.get_root()->data.serialize_text_json(row_num, output, options); return; } - const auto& doc_snapshot_column_map = - assert_cast(*serialized_doc_snapshot_column); + const auto& doc_value_column_map = + assert_cast(*serialized_doc_value_column); // if doc snapshot column is not empty, we should serialize from doc snapshot column first - if (doc_snapshot_column_map.get_offsets()[row_num] != 0) { + if (doc_value_column_map.get_offsets()[row_num] != 0) { serialize_from_doc_snapshot_to_json_format(row_num, output, is_null); return; } @@ -2070,8 +2070,8 @@ ColumnPtr ColumnVariant::filter(const Filter& filter, ssize_t count) const { entry->data.get_least_common_type()); } new_column->serialized_sparse_column = serialized_sparse_column->filter(filter, count); - new_column->serialized_doc_snapshot_column = - serialized_doc_snapshot_column->filter(filter, count); + new_column->serialized_doc_value_column = + serialized_doc_value_column->filter(filter, count); ENABLE_CHECK_CONSISTENCY(new_column.get()); return new_column; } @@ -2115,7 +2115,7 @@ void ColumnVariant::clear() { empty.create_root(Subcolumn(0, is_nullable, true)); std::swap(empty, subcolumns); serialized_sparse_column->clear(); - serialized_doc_snapshot_column->clear(); + serialized_doc_value_column->clear(); num_rows = 0; _prev_positions.clear(); ENABLE_CHECK_CONSISTENCY(this); @@ -2129,8 +2129,8 @@ void ColumnVariant::create_root(const DataTypePtr& type, MutableColumnPtr&& colu if (serialized_sparse_column->empty()) { serialized_sparse_column->resize(num_rows); } - if (serialized_doc_snapshot_column->empty()) { - serialized_doc_snapshot_column->resize(num_rows); + if (serialized_doc_value_column->empty()) { + serialized_doc_value_column->resize(num_rows); } ENABLE_CHECK_CONSISTENCY(this); } @@ -2156,7 +2156,7 @@ bool ColumnVariant::is_null_root() const { // num_rows == 0, so we need to use NO_SANITIZE_UNDEFINED bool NO_SANITIZE_UNDEFINED ColumnVariant::is_scalar_variant() const { const auto& sparse_offsets = serialized_sparse_column_offsets().data(); - const auto& doc_snapshot_offsets = serialized_doc_snapshot_column_offsets().data(); + const auto& doc_snapshot_offsets = serialized_doc_value_column_offsets().data(); // Only root itself is scalar, and no sparse data return !is_null_root() && subcolumns.get_leaves().size() == 1 && subcolumns.get_root()->is_scalar() && sparse_offsets[num_rows - 1] == 0 && @@ -2190,13 +2190,13 @@ void ColumnVariant::insert_indices_from(const IColumn& src, const uint32_t* indi get_subcolumns().get_mutable_root()->data.num_rows = indices_end - indices_begin; get_root()->insert_indices_from(*src_v->get_root(), indices_begin, indices_end); serialized_sparse_column->insert_many_defaults(indices_end - indices_begin); - serialized_doc_snapshot_column->insert_many_defaults(indices_end - indices_begin); + serialized_doc_value_column->insert_many_defaults(indices_end - indices_begin); num_rows += indices_end - indices_begin; } else if (src_can_do_quick_insert && is_scalar_variant() && src_v->get_root_type()->equals(*get_root_type())) { get_root()->insert_indices_from(*src_v->get_root(), indices_begin, indices_end); serialized_sparse_column->insert_many_defaults(indices_end - indices_begin); - serialized_doc_snapshot_column->insert_many_defaults(indices_end - indices_begin); + serialized_doc_value_column->insert_many_defaults(indices_end - indices_begin); get_subcolumns().get_mutable_root()->data.num_rows += indices_end - indices_begin; num_rows += indices_end - indices_begin; } else { @@ -2230,7 +2230,7 @@ void ColumnVariant::for_each_imutable_column(Func&& callback) const { } } callback(serialized_sparse_column); - callback(serialized_doc_snapshot_column); + callback(serialized_doc_value_column); } void ColumnVariant::update_hash_with_value(size_t n, SipHash& hash) const { @@ -2564,16 +2564,16 @@ MutableColumnPtr ColumnVariant::clone() const { auto sparse_column = std::move(*column).mutate(); res->serialized_sparse_column = sparse_column->assume_mutable(); - auto&& new_doc_snapshot_column = serialized_doc_snapshot_column->get_ptr(); - auto doc_snapshot_column = std::move(*new_doc_snapshot_column).mutate(); - res->serialized_doc_snapshot_column = doc_snapshot_column->assume_mutable(); + auto&& new_doc_value_column = serialized_doc_value_column->get_ptr(); + auto doc_value_column = std::move(*new_doc_value_column).mutate(); + res->serialized_doc_value_column = doc_value_column->assume_mutable(); res->set_num_rows(num_rows); ENABLE_CHECK_CONSISTENCY(res.get()); return res; } -void ColumnVariant::reconstruct_and_sort_doc_snapshot_column() { - const auto& offset = serialized_doc_snapshot_column_offsets(); +void ColumnVariant::reconstruct_and_sort_doc_value_column() { + const auto& offset = serialized_doc_value_column_offsets(); auto sort_map_by_row_paths = [&](const ColumnString& in_paths, const ColumnString& in_values, const ColumnArray::Offsets64& in_offsets) -> MutableColumnPtr { @@ -2606,18 +2606,18 @@ void ColumnVariant::reconstruct_and_sort_doc_snapshot_column() { // sort the column by row paths. if (offset[num_rows - 1] != 0) { auto [path, value] = get_doc_snapshot_data_paths_and_values(); - serialized_doc_snapshot_column = sort_map_by_row_paths(*path, *value, offset); + serialized_doc_value_column = sort_map_by_row_paths(*path, *value, offset); return; } CHECK(is_finalized()); - auto doc_snapshot_column = create_binary_column_fn(); + auto doc_value_column = create_binary_column_fn(); - auto& doc_snapshot_column_map = assert_cast(*doc_snapshot_column); - auto& doc_snapshot_data_paths = assert_cast(doc_snapshot_column_map.get_keys()); + auto& doc_value_column_map = assert_cast(*doc_value_column); + auto& doc_snapshot_data_paths = assert_cast(doc_value_column_map.get_keys()); auto& doc_snapshot_data_values = - assert_cast(doc_snapshot_column_map.get_values()); - auto& doc_snapshot_data_offsets = doc_snapshot_column_map.get_offsets(); + assert_cast(doc_value_column_map.get_values()); + auto& doc_snapshot_data_offsets = doc_value_column_map.get_offsets(); for (int64_t i = 0; i < num_rows; ++i) { for (const auto& entry : subcolumns) { @@ -2641,12 +2641,12 @@ void ColumnVariant::reconstruct_and_sort_doc_snapshot_column() { doc_snapshot_data_offsets.push_back(doc_snapshot_data_paths.size()); } - serialized_doc_snapshot_column = sort_map_by_row_paths( + serialized_doc_value_column = sort_map_by_row_paths( doc_snapshot_data_paths, doc_snapshot_data_values, doc_snapshot_data_offsets); } bool ColumnVariant::is_doc_snapshot_mode() const { - const auto& offset = serialized_doc_snapshot_column_offsets(); + const auto& offset = serialized_doc_value_column_offsets(); return subcolumns.size() == 1 && offset[num_rows - 1] != 0; } diff --git a/be/src/vec/columns/column_variant.h b/be/src/vec/columns/column_variant.h index 6a1e95a6f212a8..dc6dc75576df17 100644 --- a/be/src/vec/columns/column_variant.h +++ b/be/src/vec/columns/column_variant.h @@ -279,7 +279,7 @@ class ColumnVariant final : public COWHelper { WrappedPtr serialized_sparse_column = ColumnMap::create( ColumnString::create(), ColumnString::create(), ColumnArray::ColumnOffsets::create()); - WrappedPtr serialized_doc_snapshot_column = ColumnMap::create( + WrappedPtr serialized_doc_value_column = ColumnMap::create( ColumnString::create(), ColumnString::create(), ColumnArray::ColumnOffsets::create()); // if `_max_subcolumns_count == 0`, all subcolumns are materialized. @@ -399,7 +399,7 @@ class ColumnVariant final : public COWHelper { ColumnPtr get_sparse_column() const { return serialized_sparse_column; } - ColumnPtr get_doc_snapshot_column() const { return serialized_doc_snapshot_column; } + ColumnPtr get_doc_value_column() const { return serialized_doc_value_column; } // use sparse_subcolumns_schema to record sparse column's path info and type static MutableColumnPtr create_binary_column_fn() { @@ -416,7 +416,7 @@ class ColumnVariant final : public COWHelper { void set_sparse_column(ColumnPtr column) { serialized_sparse_column = column; } - void set_doc_snapshot_column(ColumnPtr column) { serialized_doc_snapshot_column = column; } + void set_doc_value_column(ColumnPtr column) { serialized_doc_value_column = column; } void finalize(FinalizeMode mode); @@ -558,14 +558,14 @@ class ColumnVariant final : public COWHelper { std::pair get_doc_snapshot_data_paths_and_values() const { - const auto& column_map = assert_cast(*serialized_doc_snapshot_column); + const auto& column_map = assert_cast(*serialized_doc_value_column); const auto& key = assert_cast(column_map.get_keys()); const auto& value = assert_cast(column_map.get_values()); return {&key, &value}; } std::pair get_doc_snapshot_data_paths_and_values() { - auto& column_map = assert_cast(*serialized_doc_snapshot_column); + auto& column_map = assert_cast(*serialized_doc_value_column); auto& key = assert_cast(column_map.get_keys()); auto& value = assert_cast(column_map.get_values()); return {&key, &value}; @@ -581,13 +581,13 @@ class ColumnVariant final : public COWHelper { return column_map.get_offsets(); } - ColumnArray::Offsets64& ALWAYS_INLINE serialized_doc_snapshot_column_offsets() { - auto& column_map = assert_cast(*serialized_doc_snapshot_column); + ColumnArray::Offsets64& ALWAYS_INLINE serialized_doc_value_column_offsets() { + auto& column_map = assert_cast(*serialized_doc_value_column); return column_map.get_offsets(); } - const ColumnArray::Offsets64& ALWAYS_INLINE serialized_doc_snapshot_column_offsets() const { - const auto& column_map = assert_cast(*serialized_doc_snapshot_column); + const ColumnArray::Offsets64& ALWAYS_INLINE serialized_doc_value_column_offsets() const { + const auto& column_map = assert_cast(*serialized_doc_value_column); return column_map.get_offsets(); } @@ -634,16 +634,16 @@ class ColumnVariant final : public COWHelper { return _max_subcolumns_count - current_subcolumns_count; } - void reconstruct_and_sort_doc_snapshot_column(); + void reconstruct_and_sort_doc_value_column(); // doc snapshot mode: only root column, and doc snapshot column is not empty bool is_doc_snapshot_mode() const; - void try_get_from_doc_snapshot_column(size_t n, Field& res) const; + void try_get_from_doc_value_column(size_t n, Field& res) const; - void insert_to_doc_snapshot_column(const Field& field); + void insert_to_doc_value_column(const Field& field); - bool has_doc_snapshot_column(size_t n) const; + bool has_doc_value_column(size_t n) const; private: // May throw execption diff --git a/be/src/vec/common/schema_util.cpp b/be/src/vec/common/schema_util.cpp index c2a39fbd358930..0dd597eb229024 100644 --- a/be/src/vec/common/schema_util.cpp +++ b/be/src/vec/common/schema_util.cpp @@ -599,7 +599,7 @@ TabletColumn create_sparse_shard_column(const TabletColumn& variant, int bucket_ return res; } -TabletColumn create_doc_snapshot_column(const TabletColumn& variant, int bucket_index) { +TabletColumn create_doc_value_column(const TabletColumn& variant, int bucket_index) { TabletColumn res; std::string name = variant.name_lower_case() + "." + DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket_index); @@ -794,7 +794,7 @@ Status VariantCompactionUtil::check_path_stats(const std::vectortablet_schema()->column_by_uid(uid).is_variant_type() && - output->tablet_schema()->column_by_uid(uid).variant_enable_doc_snapshot_mode()) { + output->tablet_schema()->column_by_uid(uid).variant_enable_doc_mode()) { continue; } if (original_uid_to_path_stats.find(uid) == original_uid_to_path_stats.end()) { @@ -1027,10 +1027,10 @@ Status VariantCompactionUtil::get_extended_compaction_schema( } VLOG_DEBUG << "column " << column->name() << " unique id " << column->unique_id(); - if (column->variant_enable_doc_snapshot_mode()) { + if (column->variant_enable_doc_mode()) { const int bucket_num = std::max(1, column->variant_doc_snapshot_shard_count()); for (int b = 0; b < bucket_num; ++b) { - TabletColumn doc_snapshot_bucket_column = create_doc_snapshot_column(*column, b); + TabletColumn doc_snapshot_bucket_column = create_doc_value_column(*column, b); doc_snapshot_bucket_column.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); doc_snapshot_bucket_column.set_is_nullable(false); output_schema->append_column(doc_snapshot_bucket_column); diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h index 1015ff83a89207..4f14371227536a 100644 --- a/be/src/vec/common/schema_util.h +++ b/be/src/vec/common/schema_util.h @@ -132,7 +132,7 @@ TabletColumn create_sparse_column(const TabletColumn& variant); // Create one bucket sparse column: name = variant.name_lower_case() + "." + SPARSE_COLUMN_PATH + ".b{index}" TabletColumn create_sparse_shard_column(const TabletColumn& variant, int bucket_index); -TabletColumn create_doc_snapshot_column(const TabletColumn& variant, int bucket_index); +TabletColumn create_doc_value_column(const TabletColumn& variant, int bucket_index); // Compute bucket id for given path string using SipHash64(path) % bucket_num. uint32_t variant_binary_shard_of(const StringRef& path, uint32_t bucket_num); diff --git a/be/src/vec/data_types/data_type_variant.cpp b/be/src/vec/data_types/data_type_variant.cpp index 4cac57607c7939..55b9ebf9ed67c5 100644 --- a/be/src/vec/data_types/data_type_variant.cpp +++ b/be/src/vec/data_types/data_type_variant.cpp @@ -102,7 +102,7 @@ int64_t DataTypeVariant::get_uncompressed_serialized_bytes(const IColumn& column *column_variant.get_sparse_column(), be_exec_version); size += ColumnVariant::get_binary_column_type()->get_uncompressed_serialized_bytes( - *column_variant.get_doc_snapshot_column(), be_exec_version); + *column_variant.get_doc_value_column(), be_exec_version); return size; } @@ -159,7 +159,7 @@ char* DataTypeVariant::serialize(const IColumn& column, char* buf, int be_exec_v buf = ColumnVariant::get_binary_column_type()->serialize(*column_variant.get_sparse_column(), buf, be_exec_version); buf = ColumnVariant::get_binary_column_type()->serialize( - *column_variant.get_doc_snapshot_column(), buf, be_exec_version); + *column_variant.get_doc_value_column(), buf, be_exec_version); return buf; } @@ -224,10 +224,10 @@ const char* DataTypeVariant::deserialize(const char* buf, MutableColumnPtr* colu column_variant->get_subcolumn({})->resize(num_rows); } - MutableColumnPtr doc_snapshot_column = ColumnVariant::get_binary_column_type()->create_column(); - buf = ColumnVariant::get_binary_column_type()->deserialize(buf, &doc_snapshot_column, + MutableColumnPtr doc_value_column = ColumnVariant::get_binary_column_type()->create_column(); + buf = ColumnVariant::get_binary_column_type()->deserialize(buf, &doc_value_column, be_exec_version); - column_variant->set_doc_snapshot_column(std::move(doc_snapshot_column)); + column_variant->set_doc_value_column(std::move(doc_value_column)); column_variant->set_num_rows(num_rows); diff --git a/be/src/vec/functions/function_variant_element.cpp b/be/src/vec/functions/function_variant_element.cpp index 5c9240be926fae..949654bd042d18 100644 --- a/be/src/vec/functions/function_variant_element.cpp +++ b/be/src/vec/functions/function_variant_element.cpp @@ -234,14 +234,14 @@ class FunctionVariantElement : public IFunction { sparse_data_offsets.push_back(sparse_data_paths->size()); } container->get_subcolumns().create_root(root); - container->get_doc_snapshot_column()->assume_mutable()->resize(mutable_ptr->size()); + container->get_doc_value_column()->assume_mutable()->resize(mutable_ptr->size()); container->set_num_rows(mutable_ptr->size()); }; - auto extract_from_doc_snapshot_column = [&](auto& container) { + auto extract_from_doc_value_column = [&](auto& container) { ColumnVariant::Subcolumn root {0, true, true}; // no root, no sparse column const auto& doc_snapshot_data_map = - assert_cast(*mutable_ptr->get_doc_snapshot_column()); + assert_cast(*mutable_ptr->get_doc_value_column()); const auto& src_doc_snapshot_data_offsets = doc_snapshot_data_map.get_offsets(); const auto& src_doc_snapshot_data_paths = assert_cast(doc_snapshot_data_map.get_keys()); @@ -293,7 +293,7 @@ class FunctionVariantElement : public IFunction { sparse_data_offsets.push_back(sparse_data_paths->size()); } container->get_subcolumns().create_root(root); - container->get_doc_snapshot_column()->assume_mutable()->resize(mutable_ptr->size()); + container->get_doc_value_column()->assume_mutable()->resize(mutable_ptr->size()); container->set_num_rows(mutable_ptr->size()); }; @@ -334,7 +334,7 @@ class FunctionVariantElement : public IFunction { std::move(new_subcolumns)); const auto& sparse_offsets = mutable_ptr->serialized_sparse_column_offsets(); if (sparse_offsets.back() == sparse_offsets[-1]) { - extract_from_doc_snapshot_column(container); + extract_from_doc_value_column(container); } else { extract_from_sparse_column(container); } diff --git a/be/src/vec/json/parse2column.cpp b/be/src/vec/json/parse2column.cpp index 9dc7673628f8a4..003323f59f3eb7 100644 --- a/be/src/vec/json/parse2column.cpp +++ b/be/src/vec/json/parse2column.cpp @@ -167,7 +167,7 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length, } auto [doc_snapshot_data_paths, doc_snapshot_data_values] = column_variant.get_doc_snapshot_data_paths_and_values(); - auto& doc_snapshot_data_offsets = column_variant.serialized_doc_snapshot_column_offsets(); + auto& doc_snapshot_data_offsets = column_variant.serialized_doc_value_column_offsets(); std::unordered_set subcolumn_set; if (config.parse_to_subcolumns) { for (size_t i = 0; i < paths.size(); ++i) { @@ -284,7 +284,7 @@ void parse_binary_to_variant(ColumnVariant& column_variant) { std::unordered_map subcolumns; auto [column_key, column_value] = column_variant.get_doc_snapshot_data_paths_and_values(); - const auto& column_offsets = column_variant.serialized_doc_snapshot_column_offsets(); + const auto& column_offsets = column_variant.serialized_doc_value_column_offsets(); size_t num_rows = column_offsets.size(); 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 7565a34e7dce18..2500b4a5eebd0c 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 @@ -45,7 +45,7 @@ static void construct_column(ColumnPB* column_pb, int32_t col_unique_id, const std::string& column_type, const std::string& column_name, int variant_max_subcolumns_count = 3, bool is_key = false, bool is_nullable = false, int variant_sparse_hash_shard_count = 0, - bool variant_enable_doc_snapshot_mode = false, + bool variant_enable_doc_mode = false, int64_t variant_doc_snapshot_min_rows = 0) { column_pb->set_unique_id(col_unique_id); column_pb->set_name(column_name); @@ -57,7 +57,7 @@ static void construct_column(ColumnPB* column_pb, int32_t col_unique_id, column_pb->set_variant_max_sparse_column_statistics_size(10000); // 5 sparse hash shard column_pb->set_variant_sparse_hash_shard_count(variant_sparse_hash_shard_count); - column_pb->set_variant_enable_doc_snapshot_mode(variant_enable_doc_snapshot_mode); + column_pb->set_variant_enable_doc_snapshot_mode(variant_enable_doc_mode); column_pb->set_variant_doc_snapshot_min_rows(variant_doc_snapshot_min_rows); } } @@ -2674,7 +2674,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { int variant_sparse_hash_shard_count = 3; construct_column(schema_pb.add_column(), 1, "VARIANT", "v", 3, false, false, variant_sparse_hash_shard_count, - /*variant_enable_doc_snapshot_mode*/ true, + /*variant_enable_doc_mode*/ true, /*variant_doc_snapshot_min_rows*/ 0); _tablet_schema = std::make_shared(); _tablet_schema->init_from_pb(schema_pb); @@ -2759,10 +2759,10 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { auto rel = p->copy_pop_front().get_path(); if (rel.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { ++doc_snapshot_meta_cnt; - // check_doc_snapshot_column_meta_basic(m); - // writer should set doc_snapshot_column_non_null_size stats (may be empty for some buckets) + // check_doc_value_column_meta_basic(m); + // writer should set doc_value_column_non_null_size stats (may be empty for some buckets) if (m.has_variant_statistics() && - m.variant_statistics().doc_snapshot_column_non_null_size_size() > 0) { + m.variant_statistics().doc_value_column_non_null_size_size() > 0) { ++doc_snapshot_non_empty_stats_cnt; } // stored as MAP in segment meta @@ -2812,7 +2812,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { auto* dst_variant = assert_cast(dst.get()); EXPECT_TRUE(dst_variant->is_doc_snapshot_mode()); - const auto& offsets = dst_variant->serialized_doc_snapshot_column_offsets(); + const auto& offsets = dst_variant->serialized_doc_value_column_offsets(); EXPECT_EQ(offsets.size(), 1000); // key0 exists in every row, so doc snapshot offsets should strictly increase for (size_t i = 0; i < offsets.size(); ++i) { @@ -2863,7 +2863,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { fake_extracted.set_is_nullable(true); _tablet_schema->append_column(fake_extracted); - TabletColumn doc_bucket = vectorized::schema_util::create_doc_snapshot_column(parent_column, 0); + TabletColumn doc_bucket = vectorized::schema_util::create_doc_value_column(parent_column, 0); doc_bucket.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); doc_bucket.set_is_nullable(false); ColumnIteratorUPtr it_doc_bucket; @@ -2891,7 +2891,7 @@ TEST_F(VariantColumnWriterReaderTest, test_doc_snapshot_path_iterator_doc_snapsh int variant_sparse_hash_shard_count = 1; construct_column(schema_pb.add_column(), 1, "VARIANT", "v", /*variant_max_subcolumns_count*/ 0, false, false, variant_sparse_hash_shard_count, - /*variant_enable_doc_snapshot_mode*/ true, + /*variant_enable_doc_mode*/ true, /*variant_doc_snapshot_min_rows*/ 0); _tablet_schema = std::make_shared(); _tablet_schema->init_from_pb(schema_pb); 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 2419004de13f4b..e22f03c65c922f 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 @@ -167,7 +167,7 @@ public String toSql(int depth) { sb.append("\"variant_sparse_hash_shard_count\" = \"") .append(String.valueOf(variantSparseHashShardCount)).append("\""); sb.append(","); - sb.append("\"variant_enable_doc_snapshot_mode\" = \"") + sb.append("\"variant_enable_doc_mode\" = \"") .append(String.valueOf(enableVariantDocSnapshotMode)).append("\""); sb.append(","); sb.append("\"variant_doc_snapshot_min_rows\" = \"") 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 dccba4d05cddd3..ae882b185b3a29 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 @@ -265,7 +265,7 @@ public class PropertyAnalyzer { // number of buckets when using bucketized sparse serialization public static final String PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT = "variant_sparse_hash_shard_count"; - public static final String PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE = "variant_enable_doc_snapshot_mode"; + public static final String PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE = "variant_enable_doc_mode"; public static final String PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS = "variant_doc_snapshot_min_rows"; @@ -1971,7 +1971,7 @@ public static boolean analyzeEnableVariantDocSnapshotMode(Map pr try { enableVariantDocSnapshotMode = Boolean.parseBoolean(enableVariantDocSnapshotModeStr); } catch (Exception e) { - throw new AnalysisException("variant_enable_doc_snapshot_mode must be `true` or `false`"); + throw new AnalysisException("variant_enable_doc_mode must be `true` or `false`"); } properties.remove(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE); } 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 b29fa1f367eeed..8f2aa8fe02b1e7 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 @@ -159,7 +159,7 @@ public String toSql() { .append(String.valueOf(variantSparseHashShardCount)) .append("\""); sb.append(","); - sb.append("\"variant_enable_doc_snapshot_mode\" = \"") + sb.append("\"variant_enable_doc_mode\" = \"") .append(String.valueOf(enableVariantDocSnapshotMode)) .append("\""); sb.append(","); diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto index 2143d0a09fa0f7..e0ab1f0e37fcbf 100644 --- a/gensrc/proto/olap_file.proto +++ b/gensrc/proto/olap_file.proto @@ -372,7 +372,7 @@ message ColumnPB { optional int32 variant_max_sparse_column_statistics_size = 29 [default = 10000]; // number of buckets used to store sparse map optional int32 variant_sparse_hash_shard_count = 30; - optional bool variant_enable_doc_snapshot_mode = 31; + optional bool variant_enable_doc_mode = 31; optional int64 variant_doc_snapshot_min_rows = 32; // number of buckets used to store doc snapshot map optional int32 variant_doc_snapshot_shard_count = 33 [default = 128]; diff --git a/gensrc/proto/segment_v2.proto b/gensrc/proto/segment_v2.proto index fef4715f40fccf..14d0ac7616294f 100644 --- a/gensrc/proto/segment_v2.proto +++ b/gensrc/proto/segment_v2.proto @@ -172,7 +172,7 @@ message VariantStatisticsPB { // in the order of subcolumns in variant map sparse_column_non_null_size = 2; - map doc_snapshot_column_non_null_size = 3; + map doc_value_column_non_null_size = 3; } message ColumnMetaPB { diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift index 35a9d0568c92aa..ce130f20d7e1e2 100644 --- a/gensrc/thrift/Descriptors.thrift +++ b/gensrc/thrift/Descriptors.thrift @@ -96,7 +96,7 @@ struct TColumn { 23: optional bool is_on_update_current_timestamp = false 24: optional i32 variant_max_sparse_column_statistics_size = 10000 25: optional i32 variant_sparse_hash_shard_count - 26: optional bool variant_enable_doc_snapshot_mode + 26: optional bool variant_enable_doc_mode 27: optional i64 variant_doc_snapshot_min_rows 28: optional i32 variant_doc_snapshot_shard_count } diff --git a/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out b/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out index b1e8e9c20f8d5f..6f66735dd1e362 100644 --- a/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out +++ b/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out @@ -53,7 +53,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -67,7 +67,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map No false \N NONE col5 struct No false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -81,7 +81,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -95,7 +95,7 @@ col2 int No false \N NONE col3 array No false \N NONE col4 map Yes false \N NONE col5 struct No false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -109,7 +109,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -123,7 +123,7 @@ col2 int No false \N NONE col3 array No false \N NONE col4 map No false \N NONE col5 struct Yes false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} diff --git a/regression-test/data/variant_p0/desc.out b/regression-test/data/variant_p0/desc.out index 418708a7af8360..59f7d90baee5e1 100644 --- a/regression-test/data/variant_p0/desc.out +++ b/regression-test/data/variant_p0/desc.out @@ -1,19 +1,19 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.ddd.mxmxm array Yes false \N NONE -- !sql_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -22,7 +22,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -34,7 +34,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -43,7 +43,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -51,7 +51,7 @@ v.c.e double Yes false \N NONE -- !sql_6 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -63,7 +63,7 @@ v.xxxx text Yes false \N NONE -- !sql_7 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -72,13 +72,13 @@ v.xxxx text Yes false \N NONE -- !sql_7_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_7_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -86,7 +86,7 @@ v.c.e double Yes false \N NONE -- !sql_7_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -95,9 +95,9 @@ v.xxxx text Yes false \N NONE -- !sql_8 -- k bigint Yes true \N -v1 variant Yes false \N NONE -v2 variant Yes false \N NONE -v3 variant Yes false \N NONE +v1 variant Yes false \N NONE +v2 variant Yes false \N NONE +v3 variant Yes false \N NONE v1.a smallint Yes false \N NONE v1.b json Yes false \N NONE v1.c.c smallint Yes false \N NONE @@ -112,11 +112,11 @@ v3.c.e double Yes false \N NONE -- !sql_9 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql_9_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -125,7 +125,7 @@ v.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.k1 tinyint Yes false \N NONE v.k2 text Yes false \N NONE v.k3 array Yes false \N NONE @@ -134,8 +134,8 @@ v.k5 json Yes false \N NONE -- !sql_10_1 -- k bigint Yes true \N -v variant Yes false \N NONE -v2 variant Yes false \N NONE +v variant Yes false \N NONE +v2 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -154,7 +154,7 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -173,8 +173,8 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_3 -- k bigint Yes true \N -v variant Yes false \N NONE -v3 variant Yes false \N NONE +v variant Yes false \N NONE +v3 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -193,7 +193,7 @@ v3.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_11 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.!@#^&*() text Yes false \N NONE v.名字 text Yes false \N NONE v.画像.丬文 text Yes false \N NONE @@ -202,11 +202,11 @@ v.金额 smallint Yes false \N NONE -- !sql_12 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql15 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a tinyint Yes false \N NONE v.b tinyint Yes false \N NONE v.c tinyint Yes false \N NONE diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out index 438f45d55c1cfa..fbea16b24f5668 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out @@ -1,11 +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 Yes false \N NONE +var variant Yes false \N NONE -- !sql -- id bigint Yes true \N -var variant Yes false \N NONE -var2 variant Yes false \N NONE -var3 variant Yes false \N NONE +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE diff --git a/regression-test/data/variant_p0/nested.out b/regression-test/data/variant_p0/nested.out index 877bd665f21e5e..9a4efb5428ee60 100644 --- a/regression-test/data/variant_p0/nested.out +++ b/regression-test/data/variant_p0/nested.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.aaa array Yes false \N NONE v.nested.ax1111 array Yes false \N NONE diff --git a/regression-test/data/variant_p0/nested2.out b/regression-test/data/variant_p0/nested2.out index d9bd80f4316c49..84f9430f2172be 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 Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -50,7 +50,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -169,7 +169,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_4 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -218,7 +218,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_5 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array 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 index 0b1bf6b37ff889..f6ccf55d4378fb 100644 --- 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 @@ -8,13 +8,13 @@ -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.tinyint_1 tinyint Yes false \N NONE -- !sql -- @@ -25,13 +25,13 @@ var.tinyint_1 tinyint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.smallint_1 smallint Yes false \N NONE -- !sql -- @@ -45,13 +45,13 @@ var.smallint_1 smallint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.int_1 int Yes false \N NONE -- !sql -- @@ -69,13 +69,13 @@ var.int_1 int Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.bigint_1 bigint Yes false \N NONE -- !sql -- @@ -98,13 +98,13 @@ var.bigint_1 bigint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.largeint_1 largeint Yes false \N NONE -- !sql -- @@ -133,13 +133,13 @@ var.largeint_1 largeint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.char_1 text Yes false \N NONE -- !sql -- @@ -175,13 +175,13 @@ var.char_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -225,13 +225,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -283,13 +283,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.double_1 double Yes false \N NONE -- !sql -- @@ -350,13 +350,13 @@ var.double_1 double Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal32_1 decimal(8,2) Yes false \N NONE -- !sql -- @@ -427,13 +427,13 @@ var.decimal32_1 decimal(8,2) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal64_1 decimal(16,9) Yes false \N NONE -- !sql -- @@ -515,13 +515,13 @@ var.decimal64_1 decimal(16,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal128_1 decimal(36,9) Yes false \N NONE -- !sql -- @@ -615,13 +615,13 @@ var.decimal128_1 decimal(36,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -728,13 +728,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.datetime_1 datetime 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -854,13 +854,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.date_1 date 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.date_1 date Yes false \N NONE -- !sql -- @@ -994,13 +994,13 @@ var.date_1 date Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.ipv4_1 ipv4 Yes false \N NONE -- !sql -- @@ -1149,13 +1149,13 @@ var.ipv4_1 ipv4 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1320,13 +1320,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_boolean_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1507,13 +1507,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_tinyint_1 array Yes false \N NONE -- !sql -- @@ -1712,13 +1712,13 @@ var.array_tinyint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_smallint_1 array Yes false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_smallint_1 array Yes false \N NONE -- !sql -- @@ -1936,13 +1936,13 @@ var.array_smallint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_int_1 array Yes false \N NONE var.array_smallint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_int_1 array Yes false \N NONE -- !sql -- @@ -2180,13 +2180,13 @@ var.array_int_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_int_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE -- !sql -- @@ -2445,13 +2445,13 @@ var.array_bigint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_largeint_1 array Yes false \N NONE -- !sql -- @@ -2732,13 +2732,13 @@ var.array_largeint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE -- !sql -- @@ -3042,13 +3042,13 @@ var.array_char_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_string_1 array Yes false \N NONE -- !sql -- @@ -3376,13 +3376,13 @@ var.array_string_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_float_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_float_1 array Yes false \N NONE -- !sql -- @@ -3735,13 +3735,13 @@ var.array_float_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_double_1 array Yes false \N NONE var.array_float_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_double_1 array Yes false \N NONE -- !sql -- @@ -4120,13 +4120,13 @@ var.array_double_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_double_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE -- !sql -- @@ -4532,13 +4532,13 @@ var.array_decimal32_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal64_1 array Yes false \N NONE -- !sql -- @@ -4972,13 +4972,13 @@ var.array_decimal64_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE -- !sql -- @@ -5441,13 +5441,13 @@ var.array_decimal128_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_decimal256_1 array Yes false \N NONE -- !sql -- @@ -5940,13 +5940,13 @@ var.array_decimal256_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_datetime_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_datetime_1 array Yes false \N NONE -- !sql -- @@ -6470,13 +6470,13 @@ var.array_datetime_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_datetime_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE -- !sql -- @@ -7032,13 +7032,13 @@ var.array_date_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_ipv4_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE -- !sql -- @@ -7627,13 +7627,13 @@ var.array_ipv4_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv6_1 array Yes false \N NONE -- !sql -- @@ -8256,13 +8256,13 @@ var.array_ipv6_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_snapshot_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE var.other_1 text Yes false \N NONE -- !sql -- diff --git a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out index 438f45d55c1cfa..fbea16b24f5668 100644 --- a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out +++ b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out @@ -1,11 +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 Yes false \N NONE +var variant Yes false \N NONE -- !sql -- id bigint Yes true \N -var variant Yes false \N NONE -var2 variant Yes false \N NONE -var3 variant Yes false \N NONE +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE diff --git a/regression-test/suites/variant_p0/delete_update.groovy b/regression-test/suites/variant_p0/delete_update.groovy index 2c2bafdd0a899b..e01aa8fd52dc90 100644 --- a/regression-test/suites/variant_p0/delete_update.groovy +++ b/regression-test/suites/variant_p0/delete_update.groovy @@ -25,7 +25,7 @@ suite("regression_test_variant_delete_and_update", "variant_type"){ sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, - v variant + v variant ) UNIQUE KEY(`k`) DISTRIBUTED BY HASH(k) BUCKETS 3 diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy index cc839f2581d088..0eb5b8b3e9d1a3 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy @@ -60,7 +60,7 @@ suite("test_variant_predefine_doc_snapshot", "p0"){ sql """ CREATE TABLE `test_predefine1` ( `id` bigint NOT NULL, - `v1` variant NULL, + `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"); diff --git a/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy b/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy index 1ed673efb7a334..c73c98baca45a1 100644 --- a/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy +++ b/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_edge_cases.groovy @@ -34,7 +34,7 @@ suite("test_variant_external_meta_edge_cases", "nonConcurrent") { sql """ CREATE TABLE test_empty_subcolumns ( k bigint, - v variant + v variant ) DUPLICATE KEY(`k`) DISTRIBUTED BY HASH(k) BUCKETS 1 diff --git a/regression-test/suites/variant_p0/predefine/load.groovy b/regression-test/suites/variant_p0/predefine/load.groovy index 65171739c20908..9696f269adfb0d 100644 --- a/regression-test/suites/variant_p0/predefine/load.groovy +++ b/regression-test/suites/variant_p0/predefine/load.groovy @@ -60,7 +60,7 @@ suite("regression_test_variant_predefine_schema", "p0"){ sql """ CREATE TABLE `test_predefine1` ( `id` bigint NOT NULL, - `v1` variant NULL, + `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"); @@ -220,7 +220,7 @@ suite("regression_test_variant_predefine_schema", "p0"){ sql "DROP TABLE IF EXISTS test_predefine3" sql """CREATE TABLE `test_predefine3` ( `id` bigint NOT NULL, - `v` variant<'nested.a':string, properties("variant_enable_doc_snapshot_mode" = "false")> NULL) + `v` variant<'nested.a':string, properties("variant_enable_doc_mode" = "false")> NULL) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "variant_enable_flatten_nested" = "false", "disable_auto_compaction" = "true");""" diff --git a/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy b/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy index 7fb20562529e85..725bf1b5f00ba5 100644 --- a/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy +++ b/regression-test/suites/variant_p0/schema_change/test_double_write_when_schema_change.groovy @@ -61,7 +61,7 @@ suite("double_write_schema_change_with_variant", "nonConcurrent") { sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, - v variant, + v variant, change_column double, INDEX idx_var(v) USING INVERTED PROPERTIES("parser" = "english") COMMENT '' ) From 518d31b1059a077d020cc55a33daca18063940bc Mon Sep 17 00:00:00 2001 From: csun5285 Date: Thu, 25 Dec 2025 18:52:42 +0800 Subject: [PATCH 3/6] fix --- .../olap/rowset/segment_v2/column_writer.cpp | 2 +- .../olap/rowset/segment_v2/variant/Untitled | 1 + ...tor.h => binary_column_extract_iterator.h} | 8 +- .../variant/binary_column_reader.cpp | 229 ++++++++++ .../segment_v2/variant/binary_column_reader.h | 139 ++++++ .../variant/hierarchical_data_iterator.cpp | 52 ++- .../variant/hierarchical_data_iterator.h | 22 +- .../variant/sparse_column_merge_iterator.h | 6 +- .../variant/variant_column_reader.cpp | 394 ++++++------------ .../variant/variant_column_reader.h | 70 +--- .../variant/variant_column_writer_impl.cpp | 119 +++--- .../variant/variant_column_writer_impl.h | 13 +- .../variant_doc_snpashot_compact_iterator.h | 4 +- .../variant/variant_ext_meta_writer.cpp | 2 +- .../segment_v2/variant/variant_statistics.h | 33 +- .../segment_v2/variant/variant_util.cpp | 85 ++-- .../rowset/segment_v2/variant/variant_util.h | 10 + be/src/olap/tablet_meta.cpp | 11 +- be/src/olap/tablet_schema.cpp | 18 +- be/src/olap/tablet_schema.h | 26 +- be/src/vec/columns/column_variant.cpp | 73 +--- be/src/vec/columns/column_variant.h | 2 +- be/src/vec/common/schema_util.cpp | 4 +- be/src/vec/common/schema_util.h | 2 +- be/src/vec/data_types/data_type_variant.cpp | 4 +- be/src/vec/json/json_parser.h | 12 +- be/src/vec/json/parse2column.cpp | 166 ++++---- be/src/vec/json/parse2column.h | 2 +- be/src/vec/json/path_in_data.h | 2 +- .../external_col_meta_util_test.cpp | 6 +- .../hierarchical_data_iterator_test.cpp | 5 +- .../variant_column_writer_reader_test.cpp | 21 +- .../org/apache/doris/catalog/VariantType.java | 4 +- .../java/org/apache/doris/catalog/Column.java | 12 +- .../doris/common/util/PropertyAnalyzer.java | 69 ++- .../nereids/parser/LogicalPlanBuilder.java | 60 +-- .../doris/nereids/types/VariantType.java | 4 +- .../org/apache/doris/qe/SessionVariable.java | 47 ++- gensrc/proto/olap_file.proto | 7 +- gensrc/thrift/Descriptors.thrift | 4 +- .../create_nestedtypes_with_schemachange.out | 12 +- regression-test/data/variant_p0/desc.out | 50 +-- .../data/variant_p0/doc_snapshot/load.out | 2 +- .../predefine/test_predefine_ddl.out | 8 +- .../test_predefine_schema_change.out | 8 +- .../predefine/test_predefine_type_index.out | 40 +- regression-test/data/variant_p0/nested.out | 2 +- regression-test/data/variant_p0/nested2.out | 8 +- .../test_all_prdefine_type_to_sparse.out | 144 +++---- .../predefine/test_predefine_ddl.out | 8 +- ...reate_nestedtypes_with_schemachange.groovy | 2 +- .../test_outfile_csv_variant_type.groovy | 2 +- ...ariant_compaction_with_sparse_limit.groovy | 2 +- .../test_schema_change_storage_format.groovy | 2 +- .../variant_doc_snapshot_p2/load.groovy | 11 +- .../load.groovy | 2 +- regression-test/suites/variant_p0/agg.groovy | 2 +- .../compaction/test_compaction.groovy | 2 +- regression-test/suites/variant_p0/desc.groovy | 2 +- .../suites/variant_p0/doc_snapshot/agg.groovy | 2 +- .../doc_snapshot/delete_update.groovy | 4 +- .../variant_p0/doc_snapshot/load.groovy | 4 +- .../doc_snapshot/predefine/load.groovy | 2 +- .../test_prdefine_insert_into_select.groovy | 4 +- .../predefine/test_predefine_pattern.groovy | 2 +- .../test_predefine_schema_change.groovy | 2 +- .../test_predefine_type_index.groovy | 2 +- ...ariant_compaction_with_sparse_limit.groovy | 2 +- .../predefine/variant_with_mow.groovy | 4 +- ...est_double_write_when_schema_change.groovy | 2 +- .../doc_snapshot/test_compaction.groovy | 2 +- .../test_outfile_csv_variant_type.groovy | 2 +- ...st_variant_external_meta_edge_cases.groovy | 2 +- .../doc_snapshot/variant_hirachinal.groovy | 4 +- ..._array_contains_with_inverted_index.groovy | 2 +- ...t_variant_external_meta_integration.groovy | 4 +- regression-test/suites/variant_p0/load.groovy | 2 +- .../suites/variant_p0/nested.groovy | 2 +- .../nested/nested_in_top_array.groovy | 2 +- .../suites/variant_p0/nested2.groovy | 2 +- .../suites/variant_p0/predefine/load.groovy | 2 +- .../test_all_prdefine_type_to_sparse.groovy | 2 +- .../predefine/test_multi_index_file.groovy | 2 +- .../test_multi_index_nonCurrent.groovy | 2 +- .../test_prdefine_insert_into_select.groovy | 2 +- .../predefine/test_predefine_ddl.groovy | 2 +- .../predefine/test_predefine_pattern.groovy | 2 +- .../test_predefine_schema_change.groovy | 2 +- .../test_predefine_type_index.groovy | 2 +- ...ariant_compaction_with_sparse_limit.groovy | 2 +- .../predefine/variant_with_mow.groovy | 2 +- .../test_variant_is_null_expr.groovy | 2 +- .../test_variant_search_subcolumn.groovy | 2 +- .../variant_p0/variant_hirachinal.groovy | 2 +- ..._array_contains_with_inverted_index.groovy | 2 +- .../variant_p1/doc_snapshot/load.groovy | 2 +- .../suites/variant_p1/predefine/load.groovy | 2 +- 97 files changed, 1201 insertions(+), 946 deletions(-) create mode 100644 be/src/olap/rowset/segment_v2/variant/Untitled rename be/src/olap/rowset/segment_v2/variant/{sparse_column_extract_iterator.h => binary_column_extract_iterator.h} (96%) create mode 100644 be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp create mode 100644 be/src/olap/rowset/segment_v2/variant/binary_column_reader.h diff --git a/be/src/olap/rowset/segment_v2/column_writer.cpp b/be/src/olap/rowset/segment_v2/column_writer.cpp index b47737bbe912d6..f246001d306e63 100644 --- a/be/src/olap/rowset/segment_v2/column_writer.cpp +++ b/be/src/olap/rowset/segment_v2/column_writer.cpp @@ -295,7 +295,7 @@ Status ColumnWriter::create_variant_writer(const ColumnWriterOptions& opts, const TabletColumn* column, io::FileWriter* file_writer, std::unique_ptr* writer) { if (column->is_extracted_column()) { - if (column->name().find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { + if (column->name().find(DOC_VALUE_COLUMN_PATH) != std::string::npos) { *writer = std::make_unique( opts, column, std::unique_ptr(FieldFactory::create(*column))); return Status::OK(); diff --git a/be/src/olap/rowset/segment_v2/variant/Untitled b/be/src/olap/rowset/segment_v2/variant/Untitled new file mode 100644 index 00000000000000..9943885fc14de1 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/Untitled @@ -0,0 +1 @@ +_init_container \ No newline at end of file diff --git a/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h b/be/src/olap/rowset/segment_v2/variant/binary_column_extract_iterator.h similarity index 96% rename from be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h rename to be/src/olap/rowset/segment_v2/variant/binary_column_extract_iterator.h index 0037358f28ed39..e9412c73e37d00 100644 --- a/be/src/olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/binary_column_extract_iterator.h @@ -55,7 +55,7 @@ namespace doris::segment_v2 { #include "common/compile_check_begin.h" // Base class for sparse column processors with common functionality -class BaseSparseColumnProcessor : public ColumnIterator { +class BaseBinaryColumnProcessor : public ColumnIterator { protected: const StorageReadOptions* _read_opts; BinaryColumnCacheSPtr _sparse_column_cache; @@ -68,7 +68,7 @@ class BaseSparseColumnProcessor : public ColumnIterator { size_t num_rows) = 0; public: - BaseSparseColumnProcessor(BinaryColumnCacheSPtr sparse_column_cache, + BaseBinaryColumnProcessor(BinaryColumnCacheSPtr sparse_column_cache, const StorageReadOptions* opts) : _read_opts(opts), _sparse_column_cache(std::move(sparse_column_cache)) {} @@ -113,11 +113,11 @@ class BaseSparseColumnProcessor : public ColumnIterator { }; // Implementation for path extraction processor -class SparseColumnExtractIterator : public BaseSparseColumnProcessor { +class SparseColumnExtractIterator : public BaseBinaryColumnProcessor { public: SparseColumnExtractIterator(std::string_view path, BinaryColumnCacheSPtr sparse_column_cache, const StorageReadOptions* opts) - : BaseSparseColumnProcessor(std::move(sparse_column_cache), opts), _path(path) {} + : BaseBinaryColumnProcessor(std::move(sparse_column_cache), opts), _path(path) {} // Batch processing using template method Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override { diff --git a/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp new file mode 100644 index 00000000000000..f37201a889569c --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp @@ -0,0 +1,229 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "olap/rowset/segment_v2/variant/binary_column_reader.h" + +#include +#include + +#include "vec/columns/column_array.h" +#include "vec/columns/column_map.h" +#include "vec/columns/column_string.h" +#include "vec/columns/column_variant.h" +#include "vec/common/assert_cast.h" +#include "vec/common/schema_util.h" +#include "vec/common/string_ref.h" + +namespace doris::segment_v2 { + +#include "common/compile_check_begin.h" + +Status SingleSparseColumnReader::add_binary_column_reader(std::shared_ptr reader, + uint32_t /*index*/) { + if (_single_reader) { + return Status::AlreadyExist("Single sparse column reader already exists"); + } + _single_reader = std::move(reader); + return Status::OK(); +} + +std::pair, std::string> +SingleSparseColumnReader::select_reader_and_cache_key(const std::string& /*relative_path*/) const { + return {_single_reader, std::string(SPARSE_COLUMN_PATH)}; +} + +Status SingleSparseColumnReader::new_binary_column_iterator(ColumnIteratorUPtr* iter) const { + return _single_reader->new_iterator(iter, nullptr); +} + +std::shared_ptr SingleSparseColumnReader::select_reader(uint32_t /*index*/) const { + return _single_reader; +} + +uint32_t SingleSparseColumnReader::num_buckets() const { + return 1; +} + +BinaryColumnType SingleSparseColumnReader::get_type() const { + return BinaryColumnType::SINGLE_SPARSE; +} + +Status MultipleBinaryColumnReader::new_binary_column_iterator(ColumnIteratorUPtr* iter) const { + std::vector> iters; + iters.reserve(_multiple_column_readers.size()); + for (const auto& [index, reader] : _multiple_column_readers) { + if (!reader) { + return Status::NotFound("No column reader available, binary column index is: ", index); + } + ColumnIteratorUPtr it; + RETURN_IF_ERROR(reader->new_iterator(&it, nullptr)); + iters.emplace_back(std::move(it)); + } + *iter = std::make_unique(std::move(iters)); + return Status::OK(); +} + +Status MultipleBinaryColumnReader::add_binary_column_reader(std::shared_ptr reader, + uint32_t index) { + if (_multiple_column_readers.find(index) != _multiple_column_readers.end()) { + return Status::AlreadyExist( + "Multiple sparse column reader already exists, binary column index is: ", index); + } + _multiple_column_readers.emplace(index, std::move(reader)); + return Status::OK(); +} + +uint32_t MultipleBinaryColumnReader::num_buckets() const { + return static_cast(_multiple_column_readers.size()); +} + +std::shared_ptr MultipleBinaryColumnReader::select_reader(uint32_t index) const { + auto it = _multiple_column_readers.find(index); + if (it == _multiple_column_readers.end()) { + return nullptr; + } + std::shared_ptr reader = it->second; + return reader; +} + +uint32_t MultipleBinaryColumnReader::pick_index(const std::string& relative_path) const { + uint32_t N = static_cast(_multiple_column_readers.size()); + uint32_t bucket_index = vectorized::schema_util::variant_binary_shard_of( + StringRef {relative_path.data(), relative_path.size()}, N); + DCHECK(bucket_index < N); + return bucket_index; +} + +std::pair, std::string> +MultipleSparseColumnReader::select_reader_and_cache_key(const std::string& relative_path) const { + uint32_t bucket_index = pick_index(relative_path); + std::string key = std::string(SPARSE_COLUMN_PATH) + ".b" + std::to_string(bucket_index); + std::shared_ptr reader = select_reader(bucket_index); + return {std::move(reader), key}; +} + +BinaryColumnType MultipleSparseColumnReader::get_type() const { + return BinaryColumnType::MULTIPLE_SPARSE; +} + +std::pair, std::string> +MultipleDocColumnReader::select_reader_and_cache_key(const std::string& relative_path) const { + uint32_t bucket_index = pick_index(relative_path); + std::string key = std::string(DOC_VALUE_COLUMN_PATH) + ".b" + std::to_string(bucket_index); + std::shared_ptr reader = select_reader(bucket_index); + return {std::move(reader), key}; +} + +BinaryColumnType MultipleDocColumnReader::get_type() const { + return BinaryColumnType::MULTIPLE_DOC_VALUE; +} + +Status CombineMultipleBinaryColumnIterator::init(const ColumnIteratorOptions& opts) { + for (auto& it : _iters) { + RETURN_IF_ERROR(it->init(opts)); + } + return Status::OK(); +} + +Status CombineMultipleBinaryColumnIterator::seek_to_ordinal(ordinal_t ord_idx) { + for (auto& it : _iters) { + RETURN_IF_ERROR(it->seek_to_ordinal(ord_idx)); + } + return Status::OK(); +} + +Status CombineMultipleBinaryColumnIterator::next_batch(size_t* n, vectorized::MutableColumnPtr& dst, + bool* has_null) { + // Read each bucket into temp maps. + _binary_column_data.clear(); + _binary_column_data.reserve(_iters.size()); + for (auto& it : _iters) { + vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_binary_column_fn(); + RETURN_IF_ERROR(it->next_batch(n, m, has_null)); + _binary_column_data.emplace_back(std::move(m)); + } + _collect_sparse_data_from_buckets(*dst); + return Status::OK(); +} + +Status CombineMultipleBinaryColumnIterator::read_by_rowids(const rowid_t* rowids, + const size_t count, + vectorized::MutableColumnPtr& dst) { + _binary_column_data.clear(); + _binary_column_data.reserve(_iters.size()); + for (auto& it : _iters) { + vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_binary_column_fn(); + RETURN_IF_ERROR(it->read_by_rowids(rowids, count, m)); + _binary_column_data.emplace_back(std::move(m)); + } + _collect_sparse_data_from_buckets(*dst); + return Status::OK(); +} + +ordinal_t CombineMultipleBinaryColumnIterator::get_current_ordinal() const { + return _iters.empty() ? 0 : _iters.front()->get_current_ordinal(); +} + +void CombineMultipleBinaryColumnIterator::_collect_sparse_data_from_buckets( + vectorized::IColumn& binary_data_column) { + using namespace vectorized; + + // Get path, value, offset from all buckets. + auto& column_map = assert_cast(binary_data_column); + auto& dst_paths = assert_cast(column_map.get_keys()); + auto& dst_values = assert_cast(column_map.get_values()); + auto& dst_offsets = assert_cast(column_map.get_offsets()); + + std::vector src_paths(_binary_column_data.size()); + std::vector src_values(_binary_column_data.size()); + std::vector src_offsets(_binary_column_data.size()); + for (size_t i = 0; i != _binary_column_data.size(); ++i) { + const auto& src_map = assert_cast(*_binary_column_data[i]); + src_paths[i] = assert_cast(&src_map.get_keys()); + src_values[i] = assert_cast(&src_map.get_values()); + src_offsets[i] = assert_cast(&src_map.get_offsets()); + } + + size_t num_rows = _binary_column_data[0]->size(); + for (size_t i = 0; i != num_rows; ++i) { + // Sparse data contains paths in sorted order in each row. + // Collect all paths from all buckets in this row and sort them. + // Save each path bucket and index to be able find corresponding value later. + std::vector> all_paths; + for (size_t bucket = 0; bucket != _binary_column_data.size(); ++bucket) { + size_t offset_start = (*src_offsets[bucket])[ssize_t(i) - 1]; + size_t offset_end = (*src_offsets[bucket])[ssize_t(i)]; + + // collect all paths. + for (size_t j = offset_start; j != offset_end; ++j) { + auto path = src_paths[bucket]->get_data_at(j).to_string_view(); + all_paths.emplace_back(path, bucket, j); + } + } + + std::sort(all_paths.begin(), all_paths.end()); + for (const auto& [path, bucket, offset] : all_paths) { + dst_paths.insert_data(path.data(), path.size()); + dst_values.insert_from(*src_values[bucket], offset); + } + + dst_offsets.push_back(dst_paths.size()); + } +} + +#include "common/compile_check_end.h" +} // namespace doris::segment_v2 \ No newline at end of file diff --git a/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h new file mode 100644 index 00000000000000..5aed43910751b8 --- /dev/null +++ b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h @@ -0,0 +1,139 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include "common/status.h" +#include "olap/rowset/segment_v2/column_reader.h" + +namespace doris::segment_v2 { + +#include "common/compile_check_begin.h" + +enum class BinaryColumnType { + SINGLE_SPARSE = 0, + MULTIPLE_SPARSE = 1, + MULTIPLE_DOC_VALUE = 2, +}; + +// Combine multiple bucket binary iterators into one logical iterator. +class CombineMultipleBinaryColumnIterator; + +class BinaryColumnReader { +public: + virtual ~BinaryColumnReader() = default; + + virtual Status new_binary_column_iterator(ColumnIteratorUPtr* iter) const = 0; + + virtual Status add_binary_column_reader(std::shared_ptr reader, + uint32_t index) = 0; + + virtual std::pair, std::string> select_reader_and_cache_key( + const std::string& relative_path) const = 0; + + virtual std::shared_ptr select_reader(uint32_t index) const = 0; + + virtual uint32_t num_buckets() const = 0; + + virtual BinaryColumnType get_type() const = 0; +}; + +class SingleSparseColumnReader : public BinaryColumnReader { +public: + Status add_binary_column_reader(std::shared_ptr reader, uint32_t index) override; + + std::pair, std::string> select_reader_and_cache_key( + const std::string& relative_path) const override; + + Status new_binary_column_iterator(ColumnIteratorUPtr* iter) const override; + + std::shared_ptr select_reader(uint32_t index) const override; + + uint32_t num_buckets() const override; + + BinaryColumnType get_type() const override; + +private: + std::shared_ptr _single_reader; +}; + +class MultipleBinaryColumnReader : public BinaryColumnReader { +public: + Status new_binary_column_iterator(ColumnIteratorUPtr* iter) const override; + + Status add_binary_column_reader(std::shared_ptr reader, uint32_t index) override; + + uint32_t num_buckets() const override; + + std::shared_ptr select_reader(uint32_t index) const override; + +protected: + uint32_t pick_index(const std::string& relative_path) const; + std::unordered_map> _multiple_column_readers; +}; + +class MultipleSparseColumnReader : public MultipleBinaryColumnReader { +public: + std::pair, std::string> select_reader_and_cache_key( + const std::string& relative_path) const override; + + BinaryColumnType get_type() const override; +}; + +class MultipleDocColumnReader : public MultipleBinaryColumnReader { +public: + std::pair, std::string> select_reader_and_cache_key( + const std::string& relative_path) const override; + + BinaryColumnType get_type() const override; +}; + +// Combine multiple bucket sparse iterators into one logical sparse iterator by row-wise merging. +class CombineMultipleBinaryColumnIterator : public ColumnIterator { +public: + explicit CombineMultipleBinaryColumnIterator( + std::vector>&& iters) + : _iters(std::move(iters)) {} + + Status init(const ColumnIteratorOptions& opts) override; + + Status seek_to_ordinal(ordinal_t ord_idx) override; + + Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override; + + Status read_by_rowids(const rowid_t* rowids, const size_t count, + vectorized::MutableColumnPtr& dst) override; + + ordinal_t get_current_ordinal() const override; + +private: + void _collect_sparse_data_from_buckets(vectorized::IColumn& binary_data_column); + + std::vector> _iters; + std::vector _binary_column_data; +}; + +#include "common/compile_check_end.h" +} // namespace doris::segment_v2 \ No newline at end of file diff --git a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp index bbb6cc2765ac5d..7b8a2f4237c02c 100644 --- a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp @@ -44,13 +44,13 @@ namespace doris::segment_v2 { Status HierarchicalDataIterator::create(ColumnIteratorUPtr* reader, int32_t col_uid, vectorized::PathInData path, const SubcolumnColumnMetaInfo::Node* node, - std::unique_ptr&& sparse_reader, + std::unique_ptr&& binary_column_reader, std::unique_ptr&& root_column_reader, ColumnReaderCache* column_reader_cache, - OlapReaderStatistics* stats) { + OlapReaderStatistics* stats, ReadType read_type) { // None leave node need merge with root std::unique_ptr stream_iter(new HierarchicalDataIterator(path)); - if (node != nullptr) { + if (node != nullptr && read_type != ReadType::MERGE_ROOT_DOC) { std::vector leaves; vectorized::PathsInData leaves_paths; SubcolumnColumnMetaInfo::get_leaves_of_node(node, leaves, leaves_paths); @@ -66,8 +66,9 @@ Status HierarchicalDataIterator::create(ColumnIteratorUPtr* reader, int32_t col_ // need read from root column if not null stream_iter->_root_reader = std::move(root_column_reader); // need read from sparse column if not null - stream_iter->_sparse_column_reader = std::move(sparse_reader); + stream_iter->_binary_column_reader = std::move(binary_column_reader); stream_iter->_stats = stats; + stream_iter->_read_type = read_type; *reader = std::move(stream_iter); return Status::OK(); @@ -83,9 +84,9 @@ Status HierarchicalDataIterator::init(const ColumnIteratorOptions& opts) { RETURN_IF_ERROR(_root_reader->iterator->init(opts)); _root_reader->inited = true; } - if (_sparse_column_reader && !_sparse_column_reader->inited) { - RETURN_IF_ERROR(_sparse_column_reader->iterator->init(opts)); - _sparse_column_reader->inited = true; + if (_binary_column_reader && !_binary_column_reader->inited) { + RETURN_IF_ERROR(_binary_column_reader->iterator->init(opts)); + _binary_column_reader->inited = true; } return Status::OK(); } @@ -99,9 +100,9 @@ Status HierarchicalDataIterator::seek_to_ordinal(ordinal_t ord) { DCHECK(_root_reader->inited); RETURN_IF_ERROR(_root_reader->iterator->seek_to_ordinal(ord)); } - if (_sparse_column_reader) { - DCHECK(_sparse_column_reader->inited); - RETURN_IF_ERROR(_sparse_column_reader->iterator->seek_to_ordinal(ord)); + if (_binary_column_reader) { + DCHECK(_binary_column_reader->inited); + RETURN_IF_ERROR(_binary_column_reader->iterator->seek_to_ordinal(ord)); } return Status::OK(); } @@ -299,7 +300,6 @@ Status HierarchicalDataIterator::_init_container(vectorized::MutableColumnPtr& c RETURN_IF_ERROR(_process_sparse_column(container_variant, nrows)); } - container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); container_variant.set_num_rows(nrows); return Status::OK(); } @@ -319,24 +319,31 @@ Status HierarchicalDataIterator::_process_sparse_column( vectorized::ColumnVariant& container_variant, size_t nrows) { using namespace vectorized; container_variant.clear_sparse_column(); - if (!_sparse_column_reader) { - container_variant.get_sparse_column()->assume_mutable()->resize( - container_variant.get_sparse_column()->size() + nrows); + if (!_binary_column_reader) { + container_variant.get_sparse_column()->assume_mutable()->resize(nrows); + container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); ENABLE_CHECK_CONSISTENCY(&container_variant); return Status::OK(); } // process sparse column if (_path.get_parts().empty()) { - // directly use sparse column if access root - container_variant.set_sparse_column(_sparse_column_reader->column->get_ptr()); + if (_read_type == ReadType::MERGE_ROOT_SPARSE) { + container_variant.set_sparse_column(_binary_column_reader->column->get_ptr()); + container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); + } else if (_read_type == ReadType::MERGE_ROOT_DOC) { + container_variant.set_doc_value_column(_binary_column_reader->column->get_ptr()); + container_variant.get_sparse_column()->assume_mutable()->resize(nrows); + } else { + return Status::InternalError("Invalid read type {}", _read_type); + } ENABLE_CHECK_CONSISTENCY(&container_variant); + return Status::OK(); } else { const auto& offsets = - assert_cast(*_sparse_column_reader->column).get_offsets(); + assert_cast(*_binary_column_reader->column).get_offsets(); /// Check if there is no data in shared data in current range. if (offsets.back() == offsets[-1]) { - container_variant.get_sparse_column()->assume_mutable()->resize( - container_variant.get_sparse_column()->size() + nrows); + container_variant.get_sparse_column()->assume_mutable()->resize(nrows); } else { // Read for variant sparse column // Example path: a.b @@ -347,7 +354,7 @@ Status HierarchicalDataIterator::_process_sparse_column( // c : int|123 // d : string|"456" const auto& sparse_data_map = - assert_cast(*_sparse_column_reader->column); + assert_cast(*_binary_column_reader->column); const auto& src_sparse_data_offsets = sparse_data_map.get_offsets(); const auto& src_sparse_data_paths = assert_cast(sparse_data_map.get_keys()); @@ -455,6 +462,7 @@ Status HierarchicalDataIterator::_process_sparse_column( } } } + container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); } ENABLE_CHECK_CONSISTENCY(&container_variant); return Status::OK(); @@ -469,8 +477,8 @@ Status HierarchicalDataIterator::_init_null_map_and_clear_columns( return Status::OK(); })); container->clear(); - if (_sparse_column_reader) { - _sparse_column_reader->column->clear(); + if (_binary_column_reader) { + _binary_column_reader->column->clear(); } if (_root_reader) { if (_root_reader->column->is_nullable()) { diff --git a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h index a549a131883b33..7ea5202f871f8e 100644 --- a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h @@ -66,14 +66,19 @@ using PathsWithColumnAndType = std::vector; // Reader for hierarchical data for variant, merge with root(sparse encoded columns) class HierarchicalDataIterator : public ColumnIterator { public: - // Currently two types of read, merge sparse columns with root columns, or read directly - enum class ReadType { MERGE_ROOT, READ_DIRECT }; + // Currently three types of read, merge sparse columns with root columns, merge doc columns with root columns, or read directly + enum class ReadType { + MERGE_ROOT_SPARSE = 0, + MERGE_ROOT_DOC = 1, + READ_DIRECT = 2, + }; static Status create(ColumnIteratorUPtr* reader, int32_t col_uid, vectorized::PathInData path, const SubcolumnColumnMetaInfo::Node* target_node, std::unique_ptr&& sparse_reader, std::unique_ptr&& root_column_reader, - ColumnReaderCache* column_reader_cache, OlapReaderStatistics* stats); + ColumnReaderCache* column_reader_cache, OlapReaderStatistics* stats, + ReadType read_type); Status init(const ColumnIteratorOptions& opts) override; @@ -92,10 +97,11 @@ class HierarchicalDataIterator : public ColumnIterator { private: SubstreamReaderTree _substream_reader; std::unique_ptr _root_reader; - std::unique_ptr _sparse_column_reader; + std::unique_ptr _binary_column_reader; size_t _rows_read = 0; vectorized::PathInData _path; OlapReaderStatistics* _stats = nullptr; + ReadType _read_type = ReadType::READ_DIRECT; HierarchicalDataIterator(const vectorized::PathInData& path) : _path(path) {} @@ -156,12 +162,12 @@ class HierarchicalDataIterator : public ColumnIterator { })); // read sparse column - if (_sparse_column_reader) { + if (_binary_column_reader) { SCOPED_RAW_TIMER(&_stats->variant_scan_sparse_column_timer_ns); - int64_t curr_size = _sparse_column_reader->column->byte_size(); - RETURN_IF_ERROR(read_func(*_sparse_column_reader, {}, nullptr)); + int64_t curr_size = _binary_column_reader->column->byte_size(); + RETURN_IF_ERROR(read_func(*_binary_column_reader, {}, nullptr)); _stats->variant_scan_sparse_column_bytes += - _sparse_column_reader->column->byte_size() - curr_size; + _binary_column_reader->column->byte_size() - curr_size; } MutableColumnPtr container; diff --git a/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h b/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h index 9d8455a0008011..2d24bbc9f28570 100644 --- a/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h @@ -31,7 +31,7 @@ #include "olap/iterators.h" #include "olap/rowset/segment_v2/column_reader.h" #include "olap/rowset/segment_v2/stream_reader.h" -#include "olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h" +#include "olap/rowset/segment_v2/variant/binary_column_extract_iterator.h" #include "olap/schema.h" #include "olap/tablet_schema.h" #include "vec/columns/column.h" @@ -55,13 +55,13 @@ namespace doris::segment_v2 { #include "common/compile_check_begin.h" // Implementation for merge processor -class SparseColumnMergeIterator : public BaseSparseColumnProcessor { +class SparseColumnMergeIterator : public BaseBinaryColumnProcessor { public: SparseColumnMergeIterator(const TabletSchema::PathsSetInfo& path_set_info, BinaryColumnCacheSPtr sparse_column_cache, SubstreamReaderTree&& src_subcolumns_for_sparse, const StorageReadOptions* opts) - : BaseSparseColumnProcessor(std::move(sparse_column_cache), opts), + : BaseBinaryColumnProcessor(std::move(sparse_column_cache), opts), _src_subcolumn_map(path_set_info.sub_path_set), _src_subcolumns_for_sparse(src_subcolumns_for_sparse) {} Status init(const ColumnIteratorOptions& opts) override; 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 8ba1758a112cf7..f5038e90c34c04 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 @@ -32,8 +32,9 @@ #include "olap/rowset/segment_v2/indexed_column_reader.h" #include "olap/rowset/segment_v2/page_handle.h" #include "olap/rowset/segment_v2/segment.h" +#include "olap/rowset/segment_v2/variant/binary_column_extract_iterator.h" +#include "olap/rowset/segment_v2/variant/binary_column_reader.h" #include "olap/rowset/segment_v2/variant/hierarchical_data_iterator.h" -#include "olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h" #include "olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h" #include "olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h" #include "olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h" @@ -66,148 +67,6 @@ const SubcolumnColumnMetaInfo::Node* VariantColumnReader::get_subcolumn_meta_by_ return node; } -// Combine multiple bucket sparse iterators into one logical sparse iterator by row-wise merging. -class CombineBucketsSparseIterator : public ColumnIterator { -public: - explicit CombineBucketsSparseIterator(std::vector>&& iters) - : _iters(std::move(iters)) {} - - Status init(const ColumnIteratorOptions& opts) override { - for (auto& it : _iters) { - RETURN_IF_ERROR(it->init(opts)); - } - return Status::OK(); - } - - Status seek_to_ordinal(ordinal_t ord_idx) override { - for (auto& it : _iters) { - RETURN_IF_ERROR(it->seek_to_ordinal(ord_idx)); - } - return Status::OK(); - } - - Status next_batch(size_t* n, vectorized::MutableColumnPtr& dst, bool* has_null) override { - // read each bucket into temp maps - _sparse_data_buckets.clear(); - _sparse_data_buckets.reserve(_iters.size()); - for (auto& it : _iters) { - vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_binary_column_fn(); - RETURN_IF_ERROR(it->next_batch(n, m, has_null)); - _sparse_data_buckets.emplace_back(std::move(m)); - } - _collect_sparse_data_from_buckets(*dst); - return Status::OK(); - } - - Status read_by_rowids(const rowid_t* rowids, const size_t count, - vectorized::MutableColumnPtr& dst) override { - _sparse_data_buckets.clear(); - _sparse_data_buckets.reserve(_iters.size()); - for (auto& it : _iters) { - vectorized::MutableColumnPtr m = vectorized::ColumnVariant::create_binary_column_fn(); - RETURN_IF_ERROR(it->read_by_rowids(rowids, count, m)); - _sparse_data_buckets.emplace_back(std::move(m)); - } - _collect_sparse_data_from_buckets(*dst); - return Status::OK(); - } - - ordinal_t get_current_ordinal() const override { - return _iters.empty() ? 0 : _iters.front()->get_current_ordinal(); - } - -private: - void _collect_sparse_data_from_buckets(vectorized::IColumn& sparse_data_column) { - using namespace vectorized; - - // get path, value, offset from all buckets - auto& column_map = assert_cast(sparse_data_column); - auto& dst_sparse_data_paths = assert_cast(column_map.get_keys()); - auto& dst_sparse_data_values = - assert_cast(column_map.get_values()); - auto& dst_sparse_data_offsets = - assert_cast(column_map.get_offsets()); - std::vector src_sparse_data_paths_buckets(_sparse_data_buckets.size()); - std::vector src_sparse_data_values_buckets( - _sparse_data_buckets.size()); - std::vector src_sparse_data_offsets_buckets( - _sparse_data_buckets.size()); - for (size_t i = 0; i != _sparse_data_buckets.size(); ++i) { - const auto& src_map = - assert_cast(*_sparse_data_buckets[i]); - src_sparse_data_paths_buckets[i] = - assert_cast(&src_map.get_keys()); - src_sparse_data_values_buckets[i] = - assert_cast(&src_map.get_values()); - src_sparse_data_offsets_buckets[i] = - assert_cast(&src_map.get_offsets()); - } - - size_t num_rows = _sparse_data_buckets[0]->size(); - for (size_t i = 0; i != num_rows; ++i) { - // Sparse data contains paths in sorted order in each row. - // Collect all paths from all buckets in this row and sort them. - // Save each path bucket and index to be able find corresponding value later. - std::vector> all_paths; - for (size_t bucket = 0; bucket != _sparse_data_buckets.size(); ++bucket) { - size_t offset_start = (*src_sparse_data_offsets_buckets[bucket])[ssize_t(i) - 1]; - size_t offset_end = (*src_sparse_data_offsets_buckets[bucket])[ssize_t(i)]; - - // collect all paths. - for (size_t j = offset_start; j != offset_end; ++j) { - auto path = - src_sparse_data_paths_buckets[bucket]->get_data_at(j).to_string_view(); - all_paths.emplace_back(path, bucket, j); - } - } - - std::sort(all_paths.begin(), all_paths.end()); - for (const auto& [path, bucket, offset] : all_paths) { - dst_sparse_data_paths.insert_data(path.data(), path.size()); - dst_sparse_data_values.insert_from(*src_sparse_data_values_buckets[bucket], offset); - } - - dst_sparse_data_offsets.push_back(dst_sparse_data_paths.size()); - } - } - - std::vector> _iters; - std::vector _sparse_data_buckets; -}; - -// Implement UnifiedSparseColumnReader helpers declared in header -Status UnifiedSparseColumnReader::new_sparse_iterator(ColumnIteratorUPtr* iter) const { - if (has_buckets()) { - std::vector> iters; - iters.reserve(_buckets.size()); - for (const auto& br : _buckets) { - if (!br) continue; - ColumnIteratorUPtr it; - RETURN_IF_ERROR(br->new_iterator(&it, nullptr)); - iters.emplace_back(std::move(it)); - } - *iter = std::make_unique(std::move(iters)); - return Status::OK(); - } - if (_single) { - return _single->new_iterator(iter, nullptr); - } - return Status::NotFound("No sparse readers available"); -} - -std::pair, std::string> -UnifiedSparseColumnReader::select_reader_and_cache_key(const std::string& relative_path) const { - if (has_buckets()) { - uint32_t N = static_cast(_buckets.size()); - uint32_t bucket_index = vectorized::schema_util::variant_binary_shard_of( - StringRef {relative_path.data(), relative_path.size()}, N); - DCHECK(bucket_index < _buckets.size()); - std::string key = std::string(SPARSE_COLUMN_PATH) + ".b" + std::to_string(bucket_index); - return {_buckets[bucket_index], key}; - } - return {_single, std::string(SPARSE_COLUMN_PATH)}; -} - bool VariantColumnReader::exist_in_sparse_column( const vectorized::PathInData& relative_path) const { std::shared_lock lock(_subcolumns_meta_mutex); @@ -282,29 +141,37 @@ Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* read // english only in comments std::shared_lock lock(_subcolumns_meta_mutex); + HierarchicalDataIterator::ReadType read_type = HierarchicalDataIterator::ReadType::READ_DIRECT; + + if (path == root->path) { + read_type = HierarchicalDataIterator::ReadType::MERGE_ROOT_SPARSE; + if (_binary_column_reader && + _binary_column_reader->get_type() == BinaryColumnType::MULTIPLE_DOC_VALUE) { + read_type = HierarchicalDataIterator::ReadType::MERGE_ROOT_DOC; + } + } + // Node contains column with children columns or has correspoding sparse columns // Create reader with hirachical data. std::unique_ptr sparse_iter; - if (_statistics && !_statistics->sparse_column_non_null_size.empty() && - !_sparse_reader.empty()) { + if (_statistics->has_sparse_column_non_null_size() || + (_statistics->has_doc_column_non_null_size() && + read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT_DOC)) { ColumnIteratorUPtr iter; - RETURN_IF_ERROR(_sparse_reader.new_sparse_iterator(&iter)); + RETURN_IF_ERROR(_binary_column_reader->new_binary_column_iterator(&iter)); sparse_iter = std::make_unique( vectorized::ColumnVariant::create_binary_column_fn(), std::move(iter), nullptr); } if (node == nullptr) { node = _subcolumns_meta_info->find_exact(path); } - // If read the full path of variant read in MERGE_ROOT, otherwise READ_DIRECT - HierarchicalDataIterator::ReadType read_type = - (path == root->path) ? HierarchicalDataIterator::ReadType::MERGE_ROOT - : HierarchicalDataIterator::ReadType::READ_DIRECT; // Make sure the root node is in strem_cache, so that child can merge data with root // Eg. {"a" : "b" : {"c" : 1}}, access the `a.b` path and merge with root path so that // we could make sure the data could be fully merged, since some column may not be extracted but remains in root // like {"a" : "b" : {"e" : 1.1}} in jsonb format std::unique_ptr root_column_reader; - if (read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT) { + if (read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT_SPARSE || + read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT_DOC) { root_column_reader = std::make_unique( root->data.file_column_type->create_column(), std::make_unique(_root_column_reader), @@ -312,7 +179,7 @@ Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* read } RETURN_IF_ERROR(HierarchicalDataIterator::create( reader, col_uid, path, node, std::move(sparse_iter), std::move(root_column_reader), - column_reader_cache, stats)); + column_reader_cache, stats, read_type)); return Status::OK(); } @@ -337,8 +204,9 @@ Status VariantColumnReader::_create_sparse_merge_reader(ColumnIteratorUPtr* iter } // If bucketized sparse column is requested (per-bucket sparse output column), // only collect subcolumns that belong to this bucket to avoid extra IO. - if (bucket_index.has_value() && _sparse_reader.has_buckets()) { - uint32_t N = static_cast(_sparse_reader.num_buckets()); + if (bucket_index.has_value()) { + CHECK(_binary_column_reader->get_type() == BinaryColumnType::MULTIPLE_SPARSE); + uint32_t N = static_cast(_binary_column_reader->num_buckets()); if (N > 1) { uint32_t b = vectorized::schema_util::variant_binary_shard_of( StringRef {path.data(), path.size()}, N); @@ -454,44 +322,44 @@ Status VariantColumnReader::_build_read_plan_flat_leaves( // Handle sparse column reads in flat-leaf compaction. const std::string rel = relative_path.get_path(); // Case 1: single sparse column path - if (rel == SPARSE_COLUMN_PATH && !_sparse_reader.has_buckets() && - _sparse_reader.single() != nullptr) { + if (rel == SPARSE_COLUMN_PATH && + _binary_column_reader->get_type() == BinaryColumnType::SINGLE_SPARSE) { plan->kind = ReadKind::SPARSE_MERGE; plan->type = vectorized::DataTypeFactory::instance().create_data_type(target_col); plan->relative_path = relative_path; - plan->sparse_column_reader = _sparse_reader.single(); - plan->sparse_cache_key = SPARSE_COLUMN_PATH; + plan->binary_column_reader = _binary_column_reader->select_reader(0); + plan->binary_cache_key = SPARSE_COLUMN_PATH; plan->bucket_index.reset(); return Status::OK(); } // Case 2: bucketized sparse column path: __DORIS_VARIANT_SPARSE__.b{i} - if (rel.rfind(std::string(SPARSE_COLUMN_PATH) + ".b", 0) == 0 && - _sparse_reader.has_buckets()) { + if (rel.rfind(std::string(SPARSE_COLUMN_PATH) + ".b", 0) == 0) { + CHECK(_binary_column_reader->get_type() == BinaryColumnType::MULTIPLE_SPARSE); // parse bucket index uint32_t bucket_index = static_cast( atoi(rel.substr(std::string(SPARSE_COLUMN_PATH).size() + 2).c_str())); - const auto& buckets = _sparse_reader.buckets(); - if (bucket_index >= buckets.size() || !buckets[bucket_index]) { + const auto& reader = _binary_column_reader->select_reader(bucket_index); + if (!reader) { return Status::NotFound("bucket sparse column reader not found: {}", rel); } plan->kind = ReadKind::SPARSE_MERGE; plan->type = vectorized::DataTypeFactory::instance().create_data_type(target_col); plan->relative_path = relative_path; - plan->sparse_column_reader = buckets[bucket_index]; - plan->sparse_cache_key = + plan->binary_column_reader = _binary_column_reader->select_reader(bucket_index); + plan->binary_cache_key = std::string(SPARSE_COLUMN_PATH) + ".b" + std::to_string(bucket_index); plan->bucket_index = bucket_index; return Status::OK(); } // case 3: doc snapshot column - if (rel.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { - size_t bucket = rel.rfind('.'); + if (rel.find(DOC_VALUE_COLUMN_PATH) != std::string::npos) { + CHECK(_binary_column_reader->get_type() == BinaryColumnType::MULTIPLE_DOC_VALUE); + size_t bucket = rel.rfind('b'); uint32_t bucket_value = static_cast(std::stoul(rel.substr(bucket + 1))); - plan->kind = ReadKind::DOC_SNAPSHOT; + plan->kind = ReadKind::DOC_COMPACT; plan->type = vectorized::DataTypeFactory::instance().create_data_type(target_col); - plan->relative_path = relative_path; - plan->doc_snapshot_buckets.push_back(bucket_value); + plan->binary_column_reader = _binary_column_reader->select_reader(bucket_value); return Status::OK(); } @@ -505,19 +373,18 @@ Status VariantColumnReader::_build_read_plan_flat_leaves( // 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 bool existed_in_sparse_column = - !_statistics->sparse_column_non_null_size.empty() && - _statistics->sparse_column_non_null_size.contains(relative_path.get_path()); + _statistics->existed_in_sparse_column(relative_path.get_path()); bool exceeded_sparse_column_limit = is_exceeded_sparse_column_limit(); if (existed_in_sparse_column || exceeded_sparse_column_limit) { // Sparse column exists or reached sparse size limit, read sparse column auto [reader, cache_key] = - _sparse_reader.select_reader_and_cache_key(relative_path.get_path()); + _binary_column_reader->select_reader_and_cache_key(relative_path.get_path()); DCHECK(reader != nullptr); plan->kind = ReadKind::SPARSE_EXTRACT; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; - plan->sparse_column_reader = std::move(reader); - plan->sparse_cache_key = std::move(cache_key); + plan->binary_column_reader = std::move(reader); + plan->binary_cache_key = std::move(cache_key); plan->bucket_index.reset(); return Status::OK(); } @@ -569,12 +436,8 @@ bool VariantColumnReader::_has_prefix_path_unlocked( // 2) Check sparse column stats: use lower_bound to test the `p.` prefix range // example sparse columns path: a.b.c, a.b.e, access prefix: a.b. // then we must read the sparse columns - if (_statistics && !_statistics->sparse_column_non_null_size.empty()) { - auto it = _statistics->sparse_column_non_null_size.lower_bound(dot_prefix); - if (it != _statistics->sparse_column_non_null_size.end() && - it->first.starts_with(dot_prefix)) { - return true; - } + if (_statistics->has_prefix_path(dot_prefix)) { + return true; } // 3) Check external meta store (if available). @@ -632,22 +495,17 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& node = _subcolumns_meta_info->find_exact(relative_path); } - // read root - if (root->path == relative_path && !_doc_value_column_readers.empty()) { - plan->kind = ReadKind::DOC_SNAPSHOT_ALL; + // read root: from doc value column + if (root->path == relative_path && _statistics->has_doc_column_non_null_size()) { + plan->kind = ReadKind::DOC_ALL; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; plan->root = root; - for (const auto& [bucket_value, _] : _doc_value_column_readers) { - plan->doc_snapshot_buckets.push_back(bucket_value); - } return Status::OK(); } // Check if path exist in sparse column - bool existed_in_sparse_column = - !_statistics->sparse_column_non_null_size.empty() && - _statistics->sparse_column_non_null_size.contains(relative_path.get_path()); + bool existed_in_sparse_column = _statistics->existed_in_sparse_column(relative_path.get_path()); DBUG_EXECUTE_IF("exist_in_sparse_column_must_be_false", { if (existed_in_sparse_column) { @@ -682,13 +540,13 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& // {"b" : 123} b in sparse column // Then we should use hierarchical reader to read b auto [reader, cache_key] = - _sparse_reader.select_reader_and_cache_key(relative_path.get_path()); + _binary_column_reader->select_reader_and_cache_key(relative_path.get_path()); DCHECK(reader); plan->kind = ReadKind::SPARSE_EXTRACT; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; - plan->sparse_column_reader = std::move(reader); - plan->sparse_cache_key = std::move(cache_key); + plan->binary_column_reader = std::move(reader); + plan->binary_cache_key = std::move(cache_key); plan->bucket_index.reset(); return Status::OK(); } @@ -726,24 +584,28 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& } // not found, need continue } - if (exceeded_sparse_column_limit) { - // maybe exist prefix path in sparse column - plan->kind = ReadKind::HIERARCHICAL; + + // find if path exists in doc snapshot column + bool existed_in_doc_column = _statistics->existed_in_doc_column(relative_path.get_path()); + if (existed_in_doc_column) { + auto [reader, cache_key] = + _binary_column_reader->select_reader_and_cache_key(relative_path.get_path()); + DCHECK(reader); + plan->kind = ReadKind::DOC_EXTRACT; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; - plan->node = node; - plan->root = root; + plan->binary_column_reader = std::move(reader); + plan->binary_cache_key = std::move(cache_key); return Status::OK(); } - // find if path exists in doc snapshot column - auto picked_doc_snapshot_buckets = - _pick_doc_value_column_buckets(relative_path.get_path()); - if (!picked_doc_snapshot_buckets.empty()) { - plan->kind = ReadKind::DOC_SNAPSHOT_EXTRACT; + if (exceeded_sparse_column_limit) { + // maybe exist prefix path in sparse column + plan->kind = ReadKind::HIERARCHICAL; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; - plan->doc_snapshot_buckets = std::move(picked_doc_snapshot_buckets); + plan->node = node; + plan->root = root; return Status::OK(); } @@ -783,9 +645,9 @@ Status VariantColumnReader::_create_iterator_from_plan( return Status::OK(); } case ReadKind::SPARSE_EXTRACT: { - DCHECK(plan.sparse_column_reader != nullptr); + DCHECK(plan.binary_column_reader != nullptr); BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, plan.sparse_cache_key, plan.sparse_column_reader)); + binary_column_cache_ptr, plan.binary_cache_key, plan.binary_column_reader)); *iterator = std::make_unique( plan.relative_path.get_path(), std::move(sparse_column_cache), opt); if (opt && opt->stats) { @@ -794,9 +656,9 @@ Status VariantColumnReader::_create_iterator_from_plan( return Status::OK(); } case ReadKind::SPARSE_MERGE: { - DCHECK(plan.sparse_column_reader != nullptr); + DCHECK(plan.binary_column_reader != nullptr); BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, plan.sparse_cache_key, plan.sparse_column_reader)); + binary_column_cache_ptr, plan.binary_cache_key, plan.binary_column_reader)); RETURN_IF_ERROR(_create_sparse_merge_reader(iterator, opt, target_col, sparse_column_cache, column_reader_cache, plan.bucket_index)); return Status::OK(); @@ -813,47 +675,33 @@ Status VariantColumnReader::_create_iterator_from_plan( } return Status::OK(); } - case ReadKind::DOC_SNAPSHOT: { - DCHECK(plan.doc_snapshot_buckets.size() == 1); + case ReadKind::DOC_COMPACT: { + DCHECK(plan.binary_column_reader); ColumnIteratorUPtr inner_iter; - RETURN_IF_ERROR(_doc_value_column_readers.at(plan.doc_snapshot_buckets[0]) - ->new_iterator(&inner_iter, nullptr)); - *iterator = std::make_unique(std::move(inner_iter)); + RETURN_IF_ERROR(plan.binary_column_reader->new_iterator(&inner_iter, nullptr)); + *iterator = std::make_unique(std::move(inner_iter)); return Status::OK(); } - case ReadKind::DOC_SNAPSHOT_EXTRACT: { - DCHECK(plan.doc_snapshot_buckets.size() >= 1); - - std::vector doc_value_column_caches; - for (const auto& bucket : plan.doc_snapshot_buckets) { - std::string path = DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket); - BinaryColumnCacheSPtr doc_value_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, path, _doc_value_column_readers.at(bucket))); - doc_value_column_caches.push_back(std::move(doc_value_column_cache)); - } - *iterator = std::make_unique( - std::move(doc_value_column_caches), plan.relative_path.get_path()); + case ReadKind::DOC_EXTRACT: { + DCHECK(plan.binary_column_reader != nullptr); + BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( + binary_column_cache_ptr, plan.binary_cache_key, plan.binary_column_reader)); + *iterator = std::make_unique( + plan.relative_path.get_path(), std::move(sparse_column_cache), opt); + // std::vector doc_snapshot_data_buckets; + // doc_snapshot_data_buckets.push_back(std::move(sparse_column_cache)); + // *iterator = std::make_unique(std::move(doc_snapshot_data_buckets), plan.relative_path.get_path()); if (opt && opt->stats) { opt->stats->variant_subtree_doc_snapshot_extract_iter_count++; } return Status::OK(); } - case ReadKind::DOC_SNAPSHOT_ALL: { - std::vector doc_value_column_caches; - for (const auto& bucket : plan.doc_snapshot_buckets) { - std::string path = DOC_SNAPSHOT_COLUMN_PATH + "." + std::to_string(bucket); - BinaryColumnCacheSPtr doc_value_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, path, _doc_value_column_readers.at(bucket))); - doc_value_column_caches.push_back(std::move(doc_value_column_cache)); - } - std::unique_ptr root_column_reader; - DCHECK(plan.root); - root_column_reader = std::make_unique( - plan.root->data.file_column_type->create_column(), - std::make_unique(_root_column_reader), - plan.root->data.file_column_type); - *iterator = std::make_unique( - std::move(doc_value_column_caches), std::move(root_column_reader)); + case ReadKind::DOC_ALL: { + int32_t col_uid = target_col.unique_id() >= 0 ? target_col.unique_id() + : target_col.parent_unique_id(); + RETURN_IF_ERROR(_create_hierarchical_reader(iterator, col_uid, plan.relative_path, + plan.node, plan.root, column_reader_cache, + opt->stats)); if (opt && opt->stats) { opt->stats->variant_subtree_doc_snapshot_all_iter_count++; } @@ -925,9 +773,10 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce opts.tablet_schema->column_by_uid(self_column_pb.unique_id()) .variant_max_sparse_column_statistics_size(); _tablet_schema = opts.tablet_schema; - // collect bucketized sparse readers for this variant column - std::map> tmp_bucket_readers; - std::map aggregated_bucket_stats; + // collect bucketized binary column readers for this variant column + std::map> tmp_sparse_readers; + std::map> tmp_doc_value_readers; + std::map aggregated_binary_column_stats; // helper to handle sparse meta (single or bucket) from a ColumnMetaPB auto handle_sparse_meta = [&](const ColumnMetaPB& col, bool* handled) -> Status { @@ -953,7 +802,13 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce std::shared_ptr single_reader; RETURN_IF_ERROR(ColumnReader::create(opts, col, footer->num_rows(), file_reader, &single_reader)); - _sparse_reader.set_single(std::move(single_reader)); + // only one sparse column + if (_binary_column_reader) { + return Status::AlreadyExist("single sparse column reader already exists"); + } + _binary_column_reader = std::make_shared(); + RETURN_IF_ERROR( + _binary_column_reader->add_binary_column_reader(std::move(single_reader), 0)); *handled = true; return Status::OK(); } @@ -965,28 +820,26 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce DCHECK(col.has_variant_statistics()) << col.DebugString(); const auto& variant_stats = col.variant_statistics(); for (const auto& [subpath, size] : variant_stats.sparse_column_non_null_size()) { - aggregated_bucket_stats[subpath] += size; + aggregated_binary_column_stats[subpath] += size; } std::shared_ptr reader; RETURN_IF_ERROR(ColumnReader::create(opts, col, num_rows, file_reader, &reader)); - tmp_bucket_readers[idx] = reader; + tmp_sparse_readers[idx] = std::move(reader); *handled = true; return Status::OK(); } // case 3: doc snapshot column - if (rel_str.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { - size_t bucket = rel_str.rfind('.'); + if (rel_str.find(DOC_VALUE_COLUMN_PATH) != std::string::npos) { + size_t bucket = rel_str.rfind('b'); int bucket_value = std::stoi(rel_str.substr(bucket + 1)); std::shared_ptr column_reader; RETURN_IF_ERROR(ColumnReader::create(opts, col, num_rows, file_reader, &column_reader)); - _doc_value_column_readers.emplace(bucket_value, std::move(column_reader)); + tmp_doc_value_readers[bucket_value] = std::move(column_reader); const auto& variant_stats = col.variant_statistics(); - std::set> paths; for (const auto& [subpath, size] : variant_stats.doc_value_column_non_null_size()) { - paths.insert(subpath); + aggregated_binary_column_stats[subpath] += size; } - _statistics->doc_value_column_paths[bucket_value] = std::move(paths); *handled = true; return Status::OK(); } @@ -1056,17 +909,27 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce } // finalize bucket readers if any - if (!tmp_bucket_readers.empty()) { - for (auto& kv : tmp_bucket_readers) { - _sparse_reader.add_bucket(kv.first, std::move(kv.second)); + if (!tmp_sparse_readers.empty()) { + _binary_column_reader = std::make_shared(); + for (auto& [index, reader] : tmp_sparse_readers) { + RETURN_IF_ERROR( + _binary_column_reader->add_binary_column_reader(std::move(reader), index)); } // set aggregated stats across buckets for existence/prefix checks - for (const auto& [path, size] : aggregated_bucket_stats) { + for (const auto& [path, size] : aggregated_binary_column_stats) { _statistics->sparse_column_non_null_size.emplace(path, size); } + } else if (!tmp_doc_value_readers.empty()) { + _binary_column_reader = std::make_shared(); + for (auto& [index, reader] : tmp_doc_value_readers) { + RETURN_IF_ERROR( + _binary_column_reader->add_binary_column_reader(std::move(reader), index)); + } + // set aggregated stats across buckets for existence/prefix checks + for (const auto& [path, size] : aggregated_binary_column_stats) { + _statistics->doc_column_non_null_size.emplace(path, size); + } } else if (self_column_pb.has_variant_statistics()) { - // single sparse column mode: use parent meta stats - _statistics = std::make_unique(); const auto& variant_stats = self_column_pb.variant_statistics(); for (const auto& [path, size] : variant_stats.sparse_column_non_null_size()) { _statistics->sparse_column_non_null_size.emplace(path, size); @@ -1323,21 +1186,6 @@ Status DefaultNestedColumnIterator::read_by_rowids(const rowid_t* rowids, const return Status::OK(); } -std::vector VariantColumnReader::_pick_doc_value_column_buckets( - const std::string& path) { - std::vector bucket_values; - for (const auto& [bucket_value, reader] : _doc_value_column_readers) { - const auto& doc_snapshot_stats = _statistics->doc_value_column_paths[bucket_value]; - const std::string& prefix = path + "."; - if (doc_snapshot_stats.find(path) != doc_snapshot_stats.end() || - (doc_snapshot_stats.lower_bound(prefix) != doc_snapshot_stats.end() && - doc_snapshot_stats.lower_bound(prefix)->starts_with(prefix))) { - bucket_values.push_back(bucket_value); - } - } - return bucket_values; -} - #include "common/compile_check_end.h" } // namespace doris::segment_v2 \ No newline at end of file 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 ce0b86b444d780..7cb150762e7ead 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 @@ -30,6 +30,7 @@ #include "olap/rowset/segment_v2/column_reader.h" #include "olap/rowset/segment_v2/indexed_column_reader.h" #include "olap/rowset/segment_v2/page_handle.h" +#include "olap/rowset/segment_v2/variant/binary_column_reader.h" #include "olap/rowset/segment_v2/variant/variant_external_meta_reader.h" #include "olap/rowset/segment_v2/variant/variant_statistics.h" #include "olap/tablet_schema.h" @@ -53,40 +54,6 @@ class InvertedIndexIterator; class InvertedIndexFileReader; class ColumnReaderCache; -// Abstracts access to variant sparse column readers that may be in a single -// column or bucketized across multiple columns. -class UnifiedSparseColumnReader { -public: - void set_single(std::shared_ptr reader) { _single = std::move(reader); } - - void add_bucket(size_t index, std::shared_ptr reader) { - if (_buckets.size() <= index) { - _buckets.resize(index + 1); - } - _buckets[index] = std::move(reader); - } - - bool has_buckets() const { return !_buckets.empty(); } - bool empty() const { return !has_buckets() && !_single; } - size_t num_buckets() const { return _buckets.size(); } - - // Build an iterator that reads all sparse data. In bucket mode, it returns - // a combined iterator across all buckets; otherwise returns an iterator of the single reader. - Status new_sparse_iterator(ColumnIteratorUPtr* iter) const; - - // Select a concrete reader and cache key for a given sparse subpath. - // In bucket mode this chooses a bucket using the same hashing as write path. - std::pair, std::string> select_reader_and_cache_key( - const std::string& relative_path) const; - - const std::shared_ptr& single() const { return _single; } - const std::vector>& buckets() const { return _buckets; } - -private: - std::shared_ptr _single; - std::vector> _buckets; // index aligned -}; - /** * BinaryColumnCache provides a caching layer for sparse column data access. * @@ -199,7 +166,7 @@ struct BinaryColumnCache { using BinaryColumnCacheSPtr = std::shared_ptr; // key is column path, value is the binary column cache -// column path: SPARSE_COLUMN_PATH, DOC_SNAPSHOT_COLUMN_PATH +// column path: SPARSE_COLUMN_PATH, DOC_VALUE_COLUMN_PATH using PathToBinaryColumnCache = std::unordered_map; using PathToBinaryColumnCacheUPtr = std::unique_ptr; @@ -296,16 +263,16 @@ class VariantColumnReader : public ColumnReader { // Describe how a variant sub-path should be read. This is a logical plan only and // does not create any concrete ColumnIterator. enum class ReadKind { - ROOT_FLAT, // root variant using `VariantRootColumnIterator` - HIERARCHICAL, // hierarchical merge (root + subcolumns + sparse) - LEAF, // direct leaf reader - SPARSE_EXTRACT, // extract single path from sparse column - SPARSE_MERGE, // merge subcolumns into sparse column - DEFAULT_NESTED, // fill nested subcolumn using sibling nested column - DEFAULT_FILL, // default iterator when path not exist - DOC_SNAPSHOT, // read from doc snapshot column when compaction read - DOC_SNAPSHOT_EXTRACT, // extract single path or hierarchical from doc snapshot column when read - DOC_SNAPSHOT_ALL, // read all paths from doc snapshot column when read + ROOT_FLAT, // root variant using `VariantRootColumnIterator` + HIERARCHICAL, // hierarchical merge (root + subcolumns + sparse) + LEAF, // direct leaf reader + SPARSE_EXTRACT, // extract single path from sparse column + SPARSE_MERGE, // merge subcolumns into sparse column + DEFAULT_NESTED, // fill nested subcolumn using sibling nested column + DEFAULT_FILL, // default iterator when path not exist + DOC_COMPACT, // read from doc value column when compaction read + DOC_EXTRACT, // extract single path from doc value column when read + DOC_ALL, // read all paths from doc value column when read }; struct ReadPlan { @@ -319,14 +286,11 @@ class VariantColumnReader : public ColumnReader { // readers for LEAF / sparse cases std::shared_ptr leaf_column_reader; - std::shared_ptr sparse_column_reader; + std::shared_ptr binary_column_reader; // sparse extras - std::string sparse_cache_key; + std::string binary_cache_key; std::optional bucket_index; - - // read from doc snapshot column - std::vector doc_snapshot_buckets; }; // Build read plan for flat-leaf (compaction/checksum) mode. Only decides the @@ -369,14 +333,12 @@ class VariantColumnReader : public ColumnReader { PathToBinaryColumnCache* binary_column_cache_ptr, const std::string& path, std::shared_ptr binary_column_reader); - std::vector _pick_doc_value_column_buckets(const std::string& path); - // Protect `_subcolumns_meta_info` and `_statistics` when loading external meta. // english only in comments mutable std::shared_mutex _subcolumns_meta_mutex; std::unique_ptr _subcolumns_meta_info; // Sparse column readers (single or bucketized) - UnifiedSparseColumnReader _sparse_reader; + std::shared_ptr _binary_column_reader; std::shared_ptr _root_column_reader; std::unique_ptr _statistics; std::shared_ptr _tablet_schema; @@ -391,8 +353,6 @@ class VariantColumnReader : public ColumnReader { uint64_t _num_rows {0}; uint32_t _root_unique_id {0}; - std::unordered_map> _doc_value_column_readers; - // call-once guard moved into VariantExternalMetaReader }; 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 05f7c8485f2baa..21de9ece055b57 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 @@ -32,6 +32,7 @@ #include "olap/rowset/rowset_writer_context.h" #include "olap/rowset/segment_v2/column_writer.h" #include "olap/rowset/segment_v2/indexed_column_writer.h" +#include "olap/rowset/segment_v2/variant/variant_util.h" #include "olap/segment_loader.h" #include "olap/tablet_schema.h" #include "olap/types.h" @@ -402,8 +403,8 @@ Status VariantDocSnapShotWriter::init(const TabletColumn* parent_column, int buc _doc_value_column_opts[b].meta = footer->add_columns(); _init_column_meta(_doc_value_column_opts[b].meta, column_id, bucket_column, opts.compression_type); - RETURN_IF_ERROR(ColumnWriter::create_map_writer(_doc_value_column_opts[b], - &bucket_column, opts.file_writer, + RETURN_IF_ERROR(ColumnWriter::create_map_writer(_doc_value_column_opts[b], &bucket_column, + opts.file_writer, &_doc_value_column_writers[b])); RETURN_IF_ERROR(_doc_value_column_writers[b]->init()); ++column_id; @@ -453,12 +454,11 @@ Status VariantDocSnapShotWriter::append_data(const TabletColumn* parent_column, auto [status, column] = converter->convert_column_data(this_col_id); RETURN_IF_ERROR(status); RETURN_IF_ERROR(_doc_value_column_writers[b]->append(column->get_nullmap(), - column->get_data(), num_rows)); + column->get_data(), num_rows)); converter->clear_source_content(this_col_id); _doc_value_column_opts[b].meta->set_num_rows(num_rows); auto* stats = _doc_value_column_opts[b].meta->mutable_variant_statistics(); - auto* doc_value_column_non_null_size = - stats->mutable_doc_value_column_non_null_size(); + auto* doc_value_column_non_null_size = stats->mutable_doc_value_column_non_null_size(); for (const auto& [k, cnt] : bucket_path_counts[b]) { (*doc_value_column_non_null_size)[k.to_string()] = cnt; } @@ -655,27 +655,22 @@ Status VariantColumnWriterImpl::_process_subcolumns(vectorized::ColumnVariant* p return Status::OK(); } -Status VariantColumnWriterImpl::_process_sparse_column( +Status VariantColumnWriterImpl::_process_binary_column( vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id) { - int bucket_num = std::max(1, _tablet_column->variant_sparse_hash_shard_count()); - RETURN_IF_ERROR( - _sparse_writer.init(_tablet_column, bucket_num, column_id, _opts, _opts.footer)); - RETURN_IF_ERROR(_sparse_writer.append_data(_tablet_column, *ptr, num_rows, converter)); - return Status::OK(); -} - -Status VariantColumnWriterImpl::_process_doc_value_column( - vectorized::ColumnVariant* ptr, vectorized::OlapBlockDataConvertor* converter, - size_t num_rows, int& column_id) { - if (!_tablet_column->variant_enable_doc_mode()) { - return Status::OK(); + int bucket_num = 1; + if (_tablet_column->variant_enable_doc_mode()) { + _binary_writer = std::make_unique(); + bucket_num = std::max(1, _tablet_column->variant_doc_hash_shard_count()); + ptr->sort_doc_value_column(); + } else { + _binary_writer = std::make_unique(); + bucket_num = std::max(1, _tablet_column->variant_sparse_hash_shard_count()); } - ptr->reconstruct_and_sort_doc_value_column(); - const int bucket_num = std::max(1, _tablet_column->variant_doc_snapshot_shard_count()); + RETURN_IF_ERROR( - _doc_snapshot_writer.init(_tablet_column, bucket_num, column_id, _opts, _opts.footer)); - RETURN_IF_ERROR(_doc_snapshot_writer.append_data(_tablet_column, *ptr, num_rows, converter)); + _binary_writer->init(_tablet_column, bucket_num, column_id, _opts, _opts.footer)); + RETURN_IF_ERROR(_binary_writer->append_data(_tablet_column, *ptr, num_rows, converter)); return Status::OK(); } @@ -732,10 +727,7 @@ Status VariantColumnWriterImpl::finalize() { // process sparse column and append to sparse writer buffer RETURN_IF_ERROR( - _process_sparse_column(ptr, olap_data_convertor.get(), num_rows, column_id)); - - RETURN_IF_ERROR( - _process_doc_value_column(ptr, olap_data_convertor.get(), num_rows, column_id)); + _process_binary_column(ptr, olap_data_convertor.get(), num_rows, column_id)); } _is_finalized = true; @@ -766,8 +758,9 @@ uint64_t VariantColumnWriterImpl::estimate_buffer_size() { for (auto& column_writer : _subcolumn_writers) { size += column_writer->estimate_buffer_size(); } - size += _sparse_writer.estimate_buffer_size(); - size += _doc_snapshot_writer.estimate_buffer_size(); + if (_binary_writer) { + size += _binary_writer->estimate_buffer_size(); + } return size; } @@ -779,8 +772,9 @@ Status VariantColumnWriterImpl::finish() { for (auto& column_writer : _subcolumn_writers) { RETURN_IF_ERROR(column_writer->finish()); } - RETURN_IF_ERROR(_sparse_writer.finish()); - RETURN_IF_ERROR(_doc_snapshot_writer.finish()); + if (_binary_writer) { + RETURN_IF_ERROR(_binary_writer->finish()); + } return Status::OK(); } Status VariantColumnWriterImpl::write_data() { @@ -791,8 +785,9 @@ Status VariantColumnWriterImpl::write_data() { for (auto& column_writer : _subcolumn_writers) { RETURN_IF_ERROR(column_writer->write_data()); } - RETURN_IF_ERROR(_sparse_writer.write_data()); - RETURN_IF_ERROR(_doc_snapshot_writer.write_data()); + if (_binary_writer) { + RETURN_IF_ERROR(_binary_writer->write_data()); + } return Status::OK(); } Status VariantColumnWriterImpl::write_ordinal_index() { @@ -802,8 +797,9 @@ Status VariantColumnWriterImpl::write_ordinal_index() { for (auto& column_writer : _subcolumn_writers) { RETURN_IF_ERROR(column_writer->write_ordinal_index()); } - RETURN_IF_ERROR(_sparse_writer.write_ordinal_index()); - RETURN_IF_ERROR(_doc_snapshot_writer.write_ordinal_index()); + if (_binary_writer) { + RETURN_IF_ERROR(_binary_writer->write_ordinal_index()); + } return Status::OK(); } @@ -1067,39 +1063,11 @@ Status VariantCompactionDocSnapshotWriter::finalize() { size_t num_rows = variant_column->size(); auto converter = std::make_unique(); int column_id = 0; - int64_t variant_doc_snapshot_min_rows = parent_column.variant_doc_snapshot_min_rows(); - if (variant_doc_snapshot_min_rows == 0 || - num_rows >= static_cast(variant_doc_snapshot_min_rows)) { - std::unordered_map subcolumns; - - auto [column_key, column_value] = variant_column->get_doc_snapshot_data_paths_and_values(); - const auto& column_offsets = variant_column->serialized_doc_value_column_offsets(); - - for (int64_t i = 0; i < num_rows; ++i) { - size_t start = column_offsets[i - 1]; - size_t end = column_offsets[i]; - for (size_t j = start; j < end; ++j) { - const auto& key = column_key->get_data_at(j); - if (auto it = subcolumns.find(std::string_view(key.data, key.size)); - it != subcolumns.end()) { - if (it->second.size() != i) { - it->second.insert_many_defaults(i - it->second.size()); - } - it->second.deserialize_from_binary_column(column_value, j); - } else { - vectorized::ColumnVariant::Subcolumn subcolumn {0, true, false}; - subcolumn.insert_many_defaults(i); - subcolumn.deserialize_from_binary_column(column_value, j); - subcolumns[std::string_view(key.data, key.size)] = std::move(subcolumn); - } - } - } - - for (auto& [path, subcolumn] : subcolumns) { - if (subcolumn.size() != num_rows) { - subcolumn.insert_many_defaults(num_rows - subcolumn.size()); - } - } + int64_t variant_doc_materialization_min_rows = + parent_column.variant_doc_materialization_min_rows(); + if (num_rows >= static_cast(variant_doc_materialization_min_rows)) { + auto subcolumns = + doris::segment_v2::variant_util::parse_doc_snapshot_to_subcolumns(*variant_column); auto generate_column_info = [&](std::string_view path, const vectorized::ColumnVariant::Subcolumn& subcolumn) { @@ -1129,11 +1097,20 @@ Status VariantCompactionDocSnapshotWriter::finalize() { subcolumn.finalize(); TabletColumn tablet_column; TabletSchema::SubColumnInfo sub_column_info; + vectorized::ColumnPtr current_column = subcolumn.get_finalized_column_ptr()->get_ptr(); + vectorized::DataTypePtr current_type = subcolumn.get_least_common_type(); if (vectorized::schema_util::generate_sub_column_info( *_opts.rowset_ctx->tablet_schema, parent_column.unique_id(), std::string(path), &sub_column_info)) { tablet_column = std::move(sub_column_info.column); _subcolumns_indexes[column_id] = std::move(sub_column_info.indexes); + vectorized::DataTypePtr storage_type = + vectorized::DataTypeFactory::instance().create_data_type(tablet_column); + if (!storage_type->equals(*current_type)) { + RETURN_IF_ERROR(vectorized::schema_util::cast_column( + {current_column, current_type, ""}, storage_type, ¤t_column)); + } + current_type = std::move(storage_type); } else { tablet_column = generate_column_info(path, subcolumn); const auto& indexes = @@ -1144,8 +1121,6 @@ Status VariantCompactionDocSnapshotWriter::finalize() { int current_column_id = column_id++; int64_t none_null_value_size = subcolumn.get_non_null_value_size(); - vectorized::ColumnPtr current_column = subcolumn.get_finalized_column_ptr()->get_ptr(); - vectorized::DataTypePtr current_type = subcolumn.get_least_common_type(); ColumnWriterOptions opts; opts.meta = _opts.footer->add_columns(); @@ -1173,7 +1148,7 @@ Status VariantCompactionDocSnapshotWriter::finalize() { } std::string doc_value_column_path = _tablet_column->path_info_ptr()->get_path(); - size_t pos = doc_value_column_path.rfind("."); + size_t pos = doc_value_column_path.rfind("b"); int bucket_value = std::stoi(doc_value_column_path.substr(pos + 1)); TabletColumn doc_value_column = vectorized::schema_util::create_doc_value_column(parent_column, bucket_value); @@ -1190,8 +1165,8 @@ Status VariantCompactionDocSnapshotWriter::finalize() { {variant_column->get_doc_value_column(), nullptr, ""}, 0, num_rows, column_id)); auto [status, column] = converter->convert_column_data(column_id); RETURN_IF_ERROR(status); - RETURN_IF_ERROR(_doc_value_column_writer->append(column->get_nullmap(), column->get_data(), - num_rows)); + RETURN_IF_ERROR( + _doc_value_column_writer->append(column->get_nullmap(), column->get_data(), num_rows)); converter->clear_source_content(column_id); _opts.meta->set_num_rows(num_rows); diff --git a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h index 400887f1207312..1fd632caae51e0 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.h @@ -162,8 +162,12 @@ class VariantColumnWriterImpl { vectorized::OlapBlockDataConvertor* converter, size_t num_rows, int& column_id); Status _process_doc_value_column(vectorized::ColumnVariant* ptr, - vectorized::OlapBlockDataConvertor* converter, - size_t num_rows, int& column_id); + vectorized::OlapBlockDataConvertor* converter, size_t num_rows, + int& column_id); + + Status _process_binary_column(vectorized::ColumnVariant* ptr, + vectorized::OlapBlockDataConvertor* converter, size_t num_rows, + int& column_id); // prepare a column for finalize doris::vectorized::ColumnVariant::MutablePtr _column; doris::vectorized::ColumnUInt8::MutablePtr _null_column; @@ -172,12 +176,9 @@ class VariantColumnWriterImpl { bool _is_finalized = false; // for root column std::unique_ptr _root_writer; - // unified sparse writers (single or bucket mode) - UnifiedSparseColumnWriter _sparse_writer; std::vector> _subcolumn_writers; std::vector _subcolumn_opts; - VariantDocSnapShotWriter _doc_snapshot_writer; - + std::unique_ptr _binary_writer; // hold the references of subcolumns indexes std::vector _subcolumns_indexes; diff --git a/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h b/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h index c17c1d2ea25ee3..06f25f015ff936 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h @@ -21,9 +21,9 @@ namespace doris::segment_v2 { #include "olap/rowset/segment_v2/column_reader.h" #include "vec/columns/column_variant.h" -class VariantDocSnapshotCompactIterator : public ColumnIterator { +class VariantDocValueCompactIterator : public ColumnIterator { public: - VariantDocSnapshotCompactIterator(ColumnIteratorUPtr&& column_iterator) + VariantDocValueCompactIterator(ColumnIteratorUPtr&& column_iterator) : _doc_snapshot_iterator(std::move(column_iterator)) {} Status init(const ColumnIteratorOptions& opts) override { diff --git a/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp b/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp index a3eeda43759366..c4dad5235d76ce 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp +++ b/be/src/olap/rowset/segment_v2/variant/variant_ext_meta_writer.cpp @@ -107,7 +107,7 @@ static void classify_columns(const SegmentFooterPB& footer, ColumnClassification if (rel_path.find("__DORIS_VARIANT_SPARSE__") != std::string::npos) { classification.pending_sparse[root_uid].emplace_back(col); - } else if (rel_path.find("__DORIS_VARIANT_DOC_SNAPSHOT__") != std::string::npos) { + } else if (rel_path.find("__DORIS_VARIANT_DOC_VALUE__") != std::string::npos) { classification.pending_doc_snapshot[root_uid].emplace_back(col); } else { classification.pending_subcols[root_uid].emplace_back(rel_path, col); diff --git a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h index b1261ecb61a2d2..9296b49d1558ed 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h @@ -33,7 +33,7 @@ struct VariantStatistics { std::map sparse_column_non_null_size; // doc snapshot column non-null size for each bucket - std::unordered_map>> doc_value_column_paths; + std::map doc_column_non_null_size; void to_pb(VariantStatisticsPB* stats) const { auto* sparse_map = stats->mutable_sparse_column_non_null_size(); @@ -41,6 +41,37 @@ struct VariantStatistics { (*sparse_map)[path] = value; } } + + bool has_doc_column_non_null_size() const { return !doc_column_non_null_size.empty(); } + + bool has_sparse_column_non_null_size() const { return !sparse_column_non_null_size.empty(); } + + bool existed_in_sparse_column(const std::string& relative_path) const { + return sparse_column_non_null_size.contains(relative_path); + } + + bool existed_in_doc_column(const std::string& relative_path) const { + if (doc_column_non_null_size.contains(relative_path)) { + auto size = doc_column_non_null_size.at(relative_path); + LOG(INFO) << "existed in doc column, relative_path is:" << relative_path + << " size is:" << size; + return true; + } + return false; + } + + bool has_prefix_path(const std::string& dot_prefix) const { + auto find_sparse = sparse_column_non_null_size.lower_bound(dot_prefix); + if (find_sparse != sparse_column_non_null_size.end() && + find_sparse->first.starts_with(dot_prefix)) { + return true; + } + auto find_doc = doc_column_non_null_size.lower_bound(dot_prefix); + if (find_doc != doc_column_non_null_size.end() && find_doc->first.starts_with(dot_prefix)) { + return true; + } + return false; + } }; #include "common/compile_check_end.h" diff --git a/be/src/olap/rowset/segment_v2/variant/variant_util.cpp b/be/src/olap/rowset/segment_v2/variant/variant_util.cpp index 2bc6dab793aa38..a19eaeaa242611 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_util.cpp +++ b/be/src/olap/rowset/segment_v2/variant/variant_util.cpp @@ -38,6 +38,47 @@ namespace doris::segment_v2::variant_util { +std::unordered_map +parse_doc_snapshot_to_subcolumns(const vectorized::ColumnVariant& variant) { + std::unordered_map subcolumns; + + const auto [column_key, column_value] = variant.get_doc_snapshot_data_paths_and_values(); + const auto& column_offsets = variant.serialized_doc_value_column_offsets(); + const size_t num_rows = column_offsets.size(); + + DCHECK_EQ(num_rows, variant.size()) << "doc snapshot offsets size mismatch with variant rows"; + + // Best-effort reserve: at most number of kv pairs. + subcolumns.reserve(column_key->size()); + + for (size_t row = 0; row < num_rows; ++row) { + const size_t start = (row == 0) ? 0 : column_offsets[row - 1]; + const size_t end = column_offsets[row]; + for (size_t i = start; i < end; ++i) { + const auto& key = column_key->get_data_at(i); + const std::string_view path_sv(key.data, key.size); + + auto [it, inserted] = subcolumns.try_emplace( + path_sv, vectorized::ColumnVariant::Subcolumn {0, true, false}); + auto& subcolumn = it->second; + if (inserted) { + subcolumn.insert_many_defaults(row); + } else if (subcolumn.size() != row) { + subcolumn.insert_many_defaults(row - subcolumn.size()); + } + subcolumn.deserialize_from_binary_column(column_value, i); + } + } + + for (auto& [path, subcolumn] : subcolumns) { + if (subcolumn.size() != num_rows) { + subcolumn.insert_many_defaults(num_rows - subcolumn.size()); + } + } + + return subcolumns; +} + namespace { Status _parse_variant_columns(vectorized::Block& block, const std::vector& variant_pos, @@ -56,7 +97,7 @@ Status _parse_variant_columns(vectorized::Block& block, const std::vector 0) { - configs[i].parse_to_subcolumns = false; - } else { - configs[i].parse_to_subcolumns = true; - } - } else { - // default: only parse to subcolumns - configs[i].parse_to_subcolumns = true; - configs[i].parse_to_doc_snapshot = false; - } - } else { + if (!column.is_variant_type()) { return Status::InternalError("column is not variant type, column name: {}", column.name()); } + // if doc mode is not enabled, no need to parse to doc value column + if (!column.variant_enable_doc_mode()) { + configs[i].parse_to = vectorized::ParseConfig::ParseTo::OnlySubcolumns; + continue; + } + + auto column_size = block.get_by_position(variant_column_pos[i]).column->size(); + + // if column size is greater than min rows, parse to both subcolumns and doc value column + if (column_size > column.variant_doc_materialization_min_rows()) { + configs[i].parse_to = vectorized::ParseConfig::ParseTo::BothSubcolumnsAndDocValueColumn; + } + + // if column size is less than min rows, parse to only doc value column + else { + configs[i].parse_to = vectorized::ParseConfig::ParseTo::OnlyDocValueColumn; + } } RETURN_IF_ERROR(doris::segment_v2::variant_util::parse_variant_columns( diff --git a/be/src/olap/rowset/segment_v2/variant/variant_util.h b/be/src/olap/rowset/segment_v2/variant/variant_util.h index 837a1525878580..3b9c14f70de9d5 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_util.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_util.h @@ -17,9 +17,13 @@ #pragma once +#include +#include +#include #include #include "common/status.h" +#include "vec/columns/column_variant.h" #include "vec/json/json_parser.h" namespace doris { @@ -40,4 +44,10 @@ Status parse_variant_columns(vectorized::Block& block, const TabletSchema& table Status parse_variant_columns(vectorized::Block& block, const std::vector& variant_pos, const std::vector& configs); +// Parse doc snapshot column (paths/values/offsets stored in ColumnVariant) into per-path subcolumns. +// NOTE: Returned map keys are `std::string_view` pointing into the underlying doc snapshot paths +// column, so the input `variant` must outlive the returned map. +std::unordered_map +parse_doc_snapshot_to_subcolumns(const vectorized::ColumnVariant& variant); + } // namespace doris::segment_v2::variant_util \ No newline at end of file diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index c08567087966c6..f9970196851255 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -543,13 +543,14 @@ void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& tco column->set_variant_sparse_hash_shard_count(tcolumn.variant_sparse_hash_shard_count); } if (tcolumn.__isset.variant_enable_doc_mode) { - column->set_variant_enable_doc_snapshot_mode(tcolumn.variant_enable_doc_mode); + column->set_variant_enable_doc_mode(tcolumn.variant_enable_doc_mode); } - if (tcolumn.__isset.variant_doc_snapshot_min_rows) { - column->set_variant_doc_snapshot_min_rows(tcolumn.variant_doc_snapshot_min_rows); + if (tcolumn.__isset.variant_doc_materialization_min_rows) { + column->set_variant_doc_materialization_min_rows( + tcolumn.variant_doc_materialization_min_rows); } - if (tcolumn.__isset.variant_doc_snapshot_shard_count) { - column->set_variant_doc_snapshot_shard_count(tcolumn.variant_doc_snapshot_shard_count); + if (tcolumn.__isset.variant_doc_hash_shard_count) { + column->set_variant_doc_hash_shard_count(tcolumn.variant_doc_hash_shard_count); } } diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp index 91d777207cc58b..5e330f1962e5df 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -668,14 +668,14 @@ void TabletColumn::init_from_pb(const ColumnPB& column) { if (column.has_variant_sparse_hash_shard_count()) { _variant_sparse_hash_shard_count = column.variant_sparse_hash_shard_count(); } - if (column.has_variant_enable_doc_snapshot_mode()) { - _variant_enable_doc_snapshot_mode = column.variant_enable_doc_mode(); + if (column.has_variant_enable_doc_mode()) { + _variant_enable_doc_mode = column.variant_enable_doc_mode(); } - if (column.has_variant_doc_snapshot_min_rows()) { - _variant_doc_snapshot_min_rows = column.variant_doc_snapshot_min_rows(); + if (column.has_variant_doc_materialization_min_rows()) { + _variant_doc_materialization_min_rows = column.variant_doc_materialization_min_rows(); } - if (column.has_variant_doc_snapshot_shard_count()) { - _variant_doc_snapshot_shard_count = column.variant_doc_snapshot_shard_count(); + if (column.has_variant_doc_hash_shard_count()) { + _variant_doc_hash_shard_count = column.variant_doc_hash_shard_count(); } if (column.has_pattern_type()) { _pattern_type = column.pattern_type(); @@ -760,9 +760,9 @@ void TabletColumn::to_schema_pb(ColumnPB* column) const { column->set_variant_max_sparse_column_statistics_size( _variant_max_sparse_column_statistics_size); column->set_variant_sparse_hash_shard_count(_variant_sparse_hash_shard_count); - column->set_variant_enable_doc_snapshot_mode(_variant_enable_doc_snapshot_mode); - column->set_variant_doc_snapshot_min_rows(_variant_doc_snapshot_min_rows); - column->set_variant_doc_snapshot_shard_count(_variant_doc_snapshot_shard_count); + column->set_variant_enable_doc_mode(_variant_enable_doc_mode); + column->set_variant_doc_materialization_min_rows(_variant_doc_materialization_min_rows); + column->set_variant_doc_hash_shard_count(_variant_doc_hash_shard_count); } 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 6d7c487a3de4a0..b5d15c262f99ea 100644 --- a/be/src/olap/tablet_schema.h +++ b/be/src/olap/tablet_schema.h @@ -231,18 +231,20 @@ class TabletColumn : public MetadataAdder { int32_t variant_sparse_hash_shard_count() const { return _variant_sparse_hash_shard_count; } - bool variant_enable_doc_mode() const { return _variant_enable_doc_snapshot_mode; } + bool variant_enable_doc_mode() const { return _variant_enable_doc_mode; } - int64_t variant_doc_snapshot_min_rows() const { return _variant_doc_snapshot_min_rows; } + int64_t variant_doc_materialization_min_rows() const { + return _variant_doc_materialization_min_rows; + } - int32_t variant_doc_snapshot_shard_count() const { return _variant_doc_snapshot_shard_count; } + int32_t variant_doc_hash_shard_count() const { return _variant_doc_hash_shard_count; } - void set_variant_doc_snapshot_min_rows(int64_t variant_doc_snapshot_min_rows) { - _variant_doc_snapshot_min_rows = variant_doc_snapshot_min_rows; + void set_variant_doc_materialization_min_rows(int64_t variant_doc_materialization_min_rows) { + _variant_doc_materialization_min_rows = variant_doc_materialization_min_rows; } - void set_variant_doc_snapshot_shard_count(int32_t variant_doc_snapshot_shard_count) { - _variant_doc_snapshot_shard_count = variant_doc_snapshot_shard_count; + void set_variant_doc_hash_shard_count(int32_t variant_doc_hash_shard_count) { + _variant_doc_hash_shard_count = variant_doc_hash_shard_count; } void set_variant_max_sparse_column_statistics_size( @@ -254,8 +256,8 @@ class TabletColumn : public MetadataAdder { _variant_sparse_hash_shard_count = variant_sparse_hash_shard_count; } - void set_variant_enable_doc_snapshot_mode(bool variant_enable_doc_mode) { - _variant_enable_doc_snapshot_mode = variant_enable_doc_mode; + void set_variant_enable_doc_mode(bool variant_enable_doc_mode) { + _variant_enable_doc_mode = variant_enable_doc_mode; } void set_variant_enable_typed_paths_to_sparse(bool variant_enable_typed_paths_to_sparse) { @@ -313,11 +315,11 @@ class TabletColumn : public MetadataAdder { // default to 0, no shard int32_t _variant_sparse_hash_shard_count = 0; - bool _variant_enable_doc_snapshot_mode = false; + bool _variant_enable_doc_mode = false; - int64_t _variant_doc_snapshot_min_rows = 0; + int64_t _variant_doc_materialization_min_rows = 0; - int32_t _variant_doc_snapshot_shard_count = 128; + int32_t _variant_doc_hash_shard_count = 128; }; bool operator==(const TabletColumn& a, const TabletColumn& b); diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp index 68d7ab13e43e65..739a4862477a94 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -660,6 +660,12 @@ void ColumnVariant::check_consistency() const { "unmatched doc snapshot column:, expeted rows: {}, but meet: {}", num_rows, serialized_doc_value_column->size()); } + // const auto& offsets = serialized_doc_value_column_offsets(); + // size_t off = offsets[num_rows - 1]; + // if (off > 0 && subcolumns.size() != 1) { + // throw doris::Exception(doris::ErrorCode::INTERNAL_ERROR, + // "doc snapshot column offsets is not empty, but subcolumns size is not 1"); + // } } size_t ColumnVariant::size() const { @@ -727,7 +733,7 @@ void ColumnVariant::try_insert(const Field& field) { size_t old_size = size(); const auto& object = field.get(); for (const auto& [key, value] : object) { - if (key.get_path() == "__DORIS_VARIANT_DOC_SNAPSHOT__") { + if (key.get_path() == "__DORIS_VARIANT_DOC_VALUE__") { insert_to_doc_value_column(value.field); continue; } @@ -951,11 +957,11 @@ void ColumnVariant::try_get_from_doc_value_column(size_t n, Field& res) const { if (!has_doc_value_column(n)) { return; } + CHECK(subcolumns.size() == 1) << "subcolumns size should be 1"; FieldWithDataType field_with_data_type; serialized_doc_value_column->get(n, field_with_data_type.field); auto& object = res.get(); - object.try_emplace(PathInData("__DORIS_VARIANT_DOC_SNAPSHOT__"), - std::move(field_with_data_type)); + object.try_emplace(PathInData("__DORIS_VARIANT_DOC_VALUE__"), std::move(field_with_data_type)); } void ColumnVariant::insert_to_doc_value_column(const Field& field) { @@ -1077,8 +1083,8 @@ void ColumnVariant::insert_range_from(const IColumn& src, size_t start, size_t l insert_from_sparse_column_and_fill_remaing_dense_column( src_object, std::move(sorted_src_subcolumn_for_sparse_column), start, length); - serialized_doc_value_column->insert_range_from(*src_object.serialized_doc_value_column, - start, length); + serialized_doc_value_column->insert_range_from(*src_object.serialized_doc_value_column, start, + length); num_rows += length; // finalize(); ENABLE_CHECK_CONSISTENCY(this); @@ -1568,11 +1574,9 @@ bool ColumnVariant::is_visible_root_value(size_t nrow) const { } } - const auto& doc_value_column_map = - assert_cast(*serialized_doc_value_column); + const auto& doc_value_column_map = assert_cast(*serialized_doc_value_column); // doc snapshot column is not empty - if (doc_value_column_map.get_offsets()[nrow - 1] != - doc_value_column_map.get_offsets()[nrow]) { + if (doc_value_column_map.get_offsets()[nrow - 1] != doc_value_column_map.get_offsets()[nrow]) { return false; } return !root->data.is_null_at(nrow); @@ -1650,8 +1654,7 @@ void ColumnVariant::serialize_one_row_to_json_format( subcolumns.get_root()->data.serialize_text_json(row_num, output, options); return; } - const auto& doc_value_column_map = - assert_cast(*serialized_doc_value_column); + const auto& doc_value_column_map = assert_cast(*serialized_doc_value_column); // if doc snapshot column is not empty, we should serialize from doc snapshot column first if (doc_value_column_map.get_offsets()[row_num] != 0) { serialize_from_doc_snapshot_to_json_format(row_num, output, is_null); @@ -2070,8 +2073,7 @@ ColumnPtr ColumnVariant::filter(const Filter& filter, ssize_t count) const { entry->data.get_least_common_type()); } new_column->serialized_sparse_column = serialized_sparse_column->filter(filter, count); - new_column->serialized_doc_value_column = - serialized_doc_value_column->filter(filter, count); + new_column->serialized_doc_value_column = serialized_doc_value_column->filter(filter, count); ENABLE_CHECK_CONSISTENCY(new_column.get()); return new_column; } @@ -2572,7 +2574,7 @@ MutableColumnPtr ColumnVariant::clone() const { return res; } -void ColumnVariant::reconstruct_and_sort_doc_value_column() { +void ColumnVariant::sort_doc_value_column() { const auto& offset = serialized_doc_value_column_offsets(); auto sort_map_by_row_paths = [&](const ColumnString& in_paths, const ColumnString& in_values, @@ -2602,47 +2604,8 @@ void ColumnVariant::reconstruct_and_sort_doc_value_column() { return sorted; }; - // doc snapshot column has been constructed in parse2column - // sort the column by row paths. - if (offset[num_rows - 1] != 0) { - auto [path, value] = get_doc_snapshot_data_paths_and_values(); - serialized_doc_value_column = sort_map_by_row_paths(*path, *value, offset); - return; - } - CHECK(is_finalized()); - - auto doc_value_column = create_binary_column_fn(); - - auto& doc_value_column_map = assert_cast(*doc_value_column); - auto& doc_snapshot_data_paths = assert_cast(doc_value_column_map.get_keys()); - auto& doc_snapshot_data_values = - assert_cast(doc_value_column_map.get_values()); - auto& doc_snapshot_data_offsets = doc_value_column_map.get_offsets(); - - for (int64_t i = 0; i < num_rows; ++i) { - for (const auto& entry : subcolumns) { - if (entry->data.is_root) { - continue; - } - const auto& column = entry->data.data.back(); - const auto& nullable_col = - assert_cast(*column); - if (!nullable_col.is_null_at(i)) { - const auto& path = entry->path.get_path(); - doc_snapshot_data_paths.insert_data(path.data(), path.size()); - auto nullable_serde = std::static_pointer_cast( - entry->data.data_serdes.back()); - ColumnString::Chars& chars = doc_snapshot_data_values.get_chars(); - nullable_serde->get_nested_serde()->write_one_cell_to_binary( - nullable_col.get_nested_column(), chars, i); - doc_snapshot_data_values.get_offsets().push_back(chars.size()); - } - } - doc_snapshot_data_offsets.push_back(doc_snapshot_data_paths.size()); - } - - serialized_doc_value_column = sort_map_by_row_paths( - doc_snapshot_data_paths, doc_snapshot_data_values, doc_snapshot_data_offsets); + auto [path, value] = get_doc_snapshot_data_paths_and_values(); + serialized_doc_value_column = sort_map_by_row_paths(*path, *value, offset); } bool ColumnVariant::is_doc_snapshot_mode() const { diff --git a/be/src/vec/columns/column_variant.h b/be/src/vec/columns/column_variant.h index dc6dc75576df17..29101d420ed425 100644 --- a/be/src/vec/columns/column_variant.h +++ b/be/src/vec/columns/column_variant.h @@ -634,7 +634,7 @@ class ColumnVariant final : public COWHelper { return _max_subcolumns_count - current_subcolumns_count; } - void reconstruct_and_sort_doc_value_column(); + void sort_doc_value_column(); // doc snapshot mode: only root column, and doc snapshot column is not empty bool is_doc_snapshot_mode() const; diff --git a/be/src/vec/common/schema_util.cpp b/be/src/vec/common/schema_util.cpp index 0dd597eb229024..2796061444091f 100644 --- a/be/src/vec/common/schema_util.cpp +++ b/be/src/vec/common/schema_util.cpp @@ -601,7 +601,7 @@ TabletColumn create_sparse_shard_column(const TabletColumn& variant, int bucket_ TabletColumn create_doc_value_column(const TabletColumn& variant, int bucket_index) { TabletColumn res; - std::string name = variant.name_lower_case() + "." + DOC_SNAPSHOT_COLUMN_PATH + "." + + std::string name = variant.name_lower_case() + "." + DOC_VALUE_COLUMN_PATH + ".b" + std::to_string(bucket_index); res.set_name(name); res.set_type(FieldType::OLAP_FIELD_TYPE_MAP); @@ -1028,7 +1028,7 @@ Status VariantCompactionUtil::get_extended_compaction_schema( VLOG_DEBUG << "column " << column->name() << " unique id " << column->unique_id(); if (column->variant_enable_doc_mode()) { - const int bucket_num = std::max(1, column->variant_doc_snapshot_shard_count()); + const int bucket_num = std::max(1, column->variant_doc_hash_shard_count()); for (int b = 0; b < bucket_num; ++b) { TabletColumn doc_snapshot_bucket_column = create_doc_value_column(*column, b); doc_snapshot_bucket_column.set_type(FieldType::OLAP_FIELD_TYPE_VARIANT); diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h index 4f14371227536a..f66a93d5bd8ca7 100644 --- a/be/src/vec/common/schema_util.h +++ b/be/src/vec/common/schema_util.h @@ -51,7 +51,7 @@ struct ColumnWithTypeAndName; } // namespace doris const std::string SPARSE_COLUMN_PATH = "__DORIS_VARIANT_SPARSE__"; -const std::string DOC_SNAPSHOT_COLUMN_PATH = "__DORIS_VARIANT_DOC_SNAPSHOT__"; +const std::string DOC_VALUE_COLUMN_PATH = "__DORIS_VARIANT_DOC_VALUE__"; namespace doris::vectorized::schema_util { using PathToNoneNullValues = std::unordered_map; using PathToDataTypes = std::unordered_map, PathInData::Hash>; diff --git a/be/src/vec/data_types/data_type_variant.cpp b/be/src/vec/data_types/data_type_variant.cpp index 55b9ebf9ed67c5..eb081e7bbaf765 100644 --- a/be/src/vec/data_types/data_type_variant.cpp +++ b/be/src/vec/data_types/data_type_variant.cpp @@ -158,8 +158,8 @@ char* DataTypeVariant::serialize(const IColumn& column, char* buf, int be_exec_v // TODO make compability with sparse column buf = ColumnVariant::get_binary_column_type()->serialize(*column_variant.get_sparse_column(), buf, be_exec_version); - buf = ColumnVariant::get_binary_column_type()->serialize( - *column_variant.get_doc_value_column(), buf, be_exec_version); + buf = ColumnVariant::get_binary_column_type()->serialize(*column_variant.get_doc_value_column(), + buf, be_exec_version); return buf; } diff --git a/be/src/vec/json/json_parser.h b/be/src/vec/json/json_parser.h index 5722312199587e..2050c630ca70f6 100644 --- a/be/src/vec/json/json_parser.h +++ b/be/src/vec/json/json_parser.h @@ -124,12 +124,12 @@ enum class ExtractType { struct ParseConfig { bool enable_flatten_nested = false; - // parse variant column to subcolumns or doc snapshot - // if parse_to_subcolumns is true, the variant column will be parsed to subcolumns - // if parse_to_doc_snapshot is true, the variant column will be parsed to doc snapshot - // if both are true, the variant column will be parsed to both subcolumns and doc snapshot - bool parse_to_subcolumns = true; - bool parse_to_doc_snapshot = false; + enum class ParseTo { + OnlySubcolumns = 0, + OnlyDocValueColumn = 1, + BothSubcolumnsAndDocValueColumn = 2, + }; + ParseTo parse_to = ParseTo::OnlySubcolumns; }; /// Result of parsing of a document. /// Contains all paths extracted from document diff --git a/be/src/vec/json/parse2column.cpp b/be/src/vec/json/parse2column.cpp index 003323f59f3eb7..3bddb7d3ba6f4c 100644 --- a/be/src/vec/json/parse2column.cpp +++ b/be/src/vec/json/parse2column.cpp @@ -36,6 +36,7 @@ #include "common/config.h" #include "common/status.h" +#include "olap/rowset/segment_v2/variant/variant_util.h" #include "vec/columns/column.h" #include "vec/columns/column_string.h" #include "vec/columns/column_variant.h" @@ -169,71 +170,100 @@ void parse_json_to_variant(IColumn& column, const char* src, size_t length, column_variant.get_doc_snapshot_data_paths_and_values(); auto& doc_snapshot_data_offsets = column_variant.serialized_doc_value_column_offsets(); std::unordered_set subcolumn_set; - if (config.parse_to_subcolumns) { - for (size_t i = 0; i < paths.size(); ++i) { - FieldInfo field_info; - schema_util::get_field_info(values[i], &field_info); - if (field_info.scalar_type_id == PrimitiveType::INVALID_TYPE) { - continue; - } - if (column_variant.get_subcolumn(paths[i], i) == nullptr) { - if (paths[i].has_nested_part()) { - column_variant.add_nested_subcolumn(paths[i], field_info, old_num_rows); - } else { - column_variant.add_sub_column(paths[i], old_num_rows); - } + + auto flush_defaults = [](ColumnVariant::Subcolumn* subcolumn) { + const auto num_defaults = subcolumn->cur_num_of_defaults(); + if (num_defaults > 0) { + subcolumn->insert_many_defaults(num_defaults); + subcolumn->reset_current_num_of_defaults(); + } + }; + + auto get_or_create_subcolumn = [&](const PathInData& path, size_t index_hint, + const FieldInfo& field_info) -> ColumnVariant::Subcolumn* { + if (column_variant.get_subcolumn(path, index_hint) == nullptr) { + if (path.has_nested_part()) { + column_variant.add_nested_subcolumn(path, field_info, old_num_rows); + } else { + column_variant.add_sub_column(path, old_num_rows); } - auto* subcolumn = column_variant.get_subcolumn(paths[i], i); + } + auto* subcolumn = column_variant.get_subcolumn(path, index_hint); + if (!subcolumn) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Failed to find sub column {}", + path.get_path()); + } + return subcolumn; + }; + + auto insert_into_subcolumn = [&](size_t i, + bool check_size_mismatch) -> ColumnVariant::Subcolumn* { + FieldInfo field_info; + schema_util::get_field_info(values[i], &field_info); + if (field_info.scalar_type_id == PrimitiveType::INVALID_TYPE) { + return nullptr; + } + auto* subcolumn = get_or_create_subcolumn(paths[i], i, field_info); + flush_defaults(subcolumn); + if (check_size_mismatch && subcolumn->size() != old_num_rows) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, + "subcolumn {} size missmatched, may contains duplicated entry", + paths[i].get_path()); + } + subcolumn->insert(std::move(values[i]), std::move(field_info)); + return subcolumn; + }; + + auto insert_unique_path_or_throw = [&](const std::string& path) { + auto [it, inserted] = subcolumn_set.insert(path); + (void)it; + if (!inserted) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, + "may contains duplicated entry : {}", path); + } + }; + + switch (config.parse_to) { + case ParseConfig::ParseTo::OnlySubcolumns: + for (size_t i = 0; i < paths.size(); ++i) { + insert_into_subcolumn(i, true); + } + break; + case ParseConfig::ParseTo::BothSubcolumnsAndDocValueColumn: + for (size_t i = 0; i < paths.size(); ++i) { + auto* subcolumn = insert_into_subcolumn(i, true); if (!subcolumn) { - throw doris::Exception(ErrorCode::INVALID_ARGUMENT, "Failed to find sub column {}", - paths[i].get_path()); - } - if (subcolumn->cur_num_of_defaults() > 0) { - subcolumn->insert_many_defaults(subcolumn->cur_num_of_defaults()); - subcolumn->reset_current_num_of_defaults(); - } - if (subcolumn->size() != old_num_rows) { - throw doris::Exception( - ErrorCode::INVALID_ARGUMENT, - "subcolumn {} size missmatched, may contains duplicated entry", - paths[i].get_path()); - } - subcolumn->insert(std::move(values[i]), std::move(field_info)); - if (subcolumn_set.contains(paths[i].get_path())) { - throw doris::Exception(ErrorCode::INVALID_ARGUMENT, - "may contains duplicated entry : {}", paths[i].get_path()); + continue; } - subcolumn_set.insert(paths[i].get_path()); - if (!paths[i].empty() && config.parse_to_doc_snapshot) { - subcolumn->serialize_to_binary_column(doc_snapshot_data_paths, paths[i].get_path(), + const auto path = paths[i].get_path(); + insert_unique_path_or_throw(path); + if (!paths[i].empty()) { + subcolumn->serialize_to_binary_column(doc_snapshot_data_paths, path, doc_snapshot_data_values, old_num_rows); } } - } else { - CHECK(config.parse_to_doc_snapshot); + break; + case ParseConfig::ParseTo::OnlyDocValueColumn: + ColumnVariant::Subcolumn tmp_subcolumn(0, true); for (size_t i = 0; i < paths.size(); ++i) { FieldInfo field_info; schema_util::get_field_info(values[i], &field_info); - if (subcolumn_set.contains(paths[i].get_path())) { - throw doris::Exception(ErrorCode::INVALID_ARGUMENT, - "may contains duplicated entry : {}", paths[i].get_path()); - } - subcolumn_set.insert(paths[i].get_path()); + const auto path = paths[i].get_path(); + insert_unique_path_or_throw(path); + // only insert root path to subcolumns if (paths[i].empty()) { - auto* subcolumn = column_variant.get_subcolumn(paths[i], i); + auto* subcolumn = column_variant.get_subcolumn(paths[i]); DCHECK(subcolumn != nullptr); - if (subcolumn->cur_num_of_defaults() > 0) { - subcolumn->insert_many_defaults(subcolumn->cur_num_of_defaults()); - subcolumn->reset_current_num_of_defaults(); - } + flush_defaults(subcolumn); subcolumn->insert(std::move(values[i]), std::move(field_info)); continue; } - ColumnVariant::Subcolumn tmp_subcolumn(0, true); tmp_subcolumn.insert(std::move(values[i]), std::move(field_info)); - tmp_subcolumn.serialize_to_binary_column(doc_snapshot_data_paths, paths[i].get_path(), + tmp_subcolumn.serialize_to_binary_column(doc_snapshot_data_paths, path, doc_snapshot_data_values, 0); + tmp_subcolumn.pop_back(1); } + break; } doc_snapshot_data_offsets.push_back(doc_snapshot_data_paths->size()); // /// Insert default values to missed subcolumns. @@ -280,40 +310,20 @@ void parse_json_to_variant(IColumn& column, const ColumnString& raw_json_column, } // pasre the doc snapshot column to subcolumns -void parse_binary_to_variant(ColumnVariant& column_variant) { - std::unordered_map subcolumns; - - auto [column_key, column_value] = column_variant.get_doc_snapshot_data_paths_and_values(); - const auto& column_offsets = column_variant.serialized_doc_value_column_offsets(); - - size_t num_rows = column_offsets.size(); - - for (int64_t i = 0; i < num_rows; ++i) { - size_t start = column_offsets[i - 1]; - size_t end = column_offsets[i]; - for (size_t j = start; j < end; ++j) { - const auto& key = column_key->get_data_at(j); - if (auto it = subcolumns.find(std::string_view(key.data, key.size)); - it != subcolumns.end()) { - if (it->second.size() != i) { - it->second.insert_many_defaults(i - it->second.size()); - } - it->second.deserialize_from_binary_column(column_value, j); - } else { - vectorized::ColumnVariant::Subcolumn subcolumn {0, true, false}; - subcolumn.insert_many_defaults(i); - subcolumn.deserialize_from_binary_column(column_value, j); - subcolumns[std::string_view(key.data, key.size)] = std::move(subcolumn); - } - } +void parse_binary_to_variant(ColumnVariant& column_variant, const ParseConfig& config) { + if (config.parse_to == ParseConfig::ParseTo::OnlySubcolumns) { + throw doris::Exception(ErrorCode::INVALID_ARGUMENT, + "variant has doc value column, but parse_to is OnlySubcolumns"); } - for (auto& [path, subcolumn] : subcolumns) { - if (subcolumn.size() != num_rows) { - subcolumn.insert_many_defaults(num_rows - subcolumn.size()); - } + // no need to parse to subcolumns, just return + if (config.parse_to == ParseConfig::ParseTo::OnlyDocValueColumn) { + return; } + auto subcolumns = + doris::segment_v2::variant_util::parse_doc_snapshot_to_subcolumns(column_variant); + for (auto& entry : subcolumns) { entry.second.finalize(); if (!column_variant.add_sub_column(PathInData(entry.first), diff --git a/be/src/vec/json/parse2column.h b/be/src/vec/json/parse2column.h index ab096e07c82111..84fc5f38c48127 100644 --- a/be/src/vec/json/parse2column.h +++ b/be/src/vec/json/parse2column.h @@ -43,5 +43,5 @@ void parse_json_to_variant(IColumn& column, const ColumnString& raw_json_column, void parse_json_to_variant(IColumn& column, const StringRef& jsons, JsonParser* parser, const ParseConfig& config); -void parse_binary_to_variant(ColumnVariant& column_variant); +void parse_binary_to_variant(ColumnVariant& column_variant, const ParseConfig& config); } // namespace doris::vectorized diff --git a/be/src/vec/json/path_in_data.h b/be/src/vec/json/path_in_data.h index 74136a056ff5fc..21057e4eaa616c 100644 --- a/be/src/vec/json/path_in_data.h +++ b/be/src/vec/json/path_in_data.h @@ -101,7 +101,7 @@ class PathInData { bool need_record_stats() const { return !empty() && !is_typed && !has_nested && - path.find("__DORIS_VARIANT_DOC_SNAPSHOT__") == std::string::npos; + path.find("__DORIS_VARIANT_DOC_VALUE__") == std::string::npos; } bool operator<(const PathInData& rhs) const { diff --git a/be/test/olap/rowset/segment_v2/external_col_meta_util_test.cpp b/be/test/olap/rowset/segment_v2/external_col_meta_util_test.cpp index b210a09ec67f7a..caa1f64de8ae83 100644 --- a/be/test/olap/rowset/segment_v2/external_col_meta_util_test.cpp +++ b/be/test/olap/rowset/segment_v2/external_col_meta_util_test.cpp @@ -275,9 +275,9 @@ TEST(ExternalColMetaUtilTest, VariantExtMetaWriterAndReaderInteropAndCompatibili // * non‑variant column uid=0 // * root variant column uid=1, whose children_columns includes the sparse meta // - "v1.key0" should be removed from footer.columns() and only exist in external meta. - ASSERT_EQ(footer.columns_size(), 2); - const ColumnMetaPB& kept0 = footer.columns(0); - const ColumnMetaPB& kept1 = footer.columns(1); + ASSERT_EQ(out_metas.size(), 2); + const ColumnMetaPB& kept0 = out_metas[0]; + const ColumnMetaPB& kept1 = out_metas[1]; EXPECT_EQ(kept0.unique_id(), 0); EXPECT_EQ(kept1.unique_id(), root_uid); // root should have embedded sparse children diff --git a/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp b/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp index 86fd39e1cc7ba4..9deca1d2ae5de1 100644 --- a/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp +++ b/be/test/olap/rowset/segment_v2/hierarchical_data_iterator_test.cpp @@ -57,7 +57,8 @@ TEST(HierarchicalDataIteratorTest, ProcessSparseExtractSubpaths) { nullptr); ASSERT_TRUE(HierarchicalDataIterator::create( &iter, /*col_uid*/ 0, PathInData("a.b"), /*node*/ nullptr, - /*root*/ std::move(sparse_iter), nullptr, nullptr, nullptr) + /*root*/ std::move(sparse_iter), nullptr, nullptr, nullptr, + HierarchicalDataIterator::ReadType::READ_DIRECT) .ok()); ColumnIteratorOptions opts; @@ -65,7 +66,7 @@ TEST(HierarchicalDataIteratorTest, ProcessSparseExtractSubpaths) { ASSERT_TRUE(iter->seek_to_ordinal(0).ok()); auto* hiter = static_cast(iter.get()); - auto& map = assert_cast(*hiter->_sparse_column_reader->column); + auto& map = assert_cast(*hiter->_binary_column_reader->column); auto& keys = assert_cast(map.get_keys()); auto& vals = assert_cast(map.get_values()); auto& offs = map.get_offsets(); 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 2500b4a5eebd0c..ea36a072ddf365 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 @@ -22,8 +22,8 @@ #include "olap/rowset/segment_v2/column_meta_accessor.h" #include "olap/rowset/segment_v2/column_reader.h" #include "olap/rowset/segment_v2/column_reader_cache.h" +#include "olap/rowset/segment_v2/variant/binary_column_extract_iterator.h" #include "olap/rowset/segment_v2/variant/hierarchical_data_iterator.h" -#include "olap/rowset/segment_v2/variant/sparse_column_extract_iterator.h" #include "olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h" #include "olap/rowset/segment_v2/variant/variant_column_reader.h" #include "olap/rowset/segment_v2/variant/variant_column_writer_impl.h" @@ -46,7 +46,7 @@ static void construct_column(ColumnPB* column_pb, int32_t col_unique_id, int variant_max_subcolumns_count = 3, bool is_key = false, bool is_nullable = false, int variant_sparse_hash_shard_count = 0, bool variant_enable_doc_mode = false, - int64_t variant_doc_snapshot_min_rows = 0) { + int64_t variant_doc_materialization_min_rows = 0) { column_pb->set_unique_id(col_unique_id); column_pb->set_name(column_name); column_pb->set_type(column_type); @@ -57,8 +57,8 @@ static void construct_column(ColumnPB* column_pb, int32_t col_unique_id, column_pb->set_variant_max_sparse_column_statistics_size(10000); // 5 sparse hash shard column_pb->set_variant_sparse_hash_shard_count(variant_sparse_hash_shard_count); - column_pb->set_variant_enable_doc_snapshot_mode(variant_enable_doc_mode); - column_pb->set_variant_doc_snapshot_min_rows(variant_doc_snapshot_min_rows); + column_pb->set_variant_enable_doc_mode(variant_enable_doc_mode); + column_pb->set_variant_doc_materialization_min_rows(variant_doc_materialization_min_rows); } } @@ -2675,7 +2675,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { construct_column(schema_pb.add_column(), 1, "VARIANT", "v", 3, false, false, variant_sparse_hash_shard_count, /*variant_enable_doc_mode*/ true, - /*variant_doc_snapshot_min_rows*/ 0); + /*variant_doc_materialization_min_rows*/ 0); _tablet_schema = std::make_shared(); _tablet_schema->init_from_pb(schema_pb); @@ -2757,7 +2757,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { auto p = std::make_shared(); p->from_protobuf(m.column_path_info()); auto rel = p->copy_pop_front().get_path(); - if (rel.find(DOC_SNAPSHOT_COLUMN_PATH) != std::string::npos) { + if (rel.find(DOC_VALUE_COLUMN_PATH) != std::string::npos) { ++doc_snapshot_meta_cnt; // check_doc_value_column_meta_basic(m); // writer should set doc_value_column_non_null_size stats (may be empty for some buckets) @@ -2849,7 +2849,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { EXPECT_EQ(key0_type->to_string(*key0_dst, row), "88"); } - // 9. compaction-style reader: DOC_SNAPSHOT bucket column wrapped by VariantDocSnapshotCompactIterator + // 9. compaction-style reader: DOC_SNAPSHOT bucket column wrapped by VariantDocValueCompactIterator StorageReadOptions compaction_read_opts; compaction_read_opts.io_ctx.reader_type = ReaderType::READER_BASE_COMPACTION; compaction_read_opts.stats = &stats; @@ -2870,7 +2870,7 @@ TEST_F(VariantColumnWriterReaderTest, test_write_data_doc_snapshot_mode) { st = variant_column_reader->new_iterator(&it_doc_bucket, &doc_bucket, &compaction_read_opts, &column_reader_cache); EXPECT_TRUE(st.ok()) << st.msg(); - EXPECT_TRUE(assert_cast(it_doc_bucket.get()) != nullptr); + EXPECT_TRUE(assert_cast(it_doc_bucket.get()) != nullptr); st = it_doc_bucket->init(column_iter_opts); EXPECT_TRUE(st.ok()) << st.msg(); @@ -2892,7 +2892,7 @@ TEST_F(VariantColumnWriterReaderTest, test_doc_snapshot_path_iterator_doc_snapsh construct_column(schema_pb.add_column(), 1, "VARIANT", "v", /*variant_max_subcolumns_count*/ 0, false, false, variant_sparse_hash_shard_count, /*variant_enable_doc_mode*/ true, - /*variant_doc_snapshot_min_rows*/ 0); + /*variant_doc_materialization_min_rows*/ 0); _tablet_schema = std::make_shared(); _tablet_schema->init_from_pb(schema_pb); @@ -2936,8 +2936,7 @@ TEST_F(VariantColumnWriterReaderTest, test_doc_snapshot_path_iterator_doc_snapsh VariantUtil::fill_string_column_with_test_data(column_string, 1000, &inserted); vectorized::ParseConfig config; config.enable_flatten_nested = false; - config.parse_to_subcolumns = false; - config.parse_to_doc_snapshot = true; + config.parse_to = vectorized::ParseConfig::ParseTo::OnlyDocValueColumn; vectorized::parse_json_to_variant(*column_object, *column_string, config); auto olap_data_convertor = std::make_unique(); 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 e22f03c65c922f..2b850d3f23a104 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 @@ -170,10 +170,10 @@ public String toSql(int depth) { sb.append("\"variant_enable_doc_mode\" = \"") .append(String.valueOf(enableVariantDocSnapshotMode)).append("\""); sb.append(","); - sb.append("\"variant_doc_snapshot_min_rows\" = \"") + sb.append("\"variant_doc_materialization_min_rows\" = \"") .append(String.valueOf(variantDocSnapshotMinRows)).append("\""); sb.append(","); - sb.append("\"variant_doc_snapshot_shard_count\" = \"") + sb.append("\"variant_doc_hash_shard_count\" = \"") .append(String.valueOf(variantDocSnapshotShardCount)).append("\""); sb.append(")>"); return sb.toString(); 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 614b2fd15b4af5..0076d4b288a8d7 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 @@ -656,9 +656,9 @@ public TColumn toThrift() { tColumn.setVariantEnableTypedPathsToSparse(this.getVariantEnableTypedPathsToSparse()); tColumn.setVariantMaxSparseColumnStatisticsSize(this.getVariantMaxSparseColumnStatisticsSize()); tColumn.setVariantSparseHashShardCount(this.getVariantSparseHashShardCount()); - tColumn.setVariantEnableDocSnapshotMode(this.getVariantEnableDocSnapshotMode()); - tColumn.setVariantDocSnapshotMinRows(this.getVariantDocSnapshotMinRows()); - tColumn.setVariantDocSnapshotShardCount(this.getVariantDocSnapshotShardCount()); + tColumn.setVariantEnableDocMode(this.getVariantEnableDocSnapshotMode()); + tColumn.setVariantDocMaterializationMinRows(this.getVariantDocSnapshotMinRows()); + tColumn.setVariantDocHashShardCount(this.getVariantDocSnapshotShardCount()); // ATTN: // Currently, this `toThrift()` method is only used from CreateReplicaTask. // And CreateReplicaTask does not need `defineExpr` field. @@ -883,9 +883,9 @@ public OlapFile.ColumnPB toPb(Set bfColumns, List indexes) throws builder.setVariantEnableTypedPathsToSparse(this.getVariantEnableTypedPathsToSparse()); builder.setVariantMaxSparseColumnStatisticsSize(this.getVariantMaxSparseColumnStatisticsSize()); builder.setVariantSparseHashShardCount(this.getVariantSparseHashShardCount()); - builder.setVariantEnableDocSnapshotMode(this.getVariantEnableDocSnapshotMode()); - builder.setVariantDocSnapshotMinRows(this.getVariantDocSnapshotMinRows()); - builder.setVariantDocSnapshotShardCount(this.getVariantDocSnapshotShardCount()); + builder.setVariantEnableDocMode(this.getVariantEnableDocSnapshotMode()); + builder.setVariantDocMaterializationMinRows(this.getVariantDocSnapshotMinRows()); + builder.setVariantDocHashShardCount(this.getVariantDocSnapshotShardCount()); // variant may contain predefined structured fields addChildren(builder); } 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 ae882b185b3a29..4f80791b38aa57 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 @@ -265,12 +265,13 @@ public class PropertyAnalyzer { // number of buckets when using bucketized sparse serialization public static final String PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT = "variant_sparse_hash_shard_count"; - public static final String PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE = "variant_enable_doc_mode"; + public static final String PROPERTIES_VARIANT_ENABLE_DOC_MODE = "variant_enable_doc_mode"; - public static final String PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS = "variant_doc_snapshot_min_rows"; + public static final String PROPERTIES_VARIANT_DOC_MATERIALIZATION_MIN_ROWS = + "variant_doc_materialization_min_rows"; // number of buckets when using doc snapshot serialization - public static final String PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT = "variant_doc_snapshot_shard_count"; + public static final String PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT = "variant_doc_hash_shard_count"; public enum RewriteType { PUT, // always put property @@ -1963,58 +1964,82 @@ public static int analyzeVariantSparseHashShardCount(Map propert return bucketNum; } - public static boolean analyzeEnableVariantDocSnapshotMode(Map properties, boolean defaultValue) + public static boolean analyzeEnableVariantDocMode(Map properties, boolean defaultValue) throws AnalysisException { - boolean enableVariantDocSnapshotMode = defaultValue; - if (properties != null && properties.containsKey(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE)) { - String enableVariantDocSnapshotModeStr = properties.get(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE); + boolean enableVariantDocMode = defaultValue; + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_ENABLE_DOC_MODE)) { + String enableVariantDocModeStr = properties.get(PROPERTIES_VARIANT_ENABLE_DOC_MODE); try { - enableVariantDocSnapshotMode = Boolean.parseBoolean(enableVariantDocSnapshotModeStr); + enableVariantDocMode = Boolean.parseBoolean(enableVariantDocModeStr); } catch (Exception e) { throw new AnalysisException("variant_enable_doc_mode must be `true` or `false`"); } - properties.remove(PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE); + properties.remove(PROPERTIES_VARIANT_ENABLE_DOC_MODE); } - return enableVariantDocSnapshotMode; + return enableVariantDocMode; } - public static long analyzeVariantDocSnapshotMinRows(Map properties, long defaultValue) + public static long analyzeVariantDocMaterializationMinRows(Map properties, + long defaultValue) throws AnalysisException { long minRows = defaultValue; - if (properties != null && properties.containsKey(PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS)) { - String minRowsStr = properties.get(PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS); + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_DOC_MATERIALIZATION_MIN_ROWS)) { + String minRowsStr = properties.get(PROPERTIES_VARIANT_DOC_MATERIALIZATION_MIN_ROWS); try { minRows = Long.parseLong(minRowsStr); if (minRows < 0 || minRows > 1_000_000_000) { - throw new AnalysisException("variant_doc_snapshot_min_rows must between 0 and 1000000000 "); + throw new AnalysisException( + "variant_doc_materialization_min_rows must between 0 and 1000000000 "); } } catch (Exception e) { - throw new AnalysisException("variant_doc_snapshot_min_rows format error:" + e.getMessage()); + throw new AnalysisException( + "variant_doc_materialization_min_rows format error:" + e.getMessage()); } - properties.remove(PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS); + properties.remove(PROPERTIES_VARIANT_DOC_MATERIALIZATION_MIN_ROWS); } return minRows; } - public static int analyzeVariantDocSnapshotShardCount(Map properties, int defaultValue) + public static int analyzeVariantDocHashShardCount(Map properties, int defaultValue) throws AnalysisException { int shardCount = defaultValue; - if (properties != null && properties.containsKey(PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT)) { - String shardCountStr = properties.get(PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT); + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT)) { + String shardCountStr = properties.get(PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT); try { shardCount = Integer.parseInt(shardCountStr); if (shardCount < 0 || shardCount > 1024) { - throw new AnalysisException("variant_doc_snapshot_shard_count must between 0 and 1024 "); + throw new AnalysisException("variant_doc_hash_shard_count must between 0 and 1024 "); } } catch (Exception e) { throw new AnalysisException( - "variant_doc_snapshot_shard_count format error:" + e.getMessage()); + "variant_doc_hash_shard_count format error:" + e.getMessage()); } - properties.remove(PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT); + properties.remove(PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT); } return shardCount; } + public static void validateVariantProperties(Map properties) throws AnalysisException { + if (properties != null && properties.containsKey(PROPERTIES_VARIANT_ENABLE_DOC_MODE)) { + if (properties.containsKey(PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT)) { + throw new AnalysisException("variant_max_subcolumns_count and variant_enable_doc_mode " + + "cannot be set together"); + } + if (properties.containsKey(PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE)) { + throw new AnalysisException("variant_enable_typed_paths_to_sparse and variant_enable_doc_mode " + + "cannot be set together"); + } + if (properties.containsKey(PROPERTIES_VARIANT_MAX_SPARSE_COLUMN_STATISTICS_SIZE)) { + throw new AnalysisException("variant_max_sparse_column_statistics_size and variant_enable_doc_mode " + + "cannot be set together"); + } + if (properties.containsKey(PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT)) { + throw new AnalysisException("variant_sparse_hash_shard_count and variant_enable_doc_mode " + + "cannot be set together"); + } + } + } + public static TEncryptionAlgorithm analyzeTDEAlgorithm(Map properties) throws AnalysisException { String name; //if (properties == null || !properties.containsKey(PROPERTIES_TDE_ALGORITHM)) { 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 3c7190fc1fb4cb..15b5b80131664d 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 @@ -4929,13 +4929,17 @@ public DataType visitVariantPredefinedFields(VariantPredefinedFieldsContext ctx) int variantSparseHashShardCount = ConnectContext.get() == null ? 0 : ConnectContext.get().getSessionVariable().getDefaultVariantSparseHashShardCount(); - boolean enableVariantDocSnapshotMode = ConnectContext.get() == null ? false : - ConnectContext.get().getSessionVariable().getDefaultVariantEnableDocSnapshotMode(); - long variantDocSnapshotMinRows = ConnectContext.get() == null ? 0L : - ConnectContext.get().getSessionVariable().getDefaultVariantDocSnapshotMinRows(); - int variantDocSnapshotShardCount = ConnectContext.get() == null ? 128 : - ConnectContext.get().getSessionVariable().getDefaultVariantDocSnapshotShardCount(); + boolean enableVariantDocMode = ConnectContext.get() == null ? false : + ConnectContext.get().getSessionVariable().getDefaultVariantEnableDocMode(); + long variantDocMaterializationMinRows = ConnectContext.get() == null ? 0L : + ConnectContext.get().getSessionVariable().getDefaultVariantDocMaterializationMinRows(); + int variantDocHashShardCount = ConnectContext.get() == null ? 128 : + ConnectContext.get().getSessionVariable().getDefaultVariantDocHashShardCount(); + try { + // validate properties: variant_enable_doc_mode cannot be set together with other properties + PropertyAnalyzer.validateVariantProperties(properties); + variantMaxSubcolumnsCount = PropertyAnalyzer .analyzeVariantMaxSubcolumnsCount(properties, variantMaxSubcolumnsCount); enableTypedPathsToSparse = PropertyAnalyzer @@ -4944,44 +4948,40 @@ public DataType visitVariantPredefinedFields(VariantPredefinedFieldsContext ctx) properties, variantMaxSparseColumnStatisticsSize); variantSparseHashShardCount = PropertyAnalyzer.analyzeVariantSparseHashShardCount(properties, variantSparseHashShardCount); - enableVariantDocSnapshotMode = PropertyAnalyzer - .analyzeEnableVariantDocSnapshotMode(properties, enableVariantDocSnapshotMode); - variantDocSnapshotMinRows = PropertyAnalyzer - .analyzeVariantDocSnapshotMinRows(properties, variantDocSnapshotMinRows); - variantDocSnapshotShardCount = PropertyAnalyzer - .analyzeVariantDocSnapshotShardCount(properties, variantDocSnapshotShardCount); + enableVariantDocMode = PropertyAnalyzer + .analyzeEnableVariantDocMode(properties, enableVariantDocMode); + variantDocMaterializationMinRows = PropertyAnalyzer + .analyzeVariantDocMaterializationMinRows(properties, variantDocMaterializationMinRows); + variantDocHashShardCount = PropertyAnalyzer + .analyzeVariantDocHashShardCount(properties, variantDocHashShardCount); } catch (org.apache.doris.common.AnalysisException e) { throw new NotSupportedException(e.getMessage()); } + if (enableVariantDocMode) { + variantMaxSubcolumnsCount = 0; + enableTypedPathsToSparse = false; + variantMaxSparseColumnStatisticsSize = 0; + variantSparseHashShardCount = 0; + } else { + variantDocMaterializationMinRows = 0; + variantDocHashShardCount = 0; + } + if (!properties.isEmpty()) { throw new NotSupportedException("only support for " + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_MAX_SPARSE_COLUMN_STATISTICS_SIZE + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT - + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_DOC_SNAPSHOT_MODE - + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_DOC_SNAPSHOT_MIN_ROWS - + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_DOC_SNAPSHOT_SHARD_COUNT); - } - - if (enableVariantDocSnapshotMode) { - // if has fields, min rows is invalid - if (!fields.isEmpty()) { - variantDocSnapshotMinRows = 0; - enableTypedPathsToSparse = false; - } - if (variantMaxSubcolumnsCount > 0) { - variantMaxSubcolumnsCount = 0; - } - } else { - variantDocSnapshotMinRows = 0; - variantDocSnapshotShardCount = 0; + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_DOC_MODE + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_DOC_MATERIALIZATION_MIN_ROWS + + " and " + PropertyAnalyzer.PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT); } return new VariantType(fields, variantMaxSubcolumnsCount, enableTypedPathsToSparse, variantMaxSparseColumnStatisticsSize, variantSparseHashShardCount, - enableVariantDocSnapshotMode, variantDocSnapshotMinRows, variantDocSnapshotShardCount); + enableVariantDocMode, variantDocMaterializationMinRows, variantDocHashShardCount); } @Override 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 8f2aa8fe02b1e7..3fe7562b52f486 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 @@ -163,11 +163,11 @@ public String toSql() { .append(String.valueOf(enableVariantDocSnapshotMode)) .append("\""); sb.append(","); - sb.append("\"variant_doc_snapshot_min_rows\" = \"") + sb.append("\"variant_doc_materialization_min_rows\" = \"") .append(String.valueOf(variantDocSnapshotMinRows)) .append("\""); sb.append(","); - sb.append("\"variant_doc_snapshot_shard_count\" = \"") + sb.append("\"variant_doc_hash_shard_count\" = \"") .append(String.valueOf(variantDocSnapshotShardCount)) .append("\""); sb.append(")>"); 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 d251a5d818c541..da3d99f760d6e8 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 @@ -904,11 +904,12 @@ public static double getHotValueThreshold() { "default_variant_max_sparse_column_statistics_size"; public static final String DEFAULT_VARIANT_SPARSE_HASH_SHARD_COUNT = "default_variant_sparse_hash_shard_count"; - public static final String DEFAULT_VARIANT_ENABLE_DOC_SNAPSHOT_MODE = "default_variant_enable_doc_snapshot_mode"; + public static final String DEFAULT_VARIANT_ENABLE_DOC_MODE = "default_variant_enable_doc_mode"; - public static final String DEFAULT_VARIANT_DOC_SNAPSHOT_MIN_ROWS = "default_variant_doc_snapshot_min_rows"; + public static final String DEFAULT_VARIANT_DOC_MATERIALIZATION_MIN_ROWS = + "default_variant_doc_materialization_min_rows"; - public static final String DEFAULT_VARIANT_DOC_SNAPSHOT_SHARD_COUNT = "default_variant_doc_snapshot_shard_count"; + public static final String DEFAULT_VARIANT_DOC_HASH_SHARD_COUNT = "default_variant_doc_hash_shard_count"; public static final String MULTI_DISTINCT_STRATEGY = "multi_distinct_strategy"; public static final String AGG_PHASE = "agg_phase"; @@ -3188,26 +3189,26 @@ public boolean isEnableESParallelScroll() { @VariableMgr.VarAttr( - name = DEFAULT_VARIANT_ENABLE_DOC_SNAPSHOT_MODE, + name = DEFAULT_VARIANT_ENABLE_DOC_MODE, needForward = true, fuzzy = true ) - public boolean defaultVariantEnableDocSnapshotMode = false; + public boolean defaultVariantEnableDocMode = false; @VariableMgr.VarAttr( - name = DEFAULT_VARIANT_DOC_SNAPSHOT_MIN_ROWS, + name = DEFAULT_VARIANT_DOC_MATERIALIZATION_MIN_ROWS, needForward = true, fuzzy = true ) - public long defaultVariantDocSnapshotMinRows = 0L; + public long defaultVariantDocMaterializationMinRows = 0L; @VariableMgr.VarAttr( - name = DEFAULT_VARIANT_DOC_SNAPSHOT_SHARD_COUNT, + name = DEFAULT_VARIANT_DOC_HASH_SHARD_COUNT, needForward = true, fuzzy = true ) - public int defaultVariantDocSnapshotShardCount = 128; + public int defaultVariantDocHashShardCount = 64; @VariableMgr.VarAttr( name = "use_v3_storage_format", @@ -3256,10 +3257,18 @@ public void initFuzzyModeVariables() { this.defaultVariantMaxSubcolumnsCount = random.nextInt(10); this.defaultVariantSparseHashShardCount = random.nextInt(5) + 1; this.useV3StorageFormat = random.nextBoolean(); - this.defaultVariantEnableDocSnapshotMode = random.nextBoolean(); - if (this.defaultVariantEnableDocSnapshotMode) { - boolean zeroOrOne = random.nextBoolean(); - this.defaultVariantDocSnapshotMinRows = zeroOrOne ? 0 : random.nextInt(20); + this.defaultVariantEnableDocMode = random.nextBoolean(); + this.defaultVariantDocHashShardCount = random.nextInt(5); + boolean zeroOrOne = random.nextBoolean(); + this.defaultVariantDocMaterializationMinRows = zeroOrOne ? 0 : random.nextInt(20); + if (this.defaultVariantEnableDocMode) { + this.defaultVariantMaxSubcolumnsCount = 0; + this.defaultEnableTypedPathsToSparse = false; + this.defaultVariantMaxSparseColumnStatisticsSize = 0; + this.defaultVariantSparseHashShardCount = 0; + } else { + this.defaultVariantDocMaterializationMinRows = 0L; + this.defaultVariantDocHashShardCount = 0; } int randomInt = random.nextInt(4); if (randomInt % 2 == 0) { @@ -5810,16 +5819,16 @@ public int getDefaultVariantSparseHashShardCount() { return defaultVariantSparseHashShardCount; } - public boolean getDefaultVariantEnableDocSnapshotMode() { - return defaultVariantEnableDocSnapshotMode; + public boolean getDefaultVariantEnableDocMode() { + return defaultVariantEnableDocMode; } - public long getDefaultVariantDocSnapshotMinRows() { - return defaultVariantDocSnapshotMinRows; + public long getDefaultVariantDocMaterializationMinRows() { + return defaultVariantDocMaterializationMinRows; } - public int getDefaultVariantDocSnapshotShardCount() { - return defaultVariantDocSnapshotShardCount; + public int getDefaultVariantDocHashShardCount() { + return defaultVariantDocHashShardCount; } public void readAffectQueryResultVariables(BiConsumer variablesReader) { diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto index e0ab1f0e37fcbf..e3d71cc3ea88ae 100644 --- a/gensrc/proto/olap_file.proto +++ b/gensrc/proto/olap_file.proto @@ -373,9 +373,10 @@ message ColumnPB { // number of buckets used to store sparse map optional int32 variant_sparse_hash_shard_count = 30; optional bool variant_enable_doc_mode = 31; - optional int64 variant_doc_snapshot_min_rows = 32; - // number of buckets used to store doc snapshot map - optional int32 variant_doc_snapshot_shard_count = 33 [default = 128]; + // Minimum rows to materialize doc columns for variant doc mode. + optional int64 variant_doc_materialization_min_rows = 32; + // Number of buckets used to store doc map in variant doc mode. + optional int32 variant_doc_hash_shard_count = 33 [default = 128]; } // Dictionary of Schema info, to reduce TabletSchemaCloudPB fdb kv size diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift index ce130f20d7e1e2..11125c006493a4 100644 --- a/gensrc/thrift/Descriptors.thrift +++ b/gensrc/thrift/Descriptors.thrift @@ -97,8 +97,8 @@ struct TColumn { 24: optional i32 variant_max_sparse_column_statistics_size = 10000 25: optional i32 variant_sparse_hash_shard_count 26: optional bool variant_enable_doc_mode - 27: optional i64 variant_doc_snapshot_min_rows - 28: optional i32 variant_doc_snapshot_shard_count + 27: optional i64 variant_doc_materialization_min_rows + 28: optional i32 variant_doc_hash_shard_count } struct TSlotDescriptor { diff --git a/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out b/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out index 6f66735dd1e362..c239532487fbe6 100644 --- a/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out +++ b/regression-test/data/datatype_p0/nested_types/ddl/create_nestedtypes_with_schemachange.out @@ -53,7 +53,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -67,7 +67,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map No false \N NONE col5 struct No false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -81,7 +81,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -95,7 +95,7 @@ col2 int No false \N NONE col3 array No false \N NONE col4 map Yes false \N NONE col5 struct No false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -109,7 +109,7 @@ col2 int No false \N NONE col3 array Yes false \N NONE col4 map Yes false \N NONE col5 struct Yes false \N NONE -col6 variant Yes false \N NONE +col6 variant Yes false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} @@ -123,7 +123,7 @@ col2 int No false \N NONE col3 array No false \N NONE col4 map No false \N NONE col5 struct Yes false \N NONE -col6 variant No false \N NONE +col6 variant No false \N NONE -- !sql_after -- 1 2 [1, 2] {1:2} {"f1":1} {"a":[1, 2, 3]} diff --git a/regression-test/data/variant_p0/desc.out b/regression-test/data/variant_p0/desc.out index 59f7d90baee5e1..b8eb281dabcf4e 100644 --- a/regression-test/data/variant_p0/desc.out +++ b/regression-test/data/variant_p0/desc.out @@ -1,19 +1,19 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.ddd.mxmxm array Yes false \N NONE -- !sql_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -22,7 +22,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -34,7 +34,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -43,7 +43,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -51,7 +51,7 @@ v.c.e double Yes false \N NONE -- !sql_6 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -63,7 +63,7 @@ v.xxxx text Yes false \N NONE -- !sql_7 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -72,13 +72,13 @@ v.xxxx text Yes false \N NONE -- !sql_7_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_7_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -86,7 +86,7 @@ v.c.e double Yes false \N NONE -- !sql_7_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -95,9 +95,9 @@ v.xxxx text Yes false \N NONE -- !sql_8 -- k bigint Yes true \N -v1 variant Yes false \N NONE -v2 variant Yes false \N NONE -v3 variant Yes false \N NONE +v1 variant Yes false \N NONE +v2 variant Yes false \N NONE +v3 variant Yes false \N NONE v1.a smallint Yes false \N NONE v1.b json Yes false \N NONE v1.c.c smallint Yes false \N NONE @@ -112,11 +112,11 @@ v3.c.e double Yes false \N NONE -- !sql_9 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql_9_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -125,7 +125,7 @@ v.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.k1 tinyint Yes false \N NONE v.k2 text Yes false \N NONE v.k3 array Yes false \N NONE @@ -134,8 +134,8 @@ v.k5 json Yes false \N NONE -- !sql_10_1 -- k bigint Yes true \N -v variant Yes false \N NONE -v2 variant Yes false \N NONE +v variant Yes false \N NONE +v2 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -154,7 +154,7 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -173,8 +173,8 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_3 -- k bigint Yes true \N -v variant Yes false \N NONE -v3 variant Yes false \N NONE +v variant Yes false \N NONE +v3 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -193,7 +193,7 @@ v3.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_11 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.!@#^&*() text Yes false \N NONE v.名字 text Yes false \N NONE v.画像.丬文 text Yes false \N NONE @@ -202,11 +202,11 @@ v.金额 smallint Yes false \N NONE -- !sql_12 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql15 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a tinyint Yes false \N NONE v.b tinyint Yes false \N NONE v.c tinyint Yes false \N NONE diff --git a/regression-test/data/variant_p0/doc_snapshot/load.out b/regression-test/data/variant_p0/doc_snapshot/load.out index 2482619ab39753..661ecca1ddaff9 100644 --- a/regression-test/data/variant_p0/doc_snapshot/load.out +++ b/regression-test/data/variant_p0/doc_snapshot/load.out @@ -336,6 +336,6 @@ kaana 2 {"b":11} -- !sql -- -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} \N diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out index fbea16b24f5668..645654514d79df 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_ddl.out @@ -1,11 +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 Yes false \N NONE +var variant Yes false \N NONE -- !sql -- id bigint Yes true \N -var variant Yes false \N NONE -var2 variant Yes false \N NONE -var3 variant Yes false \N NONE +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out index 37b7d3e7f448df..c1b595fe45e409 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out @@ -7,8 +7,8 @@ 1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -- -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} -- !sql -- 2 @@ -18,6 +18,6 @@ 1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -- -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out index c92f5ad437c568..6a91d584b7583c 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_type_index.out @@ -1,10 +1,10 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} -- !sql -- 1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} @@ -23,21 +23,21 @@ 3 -- !sql -- -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} -{"__DORIS_VARIANT_DOC_SNAPSHOT__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} +{"__DORIS_VARIANT_DOC_VALUE__":"map"} -- !sql -- 1 {"path":{"decimal":123.123456789012,"int":123,"string":"hello"}} diff --git a/regression-test/data/variant_p0/nested.out b/regression-test/data/variant_p0/nested.out index 9a4efb5428ee60..0c283e2a4bcbc2 100644 --- a/regression-test/data/variant_p0/nested.out +++ b/regression-test/data/variant_p0/nested.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.aaa array Yes false \N NONE v.nested.ax1111 array Yes false \N NONE diff --git a/regression-test/data/variant_p0/nested2.out b/regression-test/data/variant_p0/nested2.out index 84f9430f2172be..a54813cbf9f194 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 Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -50,7 +50,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -169,7 +169,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_4 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -218,7 +218,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_5 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array 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 index f6ccf55d4378fb..2813b65ead88b4 100644 --- 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 @@ -8,13 +8,13 @@ -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.tinyint_1 tinyint Yes false \N NONE -- !sql -- @@ -25,13 +25,13 @@ var.tinyint_1 tinyint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.smallint_1 smallint Yes false \N NONE -- !sql -- @@ -45,13 +45,13 @@ var.smallint_1 smallint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.int_1 int Yes false \N NONE -- !sql -- @@ -69,13 +69,13 @@ var.int_1 int Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.bigint_1 bigint Yes false \N NONE -- !sql -- @@ -98,13 +98,13 @@ var.bigint_1 bigint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.largeint_1 largeint Yes false \N NONE -- !sql -- @@ -133,13 +133,13 @@ var.largeint_1 largeint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.char_1 text Yes false \N NONE -- !sql -- @@ -175,13 +175,13 @@ var.char_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -225,13 +225,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -283,13 +283,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.double_1 double Yes false \N NONE -- !sql -- @@ -350,13 +350,13 @@ var.double_1 double Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.decimal32_1 decimal(8,2) Yes false \N NONE -- !sql -- @@ -427,13 +427,13 @@ var.decimal32_1 decimal(8,2) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.decimal64_1 decimal(16,9) Yes false \N NONE -- !sql -- @@ -515,13 +515,13 @@ var.decimal64_1 decimal(16,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.decimal128_1 decimal(36,9) Yes false \N NONE -- !sql -- @@ -615,13 +615,13 @@ var.decimal128_1 decimal(36,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -728,13 +728,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.datetime_1 datetime 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -854,13 +854,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.date_1 date 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.date_1 date Yes false \N NONE -- !sql -- @@ -994,13 +994,13 @@ var.date_1 date Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.ipv4_1 ipv4 Yes false \N NONE -- !sql -- @@ -1149,13 +1149,13 @@ var.ipv4_1 ipv4 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1320,13 +1320,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_boolean_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1507,13 +1507,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_tinyint_1 array Yes false \N NONE -- !sql -- @@ -1712,13 +1712,13 @@ var.array_tinyint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_smallint_1 array Yes false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_smallint_1 array Yes false \N NONE -- !sql -- @@ -1936,13 +1936,13 @@ var.array_smallint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_int_1 array Yes false \N NONE var.array_smallint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_int_1 array Yes false \N NONE -- !sql -- @@ -2180,13 +2180,13 @@ var.array_int_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_int_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE -- !sql -- @@ -2445,13 +2445,13 @@ var.array_bigint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_largeint_1 array Yes false \N NONE -- !sql -- @@ -2732,13 +2732,13 @@ var.array_largeint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE -- !sql -- @@ -3042,13 +3042,13 @@ var.array_char_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_string_1 array Yes false \N NONE -- !sql -- @@ -3376,13 +3376,13 @@ var.array_string_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_float_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_float_1 array Yes false \N NONE -- !sql -- @@ -3735,13 +3735,13 @@ var.array_float_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_double_1 array Yes false \N NONE var.array_float_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_double_1 array Yes false \N NONE -- !sql -- @@ -4120,13 +4120,13 @@ var.array_double_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_double_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE -- !sql -- @@ -4532,13 +4532,13 @@ var.array_decimal32_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal64_1 array Yes false \N NONE -- !sql -- @@ -4972,13 +4972,13 @@ var.array_decimal64_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE -- !sql -- @@ -5441,13 +5441,13 @@ var.array_decimal128_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_decimal256_1 array Yes false \N NONE -- !sql -- @@ -5940,13 +5940,13 @@ var.array_decimal256_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_datetime_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_datetime_1 array Yes false \N NONE -- !sql -- @@ -6470,13 +6470,13 @@ var.array_datetime_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_datetime_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE -- !sql -- @@ -7032,13 +7032,13 @@ var.array_date_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_ipv4_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE -- !sql -- @@ -7627,13 +7627,13 @@ var.array_ipv4_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_ipv6_1 array Yes false \N NONE -- !sql -- @@ -8256,13 +8256,13 @@ var.array_ipv6_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_snapshot_min_rows" = "0","variant_doc_snapshot_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE var.other_1 text Yes false \N NONE -- !sql -- diff --git a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out index fbea16b24f5668..645654514d79df 100644 --- a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out +++ b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out @@ -1,11 +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 Yes false \N NONE +var variant Yes false \N NONE -- !sql -- id bigint Yes true \N -var variant Yes false \N NONE -var2 variant Yes false \N NONE -var3 variant Yes false \N NONE +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE 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 c633cb7476c383..138c4914c3fced 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 @@ -22,7 +22,7 @@ suite("create_nestedtypes_with_schemachange", "p0") { sql "set default_variant_enable_typed_paths_to_sparse = false" sql "set default_variant_max_sparse_column_statistics_size = 0" sql "set default_variant_sparse_hash_shard_count = 0" - sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_enable_doc_mode = false" sql "DROP TABLE IF EXISTS $testTablex" sql """ CREATE TABLE $testTablex ( col0 BIGINT NOT NULL, col2 int NOT NULL, col3 array NULL, col4 map NULL, col5 struct NULL diff --git a/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy b/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy index 9871a0772a20b4..5024bec6e7173e 100644 --- a/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy +++ b/regression-test/suites/export_p0/test_outfile_csv_variant_type.groovy @@ -25,7 +25,7 @@ suite("test_outfile_csv_variant_type", "p0") { // open nereids sql """ set enable_nereids_planner=true """ sql """ set enable_fallback_to_original_planner=false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ String ak = getS3AK() String sk = getS3SK() 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 f40f23f908e1b2..ca5da5926caecc 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 @@ -45,7 +45,7 @@ suite("test_compaction_variant_with_sparse_limit", "nonConcurrent") { if (max_subcolumns_count == 1) { max_subcolumns_count = 0 } - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ def create_table = { tableName, buckets="auto", key_type="DUPLICATE" -> sql "DROP TABLE IF EXISTS ${tableName}" def var_def = "variant " diff --git a/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy b/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy index e947a97acb70e2..7822efe103c972 100644 --- a/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy +++ b/regression-test/suites/inverted_index_p0/storage_format/test_schema_change_storage_format.groovy @@ -57,7 +57,7 @@ suite("test_local_schema_change_storge_format", "p0") { } } } - sql """ set default_variant_doc_snapshot_min_rows = 0 """ + sql """ set default_variant_doc_materialization_min_rows = 0 """ def table_name = "github_events" sql """DROP TABLE IF EXISTS ${table_name}""" sql """ diff --git a/regression-test/suites/variant_doc_snapshot_p2/load.groovy b/regression-test/suites/variant_doc_snapshot_p2/load.groovy index 2cca09f538a0ff..959636bd1cbee5 100644 --- a/regression-test/suites/variant_doc_snapshot_p2/load.groovy +++ b/regression-test/suites/variant_doc_snapshot_p2/load.groovy @@ -18,7 +18,8 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite("test_doc_snapshot_p2", "nonConcurrent,p2"){ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ + sql """ set default_variant_doc_materialization_min_rows = 1000000000000 """ // prepare test table def timeout = 300000 def delta_time = 1000 @@ -76,7 +77,7 @@ suite("test_doc_snapshot_p2", "nonConcurrent,p2"){ if ((rand_subcolumns_count % 2) == 0) { rand_subcolumns_count = 0 } - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ sql "set enable_variant_flatten_nested = true" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( @@ -85,7 +86,7 @@ suite("test_doc_snapshot_p2", "nonConcurrent,p2"){ -- INDEX idx_var(v) USING INVERTED PROPERTIES("parser" = "english") COMMENT '' ) DUPLICATE KEY(`k`) - DISTRIBUTED BY HASH(k) BUCKETS 4 + DISTRIBUTED BY HASH(k) BUCKETS 1 properties("replication_num" = "1", "disable_auto_compaction" = "true", "variant_enable_flatten_nested" = "false", "inverted_index_storage_format"= "v2"); """ // 2015 @@ -155,8 +156,8 @@ suite("test_doc_snapshot_p2", "nonConcurrent,p2"){ sql """select v['payload']['commits'] from github_events2 order by k ;""" // query with inverted index - qt_sql """select cast(v["payload"]["pull_request"]["additions"] as int) from github_events where v["repo"]["name"] match 'xpressengine' order by 1;""" - qt_sql """select count() from github_events where v["repo"]["name"] match 'apache' order by 1;""" + // qt_sql """select cast(v["payload"]["pull_request"]["additions"] as int) from github_events where v["repo"]["name"] match 'xpressengine' order by 1;""" + // qt_sql """select count() from github_events where v["repo"]["name"] match 'apache' order by 1;""" sql """ALTER TABLE github_events SET("bloom_filter_columns" = "k,v")""" 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 1cc21c115612b3..eb1a7dc4ae36df 100644 --- a/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy +++ b/regression-test/suites/variant_github_events_nonConcurrent_p2/load.groovy @@ -75,7 +75,7 @@ suite("regression_test_variant_github_events_p2", "nonConcurrent,p2"){ if ((rand_subcolumns_count % 2) == 0) { rand_subcolumns_count = 0 } - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql "set enable_variant_flatten_nested = true" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( diff --git a/regression-test/suites/variant_p0/agg.groovy b/regression-test/suites/variant_p0/agg.groovy index d9dd5309a85551..31f175b177b276 100644 --- a/regression-test/suites/variant_p0/agg.groovy +++ b/regression-test/suites/variant_p0/agg.groovy @@ -23,7 +23,7 @@ suite("regression_test_variant_agg"){ if (max_subcolumns_count % 2 == 0) { var = "variant <'d' : int, 'b.f' : int, 'xxxx' : string, 'point' : bigint, properties(\"variant_max_subcolumns_count\" = \"${max_subcolumns_count}\")> replace" } - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql """ CREATE TABLE IF NOT EXISTS var_agg ( k bigint, diff --git a/regression-test/suites/variant_p0/compaction/test_compaction.groovy b/regression-test/suites/variant_p0/compaction/test_compaction.groovy index e7fbdfe03e89c7..1c96e0d02a8450 100644 --- a/regression-test/suites/variant_p0/compaction/test_compaction.groovy +++ b/regression-test/suites/variant_p0/compaction/test_compaction.groovy @@ -57,7 +57,7 @@ suite("test_compaction_variant") { """ } - sql """ set default_variant_enable_doc_snapshot_mode = false; """ + sql """ set default_variant_enable_doc_mode = false; """ def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"] // def key_types = ["AGGREGATE"] diff --git a/regression-test/suites/variant_p0/desc.groovy b/regression-test/suites/variant_p0/desc.groovy index 6d131daf019959..f39095bc7fa028 100644 --- a/regression-test/suites/variant_p0/desc.groovy +++ b/regression-test/suites/variant_p0/desc.groovy @@ -79,7 +79,7 @@ suite("regression_test_variant_desc", "p0"){ try { sql """set default_variant_max_subcolumns_count = 2""" sql "set default_variant_sparse_hash_shard_count = 0" - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ // sparse columns def table_name = "sparse_columns" create_table table_name diff --git a/regression-test/suites/variant_p0/doc_snapshot/agg.groovy b/regression-test/suites/variant_p0/doc_snapshot/agg.groovy index eda49fe5dc3009..7f96548803f2d0 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/agg.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/agg.groovy @@ -17,7 +17,7 @@ suite("test_variant_agg_doc_snapshot", "p0"){ sql """DROP TABLE IF EXISTS var_agg""" - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ int max_subcolumns_count = Math.floor(Math.random() * 10) def var = "variant replace" diff --git a/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy b/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy index 4bfdab43408b92..8ad13ee3f3256c 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/delete_update.groovy @@ -18,7 +18,7 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite("variant_delete_and_update_doc_snapshot", "p0"){ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ // MOR def table_name = "var_delete_update" sql "DROP TABLE IF EXISTS ${table_name}" @@ -47,7 +47,7 @@ suite("variant_delete_and_update_doc_snapshot", "p0"){ // MOW table_name = "var_delete_update_mow" - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ sql """ set default_variant_max_subcolumns_count = 3""" sql "DROP TABLE IF EXISTS ${table_name}" sql """ diff --git a/regression-test/suites/variant_p0/doc_snapshot/load.groovy b/regression-test/suites/variant_p0/doc_snapshot/load.groovy index 8e65b389bd6f32..d1cc6828009e29 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/load.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/load.groovy @@ -17,8 +17,8 @@ suite("regression_test_variant_doc_snapshot", "p0"){ - sql """ set default_variant_enable_doc_snapshot_mode = true """ - sql """ set default_variant_doc_snapshot_min_rows = 0 """ + sql """ set default_variant_enable_doc_mode = true """ + sql """ set default_variant_doc_materialization_min_rows = 0 """ def load_json_data = {table_name, file_name -> // load the json data streamLoad { diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy index 0eb5b8b3e9d1a3..f5f05b9f8924af 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy @@ -16,7 +16,7 @@ // under the License. suite("test_variant_predefine_doc_snapshot", "p0"){ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ sql """DROP TABLE IF EXISTS test_predefine""" def count = new Random().nextInt(10); if (new Random().nextInt(100) < 50) { diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy index ddd2bfd68987cd..2f79b3342f4c14 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy @@ -18,9 +18,9 @@ suite("predefine_insert_into_select_doc_snashot", "p0"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ def count = new Random().nextInt(5); - sql """ set default_variant_doc_snapshot_min_rows = ${count} """ + sql """ set default_variant_doc_materialization_min_rows = ${count} """ sql "DROP TABLE IF EXISTS fromTable" sql """CREATE TABLE fromTable ( diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy index 5c58b92dbb41d2..c09d20823b8424 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_pattern.groovy @@ -20,7 +20,7 @@ suite("variant_predefine_base_doc_snapshot", "p0"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ def count = new Random().nextInt(5) def tableName = "base_match_name_variant_test" sql "DROP TABLE IF EXISTS ${tableName}" diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy index 0c941e2116aec0..2459521eac0623 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy @@ -18,7 +18,7 @@ suite("predefine_schema_change_doc_snapshot", "p0"){ def tableName = "test_predefine_schema_change" sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ sql "DROP TABLE IF EXISTS ${tableName}" sql """CREATE TABLE ${tableName} ( `id` bigint NULL, diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy index 47848ee0673c42..073ad2e0da49a9 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_type_index.groovy @@ -20,7 +20,7 @@ suite("variant_predefine_index_doc_snapshot", "p0"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ def tableName = "test_variant_predefine_index_type" sql "DROP TABLE IF EXISTS ${tableName}" diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy index 7362483144ce1a..9d5e615b1b450e 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy @@ -23,7 +23,7 @@ suite("variant_predefine_with_sparse_limit_doc_snapshot", "p0") { def backendId_to_backendHttpPort = [:] getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ try { String backend_id = backendId_to_backendIP.keySet()[0] def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy index 68a34c05df3baa..5fa324458a829b 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy @@ -16,8 +16,8 @@ // under the License. suite("variant_predefine_with_mow_doc_snapshot", "p0") { - sql """ set default_variant_enable_doc_snapshot_mode = true """ - sql """ set default_variant_doc_snapshot_min_rows = 0 """ + sql """ set default_variant_enable_doc_mode = true """ + sql """ set default_variant_doc_materialization_min_rows = 0 """ sql "DROP TABLE IF EXISTS var_mow" sql """ CREATE TABLE `var_mow` ( diff --git a/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy b/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy index 3cf17f88e3ae7c..ea781afb06c950 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/schema_change/test_double_write_when_schema_change.groovy @@ -16,7 +16,7 @@ // under the License. suite("double_write_schema_change_doc_snapshot", "nonConcurrent") { - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ def set_be_config = { key, value -> String backend_id; def backendId_to_backendIP = [:] diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy index 201f087ea72da4..d8cef1a11baa50 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy @@ -19,7 +19,7 @@ import org.codehaus.groovy.runtime.IOGroovyMethods import org.awaitility.Awaitility suite("compaction_variant_doc_snapshot", "p0") { - sql """ set default_variant_enable_doc_snapshot_mode = true; """ + sql """ set default_variant_enable_doc_mode = true; """ try { String backend_id; def backendId_to_backendIP = [:] diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy index 21d0a21c5db4ef..ba4d1a041ccf15 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/test_outfile_csv_variant_type.groovy @@ -25,7 +25,7 @@ suite("outfile_csv_variant_doc_snapshot", "p0") { // open nereids sql """ set enable_nereids_planner=true """ sql """ set enable_fallback_to_original_planner=false """ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ String ak = getS3AK() String sk = getS3SK() diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy index 6262990e78341f..4b05a98ffc7d90 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/test_variant_external_meta_edge_cases.groovy @@ -16,7 +16,7 @@ // under the License. suite("variant_external_meta_doc_snapshot", "p0") { - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ def set_be_config = { key, value -> String backend_id; def backendId_to_backendIP = [:] diff --git a/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy b/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy index 01154bf84e7527..878d6a68ebc3a1 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy @@ -16,7 +16,7 @@ // under the License. suite("variant_hirachinal_doc_snapshot", "p0"){ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ def set_be_config = { key, value -> String backend_id; def backendId_to_backendIP = [:] @@ -31,7 +31,7 @@ suite("variant_hirachinal_doc_snapshot", "p0"){ def table_name = "var_rs" sql "DROP TABLE IF EXISTS ${table_name}" - sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_enable_doc_mode = false" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, diff --git a/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy b/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy index 8589170b2e91c8..b2028be9b9981f 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/with_index/test_array_contains_with_inverted_index.groovy @@ -26,7 +26,7 @@ suite("array_contains_with_index_doc_snapshot", "p0") { sql """ set enable_profile = true;""" sql "DROP TABLE IF EXISTS ${indexTblName}" - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ // create 1 replica table def storageFormat = new Random().nextBoolean() ? "V1" : "V2" if (storageFormat == "V1" && isCloudMode()) { diff --git a/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_integration.groovy b/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_integration.groovy index fa68799b0416ca..5cb0c1666a6f33 100644 --- a/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_integration.groovy +++ b/regression-test/suites/variant_p0/ext_meta/test_variant_external_meta_integration.groovy @@ -38,7 +38,7 @@ suite("test_variant_external_meta_integration", "nonConcurrent") { sql """ CREATE TABLE test_inverted_index_extracted ( k bigint, - v variant<'name':string, 'age':int>, + v variant<'name':string, 'age':int, PROPERTIES ("variant_doc_materialization_min_rows" = "0")>, INDEX idx_v (v) USING INVERTED PROPERTIES("parser" = "english") ) DUPLICATE KEY(`k`) @@ -66,7 +66,7 @@ suite("test_variant_external_meta_integration", "nonConcurrent") { sql """ CREATE TABLE test_parent_index ( k bigint, - v variant, + v variant, INDEX idx_v (v) USING INVERTED PROPERTIES("parser" = "english") ) DUPLICATE KEY(`k`) diff --git a/regression-test/suites/variant_p0/load.groovy b/regression-test/suites/variant_p0/load.groovy index d02dd9a3629207..ba855fd9363d36 100644 --- a/regression-test/suites/variant_p0/load.groovy +++ b/regression-test/suites/variant_p0/load.groovy @@ -76,7 +76,7 @@ suite("regression_test_variant", "p0"){ } sql "set experimental_enable_nereids_planner=true" sql "set enable_fallback_to_original_planner=false" - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ try { def key_types = ["DUPLICATE", "UNIQUE"] for (int i = 0; i < key_types.size(); i++) { diff --git a/regression-test/suites/variant_p0/nested.groovy b/regression-test/suites/variant_p0/nested.groovy index 4c44c55fdb5012..96d8a4a6e27e7a 100644 --- a/regression-test/suites/variant_p0/nested.groovy +++ b/regression-test/suites/variant_p0/nested.groovy @@ -20,7 +20,7 @@ suite("regression_test_variant_nested", "p0"){ def backendId_to_backendHttpPort = [:] getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); - sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_enable_doc_mode = false" sql "set default_variant_max_subcolumns_count = 0" sql "set default_variant_sparse_hash_shard_count = 0" sql "set default_variant_enable_typed_paths_to_sparse = false" diff --git a/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy b/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy index 83ff5655aace70..00e3d76b78896d 100644 --- a/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy +++ b/regression-test/suites/variant_p0/nested/nested_in_top_array.groovy @@ -18,7 +18,7 @@ // this test is used to test the nested in top array suite("nested_in_top_array", "p0"){ - sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_enable_doc_mode = false" sql "set default_variant_max_subcolumns_count = 0" sql "set default_variant_sparse_hash_shard_count = 0" sql "set default_variant_enable_typed_paths_to_sparse = false" diff --git a/regression-test/suites/variant_p0/nested2.groovy b/regression-test/suites/variant_p0/nested2.groovy index 36287446bfd10c..6b2138b114f360 100644 --- a/regression-test/suites/variant_p0/nested2.groovy +++ b/regression-test/suites/variant_p0/nested2.groovy @@ -18,7 +18,7 @@ // this test is used to test the type conflict of nested array suite("variant_nested_type_conflict", "p0"){ - sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_enable_doc_mode = false" sql "set default_variant_max_subcolumns_count = 0" sql "set default_variant_sparse_hash_shard_count = 0" sql "set default_variant_enable_typed_paths_to_sparse = false" diff --git a/regression-test/suites/variant_p0/predefine/load.groovy b/regression-test/suites/variant_p0/predefine/load.groovy index 9696f269adfb0d..8d5548fbf32697 100644 --- a/regression-test/suites/variant_p0/predefine/load.groovy +++ b/regression-test/suites/variant_p0/predefine/load.groovy @@ -16,7 +16,7 @@ // under the License. suite("regression_test_variant_predefine_schema", "p0"){ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql """DROP TABLE IF EXISTS test_predefine""" def count = new Random().nextInt(10); if (new Random().nextInt(100) < 50) { 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 index 7c5dcb1c6d54dc..bf0030e0b293b3 100644 --- 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 @@ -18,7 +18,7 @@ suite("test_all_prdefine_type_to_sparse", "p0"){ sql """ set describe_extend_variant_column = true """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ def tableName = "test_all_prdefine_type_to_sparse" sql "set enable_decimal256 = true" 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 3d25ac3b06067e..c3caf57e3a9cb2 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 @@ -20,7 +20,7 @@ suite("test_variant_multi_index_file", "p0, nonConcurrent"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql "set default_variant_max_subcolumns_count = 100" - sql """ set default_variant_doc_snapshot_min_rows = 0 """ + sql """ set default_variant_doc_materialization_min_rows = 0 """ def tableName = "test_variant_multi_index_nonCurrent" sql "DROP TABLE IF EXISTS ${tableName}" 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 24dca60e2e22fa..34c1669b8e7184 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 @@ -20,7 +20,7 @@ suite("test_variant_multi_index_nonCurrent", "p0, nonConcurrent") { sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_doc_snapshot_min_rows = 0 """ + sql """ set default_variant_doc_materialization_min_rows = 0 """ def queryAndCheck = { String sqlQuery, int expectedFilteredRows = -1, boolean checkFilterUsed = true -> def checkpoints_name = "segment_iterator.inverted_index.filtered_rows" 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 68b4f0eef74bb6..216ae377a48f86 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 @@ -18,7 +18,7 @@ suite("test_predefine_insert_into_select", "p0"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql "DROP TABLE IF EXISTS fromTable" sql """CREATE TABLE fromTable ( 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 f68c7d2fc86c25..3bb27d67ce2f62 100644 --- a/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy +++ b/regression-test/suites/variant_p0/predefine/test_predefine_ddl.groovy @@ -36,7 +36,7 @@ suite("test_predefine_ddl", "p0") { assertTrue(useTime <= OpTimeout, "wait_for_latest_op_on_table_finish timeout") } - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ sql """ set default_variant_max_subcolumns_count = 10 """ sql """ set default_variant_max_sparse_column_statistics_size = 10 """ 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 8d5ff4036aaeca..f1dba69d34bfc4 100644 --- a/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy +++ b/regression-test/suites/variant_p0/predefine/test_predefine_pattern.groovy @@ -20,7 +20,7 @@ suite("test_variant_predefine_base", "p0"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ def count = new Random().nextInt(5) def tableName = "base_match_name_variant_test" sql "DROP TABLE IF EXISTS ${tableName}" 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 9c55d0fec14d45..2b092c0b79b08b 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 @@ -18,7 +18,7 @@ suite("test_predefine_schema_change", "p0"){ def tableName = "test_predefine_schema_change" sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql "DROP TABLE IF EXISTS ${tableName}" sql """CREATE TABLE ${tableName} ( `id` bigint NULL, 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 a1335b3b230ac4..5d3bac0bd593bd 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 @@ -20,7 +20,7 @@ suite("test_variant_predefine_index_type", "p0"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ def tableName = "test_variant_predefine_index_type" sql "DROP TABLE IF EXISTS ${tableName}" 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 8c7f9cdf3dda2d..0129133d224029 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 @@ -23,7 +23,7 @@ suite("test_compaction_variant_predefine_with_sparse_limit", "nonConcurrent") { def backendId_to_backendHttpPort = [:] getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ try { String backend_id = backendId_to_backendIP.keySet()[0] def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) 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 b8bd5aa854d1ca..7e02811dd418c1 100644 --- a/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy +++ b/regression-test/suites/variant_p0/predefine/variant_with_mow.groovy @@ -16,7 +16,7 @@ // under the License. suite("variant_predefine_with_mow") { - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ sql "DROP TABLE IF EXISTS var_mow" sql """ CREATE TABLE `var_mow` ( 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 f051ce20df7bec..07ba70a41fcc95 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 @@ -20,7 +20,7 @@ suite("test_variant_is_null_expr", "p0, nonConcurrent") { // define a sql table def testTable = "test_variant_is_null_expr" sql "set default_variant_max_subcolumns_count = 10" - sql "set default_variant_doc_snapshot_min_rows = 0" + sql "set default_variant_doc_materialization_min_rows = 0" sql """ DROP TABLE IF EXISTS ${testTable} """ sql """ CREATE TABLE ${testTable} ( diff --git a/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy b/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy index ce5a5848867a51..d4a4f9bc12c31c 100644 --- a/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy +++ b/regression-test/suites/variant_p0/test_variant_search_subcolumn.groovy @@ -17,7 +17,7 @@ suite("test_variant_search_subcolumn") { def table_name = "test_variant_search_subcolumn" - sql "set default_variant_doc_snapshot_min_rows = 0" + sql "set default_variant_doc_materialization_min_rows = 0" sql "DROP TABLE IF EXISTS ${table_name}" diff --git a/regression-test/suites/variant_p0/variant_hirachinal.groovy b/regression-test/suites/variant_p0/variant_hirachinal.groovy index b8a6df5f2ccfae..d067135c66f032 100644 --- a/regression-test/suites/variant_p0/variant_hirachinal.groovy +++ b/regression-test/suites/variant_p0/variant_hirachinal.groovy @@ -30,7 +30,7 @@ suite("regression_test_variant_hirachinal", "variant_type"){ def table_name = "var_rs" sql "DROP TABLE IF EXISTS ${table_name}" - sql "set default_variant_enable_doc_snapshot_mode = false" + sql "set default_variant_enable_doc_mode = false" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, 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 fa716432dd91b3..4d6edf765166fe 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 @@ -26,7 +26,7 @@ suite("test_array_contains_with_inverted_index") { sql """ set enable_profile = true;""" sql "DROP TABLE IF EXISTS ${indexTblName}" - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ // create 1 replica table def storageFormat = new Random().nextBoolean() ? "V1" : "V2" if (storageFormat == "V1" && isCloudMode()) { diff --git a/regression-test/suites/variant_p1/doc_snapshot/load.groovy b/regression-test/suites/variant_p1/doc_snapshot/load.groovy index 7bdbdd70609d67..a75916a081bf28 100644 --- a/regression-test/suites/variant_p1/doc_snapshot/load.groovy +++ b/regression-test/suites/variant_p1/doc_snapshot/load.groovy @@ -20,7 +20,7 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite("predefine_type_multi_index_doc_snapshot", "p1"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = true """ + sql """ set default_variant_enable_doc_mode = true """ def load_json_data = {table_name, file_name -> // load the json data diff --git a/regression-test/suites/variant_p1/predefine/load.groovy b/regression-test/suites/variant_p1/predefine/load.groovy index 7f24eea8592b92..401c790809d4e0 100644 --- a/regression-test/suites/variant_p1/predefine/load.groovy +++ b/regression-test/suites/variant_p1/predefine/load.groovy @@ -20,7 +20,7 @@ import org.codehaus.groovy.runtime.IOGroovyMethods suite("test_predefine_type_multi_index", "p1"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_enable_doc_snapshot_mode = false """ + sql """ set default_variant_enable_doc_mode = false """ def load_json_data = {table_name, file_name -> // load the json data From 0bb895b3f8c1cf86bebf0723696f7110ca9033f2 Mon Sep 17 00:00:00 2001 From: csun5285 Date: Fri, 26 Dec 2025 19:02:05 +0800 Subject: [PATCH 4/6] fix --- .../variant/binary_column_reader.cpp | 44 ++ .../segment_v2/variant/binary_column_reader.h | 14 + .../variant/hierarchical_data_iterator.cpp | 31 +- .../variant/hierarchical_data_iterator.h | 13 +- .../variant/variant_column_reader.cpp | 100 ++--- .../variant/variant_column_reader.h | 23 +- .../segment_v2/variant/variant_statistics.h | 6 +- be/src/vec/columns/column_variant.cpp | 5 + .../org/apache/doris/catalog/VariantType.java | 40 +- .../doris/nereids/types/VariantType.java | 37 +- .../org/apache/doris/qe/SessionVariable.java | 2 - regression-test/data/variant_p0/desc.out | 50 +-- .../data/variant_p0/doc_snapshot/load.out | 14 +- .../doc_snapshot/predefine/load.out | 76 ++-- .../test_prdefine_insert_into_select.out | 12 +- .../test_predefine_schema_change.out | 8 +- ...t_variant_compaction_with_sparse_limit.out | 423 ------------------ .../predefine/variant_with_mow.out | 20 +- .../doc_snapshot/variant_hirachinal.out | 4 +- regression-test/data/variant_p0/nested.out | 2 +- .../variant_p0/nested/nested_in_top_array.out | 30 +- regression-test/data/variant_p0/nested2.out | 8 +- .../test_all_prdefine_type_to_sparse.out | 144 +++--- .../predefine/test_predefine_ddl.out | 8 +- .../doc_snapshot/predefine/load.groovy | 8 +- .../test_prdefine_insert_into_select.groovy | 14 +- .../test_predefine_schema_change.groovy | 13 +- ...ariant_compaction_with_sparse_limit.groovy | 120 ----- .../predefine/variant_with_mow.groovy | 1 - .../doc_snapshot/test_compaction.groovy | 2 +- .../doc_snapshot/variant_hirachinal.groovy | 3 +- .../variant_p0/insert_into_select.groovy | 1 + .../predefined_typed_to_sparse.groovy | 1 + .../predefine/test_custom_analyzer.groovy | 1 + .../test_multi_index_nonCurrent.groovy | 2 +- ...prdefine_typed_column_sparse_column.groovy | 1 + .../test_types_with_indexes_profile.groovy | 1 + ...iant_different_max_subcolumns_count.groovy | 1 + .../variant_p0/with_index/var_index.groovy | 1 + 39 files changed, 403 insertions(+), 881 deletions(-) delete mode 100644 regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out delete mode 100644 regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy diff --git a/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp index f37201a889569c..8cbaeb27992a86 100644 --- a/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp +++ b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.cpp @@ -20,6 +20,7 @@ #include #include +#include "olap/rowset/segment_v2/segment.h" #include "vec/columns/column_array.h" #include "vec/columns/column_map.h" #include "vec/columns/column_string.h" @@ -32,6 +33,49 @@ namespace doris::segment_v2 { #include "common/compile_check_begin.h" +Status DummyBinaryColumnReader::new_binary_column_iterator(ColumnIteratorUPtr* iter) const { + static const TabletColumn binary_column = []() { + TabletColumn binary_column; + binary_column.set_name("binary_column"); + binary_column.set_type(FieldType::OLAP_FIELD_TYPE_MAP); + binary_column.set_default_value("NULL"); + TabletColumn child_tcolumn; + child_tcolumn.set_type(FieldType::OLAP_FIELD_TYPE_STRING); + binary_column.add_sub_column(child_tcolumn); + binary_column.add_sub_column(child_tcolumn); + binary_column.set_is_nullable(false); + return binary_column; + }(); + RETURN_IF_ERROR(Segment::new_default_iterator(binary_column, iter)); + return Status::OK(); +} + +Status DummyBinaryColumnReader::add_binary_column_reader(std::shared_ptr reader, + uint32_t index) { + throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, + "DummyBinaryColumnReader does not support add_binary_column_reader"); +} + +std::pair, std::string> +DummyBinaryColumnReader::select_reader_and_cache_key(const std::string& relative_path) const { + throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, + "DummyBinaryColumnReader does not support select_reader_and_cache_key"); +} + +std::shared_ptr DummyBinaryColumnReader::select_reader(uint32_t index) const { + throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, + "DummyBinaryColumnReader does not support select_reader"); +} + +uint32_t DummyBinaryColumnReader::num_buckets() const { + throw doris::Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, + "DummyBinaryColumnReader does not support num_buckets"); +} + +BinaryColumnType DummyBinaryColumnReader::get_type() const { + return BinaryColumnType::DUMMY; +} + Status SingleSparseColumnReader::add_binary_column_reader(std::shared_ptr reader, uint32_t /*index*/) { if (_single_reader) { diff --git a/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h index 5aed43910751b8..0eab0019ffd996 100644 --- a/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h +++ b/be/src/olap/rowset/segment_v2/variant/binary_column_reader.h @@ -36,6 +36,7 @@ enum class BinaryColumnType { SINGLE_SPARSE = 0, MULTIPLE_SPARSE = 1, MULTIPLE_DOC_VALUE = 2, + DUMMY = 3, }; // Combine multiple bucket binary iterators into one logical iterator. @@ -60,6 +61,19 @@ class BinaryColumnReader { virtual BinaryColumnType get_type() const = 0; }; +// Dummy binary column reader for variant column without any binary data. +// for example, old version variant column without any binary data. +class DummyBinaryColumnReader : public BinaryColumnReader { +public: + Status new_binary_column_iterator(ColumnIteratorUPtr* iter) const override; + Status add_binary_column_reader(std::shared_ptr reader, uint32_t index) override; + std::pair, std::string> select_reader_and_cache_key( + const std::string& relative_path) const override; + std::shared_ptr select_reader(uint32_t index) const override; + uint32_t num_buckets() const override; + BinaryColumnType get_type() const override; +}; + class SingleSparseColumnReader : public BinaryColumnReader { public: Status add_binary_column_reader(std::shared_ptr reader, uint32_t index) override; diff --git a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp index 7b8a2f4237c02c..f9bfbabce7d0a6 100644 --- a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.cpp @@ -49,8 +49,9 @@ Status HierarchicalDataIterator::create(ColumnIteratorUPtr* reader, int32_t col_ ColumnReaderCache* column_reader_cache, OlapReaderStatistics* stats, ReadType read_type) { // None leave node need merge with root - std::unique_ptr stream_iter(new HierarchicalDataIterator(path)); - if (node != nullptr && read_type != ReadType::MERGE_ROOT_DOC) { + std::unique_ptr stream_iter( + new HierarchicalDataIterator(path, read_type)); + if (node != nullptr && read_type == ReadType::SUBCOLUMNS_AND_SPARSE) { std::vector leaves; vectorized::PathsInData leaves_paths; SubcolumnColumnMetaInfo::get_leaves_of_node(node, leaves, leaves_paths); @@ -68,7 +69,6 @@ Status HierarchicalDataIterator::create(ColumnIteratorUPtr* reader, int32_t col_ // need read from sparse column if not null stream_iter->_binary_column_reader = std::move(binary_column_reader); stream_iter->_stats = stats; - stream_iter->_read_type = read_type; *reader = std::move(stream_iter); return Status::OK(); @@ -84,7 +84,7 @@ Status HierarchicalDataIterator::init(const ColumnIteratorOptions& opts) { RETURN_IF_ERROR(_root_reader->iterator->init(opts)); _root_reader->inited = true; } - if (_binary_column_reader && !_binary_column_reader->inited) { + if (!_binary_column_reader->inited) { RETURN_IF_ERROR(_binary_column_reader->iterator->init(opts)); _binary_column_reader->inited = true; } @@ -100,10 +100,8 @@ Status HierarchicalDataIterator::seek_to_ordinal(ordinal_t ord) { DCHECK(_root_reader->inited); RETURN_IF_ERROR(_root_reader->iterator->seek_to_ordinal(ord)); } - if (_binary_column_reader) { - DCHECK(_binary_column_reader->inited); - RETURN_IF_ERROR(_binary_column_reader->iterator->seek_to_ordinal(ord)); - } + DCHECK(_binary_column_reader->inited); + RETURN_IF_ERROR(_binary_column_reader->iterator->seek_to_ordinal(ord)); return Status::OK(); } @@ -319,18 +317,12 @@ Status HierarchicalDataIterator::_process_sparse_column( vectorized::ColumnVariant& container_variant, size_t nrows) { using namespace vectorized; container_variant.clear_sparse_column(); - if (!_binary_column_reader) { - container_variant.get_sparse_column()->assume_mutable()->resize(nrows); - container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); - ENABLE_CHECK_CONSISTENCY(&container_variant); - return Status::OK(); - } // process sparse column if (_path.get_parts().empty()) { - if (_read_type == ReadType::MERGE_ROOT_SPARSE) { + if (_read_type == ReadType::SUBCOLUMNS_AND_SPARSE) { container_variant.set_sparse_column(_binary_column_reader->column->get_ptr()); container_variant.get_doc_value_column()->assume_mutable()->resize(nrows); - } else if (_read_type == ReadType::MERGE_ROOT_DOC) { + } else if (_read_type == ReadType::DOC_VALUE_COLUMN) { container_variant.set_doc_value_column(_binary_column_reader->column->get_ptr()); container_variant.get_sparse_column()->assume_mutable()->resize(nrows); } else { @@ -402,7 +394,8 @@ Status HierarchicalDataIterator::_process_sparse_column( lower_bound_index); } // Case 2: subcolumn not created yet and we still have quota → create it and insert. - else if (subcolumns_from_sparse_column.size() < count) { + else if (subcolumns_from_sparse_column.size() < count || + container_variant.max_subcolumns_count() == 0) { // Initialize subcolumn with current logical row index i to align sizes. ColumnVariant::Subcolumn subcolumn(/*size*/ i, /*is_nullable*/ true, false); @@ -477,9 +470,7 @@ Status HierarchicalDataIterator::_init_null_map_and_clear_columns( return Status::OK(); })); container->clear(); - if (_binary_column_reader) { - _binary_column_reader->column->clear(); - } + _binary_column_reader->column->clear(); if (_root_reader) { if (_root_reader->column->is_nullable()) { // fill nullmap diff --git a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h index 7ea5202f871f8e..c8b131701d4bca 100644 --- a/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h +++ b/be/src/olap/rowset/segment_v2/variant/hierarchical_data_iterator.h @@ -66,13 +66,10 @@ using PathsWithColumnAndType = std::vector; // Reader for hierarchical data for variant, merge with root(sparse encoded columns) class HierarchicalDataIterator : public ColumnIterator { public: - // Currently three types of read, merge sparse columns with root columns, merge doc columns with root columns, or read directly enum class ReadType { - MERGE_ROOT_SPARSE = 0, - MERGE_ROOT_DOC = 1, - READ_DIRECT = 2, + SUBCOLUMNS_AND_SPARSE = 0, + DOC_VALUE_COLUMN = 1, }; - static Status create(ColumnIteratorUPtr* reader, int32_t col_uid, vectorized::PathInData path, const SubcolumnColumnMetaInfo::Node* target_node, std::unique_ptr&& sparse_reader, @@ -101,9 +98,9 @@ class HierarchicalDataIterator : public ColumnIterator { size_t _rows_read = 0; vectorized::PathInData _path; OlapReaderStatistics* _stats = nullptr; - ReadType _read_type = ReadType::READ_DIRECT; - - HierarchicalDataIterator(const vectorized::PathInData& path) : _path(path) {} + ReadType _read_type = ReadType::SUBCOLUMNS_AND_SPARSE; + HierarchicalDataIterator(const vectorized::PathInData& path, ReadType read_type) + : _path(path), _read_type(read_type) {} template Status tranverse(NodeFunction&& node_func) { 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 f5038e90c34c04..1047a4eb2d0deb 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 @@ -23,8 +23,10 @@ #include #include +#include "binary_column_reader.h" #include "common/config.h" #include "common/status.h" +#include "hierarchical_data_iterator.h" #include "io/fs/file_reader.h" #include "olap/rowset/segment_v2/column_meta_accessor.h" #include "olap/rowset/segment_v2/column_reader.h" @@ -34,7 +36,6 @@ #include "olap/rowset/segment_v2/segment.h" #include "olap/rowset/segment_v2/variant/binary_column_extract_iterator.h" #include "olap/rowset/segment_v2/variant/binary_column_reader.h" -#include "olap/rowset/segment_v2/variant/hierarchical_data_iterator.h" #include "olap/rowset/segment_v2/variant/sparse_column_merge_iterator.h" #include "olap/rowset/segment_v2/variant/variant_doc_snapshot_iterator.h" #include "olap/rowset/segment_v2/variant/variant_doc_snpashot_compact_iterator.h" @@ -125,12 +126,11 @@ int64_t VariantColumnReader::get_metadata_size() const { return size; } -Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* reader, int32_t col_uid, - vectorized::PathInData path, - const SubcolumnColumnMetaInfo::Node* node, - const SubcolumnColumnMetaInfo::Node* root, - ColumnReaderCache* column_reader_cache, - OlapReaderStatistics* stats) { +Status VariantColumnReader::_create_hierarchical_reader( + ColumnIteratorUPtr* reader, int32_t col_uid, vectorized::PathInData path, + const SubcolumnColumnMetaInfo::Node* node, const SubcolumnColumnMetaInfo::Node* root, + ColumnReaderCache* column_reader_cache, OlapReaderStatistics* stats, + HierarchicalDataIterator::ReadType read_type) { // make sure external meta is loaded otherwise can't find any meta data for extracted columns // TODO(lhy): this will load all external meta if not loaded, and memory will be consumed. RETURN_IF_ERROR(load_external_meta_once()); @@ -141,27 +141,22 @@ Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* read // english only in comments std::shared_lock lock(_subcolumns_meta_mutex); - HierarchicalDataIterator::ReadType read_type = HierarchicalDataIterator::ReadType::READ_DIRECT; - - if (path == root->path) { - read_type = HierarchicalDataIterator::ReadType::MERGE_ROOT_SPARSE; - if (_binary_column_reader && - _binary_column_reader->get_type() == BinaryColumnType::MULTIPLE_DOC_VALUE) { - read_type = HierarchicalDataIterator::ReadType::MERGE_ROOT_DOC; - } - } - // Node contains column with children columns or has correspoding sparse columns // Create reader with hirachical data. std::unique_ptr sparse_iter; - if (_statistics->has_sparse_column_non_null_size() || - (_statistics->has_doc_column_non_null_size() && - read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT_DOC)) { - ColumnIteratorUPtr iter; + ColumnIteratorUPtr iter; + // if read from subcolumns, but the binary column reader is multiple doc value, + // use dummy binary column reader to insert default values to binary column. + if (read_type == HierarchicalDataIterator::ReadType::SUBCOLUMNS_AND_SPARSE && + _binary_column_reader->get_type() == BinaryColumnType::MULTIPLE_DOC_VALUE) { + DummyBinaryColumnReader dummy_binary_column_reader; + RETURN_IF_ERROR(dummy_binary_column_reader.new_binary_column_iterator(&iter)); + } else { RETURN_IF_ERROR(_binary_column_reader->new_binary_column_iterator(&iter)); - sparse_iter = std::make_unique( - vectorized::ColumnVariant::create_binary_column_fn(), std::move(iter), nullptr); } + + sparse_iter = std::make_unique( + vectorized::ColumnVariant::create_binary_column_fn(), std::move(iter), nullptr); if (node == nullptr) { node = _subcolumns_meta_info->find_exact(path); } @@ -170,8 +165,7 @@ Status VariantColumnReader::_create_hierarchical_reader(ColumnIteratorUPtr* read // we could make sure the data could be fully merged, since some column may not be extracted but remains in root // like {"a" : "b" : {"e" : 1.1}} in jsonb format std::unique_ptr root_column_reader; - if (read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT_SPARSE || - read_type == HierarchicalDataIterator::ReadType::MERGE_ROOT_DOC) { + if (path == root->path) { root_column_reader = std::make_unique( root->data.file_column_type->create_column(), std::make_unique(_root_column_reader), @@ -380,7 +374,7 @@ Status VariantColumnReader::_build_read_plan_flat_leaves( auto [reader, cache_key] = _binary_column_reader->select_reader_and_cache_key(relative_path.get_path()); DCHECK(reader != nullptr); - plan->kind = ReadKind::SPARSE_EXTRACT; + plan->kind = ReadKind::BINARY_EXTRACT; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; plan->binary_column_reader = std::move(reader); @@ -436,7 +430,7 @@ bool VariantColumnReader::_has_prefix_path_unlocked( // 2) Check sparse column stats: use lower_bound to test the `p.` prefix range // example sparse columns path: a.b.c, a.b.e, access prefix: a.b. // then we must read the sparse columns - if (_statistics->has_prefix_path(dot_prefix)) { + if (_statistics->has_prefix_path_in_sparse_column(dot_prefix)) { return true; } @@ -497,7 +491,7 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& // read root: from doc value column if (root->path == relative_path && _statistics->has_doc_column_non_null_size()) { - plan->kind = ReadKind::DOC_ALL; + plan->kind = ReadKind::HIERARCHICAL_DOC; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; plan->root = root; @@ -542,7 +536,7 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& auto [reader, cache_key] = _binary_column_reader->select_reader_and_cache_key(relative_path.get_path()); DCHECK(reader); - plan->kind = ReadKind::SPARSE_EXTRACT; + plan->kind = ReadKind::BINARY_EXTRACT; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; plan->binary_column_reader = std::move(reader); @@ -585,13 +579,23 @@ Status VariantColumnReader::_build_read_plan(ReadPlan* plan, const TabletColumn& // not found, need continue } + bool has_prefix_in_doc_column = + _statistics->has_prefix_path_in_doc_column(relative_path.get_path()); + if (has_prefix_in_doc_column) { + plan->kind = ReadKind::HIERARCHICAL_DOC; + plan->type = create_variant_type(target_col); + plan->relative_path = relative_path; + plan->root = root; + return Status::OK(); + } + // find if path exists in doc snapshot column bool existed_in_doc_column = _statistics->existed_in_doc_column(relative_path.get_path()); if (existed_in_doc_column) { auto [reader, cache_key] = _binary_column_reader->select_reader_and_cache_key(relative_path.get_path()); DCHECK(reader); - plan->kind = ReadKind::DOC_EXTRACT; + plan->kind = ReadKind::BINARY_EXTRACT; plan->type = create_variant_type(target_col); plan->relative_path = relative_path; plan->binary_column_reader = std::move(reader); @@ -631,9 +635,9 @@ Status VariantColumnReader::_create_iterator_from_plan( case ReadKind::HIERARCHICAL: { int32_t col_uid = target_col.unique_id() >= 0 ? target_col.unique_id() : target_col.parent_unique_id(); - RETURN_IF_ERROR(_create_hierarchical_reader(iterator, col_uid, plan.relative_path, - plan.node, plan.root, column_reader_cache, - opt->stats)); + RETURN_IF_ERROR(_create_hierarchical_reader( + iterator, col_uid, plan.relative_path, plan.node, plan.root, column_reader_cache, + opt->stats, HierarchicalDataIterator::ReadType::SUBCOLUMNS_AND_SPARSE)); return Status::OK(); } case ReadKind::LEAF: { @@ -644,7 +648,7 @@ Status VariantColumnReader::_create_iterator_from_plan( } return Status::OK(); } - case ReadKind::SPARSE_EXTRACT: { + case ReadKind::BINARY_EXTRACT: { DCHECK(plan.binary_column_reader != nullptr); BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( binary_column_cache_ptr, plan.binary_cache_key, plan.binary_column_reader)); @@ -682,26 +686,12 @@ Status VariantColumnReader::_create_iterator_from_plan( *iterator = std::make_unique(std::move(inner_iter)); return Status::OK(); } - case ReadKind::DOC_EXTRACT: { - DCHECK(plan.binary_column_reader != nullptr); - BinaryColumnCacheSPtr sparse_column_cache = DORIS_TRY(_get_binary_column_cache( - binary_column_cache_ptr, plan.binary_cache_key, plan.binary_column_reader)); - *iterator = std::make_unique( - plan.relative_path.get_path(), std::move(sparse_column_cache), opt); - // std::vector doc_snapshot_data_buckets; - // doc_snapshot_data_buckets.push_back(std::move(sparse_column_cache)); - // *iterator = std::make_unique(std::move(doc_snapshot_data_buckets), plan.relative_path.get_path()); - if (opt && opt->stats) { - opt->stats->variant_subtree_doc_snapshot_extract_iter_count++; - } - return Status::OK(); - } - case ReadKind::DOC_ALL: { + case ReadKind::HIERARCHICAL_DOC: { int32_t col_uid = target_col.unique_id() >= 0 ? target_col.unique_id() : target_col.parent_unique_id(); - RETURN_IF_ERROR(_create_hierarchical_reader(iterator, col_uid, plan.relative_path, - plan.node, plan.root, column_reader_cache, - opt->stats)); + RETURN_IF_ERROR(_create_hierarchical_reader( + iterator, col_uid, plan.relative_path, plan.node, plan.root, column_reader_cache, + opt->stats, HierarchicalDataIterator::ReadType::DOC_VALUE_COLUMN)); if (opt && opt->stats) { opt->stats->variant_subtree_doc_snapshot_all_iter_count++; } @@ -935,6 +925,12 @@ Status VariantColumnReader::init(const ColumnReaderOptions& opts, ColumnMetaAcce _statistics->sparse_column_non_null_size.emplace(path, size); } } + + // old version variant column without any binary data. + // if no binary column reader, use dummy binary column reader + if (_binary_column_reader == nullptr) { + _binary_column_reader = std::make_shared(); + } _segment_file_reader = file_reader; _num_rows = num_rows; // try build external meta readers (optional) 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 7cb150762e7ead..ec56326b8f1837 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 @@ -31,6 +31,7 @@ #include "olap/rowset/segment_v2/indexed_column_reader.h" #include "olap/rowset/segment_v2/page_handle.h" #include "olap/rowset/segment_v2/variant/binary_column_reader.h" +#include "olap/rowset/segment_v2/variant/hierarchical_data_iterator.h" #include "olap/rowset/segment_v2/variant/variant_external_meta_reader.h" #include "olap/rowset/segment_v2/variant/variant_statistics.h" #include "olap/tablet_schema.h" @@ -263,16 +264,15 @@ class VariantColumnReader : public ColumnReader { // Describe how a variant sub-path should be read. This is a logical plan only and // does not create any concrete ColumnIterator. enum class ReadKind { - ROOT_FLAT, // root variant using `VariantRootColumnIterator` - HIERARCHICAL, // hierarchical merge (root + subcolumns + sparse) - LEAF, // direct leaf reader - SPARSE_EXTRACT, // extract single path from sparse column - SPARSE_MERGE, // merge subcolumns into sparse column - DEFAULT_NESTED, // fill nested subcolumn using sibling nested column - DEFAULT_FILL, // default iterator when path not exist - DOC_COMPACT, // read from doc value column when compaction read - DOC_EXTRACT, // extract single path from doc value column when read - DOC_ALL, // read all paths from doc value column when read + ROOT_FLAT, // root variant using `VariantRootColumnIterator` + HIERARCHICAL, // hierarchical merge (root + subcolumns + sparse) + HIERARCHICAL_DOC, // hierarchical merge (root + doc) + LEAF, // direct leaf reader + BINARY_EXTRACT, // extract single path from sparse column + SPARSE_MERGE, // merge subcolumns into sparse column + DEFAULT_NESTED, // fill nested subcolumn using sibling nested column + DEFAULT_FILL, // default iterator when path not exist + DOC_COMPACT, // read from doc value column when compaction read }; struct ReadPlan { @@ -320,7 +320,8 @@ class VariantColumnReader : public ColumnReader { const SubcolumnColumnMetaInfo::Node* node, const SubcolumnColumnMetaInfo::Node* root, ColumnReaderCache* column_reader_cache, - OlapReaderStatistics* stats); + OlapReaderStatistics* stats, + HierarchicalDataIterator::ReadType read_type); // Create a reader that merges subcolumns into the destination sparse column. // If bucket_index is set, only subcolumns whose path belongs to this bucket will be merged. Status _create_sparse_merge_reader(ColumnIteratorUPtr* iterator, const StorageReadOptions* opts, diff --git a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h index 9296b49d1558ed..e80555fa86459a 100644 --- a/be/src/olap/rowset/segment_v2/variant/variant_statistics.h +++ b/be/src/olap/rowset/segment_v2/variant/variant_statistics.h @@ -60,12 +60,16 @@ struct VariantStatistics { return false; } - bool has_prefix_path(const std::string& dot_prefix) const { + bool has_prefix_path_in_sparse_column(const std::string& dot_prefix) const { auto find_sparse = sparse_column_non_null_size.lower_bound(dot_prefix); if (find_sparse != sparse_column_non_null_size.end() && find_sparse->first.starts_with(dot_prefix)) { return true; } + return false; + } + + bool has_prefix_path_in_doc_column(const std::string& dot_prefix) const { auto find_doc = doc_column_non_null_size.lower_bound(dot_prefix); if (find_doc != doc_column_non_null_size.end() && find_doc->first.starts_with(dot_prefix)) { return true; diff --git a/be/src/vec/columns/column_variant.cpp b/be/src/vec/columns/column_variant.cpp index 739a4862477a94..601dc86a840d17 100644 --- a/be/src/vec/columns/column_variant.cpp +++ b/be/src/vec/columns/column_variant.cpp @@ -2047,6 +2047,11 @@ bool ColumnVariant::only_have_default_values() const { return false; } } + const auto& sparse_offsets = serialized_sparse_column_offsets(); + const auto& doc_value_offsets = serialized_doc_value_column_offsets(); + if (sparse_offsets[num_rows - 1] != 0 || doc_value_offsets[num_rows - 1] != 0) { + return false; + } return true; } 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 2b850d3f23a104..2f48915cc253a6 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 @@ -155,26 +155,28 @@ public String toSql(int depth) { } sb.append("PROPERTIES ("); - sb.append("\"variant_max_subcolumns_count\" = \"") - .append(String.valueOf(variantMaxSubcolumnsCount)).append("\""); - sb.append(","); - sb.append("\"variant_enable_typed_paths_to_sparse\" = \"") - .append(String.valueOf(enableTypedPathsToSparse)).append("\""); - sb.append(","); - sb.append("\"variant_max_sparse_column_statistics_size\" = \"") - .append(String.valueOf(variantMaxSparseColumnStatisticsSize)).append("\""); - sb.append(","); - sb.append("\"variant_sparse_hash_shard_count\" = \"") - .append(String.valueOf(variantSparseHashShardCount)).append("\""); - sb.append(","); - sb.append("\"variant_enable_doc_mode\" = \"") + if (enableVariantDocSnapshotMode) { + sb.append("\"variant_enable_doc_mode\" = \"") .append(String.valueOf(enableVariantDocSnapshotMode)).append("\""); - sb.append(","); - sb.append("\"variant_doc_materialization_min_rows\" = \"") - .append(String.valueOf(variantDocSnapshotMinRows)).append("\""); - sb.append(","); - sb.append("\"variant_doc_hash_shard_count\" = \"") - .append(String.valueOf(variantDocSnapshotShardCount)).append("\""); + sb.append(","); + sb.append("\"variant_doc_materialization_min_rows\" = \"") + .append(String.valueOf(variantDocSnapshotMinRows)).append("\""); + sb.append(","); + sb.append("\"variant_doc_hash_shard_count\" = \"") + .append(String.valueOf(variantDocSnapshotShardCount)).append("\""); + } else { + sb.append("\"variant_max_subcolumns_count\" = \"") + .append(String.valueOf(variantMaxSubcolumnsCount)).append("\""); + sb.append(","); + sb.append("\"variant_enable_typed_paths_to_sparse\" = \"") + .append(String.valueOf(enableTypedPathsToSparse)).append("\""); + sb.append(","); + sb.append("\"variant_max_sparse_column_statistics_size\" = \"") + .append(String.valueOf(variantMaxSparseColumnStatisticsSize)).append("\""); + sb.append(","); + sb.append("\"variant_sparse_hash_shard_count\" = \"") + .append(String.valueOf(variantSparseHashShardCount)).append("\""); + } sb.append(")>"); return sb.toString(); } 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 3fe7562b52f486..a719048be7846f 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 @@ -145,31 +145,30 @@ public String toSql() { } sb.append("PROPERTIES ("); - sb.append("\"variant_max_subcolumns_count\" = \"") + if (enableVariantDocSnapshotMode) { + sb.append("\"variant_enable_doc_mode\" = \"") + .append(String.valueOf(enableVariantDocSnapshotMode)).append("\""); + sb.append(","); + sb.append("\"variant_doc_materialization_min_rows\" = \"") + .append(String.valueOf(variantDocSnapshotMinRows)).append("\""); + sb.append(","); + sb.append("\"variant_doc_hash_shard_count\" = \"") + .append(String.valueOf(variantDocSnapshotShardCount)).append("\""); + } else { + sb.append("\"variant_max_subcolumns_count\" = \"") .append(String.valueOf(variantMaxSubcolumnsCount)).append("\""); - sb.append(","); - sb.append("\"variant_enable_typed_paths_to_sparse\" = \"") + sb.append(","); + sb.append("\"variant_enable_typed_paths_to_sparse\" = \"") .append(String.valueOf(enableTypedPathsToSparse)).append("\""); - sb.append(","); - sb.append("\"variant_max_sparse_column_statistics_size\" = \"") + sb.append(","); + sb.append("\"variant_max_sparse_column_statistics_size\" = \"") .append(String.valueOf(variantMaxSparseColumnStatisticsSize)) .append("\""); - sb.append(","); - sb.append("\"variant_sparse_hash_shard_count\" = \"") + sb.append(","); + sb.append("\"variant_sparse_hash_shard_count\" = \"") .append(String.valueOf(variantSparseHashShardCount)) .append("\""); - sb.append(","); - sb.append("\"variant_enable_doc_mode\" = \"") - .append(String.valueOf(enableVariantDocSnapshotMode)) - .append("\""); - sb.append(","); - sb.append("\"variant_doc_materialization_min_rows\" = \"") - .append(String.valueOf(variantDocSnapshotMinRows)) - .append("\""); - sb.append(","); - sb.append("\"variant_doc_hash_shard_count\" = \"") - .append(String.valueOf(variantDocSnapshotShardCount)) - .append("\""); + } sb.append(")>"); return sb.toString(); } 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 da3d99f760d6e8..68a7c945d81a74 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 @@ -3264,8 +3264,6 @@ public void initFuzzyModeVariables() { if (this.defaultVariantEnableDocMode) { this.defaultVariantMaxSubcolumnsCount = 0; this.defaultEnableTypedPathsToSparse = false; - this.defaultVariantMaxSparseColumnStatisticsSize = 0; - this.defaultVariantSparseHashShardCount = 0; } else { this.defaultVariantDocMaterializationMinRows = 0L; this.defaultVariantDocHashShardCount = 0; diff --git a/regression-test/data/variant_p0/desc.out b/regression-test/data/variant_p0/desc.out index b8eb281dabcf4e..df00c6e60885a1 100644 --- a/regression-test/data/variant_p0/desc.out +++ b/regression-test/data/variant_p0/desc.out @@ -1,19 +1,19 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.ddd.mxmxm array Yes false \N NONE -- !sql_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -22,7 +22,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -34,7 +34,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -43,7 +43,7 @@ v.xxxx text Yes false \N NONE -- !sql_6_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -51,7 +51,7 @@ v.c.e double Yes false \N NONE -- !sql_6 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -63,7 +63,7 @@ v.xxxx text Yes false \N NONE -- !sql_7 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -72,13 +72,13 @@ v.xxxx text Yes false \N NONE -- !sql_7_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.xxxx text Yes false \N NONE -- !sql_7_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -86,7 +86,7 @@ v.c.e double Yes false \N NONE -- !sql_7_3 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -95,9 +95,9 @@ v.xxxx text Yes false \N NONE -- !sql_8 -- k bigint Yes true \N -v1 variant Yes false \N NONE -v2 variant Yes false \N NONE -v3 variant Yes false \N NONE +v1 variant Yes false \N NONE +v2 variant Yes false \N NONE +v3 variant Yes false \N NONE v1.a smallint Yes false \N NONE v1.b json Yes false \N NONE v1.c.c smallint Yes false \N NONE @@ -112,11 +112,11 @@ v3.c.e double Yes false \N NONE -- !sql_9 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql_9_1 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -125,7 +125,7 @@ v.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.k1 tinyint Yes false \N NONE v.k2 text Yes false \N NONE v.k3 array Yes false \N NONE @@ -134,8 +134,8 @@ v.k5 json Yes false \N NONE -- !sql_10_1 -- k bigint Yes true \N -v variant Yes false \N NONE -v2 variant Yes false \N NONE +v variant Yes false \N NONE +v2 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -154,7 +154,7 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -173,8 +173,8 @@ v2.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_10_3 -- k bigint Yes true \N -v variant Yes false \N NONE -v3 variant Yes false \N NONE +v variant Yes false \N NONE +v3 variant Yes false \N NONE v.a smallint Yes false \N NONE v.b json Yes false \N NONE v.c.c smallint Yes false \N NONE @@ -193,7 +193,7 @@ v3.oooo.xxxx.xxx tinyint Yes false \N NONE -- !sql_11 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.!@#^&*() text Yes false \N NONE v.名字 text Yes false \N NONE v.画像.丬文 text Yes false \N NONE @@ -202,11 +202,11 @@ v.金额 smallint Yes false \N NONE -- !sql_12 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE -- !sql15 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.a tinyint Yes false \N NONE v.b tinyint Yes false \N NONE v.c tinyint Yes false \N NONE diff --git a/regression-test/data/variant_p0/doc_snapshot/load.out b/regression-test/data/variant_p0/doc_snapshot/load.out index 661ecca1ddaff9..23c7377e4e20f7 100644 --- a/regression-test/data/variant_p0/doc_snapshot/load.out +++ b/regression-test/data/variant_p0/doc_snapshot/load.out @@ -115,8 +115,8 @@ 123456789101112 \N {"A":123456789101112} {"A":123456789101112} -- !sql_6 -- -\N \N -\N \N +\N {} +\N {} 123 \N \N 1 \N 123 @@ -140,8 +140,8 @@ \N 1 \N 123456 \N 123456789101112 -\N \N -\N \N +\N {} +\N {} -- !sql_11 -- 123 @@ -173,8 +173,8 @@ \N 1 {"A":1} \N \N 123456 {"A":123456} \N \N 123456789101112 {"A":123456789101112} \N -\N \N {"AA":[123456]} \N -\N \N {"AA":[123456789101112]} \N +\N {} {"AA":[123456]} \N +\N {} {"AA":[123456789101112]} \N 123.22 191191 {"A":191191,"a":123.22,"c":123} \N 123 \N {"a":"123","c":123456} \N 1.10111 1800 {"A":1800,"a":1.10111,"c":[12345]} \N @@ -212,7 +212,7 @@ [123] -- !sql_25 -- -50000 55000.00000000033 6150000 +50000 54999.99999997824 6150000 -- !sql_26 -- 5000 diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/load.out b/regression-test/data/variant_p0/doc_snapshot/predefine/load.out index e8a902e23494e6..c40da64dd1b8cd 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/load.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/load.out @@ -1,17 +1,17 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- -1 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} -2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} -3 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} -4 4 {"a":{"b":{"c":678910,"d":33.222}}} +1 1 {"a":{"b":{"c":"123456","d":"11.111"}},"dcm":123.456,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":199991111} +2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":"456.123","dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +3 3 {"dcm":789.123,"dt":"2025-01-01 11:11:11.1","ip":"127.0.0.1"} +4 4 {"a":{"b":{"c":"678910","d":"33.222"}}} 5 5 \N 6 6 \N 7 7 {"xxx":12345} 8 8 {"yyy":111.111} -9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} -10 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} -11 4 {"a":{"b":{"c":678910,"d":33.222}}} -12 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} +9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":"456.123","dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +10 1 {"a":{"b":{"c":"123456","d":"11.111"}},"dcm":123.456,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":199991111} +11 4 {"a":{"b":{"c":"678910","d":"33.222"}}} +12 3 {"dcm":789.123,"dt":"2025-01-01 11:11:11.1","ip":"127.0.0.1"} -- !sql -- 127.0.0.1 @@ -26,18 +26,12 @@ 123.456000000 -- !sql -- -123.456000000 -456.123000000 -789.123000000 -\N -\N -\N -\N -\N -456.123000000 -123.456000000 -\N -789.123000000 +123.456 +"456.123" +789.123 +"456.123" +123.456 +789.123 -- !sql -- 2022-01-01 11:11:11 @@ -48,16 +42,16 @@ 2022-01-01 11:11:11 -- !sql -- -2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} -9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":"456.123","dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":"456.123","dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} -- !sql -- -1 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} -2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} -3 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} -9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":456.123000000,"dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} -10 1 {"a":{"b":{"c":123456,"d":11.111}},"dcm":123.456000000,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":"199991111"} -12 3 {"dcm":789.123000000,"dt":"2025-01-01 11:11:11","ip":"127.0.0.1"} +1 1 {"a":{"b":{"c":"123456","d":"11.111"}},"dcm":123.456,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":199991111} +2 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":"456.123","dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +3 3 {"dcm":789.123,"dt":"2025-01-01 11:11:11.1","ip":"127.0.0.1"} +9 2 {"a":{"b":{"c":678910,"d":22.222}},"dcm":"456.123","dt":"2022-01-01 11:11:11","ip":"127.0.0.1","ss":"29999111"} +10 1 {"a":{"b":{"c":"123456","d":"11.111"}},"dcm":123.456,"dt":"2021-01-01 00:00:00","ip":"127.0.0.1","ss":199991111} +12 3 {"dcm":789.123,"dt":"2025-01-01 11:11:11.1","ip":"127.0.0.1"} -- !sql -- 1 {"predefine_col1":1024} @@ -70,15 +64,15 @@ 8 {"PREDEFINE_COL4":"2020-01-01-01"} -- !sql -- -1 {"array_boolean":[1, 0, 1],"array_date":["2021-01-01", "2022-01-01", "2023-01-01"],"array_datetime":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datev2":["2021-01-01", "2022-01-01", "2023-01-01"],"array_decimal":[1.100000000, 2.200000000, 3.300000000],"array_float":[1.111110000],"array_int":[1, 2, 3],"array_ipv4":["127.0.0.1", "172.0.1.1"],"array_ipv6":["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"],"array_string":["a", "b", "c"],"boolean_":1,"date_":"2022-01-01","datetime_":"2022-01-01 11:11:11","datetimev2_":"2022-01-01 11:11:11.999999","datev2_":"2022-01-01","decimal_":188118222.011121920,"float_":128.111000000,"int_":11111122,"ipv4_":"127.0.0.1","ipv6_":"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe","string_":"12111222113","varchar_":"hello world"} -2 {"array_boolean":[1, 0, 1, 0, 1],"array_date":["2021-01-01", "2022-01-01", "2023-01-01"],"array_datetime":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datev2":["2021-01-01", "2022-01-01", "2023-01-01"],"array_decimal":[1.100000000, 2.200000000, 3.300000000],"array_float":[2.222220000],"array_int":[1, 2, 3],"array_ipv4":["127.0.0.1", "172.0.1.1"],"array_ipv6":["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"],"array_string":["a", "b", "c"],"boolean_":1,"date_":"2022-01-01","datetime_":"2022-01-01 11:11:11","datetimev2_":"2022-01-01 11:11:11.999999","datev2_":"2022-01-01","decimal_":219911111111.011121933,"float_":1.111111111,"ipv4_":"127.0.0.1","ipv6_":"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe","string_":"12111222113","varchar_":"world hello"} -3 {"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"],"boolean_":1,"date_":"2022-01-01","decimal_":219911111111.011121933,"float_":1.111111111,"ipv4_":"127.0.0.1","varchar_":"world hello"} -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"} +1 {"array_boolean":[1, 0, 1],"array_date":["2021-01-01", "2022-01-01", "2023-01-01"],"array_datetime":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datev2":["2021-01-01", "2022-01-01", "2023-01-01"],"array_decimal":[1.1, 2.2, 3.3],"array_float":["1.11111"],"array_int":[1, 2, 3],"array_ipv4":["127.0.0.1", "172.0.1.1"],"array_ipv6":["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"],"array_string":["a", "b", "c"],"boolean_":1,"date_":"2022-01-01","datetime_":"2022-01-01 11:11:11","datetimev2_":"2022-01-01 11:11:11.999999","datev2_":"2022-01-01","decimal_":188118222.0111219,"float_":"128.111","int_":11111122,"ipv4_":"127.0.0.1","ipv6_":"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe","string_":12111222113,"varchar_":"hello world"} +2 {"array_boolean":[1, 0, 1, 0, 1],"array_date":["2021-01-01", "2022-01-01", "2023-01-01"],"array_datetime":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datetimev2":["2021-01-01 00:00:00", "2022-01-01 00:00:00", "2023-01-01 00:00:00"],"array_datev2":["2021-01-01", "2022-01-01", "2023-01-01"],"array_decimal":[1.1, 2.2, 3.3],"array_float":[2.22222],"array_int":["1", "2", 3],"array_ipv4":["127.0.0.1", "172.0.1.1"],"array_ipv6":["ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"],"array_string":["a", "b", "c"],"boolean_":1,"date_":"2022-01-01","datetime_":"2022-01-01 11:11:11","datetimev2_":"2022-01-01 11:11:11.999999","datev2_":"2022-01-01","decimal_":"219911111111.011121933","float_":1.111111111,"int_":"3333333333","ipv4_":"127.0.0.1","ipv6_":"ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe","string_":12111222113,"varchar_":"world hello"} +3 {"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"],"boolean_":1,"date_":"2022-01-01","decimal_":"219911111111.011121933","float_":1.111111111,"int_":"3333333333","ipv4_":"127.0.0.1","varchar_":"world hello"} +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 -- -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"} +101 {"a":1} {"dcm":1111111} \N +102 {"a":1} {"dcm":1111111} {"dcm":1111111} +103 {"a":1} {"dcm":1111111} {"dt":"2021-01-01 11:11:11"} -- !sql -- 1 {"nested":[{"a":123,"b":"456"}]} @@ -102,12 +96,12 @@ \N -- !sql_arr_null_1 -- -3 {"array_decimal":[null, 2.200000000, 3.300000000, 4.400000000]} +3 {"array_decimal":[null, 2.2, 3.3, 4.4]} -- !sql_arr_null_2 -- -1 {"array_decimal":[1.100000000, 2.200000000, 3.300000000, null]} -2 {"array_decimal":[1.100000000, 2.200000000, null, 4.400000000]} -3 {"array_decimal":[null, 2.200000000, 3.300000000, 4.400000000]} -4 {"array_decimal":[1.100000000, null, 3.300000000, 4.400000000]} -5 {"array_decimal":[1.100000000, 2.200000000, 3.300000000, 4.400000000]} +1 {"array_decimal":[1.1, 2.2, 3.3, null]} +2 {"array_decimal":[1.1, 2.2, null, 4.4]} +3 {"array_decimal":[null, 2.2, 3.3, 4.4]} +4 {"array_decimal":[1.1, null, 3.3, 4.4]} +5 {"array_decimal":[1.1, 2.2, 3.3, 4.4]} diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out index 4b787f3c133cb9..8cb49ecad4c18a 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.out @@ -1,20 +1,20 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +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"} +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"} 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 -- -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +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"} +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"} 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 -- 2 -- !sql -- -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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"} +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"} +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 -- 3 diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out index c1b595fe45e409..a77de8685ad042 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.out @@ -3,8 +3,8 @@ 2 -- !sql -- -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 +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 +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 -- {"__DORIS_VARIANT_DOC_VALUE__":"map"} @@ -14,8 +14,8 @@ 2 -- !sql -- -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 -1 {"a":"2025-04-16","b":123.123456789012,"c":"2025-04-17 17:09:09","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 +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 +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 -- {"__DORIS_VARIANT_DOC_VALUE__":"map"} diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out b/regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out deleted file mode 100644 index 0afb7064bb1f67..00000000000000 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.out +++ /dev/null @@ -1,423 +0,0 @@ --- This file is automatically generated. You should know what you did if you want to edit this --- !sql_1 -- -1 {"x":[1]} -1 {"x":[1]} -2 {"a":"1"} -2 {"a":"1"} -3 {"x":[3]} -3 {"x":[3]} -4 {"y":1} -4 {"y":1} -5 {"z":2} -5 {"z":2} -6 {"x":111} -6 {"x":111} -7 {"m":1} -7 {"m":1} -8 {"l":2} -8 {"l":2} -9 {"g":1.11} -9 {"g":1.11} -10 {"z":1.1111} -10 {"z":1.1111} -11 {"sala":0} -11 {"sala":0} -12 {"dddd":0.1} -12 {"dddd":0.1} -13 {"a":1} -13 {"a":1} -14 {"a":[[[1]]]} -14 {"a":[[[1]]]} -15 {"a":1} -15 {"a":1} -16 {"a":"1223"} -16 {"a":"1223"} -17 {"a":[1]} -17 {"a":[1]} -18 {"a":["2"]} -18 {"a":["2"]} -19 {"a":1,"b":{"c":1}} -19 {"a":1,"b":{"c":1}} -20 {"a":1,"b":{"c":[{"a":1}]}} -20 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -1022 {"a":1,"b":10} -1022 {"a":1,"b":10} -1029 {"a":1,"b":{"c":1}} -1029 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -19921 {"a":1,"b":10} -19921 {"a":1,"b":10} - --- !sql_2 -- -14 [null] -14 [null] -17 [1] -17 [1] -18 [2] -18 [2] - --- !sql_3 -- -19 1 {"c":1} -19 1 {"c":1} -20 1 {"c":[{"a":1}]} -20 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -1029 1 {"c":1} -1029 1 {"c":1} -1999 1 {"c":1} -1999 1 {"c":1} - --- !sql_5 -- -10 \N -10 \N -{"c":1} 1 -{"c":1} 1 -{"c":1} 1 -{"c":1} 1 -10 \N -10 \N -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] - --- !sql_11 -- -1 {"x":[1]} -1 {"x":[1]} -2 {"a":"1"} -2 {"a":"1"} -3 {"x":[3]} -3 {"x":[3]} -4 {"y":1} -4 {"y":1} -5 {"z":2} -5 {"z":2} -6 {"x":111} -6 {"x":111} -7 {"m":1} -7 {"m":1} -8 {"l":2} -8 {"l":2} -9 {"g":1.11} -9 {"g":1.11} -10 {"z":1.1111} -10 {"z":1.1111} -11 {"sala":0} -11 {"sala":0} -12 {"dddd":0.1} -12 {"dddd":0.1} -13 {"a":1} -13 {"a":1} -14 {"a":[[[1]]]} -14 {"a":[[[1]]]} -15 {"a":1} -15 {"a":1} -16 {"a":"1223"} -16 {"a":"1223"} -17 {"a":[1]} -17 {"a":[1]} -18 {"a":["2"]} -18 {"a":["2"]} -19 {"a":1,"b":{"c":1}} -19 {"a":1,"b":{"c":1}} -20 {"a":1,"b":{"c":[{"a":1}]}} -20 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -1022 {"a":1,"b":10} -1022 {"a":1,"b":10} -1029 {"a":1,"b":{"c":1}} -1029 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -19921 {"a":1,"b":10} -19921 {"a":1,"b":10} - --- !sql_22 -- -14 [null] -14 [null] -17 [1] -17 [1] -18 [2] -18 [2] - --- !sql_33 -- -19 1 {"c":1} -19 1 {"c":1} -20 1 {"c":[{"a":1}]} -20 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -1029 1 {"c":1} -1029 1 {"c":1} -1999 1 {"c":1} -1999 1 {"c":1} - --- !sql_55 -- -10 \N -10 \N -{"c":1} 1 -{"c":1} 1 -{"c":1} 1 -{"c":1} 1 -10 \N -10 \N -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] - --- !sql_1 -- -1 {"x":[1]} -2 {"a":"1"} -3 {"x":[3]} -4 {"y":1} -5 {"z":2} -6 {"x":111} -7 {"m":1} -8 {"l":2} -9 {"g":1.11} -10 {"z":1.1111} -11 {"sala":0} -12 {"dddd":0.1} -13 {"a":1} -14 {"a":[[[1]]]} -15 {"a":1} -16 {"a":"1223"} -17 {"a":[1]} -18 {"a":["2"]} -19 {"a":1,"b":{"c":1}} -20 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -1022 {"a":1,"b":10} -1029 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -19921 {"a":1,"b":10} - --- !sql_2 -- -14 [null] -17 [1] -18 [2] - --- !sql_3 -- -19 1 {"c":1} -20 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -1029 1 {"c":1} -1999 1 {"c":1} - --- !sql_5 -- -10 \N -{"c":1} 1 -{"c":1} 1 -10 \N -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":1} 1 - --- !sql_11 -- -1 {"x":[1]} -2 {"a":"1"} -3 {"x":[3]} -4 {"y":1} -5 {"z":2} -6 {"x":111} -7 {"m":1} -8 {"l":2} -9 {"g":1.11} -10 {"z":1.1111} -11 {"sala":0} -12 {"dddd":0.1} -13 {"a":1} -14 {"a":[[[1]]]} -15 {"a":1} -16 {"a":"1223"} -17 {"a":[1]} -18 {"a":["2"]} -19 {"a":1,"b":{"c":1}} -20 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -1022 {"a":1,"b":10} -1029 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -19921 {"a":1,"b":10} - --- !sql_22 -- -14 [null] -17 [1] -18 [2] - --- !sql_33 -- -19 1 {"c":1} -20 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -1029 1 {"c":1} -1999 1 {"c":1} - --- !sql_55 -- -10 \N -{"c":1} 1 -{"c":1} 1 -10 \N -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":1} 1 - --- !sql_1 -- -1 {"x":[1]} -2 {"a":"1"} -3 {"x":[3]} -4 {"y":1} -5 {"z":2} -6 {"x":111} -7 {"m":1} -8 {"l":2} -9 {"g":1.11} -10 {"z":1.1111} -11 {"sala":0} -12 {"dddd":0.1} -13 {"a":1} -14 {"a":[[[1]]]} -15 {"a":1} -16 {"a":"1223"} -17 {"a":[1]} -18 {"a":["2"]} -19 {"a":1,"b":{"c":1}} -20 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -1022 {"a":1,"b":10} -1029 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -19921 {"a":1,"b":10} - --- !sql_2 -- -14 [null] -17 [1] -18 [2] - --- !sql_3 -- -19 1 {"c":1} -20 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -1029 1 {"c":1} -1999 1 {"c":1} - --- !sql_5 -- -10 \N -{"c":1} 1 -{"c":1} 1 -10 \N -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":1} 1 - --- !sql_11 -- -1 {"x":[1]} -2 {"a":"1"} -3 {"x":[3]} -4 {"y":1} -5 {"z":2} -6 {"x":111} -7 {"m":1} -8 {"l":2} -9 {"g":1.11} -10 {"z":1.1111} -11 {"sala":0} -12 {"dddd":0.1} -13 {"a":1} -14 {"a":[[[1]]]} -15 {"a":1} -16 {"a":"1223"} -17 {"a":[1]} -18 {"a":["2"]} -19 {"a":1,"b":{"c":1}} -20 {"a":1,"b":{"c":[{"a":1}]}} -21 {"a":1,"b":{"c":[{"a":1}]}} -22 {"a":1,"b":{"c":[{"a":1}]}} -1022 {"a":1,"b":10} -1029 {"a":1,"b":{"c":1}} -1999 {"a":1,"b":{"c":1}} -19921 {"a":1,"b":10} - --- !sql_22 -- -14 [null] -17 [1] -18 [2] - --- !sql_33 -- -19 1 {"c":1} -20 1 {"c":[{"a":1}]} -21 1 {"c":[{"a":1}]} -22 1 {"c":[{"a":1}]} -1029 1 {"c":1} -1999 1 {"c":1} - --- !sql_55 -- -10 \N -{"c":1} 1 -{"c":1} 1 -10 \N -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":[{"a":1}]} [{"a":1}] -{"c":1} 1 - --- !select -- -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -1 {"x":[1]} -1 {"x":[1]} -2 {"a":"1"} - --- !select -- -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -1 {"x":[1]} -1 {"x":[1]} -2 {"a":"1"} - --- !select -- -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} - --- !select -- -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} - --- !select -- -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} - --- !select -- -1 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -2 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -3 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -4 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} -5 {"a":1,"b":{"c":1},"ddd":1,"sala":0,"z":10} - diff --git a/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out b/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out index c38288f973c38a..e9bcc91eb282a9 100644 --- a/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out +++ b/regression-test/data/variant_p0/doc_snapshot/predefine/variant_with_mow.out @@ -3,16 +3,16 @@ 1 -- !sql -- -944935233 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":30,"b":"40","c":50,"d":60,"e":70,"f":80,"g":90,"h":100,"i":110,"j":120} -944935234 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":31,"b":"41","c":51,"d":61,"e":71,"f":81,"g":91,"h":101,"i":111,"j":121} -944935235 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":32,"b":"42","c":52,"d":62,"e":72,"f":82,"g":92,"h":102,"i":112,"j":122} -944935236 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":33,"b":"43","c":53,"d":63,"e":73,"f":83,"g":93,"h":103,"i":113,"j":123} -944935237 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":34,"b":"44","c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124} +944935233 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":30,"b":40,"c":50,"d":60,"e":70,"f":80,"g":90,"h":100,"i":110,"j":120} +944935234 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":31,"b":41,"c":51,"d":61,"e":71,"f":81,"g":91,"h":101,"i":111,"j":121} +944935235 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":32,"b":42,"c":52,"d":62,"e":72,"f":82,"g":92,"h":102,"i":112,"j":122} +944935236 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":33,"b":43,"c":53,"d":63,"e":73,"f":83,"g":93,"h":103,"i":113,"j":123} +944935237 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":34,"b":44,"c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124} -- !sql -- -944935233 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":30,"b":"40","c":50,"d":60,"e":70,"f":80,"g":90,"h":100,"i":110,"j":120} -944935234 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":31,"b":"41","c":51,"d":61,"e":71,"f":81,"g":91,"h":101,"i":111,"j":121} -944935235 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":32,"b":"42","c":52,"d":62,"e":72,"f":82,"g":92,"h":102,"i":112,"j":122} -944935236 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":33,"b":"43","c":53,"d":63,"e":73,"f":83,"g":93,"h":103,"i":113,"j":123} -944935237 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":34,"b":"44","c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124} +944935233 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":30,"b":40,"c":50,"d":60,"e":70,"f":80,"g":90,"h":100,"i":110,"j":120} +944935234 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":31,"b":41,"c":51,"d":61,"e":71,"f":81,"g":91,"h":101,"i":111,"j":121} +944935235 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":32,"b":42,"c":52,"d":62,"e":72,"f":82,"g":92,"h":102,"i":112,"j":122} +944935236 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":33,"b":43,"c":53,"d":63,"e":73,"f":83,"g":93,"h":103,"i":113,"j":123} +944935237 2 1 1 true 1741682404960657985 1741682404960657985 0 {"a":34,"b":44,"c":54,"d":64,"e":74,"f":84,"g":94,"h":104,"i":114,"j":124} diff --git a/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out b/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out index 24179544e53235..ecab99926b9993 100644 --- a/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out +++ b/regression-test/data/variant_p0/doc_snapshot/variant_hirachinal.out @@ -42,9 +42,9 @@ \N -- !sql -- -{"a":1,"b":2,"c":{"d":2.00000}} +{"a":1,"b":2,"c":{"d":2}} {"a":3,"b":4} -{"c":{"d":6.00000}} +{"c":{"d":6}} \N {} diff --git a/regression-test/data/variant_p0/nested.out b/regression-test/data/variant_p0/nested.out index 0c283e2a4bcbc2..a322512537364e 100644 --- a/regression-test/data/variant_p0/nested.out +++ b/regression-test/data/variant_p0/nested.out @@ -1,7 +1,7 @@ -- This file is automatically generated. You should know what you did if you want to edit this -- !sql -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.aaa array Yes false \N NONE v.nested.ax1111 array Yes false \N NONE diff --git a/regression-test/data/variant_p0/nested/nested_in_top_array.out b/regression-test/data/variant_p0/nested/nested_in_top_array.out index 64e6134b797421..c5c995b5a88a22 100644 --- a/regression-test/data/variant_p0/nested/nested_in_top_array.out +++ b/regression-test/data/variant_p0/nested/nested_in_top_array.out @@ -45,7 +45,7 @@ \N \N \N -- !sql_18 -- -[1] ['1'] [1.1] +[1] ["1"] [1.1] -- !sql_19 -- \N \N \N @@ -111,8 +111,8 @@ \N \N \N -- !sql_18 -- -[1] ['1'] [1.1] -['2.5'] [123.1] \N +[1] ["1"] [1.1] +["2.5"] [123.1] \N -- !sql_19 -- \N \N \N @@ -194,8 +194,8 @@ \N \N \N -- !sql_18 -- -[1] ['1'] [1.1] -['2.5'] [123.1] \N +[1] ["1"] [1.1] +["2.5"] [123.1] \N {"b":[2],"c":[1]} \N \N -- !sql_19 -- @@ -294,10 +294,10 @@ \N \N \N -- !sql_18 -- -[1] ['1'] [1.1] -['2.5'] [123.1] \N +[1] ["1"] [1.1] +["2.5"] [123.1] \N {"b":[2],"c":[1]} \N \N -{"c":[1]} ['1'] {"a":[2]} +{"c":[1]} ["1"] {"a":[2]} -- !sql_19 -- \N \N \N @@ -411,10 +411,10 @@ \N \N \N -- !sql_18 -- -[1] ['1'] [1.1] -['2.5'] [123.1] \N +[1] ["1"] [1.1] +["2.5"] [123.1] \N {"b":[2],"c":[1]} \N \N -{"c":[1]} ['1'] {"a":[2]} +{"c":[1]} ["1"] {"a":[2]} [1] [1, 2, 3] \N -- !sql_19 -- @@ -530,11 +530,11 @@ \N \N \N -- !sql_18 -- -[1] ["1"] [1.1] -["2.5"] [123.1] {} +[1] [""1""] [1.1] +["2.5"] ["123.1"] {} {"b":[2],"c":[1]} \N {} -{"c":[1]} ["1"] {"a":[2]} -[1] [1, 2, 3] {} +{"c":[1]} [""1""] {"a":[2]} +[1] ["1", "2", "3"] {} -- !sql_19 -- \N \N \N diff --git a/regression-test/data/variant_p0/nested2.out b/regression-test/data/variant_p0/nested2.out index a54813cbf9f194..b0908ed29f9bb1 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 Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -50,7 +50,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_2 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -169,7 +169,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_4 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array Yes false \N NONE @@ -218,7 +218,7 @@ v.nested.c array Yes false \N NONE -- !sql_desc_5 -- k bigint Yes true \N -v variant Yes false \N NONE +v variant Yes false \N NONE v.nested.a array Yes false \N NONE v.nested.b array Yes false \N NONE v.nested.c array 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 index 2813b65ead88b4..644207f44c0108 100644 --- 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 @@ -8,13 +8,13 @@ -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.tinyint_1 tinyint Yes false \N NONE -- !sql -- @@ -25,13 +25,13 @@ var.tinyint_1 tinyint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.smallint_1 smallint Yes false \N NONE -- !sql -- @@ -45,13 +45,13 @@ var.smallint_1 smallint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.int_1 int Yes false \N NONE -- !sql -- @@ -69,13 +69,13 @@ var.int_1 int Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.bigint_1 bigint Yes false \N NONE -- !sql -- @@ -98,13 +98,13 @@ var.bigint_1 bigint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.largeint_1 largeint Yes false \N NONE -- !sql -- @@ -133,13 +133,13 @@ var.largeint_1 largeint Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.char_1 text Yes false \N NONE -- !sql -- @@ -175,13 +175,13 @@ var.char_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -225,13 +225,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.string_1 text Yes false \N NONE -- !sql -- @@ -283,13 +283,13 @@ var.string_1 text Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.double_1 double Yes false \N NONE -- !sql -- @@ -350,13 +350,13 @@ var.double_1 double Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.decimal32_1 decimal(8,2) Yes false \N NONE -- !sql -- @@ -427,13 +427,13 @@ var.decimal32_1 decimal(8,2) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.decimal64_1 decimal(16,9) Yes false \N NONE -- !sql -- @@ -515,13 +515,13 @@ var.decimal64_1 decimal(16,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.decimal128_1 decimal(36,9) Yes false \N NONE -- !sql -- @@ -615,13 +615,13 @@ var.decimal128_1 decimal(36,9) Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -728,13 +728,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.datetime_1 datetime 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !sql -- @@ -854,13 +854,13 @@ var.decimal256_1 unknown type: UNSUPPORTED_TYPE Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.date_1 date 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.date_1 date Yes false \N NONE -- !sql -- @@ -994,13 +994,13 @@ var.date_1 date Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.ipv4_1 ipv4 Yes false \N NONE -- !sql -- @@ -1149,13 +1149,13 @@ var.ipv4_1 ipv4 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1320,13 +1320,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_boolean_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.ipv6_1 ipv6 Yes false \N NONE -- !sql -- @@ -1507,13 +1507,13 @@ var.ipv6_1 ipv6 Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_tinyint_1 array Yes false \N NONE -- !sql -- @@ -1712,13 +1712,13 @@ var.array_tinyint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_smallint_1 array Yes false \N NONE var.array_tinyint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_smallint_1 array Yes false \N NONE -- !sql -- @@ -1936,13 +1936,13 @@ var.array_smallint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_int_1 array Yes false \N NONE var.array_smallint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_int_1 array Yes false \N NONE -- !sql -- @@ -2180,13 +2180,13 @@ var.array_int_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_int_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_bigint_1 array Yes false \N NONE -- !sql -- @@ -2445,13 +2445,13 @@ var.array_bigint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_bigint_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_largeint_1 array Yes false \N NONE -- !sql -- @@ -2732,13 +2732,13 @@ var.array_largeint_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_largeint_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_char_1 array Yes false \N NONE -- !sql -- @@ -3042,13 +3042,13 @@ var.array_char_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_char_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_string_1 array Yes false \N NONE -- !sql -- @@ -3376,13 +3376,13 @@ var.array_string_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_float_1 array Yes false \N NONE var.array_string_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_float_1 array Yes false \N NONE -- !sql -- @@ -3735,13 +3735,13 @@ var.array_float_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_double_1 array Yes false \N NONE var.array_float_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_double_1 array Yes false \N NONE -- !sql -- @@ -4120,13 +4120,13 @@ var.array_double_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_double_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE -- !sql -- @@ -4532,13 +4532,13 @@ var.array_decimal32_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal32_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal64_1 array Yes false \N NONE -- !sql -- @@ -4972,13 +4972,13 @@ var.array_decimal64_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal64_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE -- !sql -- @@ -5441,13 +5441,13 @@ var.array_decimal128_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal128_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_decimal256_1 array Yes false \N NONE -- !sql -- @@ -5940,13 +5940,13 @@ var.array_decimal256_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_datetime_1 array Yes false \N NONE var.array_decimal256_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_datetime_1 array Yes false \N NONE -- !sql -- @@ -6470,13 +6470,13 @@ var.array_datetime_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_datetime_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_date_1 array Yes false \N NONE -- !sql -- @@ -7032,13 +7032,13 @@ var.array_date_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_date_1 array Yes false \N NONE var.array_ipv4_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE -- !sql -- @@ -7627,13 +7627,13 @@ var.array_ipv4_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_ipv4_1 array Yes false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_ipv6_1 array Yes false \N NONE -- !sql -- @@ -8256,13 +8256,13 @@ var.array_ipv6_1 array Yes false \N NONE -- !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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.array_ipv6_1 array 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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3","variant_enable_doc_mode" = "false","variant_doc_materialization_min_rows" = "0","variant_doc_hash_shard_count" = "0")> No false \N NONE +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,'array_tinyint_*':array,'array_smallint_*':array,'array_int_*':array,'array_bigint_*':array,'array_largeint_*':array,'array_char_*':array,'array_string_*':array,'array_float_*':array,'array_double_*':array,'array_decimal32_*':array,'array_decimal64_*':array,'array_decimal128_*':array,'array_decimal256_*':array,'array_datetime_*':array,'array_date_*':array,'array_ipv4_*':array,'array_ipv6_*':array,PROPERTIES ("variant_max_subcolumns_count" = "1","variant_enable_typed_paths_to_sparse" = "true","variant_max_sparse_column_statistics_size" = "10000","variant_sparse_hash_shard_count" = "3")> No false \N NONE var.other_1 text Yes false \N NONE -- !sql -- diff --git a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out index 645654514d79df..b0ee634a7d292c 100644 --- a/regression-test/data/variant_p0/predefine/test_predefine_ddl.out +++ b/regression-test/data/variant_p0/predefine/test_predefine_ddl.out @@ -1,11 +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 Yes false \N NONE +var variant Yes false \N NONE -- !sql -- id bigint Yes true \N -var variant Yes false \N NONE -var2 variant Yes false \N NONE -var3 variant Yes false \N NONE +var variant Yes false \N NONE +var2 variant Yes false \N NONE +var3 variant Yes false \N NONE diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy index f5f05b9f8924af..3f69b84409522e 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/load.groovy @@ -17,12 +17,8 @@ suite("test_variant_predefine_doc_snapshot", "p0"){ sql """ set default_variant_enable_doc_mode = true """ + sql """ set default_variant_doc_materialization_min_rows = 1000000 """ sql """DROP TABLE IF EXISTS test_predefine""" - def count = new Random().nextInt(10); - if (new Random().nextInt(100) < 50) { - count = "1000" - } - sql """ set default_variant_max_subcolumns_count = ${count} """ sql """ set enable_variant_flatten_nested = true """ sql """ CREATE TABLE `test_predefine` ( @@ -50,7 +46,7 @@ suite("test_variant_predefine_doc_snapshot", "p0"){ 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';""" - qt_sql """select v1['dcm'] from test_predefine order by id;""" + qt_sql """select v1['dcm'] from test_predefine where length(cast(v1['dcm'] as string)) > 0 order by id;""" qt_sql """select v1['dt'] from test_predefine where cast(v1['dt'] as datetime) = '2022-01-01 11:11:11';""" qt_sql """select v1['dt'] from test_predefine where cast(v1['dt'] as datetime) = '2022-01-01 11:11:11' order by id limit 10""" qt_sql """select * from test_predefine where cast(v1['dt'] as datetime) = '2022-01-01 11:11:11' order by id limit 10;""" diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy index 2f79b3342f4c14..a22bcb5705b49c 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_prdefine_insert_into_select.groovy @@ -19,8 +19,12 @@ suite("predefine_insert_into_select_doc_snashot", "p0"){ sql """ set default_variant_enable_typed_paths_to_sparse = false """ sql """ set default_variant_enable_doc_mode = true """ - def count = new Random().nextInt(5); - sql """ set default_variant_doc_materialization_min_rows = ${count} """ + boolean minrowszero = new Random().nextBoolean(); + if (minrowszero) { + sql """ set default_variant_doc_materialization_min_rows = 0 """ + } else { + sql """ set default_variant_doc_materialization_min_rows = 1000000 """ + } sql "DROP TABLE IF EXISTS fromTable" sql """CREATE TABLE fromTable ( @@ -92,7 +96,11 @@ suite("predefine_insert_into_select_doc_snashot", "p0"){ sql """insert into toTable 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 """ set enable_match_without_inverted_index = false """ + if (minrowszero) { + sql """ set enable_match_without_inverted_index = false """ + } else { + sql """ set enable_match_without_inverted_index = true """ + } sql """ set enable_common_expr_pushdown = true """ order_qt_sql """ select count() from toTable where cast (var['d'] as string) match '123' """ } diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy index 2459521eac0623..61d7aa4ba84b77 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_predefine_schema_change.groovy @@ -18,6 +18,12 @@ suite("predefine_schema_change_doc_snapshot", "p0"){ def tableName = "test_predefine_schema_change" sql """ set default_variant_enable_typed_paths_to_sparse = false """ + boolean minrowszero = new Random().nextBoolean(); + if (minrowszero) { + sql """ set default_variant_doc_materialization_min_rows = 0 """ + } else { + sql """ set default_variant_doc_materialization_min_rows = 10000 """ + } sql """ set default_variant_enable_doc_mode = true """ sql "DROP TABLE IF EXISTS ${tableName}" sql """CREATE TABLE ${tableName} ( @@ -36,7 +42,12 @@ suite("predefine_schema_change_doc_snapshot", "p0"){ 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');""" - sql """ set enable_match_without_inverted_index = false """ + if (minrowszero) { + sql """ set enable_match_without_inverted_index = false """ + } else { + sql """ set enable_match_without_inverted_index = true """ + } + sql """ set enable_common_expr_pushdown = true """ qt_sql """ select count() from ${tableName} where cast (var['d'] as string) match '123' """ qt_sql """ select * from ${tableName} """ diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy deleted file mode 100644 index 9d5e615b1b450e..00000000000000 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/test_variant_compaction_with_sparse_limit.groovy +++ /dev/null @@ -1,120 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -import org.codehaus.groovy.runtime.IOGroovyMethods -import org.awaitility.Awaitility - -suite("variant_predefine_with_sparse_limit_doc_snapshot", "p0") { - def backendId_to_backendIP = [:] - def backendId_to_backendHttpPort = [:] - getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); - - sql """ set default_variant_enable_doc_mode = true """ - try { - String backend_id = backendId_to_backendIP.keySet()[0] - def (code, out, err) = show_be_config(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id)) - logger.info("Show config: code=" + code + ", out=" + out + ", err=" + err) - assertEquals(code, 0) - def configList = parseJson(out.trim()) - assert configList instanceof List - - boolean disableAutoCompaction = true - for (Object ele in (List) configList) { - assert ele instanceof List - if (((List) ele)[0] == "disable_auto_compaction") { - disableAutoCompaction = Boolean.parseBoolean(((List) ele)[2]) - } - } - - int max_sparse_column_statistics_size = 2 - def create_table = { tableName, buckets="auto", key_type="DUPLICATE" -> - sql "DROP TABLE IF EXISTS ${tableName}" - def var_def = "variant " - if (key_type == "AGGREGATE") { - var_def = "variant replace" - } - - sql """ - CREATE TABLE IF NOT EXISTS ${tableName} ( - k bigint, - v ${var_def} - ) - ${key_type} KEY(`k`) - DISTRIBUTED BY HASH(k) BUCKETS ${buckets} - properties("replication_num" = "1", "disable_auto_compaction" = "true"); - """ - def create_tbl_res = sql """ show create table ${tableName} """ - logger.info("${create_tbl_res}") - assertTrue(create_tbl_res.toString().contains("variant_max_sparse_column_statistics_size")) - } - def key_types = ["DUPLICATE", "UNIQUE", "AGGREGATE"] - // def key_types = ["AGGREGATE"] - for (int i = 0; i < key_types.size(); i++) { - def tableName = "simple_variant_${key_types[i]}" - // 1. simple cases - create_table.call(tableName, "1", key_types[i]) - def insert1 = { - sql """insert into ${tableName} values (1, '{"x" : [1]}'),(13, '{"a" : 1}');""" - sql """insert into ${tableName} values (2, '{"a" : "1"}'),(14, '{"a" : [[[1]]]}');""" - sql """insert into ${tableName} values (3, '{"x" : [3]}'),(15, '{"a" : 1}')""" - sql """insert into ${tableName} values (4, '{"y": 1}'),(16, '{"a" : "1223"}');""" - sql """insert into ${tableName} values (5, '{"z" : 2.0}'),(17, '{"a" : [1]}');""" - sql """insert into ${tableName} values (6, '{"x" : 111}'),(18, '{"a" : ["2"]}');""" - sql """insert into ${tableName} values (7, '{"m" : 1}'),(19, '{"a" : 1, "b" : {"c" : 1}}');""" - sql """insert into ${tableName} values (8, '{"l" : 2}'),(20, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" - sql """insert into ${tableName} values (9, '{"g" : 1.11}'),(21, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" - sql """insert into ${tableName} values (10, '{"z" : 1.1111}'),(22, '{"a" : 1, "b" : {"c" : [{"a" : 1}]}}');""" - sql """insert into ${tableName} values (11, '{"sala" : 0}'),(1999, '{"a" : 1, "b" : {"c" : 1}}'),(19921, '{"a" : 1, "b" : 10}');""" - sql """insert into ${tableName} values (12, '{"dddd" : 0.1}'),(1022, '{"a" : 1, "b" : 10}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" - } - insert1.call(); - insert1.call(); - qt_sql_1 "SELECT * FROM ${tableName} ORDER BY k, cast(v as string); " - qt_sql_2 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" - qt_sql_3 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" - qt_sql_5 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != 'null' and cast(v['b'] as string) != '{}' order by k desc, 1, 2 limit 10;" - - // trigger compactions for all tablets in ${tableName} - trigger_and_wait_compaction(tableName, "cumulative") - qt_sql_11 "SELECT * FROM ${tableName} ORDER BY k, cast(v as string); " - qt_sql_22 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" - qt_sql_33 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" - qt_sql_55 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != 'null' and cast(v['b'] as string) != '{}' order by k desc limit 10;" - } - for (int i = 0; i < key_types.size(); i++) { - def tableName = "simple_variant_${key_types[i]}" - def insert2 = { - sql """insert into ${tableName} values (1, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" - sql """insert into ${tableName} values (2, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" - sql """insert into ${tableName} values (3, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" - sql """insert into ${tableName} values (4, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" - sql """insert into ${tableName} values (5, '{"sala" : 0.1, "ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1022, '{"ddd" : 1, "z" : 10, "a" : 1, "b" : {"c" : 1}}'),(1029, '{"a" : 1, "b" : {"c" : 1}}');""" - } - insert2.call(); - insert2.call(); - trigger_and_wait_compaction(tableName, "cumulative") - sql "set topn_opt_limit_threshold = 1" - order_qt_select "select * from ${tableName} order by k, cast(v as string) limit 5;" - sql "set topn_opt_limit_threshold = 10" - order_qt_select "select * from ${tableName} order by k, cast(v as string) limit 5;" - } - } finally { - // sql "DROP TABLE IF EXISTS simple_variant_DUPLICATE" - // sql "DROP TABLE IF EXISTS simple_variant_UNIQUE" - // sql "DROP TABLE IF EXISTS simple_variant_AGGREGATE" - } -} diff --git a/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy b/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy index 5fa324458a829b..920d924ab0786e 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/predefine/variant_with_mow.groovy @@ -17,7 +17,6 @@ suite("variant_predefine_with_mow_doc_snapshot", "p0") { sql """ set default_variant_enable_doc_mode = true """ - sql """ set default_variant_doc_materialization_min_rows = 0 """ sql "DROP TABLE IF EXISTS var_mow" sql """ CREATE TABLE `var_mow` ( diff --git a/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy b/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy index d8cef1a11baa50..b1a2fe901e9794 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/test_compaction.groovy @@ -85,7 +85,7 @@ suite("compaction_variant_doc_snapshot", "p0") { qt_sql_1 "SELECT * FROM ${tableName} ORDER BY k, cast(v as string); " qt_sql_2 "select k, cast(v['a'] as array) from ${tableName} where size(cast(v['a'] as array)) > 0 order by k" qt_sql_3 "select k, v['a'], cast(v['b'] as string) from ${tableName} where length(cast(v['b'] as string)) > 4 order by k" - qt_sql_5 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != null or cast(v['b'] as string) != '{}' or cast(v['b'] as string) is not null or v['b'] is not null order by k desc, 1, 2 limit 10;" + qt_sql_5 "select cast(v['b'] as string), cast(v['b']['c'] as string) from ${tableName} where cast(v['b'] as string) != null or cast(v['b'] as string) != '{}' order by k desc, 1, 2 limit 10;" //TabletId,ReplicaId,BackendId,SchemaHash,Version,LstSuccessVersion,LstFailedVersion,LstFailedTime,LocalDataSize,RemoteDataSize,RowCount,State,LstConsistencyCheckTime,CheckVersion,VersionCount,QueryHits,PathHash,MetaUrl,CompactionStatus diff --git a/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy b/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy index 878d6a68ebc3a1..b34ebb87e1cbf2 100644 --- a/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy +++ b/regression-test/suites/variant_p0/doc_snapshot/variant_hirachinal.groovy @@ -16,7 +16,7 @@ // under the License. suite("variant_hirachinal_doc_snapshot", "p0"){ - sql """ set default_variant_enable_doc_mode = true """ + sql """ set default_variant_enable_doc_mode = false """ def set_be_config = { key, value -> String backend_id; def backendId_to_backendIP = [:] @@ -31,7 +31,6 @@ suite("variant_hirachinal_doc_snapshot", "p0"){ def table_name = "var_rs" sql "DROP TABLE IF EXISTS ${table_name}" - sql "set default_variant_enable_doc_mode = false" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( k bigint, diff --git a/regression-test/suites/variant_p0/insert_into_select.groovy b/regression-test/suites/variant_p0/insert_into_select.groovy index 71a092b6650f49..f4525f570468db 100644 --- a/regression-test/suites/variant_p0/insert_into_select.groovy +++ b/regression-test/suites/variant_p0/insert_into_select.groovy @@ -17,6 +17,7 @@ suite("regression_test_variant_insert_into_select", "variant_type"){ def table_name = "insert_into_select" + sql """ set default_variant_enable_doc_mode = false """ 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/predefined_typed_to_sparse.groovy b/regression-test/suites/variant_p0/predefine/predefined_typed_to_sparse.groovy index cdd888ae0fcc4b..f51847a202af0e 100644 --- a/regression-test/suites/variant_p0/predefine/predefined_typed_to_sparse.groovy +++ b/regression-test/suites/variant_p0/predefine/predefined_typed_to_sparse.groovy @@ -16,6 +16,7 @@ // under the License. suite("test_predefine_typed_to_sparse", "p0"){ sql """ set enable_common_expr_pushdown = true """ + sql """ set default_variant_enable_doc_mode = false """ def count = new Random().nextInt(10) + 1 def load_json_data = {table_name, file_name -> diff --git a/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy b/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy index 3acff0a7541bdf..ff7c66e29961a4 100644 --- a/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy +++ b/regression-test/suites/variant_p0/predefine/test_custom_analyzer.groovy @@ -24,6 +24,7 @@ suite("test_variant_custom_analyzer", "p0") { sql "set default_variant_max_subcolumns_count = 100" sql """ set enable_match_without_inverted_index = false """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_mode = false """ sql """ CREATE INVERTED INDEX TOKENIZER IF NOT EXISTS edge_ngram_phone_number_tokenizer 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 34c1669b8e7184..46f5d22ed8eb18 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 @@ -20,7 +20,7 @@ suite("test_variant_multi_index_nonCurrent", "p0, nonConcurrent") { sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ - sql """ set default_variant_doc_materialization_min_rows = 0 """ + sql """ set default_variant_enable_doc_mode = false """ def queryAndCheck = { String sqlQuery, int expectedFilteredRows = -1, boolean checkFilterUsed = true -> def checkpoints_name = "segment_iterator.inverted_index.filtered_rows" 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 10f109782e0453..6a0dbdcec9835f 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 @@ -19,6 +19,7 @@ suite("test_predefine_typed_sparse", "p0"){ def tableName = "test_predefine_typed_sparse" sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_mode = false """ sql "DROP TABLE IF EXISTS ${tableName}" sql """CREATE TABLE ${tableName} ( `id` bigint NULL, 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 2ecca0dcb9ac88..ff7898a3b53147 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 @@ -19,6 +19,7 @@ suite("test_variant_predefine_types_with_indexes_profile", "p0,nonConcurrent"){ sql """ set enable_match_without_inverted_index = false """ sql """ set enable_common_expr_pushdown = true """ sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_mode = false """ def load_json_data = {table_name, file_name -> // load the json data diff --git a/regression-test/suites/variant_p0/predefine/variant_different_max_subcolumns_count.groovy b/regression-test/suites/variant_p0/predefine/variant_different_max_subcolumns_count.groovy index 4fd39346f02b87..189d7e4a5fac22 100644 --- a/regression-test/suites/variant_p0/predefine/variant_different_max_subcolumns_count.groovy +++ b/regression-test/suites/variant_p0/predefine/variant_different_max_subcolumns_count.groovy @@ -19,6 +19,7 @@ suite("variant_different_max_subcolumns_count", "p0") { def table_name = "variant_different_max_subcolumns_count" + sql """ set default_variant_enable_doc_mode = false """ sql "DROP TABLE IF EXISTS ${table_name}" sql """ CREATE TABLE IF NOT EXISTS ${table_name} ( 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 5642ad111bfb3c..976772d51d2e7a 100644 --- a/regression-test/suites/variant_p0/with_index/var_index.groovy +++ b/regression-test/suites/variant_p0/with_index/var_index.groovy @@ -18,6 +18,7 @@ suite("regression_test_variant_var_index", "p0, nonConcurrent"){ def table_name = "var_index" sql """ set default_variant_enable_typed_paths_to_sparse = false """ + sql """ set default_variant_enable_doc_mode = false """ sql "DROP TABLE IF EXISTS var_index" sql """ CREATE TABLE IF NOT EXISTS var_index ( From 73fd8702ce9ab59c42c7378f13269226e2baf6e5 Mon Sep 17 00:00:00 2001 From: csun5285 Date: Fri, 26 Dec 2025 21:09:58 +0800 Subject: [PATCH 5/6] fix --- be/src/olap/rowset/segment_v2/variant/Untitled | 1 - 1 file changed, 1 deletion(-) delete mode 100644 be/src/olap/rowset/segment_v2/variant/Untitled diff --git a/be/src/olap/rowset/segment_v2/variant/Untitled b/be/src/olap/rowset/segment_v2/variant/Untitled deleted file mode 100644 index 9943885fc14de1..00000000000000 --- a/be/src/olap/rowset/segment_v2/variant/Untitled +++ /dev/null @@ -1 +0,0 @@ -_init_container \ No newline at end of file From 3e56c7a49fe2658693c7c7db7a83cb58b6be61cf Mon Sep 17 00:00:00 2001 From: csun5285 Date: Sat, 27 Dec 2025 14:02:31 +0800 Subject: [PATCH 6/6] fix --- be/src/olap/rowset/segment_v2/segment.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/be/src/olap/rowset/segment_v2/segment.h b/be/src/olap/rowset/segment_v2/segment.h index 744eee46299567..6b661caed5a4fd 100644 --- a/be/src/olap/rowset/segment_v2/segment.h +++ b/be/src/olap/rowset/segment_v2/segment.h @@ -77,6 +77,11 @@ using SparseColumnCacheSPtr = std::shared_ptr; using PathToSparseColumnCache = std::unordered_map; using PathToSparseColumnCacheUPtr = std::unique_ptr; +struct BinaryColumnCache; +using BinaryColumnCacheSPtr = std::shared_ptr; +using PathToBinaryColumnCache = std::unordered_map; +using PathToBinaryColumnCacheUPtr = std::unique_ptr; + // A Segment is used to represent a segment in memory format. When segment is // generated, it won't be modified, so this struct aimed to help read operation. // It will prepare all ColumnReader to create ColumnIterator as needed.