diff --git a/ydb/core/formats/arrow/converter.cpp b/ydb/core/formats/arrow/converter.cpp index c00d5ec021b2..da851281f72b 100644 --- a/ydb/core/formats/arrow/converter.cpp +++ b/ydb/core/formats/arrow/converter.cpp @@ -39,9 +39,6 @@ static bool ConvertData(TCell& cell, const NScheme::TTypeInfo& colType, TMemoryP cell = TCell(saved.data(), saved.size()); break; } - case NScheme::NTypeIds::Decimal: - errorMessage = "Decimal conversion is not supported yet"; - return false; default: break; } diff --git a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp index 0aa94620b647..1b25f314e4bf 100644 --- a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp +++ b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp @@ -6664,7 +6664,7 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) { }; TTestHelper::TColumnTable testTable; - testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id"}).SetSharding({"id"}).SetSchema(schema); + testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id", "dec"}).SetSharding({"id", "dec"}).SetSchema(schema); testHelper.CreateTable(testTable); { @@ -6690,6 +6690,30 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) { .AddMember("id").Int64(5) .AddMember("dec").Decimal(TString("-nan")) .EndStruct(); + builder.AddListItem().BeginStruct() + .AddMember("id").Int64(6) + .AddMember("dec").Decimal(TString("1.1")) + .EndStruct(); + builder.AddListItem().BeginStruct() + .AddMember("id").Int64(7) + .AddMember("dec").Decimal(TString("12.1")) + .EndStruct(); + builder.AddListItem().BeginStruct() + .AddMember("id").Int64(8) + .AddMember("dec").Decimal(TString("inf")) + .EndStruct(); + builder.AddListItem().BeginStruct() + .AddMember("id").Int64(9) + .AddMember("dec").Decimal(TString("-inf")) + .EndStruct(); + builder.AddListItem().BeginStruct() + .AddMember("id").Int64(10) + .AddMember("dec").Decimal(TString("2.1")) + .EndStruct(); + builder.AddListItem().BeginStruct() + .AddMember("id").Int64(11) + .AddMember("dec").Decimal(TString("15.1")) + .EndStruct(); builder.EndList(); const auto result = testHelper.GetKikimr().GetTableClient().BulkUpsert(testTable.GetName(), builder.Build()).GetValueSync(); UNIT_ASSERT_C(result.IsSuccess() , result.GetIssues().ToString()); @@ -6699,6 +6723,13 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) { testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id=3", "[[\"-inf\"]]"); testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id=4", "[[\"nan\"]]"); testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id=5", "[[\"-nan\"]]"); + testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"10.1\" As Decimal(22,9))", "[[1]]"); + testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"inf\" As Decimal(22,9)) ORDER BY id", "[[2];[8]]"); + testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"-inf\" As Decimal(22,9)) ORDER BY id", "[[3];[9]]"); + // Nan cannot by find. + testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"nan\" As Decimal(22,9))", "[]"); + testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"-nan\" As Decimal(22,9))", "[]"); + testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id > 5 ORDER BY dec", "[[\"-inf\"];[\"1.1\"];[\"2.1\"];[\"12.1\"];[\"15.1\"];[\"inf\"]]"); } Y_UNIT_TEST(TimestampCmpErr) { diff --git a/ydb/core/tx/columnshard/transactions/operators/schema.cpp b/ydb/core/tx/columnshard/transactions/operators/schema.cpp index bd3d51394dcc..4ce3e4125665 100644 --- a/ydb/core/tx/columnshard/transactions/operators/schema.cpp +++ b/ydb/core/tx/columnshard/transactions/operators/schema.cpp @@ -68,7 +68,8 @@ NKikimr::TConclusionStatus TSchemaTransactionOperator::ValidateTableSchema(const //NTypeIds::Float, //NTypeIds::Double, NTypeIds::String, - NTypeIds::Utf8 + NTypeIds::Utf8, + NTypeIds::Decimal }; if (!schema.HasEngine() || schema.GetEngine() != NKikimrSchemeOp::EColumnTableEngine::COLUMN_ENGINE_REPLACING_TIMESERIES) { diff --git a/ydb/core/tx/schemeshard/olap/columns/update.cpp b/ydb/core/tx/schemeshard/olap/columns/update.cpp index 23d587ae92d3..83a3e62f6153 100644 --- a/ydb/core/tx/schemeshard/olap/columns/update.cpp +++ b/ydb/core/tx/schemeshard/olap/columns/update.cpp @@ -196,6 +196,7 @@ namespace NKikimr::NSchemeShard { case NYql::NProto::Datetime64: case NYql::NProto::Timestamp64: case NYql::NProto::Interval64: + case NYql::NProto::Decimal: return true; default: return false;