Skip to content

Commit ccdedf8

Browse files
authored
Use Decimal(22, 9) as Primary Key in Olap (ydb-platform#4716)
1 parent f208fbb commit ccdedf8

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

ydb/core/formats/arrow/converter.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ static bool ConvertData(TCell& cell, const NScheme::TTypeInfo& colType, TMemoryP
3939
cell = TCell(saved.data(), saved.size());
4040
break;
4141
}
42-
case NScheme::NTypeIds::Decimal:
43-
errorMessage = "Decimal conversion is not supported yet";
44-
return false;
4542
default:
4643
break;
4744
}

ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6664,7 +6664,7 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) {
66646664
};
66656665

66666666
TTestHelper::TColumnTable testTable;
6667-
testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id"}).SetSharding({"id"}).SetSchema(schema);
6667+
testTable.SetName("/Root/ColumnTableTest").SetPrimaryKey({"id", "dec"}).SetSharding({"id", "dec"}).SetSchema(schema);
66686668
testHelper.CreateTable(testTable);
66696669

66706670
{
@@ -6690,6 +6690,30 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) {
66906690
.AddMember("id").Int64(5)
66916691
.AddMember("dec").Decimal(TString("-nan"))
66926692
.EndStruct();
6693+
builder.AddListItem().BeginStruct()
6694+
.AddMember("id").Int64(6)
6695+
.AddMember("dec").Decimal(TString("1.1"))
6696+
.EndStruct();
6697+
builder.AddListItem().BeginStruct()
6698+
.AddMember("id").Int64(7)
6699+
.AddMember("dec").Decimal(TString("12.1"))
6700+
.EndStruct();
6701+
builder.AddListItem().BeginStruct()
6702+
.AddMember("id").Int64(8)
6703+
.AddMember("dec").Decimal(TString("inf"))
6704+
.EndStruct();
6705+
builder.AddListItem().BeginStruct()
6706+
.AddMember("id").Int64(9)
6707+
.AddMember("dec").Decimal(TString("-inf"))
6708+
.EndStruct();
6709+
builder.AddListItem().BeginStruct()
6710+
.AddMember("id").Int64(10)
6711+
.AddMember("dec").Decimal(TString("2.1"))
6712+
.EndStruct();
6713+
builder.AddListItem().BeginStruct()
6714+
.AddMember("id").Int64(11)
6715+
.AddMember("dec").Decimal(TString("15.1"))
6716+
.EndStruct();
66936717
builder.EndList();
66946718
const auto result = testHelper.GetKikimr().GetTableClient().BulkUpsert(testTable.GetName(), builder.Build()).GetValueSync();
66956719
UNIT_ASSERT_C(result.IsSuccess() , result.GetIssues().ToString());
@@ -6699,6 +6723,13 @@ Y_UNIT_TEST_SUITE(KqpOlapTypes) {
66996723
testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id=3", "[[\"-inf\"]]");
67006724
testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id=4", "[[\"nan\"]]");
67016725
testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id=5", "[[\"-nan\"]]");
6726+
testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"10.1\" As Decimal(22,9))", "[[1]]");
6727+
testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"inf\" As Decimal(22,9)) ORDER BY id", "[[2];[8]]");
6728+
testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"-inf\" As Decimal(22,9)) ORDER BY id", "[[3];[9]]");
6729+
// Nan cannot by find.
6730+
testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"nan\" As Decimal(22,9))", "[]");
6731+
testHelper.ReadData("SELECT id FROM `/Root/ColumnTableTest` WHERE dec=CAST(\"-nan\" As Decimal(22,9))", "[]");
6732+
testHelper.ReadData("SELECT dec FROM `/Root/ColumnTableTest` WHERE id > 5 ORDER BY dec", "[[\"-inf\"];[\"1.1\"];[\"2.1\"];[\"12.1\"];[\"15.1\"];[\"inf\"]]");
67026733
}
67036734

67046735
Y_UNIT_TEST(TimestampCmpErr) {

ydb/core/tx/columnshard/transactions/operators/schema.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ NKikimr::TConclusionStatus TSchemaTransactionOperator::ValidateTableSchema(const
6868
//NTypeIds::Float,
6969
//NTypeIds::Double,
7070
NTypeIds::String,
71-
NTypeIds::Utf8
71+
NTypeIds::Utf8,
72+
NTypeIds::Decimal
7273
};
7374
if (!schema.HasEngine() ||
7475
schema.GetEngine() != NKikimrSchemeOp::EColumnTableEngine::COLUMN_ENGINE_REPLACING_TIMESERIES) {

ydb/core/tx/schemeshard/olap/columns/update.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ namespace NKikimr::NSchemeShard {
196196
case NYql::NProto::Datetime64:
197197
case NYql::NProto::Timestamp64:
198198
case NYql::NProto::Interval64:
199+
case NYql::NProto::Decimal:
199200
return true;
200201
default:
201202
return false;

0 commit comments

Comments
 (0)