This is an automated email from the ASF dual-hosted git repository. alexey pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kudu.git
The following commit(s) were added to refs/heads/master by this push: new 7189b51 [tools] Support copying unpartitioned table 7189b51 is described below commit 7189b519625d8f6ef7f70bc259733a672a28267f Author: zhangyifan27 <chinazhangyi...@163.com> AuthorDate: Mon Mar 14 23:08:00 2022 +0800 [tools] Support copying unpartitioned table The "kudu table copy" tool generated an error while copying an unpartitioned table: Invalid argument: Table partitioning must be specified using add_hash_partitions or set_range_partition_columns This patch fixed it. Change-Id: I4fcdcf93aadfaa2df59e59afa7bb3524ede2ac60 Reviewed-on: http://gerrit.cloudera.org:8080/18318 Reviewed-by: Mahesh Reddy <mre...@cloudera.com> Reviewed-by: Andrew Wong <aw...@cloudera.com> Reviewed-by: Alexey Serbin <ale...@apache.org> Tested-by: Alexey Serbin <ale...@apache.org> --- src/kudu/tools/kudu-tool-test.cc | 22 ++++++++++++++++++++++ src/kudu/tools/table_scanner.cc | 6 ++++++ 2 files changed, 28 insertions(+) diff --git a/src/kudu/tools/kudu-tool-test.cc b/src/kudu/tools/kudu-tool-test.cc index 1b73a3b..793e738 100644 --- a/src/kudu/tools/kudu-tool-test.cc +++ b/src/kudu/tools/kudu-tool-test.cc @@ -698,6 +698,7 @@ enum RunCopyTableCheckArgsType { kTestCopyTableUpsert, kTestCopyTableSchemaOnly, kTestCopyTableComplexSchema, + kTestCopyUnpartitionedTable, kTestCopyTablePredicates }; // Subclass of ToolTest that allows running individual test cases with different parameters to run @@ -721,6 +722,10 @@ class ToolTestCopyTableParameterized : KuduSchema schema; ASSERT_OK(CreateComplexSchema(&schema)); ww.set_schema(schema); + } else if (test_case_ == kTestCopyUnpartitionedTable) { + KuduSchema schema; + ASSERT_OK(CreateUnpartitionedTable(&schema)); + ww.set_schema(schema); } ww.Setup(); ww.Start(); @@ -759,6 +764,9 @@ class ToolTestCopyTableParameterized : args.columns = kComplexSchemaColumns; args.mode = TableCopyMode::INSERT_TO_NOT_EXIST_TABLE; return { args }; + case kTestCopyUnpartitionedTable: + args.mode = TableCopyMode::INSERT_TO_NOT_EXIST_TABLE; + return {args}; case kTestCopyTablePredicates: { auto mid = total_rows_ / 2; vector<RunCopyTableCheckArgs> multi_args; @@ -898,6 +906,19 @@ class ToolTestCopyTableParameterized : return Status::OK(); } + Status CreateUnpartitionedTable(KuduSchema* schema) { + shared_ptr<KuduClient> client; + RETURN_NOT_OK(cluster_->CreateClient(nullptr, &client)); + unique_ptr<KuduTableCreator> table_creator(client->NewTableCreator()); + *schema = KuduSchema::FromSchema(GetSimpleTestSchema()); + RETURN_NOT_OK(table_creator->table_name(kTableName) + .schema(schema) + .set_range_partition_columns({}) + .num_replicas(1) + .Create()); + return Status::OK(); + } + void InsertOneRowWithNullCell() { shared_ptr<KuduClient> client; ASSERT_OK(cluster_->CreateClient(nullptr, &client)); @@ -932,6 +953,7 @@ INSTANTIATE_TEST_SUITE_P(CopyTableParameterized, kTestCopyTableUpsert, kTestCopyTableSchemaOnly, kTestCopyTableComplexSchema, + kTestCopyUnpartitionedTable, kTestCopyTablePredicates)); void ToolTest::StartExternalMiniCluster(ExternalMiniClusterOptions opts) { diff --git a/src/kudu/tools/table_scanner.cc b/src/kudu/tools/table_scanner.cc index 3c7923f..8be3b4c 100644 --- a/src/kudu/tools/table_scanner.cc +++ b/src/kudu/tools/table_scanner.cc @@ -461,6 +461,12 @@ Status CreateDstTableIfNeeded(const client::sp::shared_ptr<KuduTable>& src_table table_creator->add_range_partition(lower.release(), upper.release()); } + if (partition_schema.hash_schema().empty() && + partition_schema.range_schema().column_ids.empty()) { + // This src table is unpartitioned, just create a table range partitioned on no columns. + table_creator->set_range_partition_columns({}); + } + // Create table. RETURN_NOT_OK(table_creator->Create()); LOG(INFO) << "Table " << dst_table_name << " created successfully";