@@ -5549,11 +5549,13 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5549
5549
testHelper.ReadData (" SELECT value FROM `/Root/ColumnTableTest` WHERE id = 1" , " [[110]]" );
5550
5550
}
5551
5551
5552
- Y_UNIT_TEST (OlapReplace_FromSelect) {
5552
+ Y_UNIT_TEST (OlapReplace_FromSelectSimple) {
5553
+ NKikimrConfig::TAppConfig appConfig;
5554
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
5553
5555
auto settings = TKikimrSettings ()
5556
+ .SetAppConfig (appConfig)
5554
5557
.SetWithSampleTables (false );
5555
5558
TKikimrRunner kikimr (settings);
5556
- kikimr.GetTestServer ().GetRuntime ()->GetAppData (0 ).EnableOlapSink = true ;
5557
5559
Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5558
5560
TTableWithNullsHelper (kikimr).CreateTableWithNulls ();
5559
5561
@@ -5662,18 +5664,76 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5662
5664
output,
5663
5665
R"( [[1u;["test1"];10];[2u;["test2"];11];[3u;["test3"];12];[4u;#;13]])" );
5664
5666
}
5667
+ }
5668
+
5669
+ Y_UNIT_TEST (OlapReplace_BadTransactions) {
5670
+ NKikimrConfig::TAppConfig appConfig;
5671
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
5672
+ auto settings = TKikimrSettings ()
5673
+ .SetAppConfig (appConfig)
5674
+ .SetWithSampleTables (false );
5675
+ TKikimrRunner kikimr (settings);
5676
+ Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5677
+ TTableWithNullsHelper (kikimr).CreateTableWithNulls ();
5678
+
5679
+ auto session = kikimr.GetTableClient ().CreateSession ().GetValueSync ().GetSession ();
5665
5680
5681
+ const TString query = R"(
5682
+ CREATE TABLE `/Root/ColumnShard` (
5683
+ Col1 Uint64 NOT NULL,
5684
+ Col2 String,
5685
+ Col3 Int32 NOT NULL,
5686
+ PRIMARY KEY (Col1)
5687
+ )
5688
+ PARTITION BY HASH(Col1)
5689
+ WITH (STORE = COLUMN, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 10);
5690
+
5691
+ CREATE TABLE `/Root/DataShard` (
5692
+ Col1 Uint64 NOT NULL,
5693
+ Col2 String,
5694
+ Col3 Int32 NOT NULL,
5695
+ PRIMARY KEY (Col1)
5696
+ )
5697
+ WITH (UNIFORM_PARTITIONS = 2, AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 2);
5698
+ )" ;
5699
+
5700
+ auto result = session.ExecuteSchemeQuery (query).GetValueSync ();
5701
+ UNIT_ASSERT_C (result.GetStatus () == NYdb::EStatus::SUCCESS, result.GetIssues ().ToString ());
5702
+
5703
+ auto client = kikimr.GetQueryClient ();
5666
5704
{
5667
5705
auto prepareResult = client.ExecuteQuery (R"(
5668
- REPLACE INTO `/Root/DataShard1 ` (Col1, Col2, Col3) VALUES
5706
+ REPLACE INTO `/Root/ColumnShard ` (Col1, Col2, Col3) VALUES
5669
5707
(1u, "test1", 10), (2u, "test2", 11), (3u, "test3", 12), (4u, NULL, 13);
5670
5708
)" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
5671
5709
UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
5710
+ }
5711
+ {
5712
+ auto prepareResult = client.ExecuteQuery (R"(
5713
+ REPLACE INTO `/Root/DataShard` (Col1, Col2, Col3) VALUES
5714
+ (10u, "test1", 10), (20u, "test2", 11), (30u, "test3", 12), (40u, NULL, 13);
5715
+ )" , NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).ExtractValueSync ();
5716
+ UNIT_ASSERT_C (prepareResult.IsSuccess (), prepareResult.GetIssues ().ToString ());
5717
+ }
5718
+
5719
+ {
5720
+ // column -> row
5721
+ const TString sql = R"(
5722
+ REPLACE INTO `/Root/DataShard`
5723
+ SELECT * FROM `/Root/ColumnShard`
5724
+ )" ;
5725
+ auto insertResult = client.ExecuteQuery (sql, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
5726
+ UNIT_ASSERT (!insertResult.IsSuccess ());
5727
+ UNIT_ASSERT_C (
5728
+ insertResult.GetIssues ().ToString ().Contains (" Transactions between column and row tables are disabled at current time" ),
5729
+ insertResult.GetIssues ().ToString ());
5730
+ }
5672
5731
5732
+ {
5673
5733
// row -> column
5674
5734
const TString sql = R"(
5675
- REPLACE INTO `/Root/ColumnShard3 `
5676
- SELECT * FROM `/Root/DataShard1 `
5735
+ REPLACE INTO `/Root/ColumnShard `
5736
+ SELECT * FROM `/Root/DataShard `
5677
5737
)" ;
5678
5738
auto insertResult = client.ExecuteQuery (sql, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
5679
5739
UNIT_ASSERT (!insertResult.IsSuccess ());
@@ -5683,10 +5743,53 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5683
5743
}
5684
5744
5685
5745
{
5686
- // column -> row
5746
+ // column & row read
5687
5747
const TString sql = R"(
5688
- REPLACE INTO `/Root/DataShard2`
5689
- SELECT * FROM `/Root/ColumnSource`
5748
+ SELECT * FROM `/Root/DataShard`;
5749
+ SELECT * FROM `/Root/ColumnShard`;
5750
+ )" ;
5751
+ auto insertResult = client.ExecuteQuery (sql, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
5752
+ UNIT_ASSERT (!insertResult.IsSuccess ());
5753
+ UNIT_ASSERT_C (
5754
+ insertResult.GetIssues ().ToString ().Contains (" Transactions between column and row tables are disabled at current time" ),
5755
+ insertResult.GetIssues ().ToString ());
5756
+ }
5757
+
5758
+ {
5759
+ // column & row write
5760
+ const TString sql = R"(
5761
+ REPLACE INTO `/Root/DataShard` (Col1, Col2, Col3) VALUES
5762
+ (1u, "test1", 10), (2u, "test2", 11), (3u, "test3", 12), (4u, NULL, 13);
5763
+ REPLACE INTO `/Root/ColumnShard` (Col1, Col2, Col3) VALUES
5764
+ (1u, "test1", 10), (2u, "test2", 11), (3u, "test3", 12), (4u, NULL, 13);
5765
+ )" ;
5766
+ auto insertResult = client.ExecuteQuery (sql, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
5767
+ UNIT_ASSERT (!insertResult.IsSuccess ());
5768
+ UNIT_ASSERT_C (
5769
+ insertResult.GetIssues ().ToString ().Contains (" Transactions between column and row tables are disabled at current time" ),
5770
+ insertResult.GetIssues ().ToString ());
5771
+ }
5772
+
5773
+ {
5774
+ // column read & row write
5775
+ const TString sql = R"(
5776
+ REPLACE INTO `/Root/DataShard` (Col1, Col2, Col3) VALUES
5777
+ (1u, "test1", 10), (2u, "test2", 11), (3u, "test3", 12), (4u, NULL, 13);
5778
+ SELECT * FROM `/Root/ColumnShard`;
5779
+ )" ;
5780
+ auto insertResult = client.ExecuteQuery (sql, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
5781
+ UNIT_ASSERT (!insertResult.IsSuccess ());
5782
+ UNIT_ASSERT_C (
5783
+ insertResult.GetIssues ().ToString ().Contains (" Transactions between column and row tables are disabled at current time" ),
5784
+ insertResult.GetIssues ().ToString ());
5785
+ }
5786
+
5787
+ {
5788
+ // column write & row read
5789
+ const TString sql = R"(
5790
+ REPLACE INTO `/Root/ColumnShard` (Col1, Col2, Col3) VALUES
5791
+ (1u, "test1", 10), (2u, "test2", 11), (3u, "test3", 12), (4u, NULL, 13);
5792
+ SELECT * FROM `/Root/DataShard`;
5690
5793
)" ;
5691
5794
auto insertResult = client.ExecuteQuery (sql, NYdb::NQuery::TTxControl::BeginTx ().CommitTx ()).GetValueSync ();
5692
5795
UNIT_ASSERT (!insertResult.IsSuccess ());
@@ -5697,13 +5800,15 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5697
5800
}
5698
5801
5699
5802
Y_UNIT_TEST (OlapReplace_FromSelectLarge) {
5803
+ NKikimrConfig::TAppConfig appConfig;
5804
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
5700
5805
auto settings = TKikimrSettings ()
5806
+ .SetAppConfig (appConfig)
5701
5807
.SetWithSampleTables (false );
5702
5808
5703
5809
TTestHelper testHelper (settings);
5704
5810
5705
5811
TKikimrRunner& kikimr = testHelper.GetKikimr ();
5706
- testHelper.GetRuntime ().GetAppData (0 ).EnableOlapSink = true ;
5707
5812
Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5708
5813
5709
5814
TVector<TTestHelper::TColumnSchema> schema = {
@@ -5712,11 +5817,11 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5712
5817
};
5713
5818
5714
5819
TTestHelper::TColumnTable testTable1;
5715
- testTable1.SetName (" /Root/ColumnShard1" ).SetPrimaryKey ({ " Col1" }).SetSharding ({ " Col1" }).SetSchema (schema);
5820
+ testTable1.SetName (" /Root/ColumnShard1" ).SetPrimaryKey ({ " Col1" }).SetSharding ({ " Col1" }).SetSchema (schema). SetMinPartitionsCount ( 1000 ) ;
5716
5821
testHelper.CreateTable (testTable1);
5717
5822
5718
5823
TTestHelper::TColumnTable testTable2;
5719
- testTable2.SetName (" /Root/ColumnShard2" ).SetPrimaryKey ({ " Col1" }).SetSharding ({ " Col1" }).SetSchema (schema);
5824
+ testTable2.SetName (" /Root/ColumnShard2" ).SetPrimaryKey ({ " Col1" }).SetSharding ({ " Col1" }).SetSchema (schema). SetMinPartitionsCount ( 1000 ) ;
5720
5825
testHelper.CreateTable (testTable2);
5721
5826
5722
5827
{
@@ -5750,10 +5855,12 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5750
5855
}
5751
5856
5752
5857
Y_UNIT_TEST (OlapReplace_Simple) {
5858
+ NKikimrConfig::TAppConfig appConfig;
5859
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
5753
5860
auto settings = TKikimrSettings ()
5861
+ .SetAppConfig (appConfig)
5754
5862
.SetWithSampleTables (false );
5755
5863
TKikimrRunner kikimr (settings);
5756
- kikimr.GetTestServer ().GetRuntime ()->GetAppData (0 ).EnableOlapSink = true ;
5757
5864
Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5758
5865
TTableWithNullsHelper (kikimr).CreateTableWithNulls ();
5759
5866
@@ -5801,10 +5908,13 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5801
5908
}
5802
5909
5803
5910
Y_UNIT_TEST (OlapReplace_InsertUpsertError) {
5911
+ NKikimrConfig::TAppConfig appConfig;
5912
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
5804
5913
auto settings = TKikimrSettings ()
5914
+ .SetAppConfig (appConfig)
5805
5915
.SetWithSampleTables (false );
5916
+
5806
5917
TKikimrRunner kikimr (settings);
5807
- kikimr.GetTestServer ().GetRuntime ()->GetAppData (0 ).EnableOlapSink = true ;
5808
5918
Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5809
5919
TTableWithNullsHelper (kikimr).CreateTableWithNulls ();
5810
5920
@@ -5855,10 +5965,13 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5855
5965
}
5856
5966
5857
5967
Y_UNIT_TEST (OlapReplace_Duplicates) {
5968
+ NKikimrConfig::TAppConfig appConfig;
5969
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (true );
5858
5970
auto settings = TKikimrSettings ()
5971
+ .SetAppConfig (appConfig)
5859
5972
.SetWithSampleTables (false );
5973
+
5860
5974
TKikimrRunner kikimr (settings);
5861
- kikimr.GetTestServer ().GetRuntime ()->GetAppData (0 ).EnableOlapSink = true ;
5862
5975
Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5863
5976
TTableWithNullsHelper (kikimr).CreateTableWithNulls ();
5864
5977
@@ -5903,10 +6016,13 @@ Y_UNIT_TEST_SUITE(KqpOlap) {
5903
6016
}
5904
6017
5905
6018
Y_UNIT_TEST (OlapReplace_DisableOlapSink) {
6019
+ NKikimrConfig::TAppConfig appConfig;
6020
+ appConfig.MutableTableServiceConfig ()->SetEnableOlapSink (false );
5906
6021
auto settings = TKikimrSettings ()
6022
+ .SetAppConfig (appConfig)
5907
6023
.SetWithSampleTables (false );
6024
+
5908
6025
TKikimrRunner kikimr (settings);
5909
- kikimr.GetTestServer ().GetRuntime ()->GetAppData (0 ).EnableOlapSink = false ;
5910
6026
Tests::NCommon::TLoggerInit (kikimr).Initialize ();
5911
6027
TTableWithNullsHelper (kikimr).CreateTableWithNulls ();
5912
6028
0 commit comments