in src/kudu/tools/tool_action_table.cc [1912:2225]
unique_ptr<Mode> BuildTableMode() {
unique_ptr<Action> delete_table =
ClusterActionBuilder("delete", &DeleteTable)
.Description("Delete a table")
.AddRequiredParameter({ kTableNameArg, "Name of the table to delete" })
.AddOptionalParameter("modify_external_catalogs")
.AddOptionalParameter("reserve_seconds")
.Build();
unique_ptr<Action> describe_table =
ClusterActionBuilder("describe", &DescribeTable)
.Description("Describe a table")
.AddRequiredParameter({ kTableNameArg, "Name of the table to describe" })
.AddOptionalParameter("show_attributes")
.AddOptionalParameter("show_avro_format_schema")
.AddOptionalParameter("show_column_comment")
.AddOptionalParameter("show_column_id")
.Build();
unique_ptr<Action> list_tables =
ClusterActionBuilder("list", &ListTables)
.Description("List tables")
.AddOptionalParameter("soft_deleted_only")
.AddOptionalParameter("tables")
.AddOptionalParameter("list_tablets")
.AddOptionalParameter("show_tablet_partition_info")
.AddOptionalParameter("show_hash_partition_info")
.AddOptionalParameter("show_table_info")
.AddOptionalParameter("list_table_output_format")
.AddOptionalParameter(
"columns",
string(""),
string("Comma-separated list of table info fields to "
"include in output. \nPossible values: id, name, live_row_count, "
"num_tablets, num_replicas"))
.Build();
unique_ptr<Action> list_in_flight =
ClusterActionBuilder("list_in_flight", &ListInFlightTables)
.Description("List tables in flight")
.AddOptionalParameter("list_table_output_format")
.Build();
unique_ptr<Action> locate_row =
ClusterActionBuilder("locate_row", &LocateRow)
.Description("Locate which tablet a row belongs to")
.ExtraDescription("Provide the primary key as a JSON array of primary "
"key values, e.g. '[1, \"foo\", 2, \"bar\"]'. The "
"output will be the tablet id associated with the row "
"key. If there is no such tablet, an error message "
"will be printed and the command will return a "
"non-zero status")
.AddRequiredParameter({ kTableNameArg, "Name of the table to look up against" })
.AddRequiredParameter({ kKeyArg,
"String representation of the row's primary key "
"as a JSON array" })
.AddOptionalParameter("check_row_existence")
.Build();
unique_ptr<Action> rename_column =
ClusterActionBuilder("rename_column", &RenameColumn)
.Description("Rename a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to rename" })
.AddRequiredParameter({ kNewColumnNameArg, "New column name" })
.Build();
unique_ptr<Action> recall =
ActionBuilder("recall", &RecallTable)
.Description("Recall a deleted but still reserved table")
.AddRequiredParameter({ kMasterAddressesArg, kMasterAddressesArgDesc })
.AddRequiredParameter({ kTableIdArg, "ID of the table to recall" })
.AddOptionalParameter("new_table_name")
.Build();
unique_ptr<Action> rename_table =
ClusterActionBuilder("rename_table", &RenameTable)
.Description("Rename a table")
.AddRequiredParameter({ kTableNameArg, "Name of the table to rename" })
.AddRequiredParameter({ kNewTableNameArg, "New table name" })
.AddOptionalParameter("modify_external_catalogs")
.Build();
unique_ptr<Action> scan_table =
ClusterActionBuilder("scan", &ScanTable)
.Description("Scan rows from a table")
.ExtraDescription("Scan rows from an existing table. See the help "
"for the --predicates flag on how predicates can be specified.")
.AddRequiredParameter({ kTableNameArg, "Name of the table to scan"})
.AddOptionalParameter("columns")
.AddOptionalParameter("row_count_only")
.AddOptionalParameter("report_scanner_stats")
.AddOptionalParameter("scan_batch_size")
.AddOptionalParameter("fault_tolerant")
.AddOptionalParameter("fill_cache")
.AddOptionalParameter("num_threads")
.AddOptionalParameter("predicates")
.AddOptionalParameter("tablets")
.AddOptionalParameter("replica_selection")
.Build();
unique_ptr<Action> copy_table =
ClusterActionBuilder("copy", &CopyTable)
.Description("Copy table data to another table")
.ExtraDescription("Copy table data to another table; the two tables could be in the same "
"cluster or not. The two tables must have the same table schema, but "
"could have different partition schemas. Alternatively, the tool can "
"create the new table using the same table and partition schema as the "
"source table.")
.AddRequiredParameter({ kTableNameArg, "Name of the source table" })
.AddRequiredParameter({ kDestMasterAddressesArg, kDestMasterAddressesArgDesc })
.AddOptionalParameter("create_table")
.AddOptionalParameter("create_table_hash_bucket_nums")
.AddOptionalParameter("create_table_replication_factor")
.AddOptionalParameter("dst_table")
.AddOptionalParameter("fault_tolerant")
.AddOptionalParameter("fill_cache")
.AddOptionalParameter("num_threads")
.AddOptionalParameter("predicates")
.AddOptionalParameter("scan_batch_size")
.AddOptionalParameter("strict_column_id")
.AddOptionalParameter("tablets")
.AddOptionalParameter("write_type")
.AddOptionalParameter("table_copy_throttler_bytes_per_sec")
.AddOptionalParameter("table_copy_throttler_burst_factor")
.Build();
unique_ptr<Action> set_extra_config =
ClusterActionBuilder("set_extra_config", &SetExtraConfig)
.Description("Change a extra configuration value on a table")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kConfigNameArg, "Name of the configuration" })
.AddRequiredParameter({ kConfigValueArg, "New value for the configuration" })
.Build();
unique_ptr<Action> get_extra_configs =
ClusterActionBuilder("get_extra_configs", &GetExtraConfigs)
.Description("Get the extra configuration properties for a table")
.AddRequiredParameter({ kTableNameArg,
"Name of the table for which to get extra configurations" })
.AddOptionalParameter("config_names")
.Build();
unique_ptr<Action> drop_range_partition =
ClusterActionBuilder("drop_range_partition", &DropRangePartition)
.Description("Drop a range partition of table")
.AddRequiredParameter({ kTableNameArg, "Name of the table" })
.AddRequiredParameter({ kTableRangeLowerBoundArg,
"String representation of lower bound of "
"the table range partition as a JSON array" })
.AddRequiredParameter({ kTableRangeUpperBoundArg,
"String representation of upper bound of "
"the table range partition as a JSON array" })
.AddOptionalParameter("lower_bound_type")
.AddOptionalParameter("upper_bound_type")
.Build();
unique_ptr<Action> add_range_partition =
ClusterActionBuilder("add_range_partition", &AddRangePartition)
.Description("Add a range partition for table")
.AddRequiredParameter({ kTableNameArg, "Name of the table" })
.AddRequiredParameter({ kTableRangeLowerBoundArg,
"String representation of lower bound of "
"the table range partition as a JSON array."
"If the parameter is an empty array, "
"the lower range partition will be unbounded" })
.AddRequiredParameter({ kTableRangeUpperBoundArg,
"String representation of upper bound of "
"the table range partition as a JSON array."
"If the parameter is an empty array, "
"the upper range partition will be unbounded" })
.AddOptionalParameter("lower_bound_type")
.AddOptionalParameter("upper_bound_type")
.AddOptionalParameter("hash_schema")
.Build();
unique_ptr<Action> column_set_default =
ClusterActionBuilder("column_set_default", &ColumnSetDefault)
.Description("Set write_default value for a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to alter" })
.AddRequiredParameter({ kDefaultValueArg,
"Write default value of the column, should be provided as a "
"JSON array, e.g. [1] or [\"foo\"]" })
.Build();
unique_ptr<Action> column_remove_default =
ClusterActionBuilder("column_remove_default", &ColumnRemoveDefault)
.Description("Remove write_default value for a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to alter" })
.Build();
unique_ptr<Action> column_set_compression =
ClusterActionBuilder("column_set_compression", &ColumnSetCompression)
.Description("Set compression type for a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to alter" })
.AddRequiredParameter({ kCompressionTypeArg, "Compression type of the column" })
.Build();
unique_ptr<Action> column_set_encoding =
ClusterActionBuilder("column_set_encoding", &ColumnSetEncoding)
.Description("Set encoding type for a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to alter" })
.AddRequiredParameter({ kEncodingTypeArg, "Encoding type of the column" })
.Build();
unique_ptr<Action> column_set_block_size =
ClusterActionBuilder("column_set_block_size", &ColumnSetBlockSize)
.Description("Set block size for a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to alter" })
.AddRequiredParameter({ kBlockSizeArg, "Block size of the column" })
.Build();
unique_ptr<Action> column_set_comment =
ClusterActionBuilder("column_set_comment", &ColumnSetComment)
.Description("Set comment for a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to alter" })
.AddRequiredParameter({ kColumnCommentArg, "Comment of the column" })
.Build();
unique_ptr<Action> add_column =
ActionBuilder("add_column", &AddColumn)
.Description("Add a column")
.AddRequiredParameter({ kMasterAddressesArg, kMasterAddressesArgDesc })
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to add" })
.AddRequiredParameter({ kDataTypeArg, "Data Type, eg: INT8, INT16, INT32, INT64, STRING,"
" BOOL, FLOAT, DOUBLE, BINARY, UNIXTIME_MICROS, DECIMAL, VARCHAR,"
" TIMESTAMP, DATE"})
.AddOptionalParameter(kEncodingTypeArg)
.AddOptionalParameter(kCompressionTypeArg)
.AddOptionalParameter(kDefaultValueArg)
.AddOptionalParameter("comment")
.Build();
unique_ptr<Action> delete_column =
ClusterActionBuilder("delete_column", &DeleteColumn)
.Description("Delete a column")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnNameArg, "Name of the table column to delete" })
.Build();
unique_ptr<Action> set_comment =
ClusterActionBuilder("set_comment", &SetComment)
.Description("Set the comment for a table")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kColumnCommentArg, "Comment of the table" })
.Build();
unique_ptr<Action> clear_comment =
ClusterActionBuilder("clear_comment", &ClearComment)
.Description("Clear the comment for a table")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.Build();
unique_ptr<Action> set_replication_factor =
ClusterActionBuilder("set_replication_factor", &SetReplicationFactor)
.Description("Change a table's replication factor")
.AddRequiredParameter({ kTableNameArg, "Name of the table to alter" })
.AddRequiredParameter({ kReplicationFactorArg, "New replication factor of the table" })
.Build();
unique_ptr<Action> statistics =
ClusterActionBuilder("statistics", &GetTableStatistics)
.Description("Get table statistics")
.AddRequiredParameter({ kTableNameArg, "Name of the table to get statistics" })
.Build();
unique_ptr<Action> create_table =
ClusterActionBuilder("create", &CreateTable)
.Description("Create a new table")
.ExtraDescription(kCreateTableExtraDescription)
.AddRequiredParameter({ kCreateTableJSONArg,
"JSON object for creating table" })
.Build();
return ModeBuilder("table")
.Description("Operate on Kudu tables")
.AddMode(BuildSetTableLimitMode())
.AddAction(std::move(add_column))
.AddAction(std::move(add_range_partition))
.AddAction(std::move(clear_comment))
.AddAction(std::move(column_remove_default))
.AddAction(std::move(column_set_block_size))
.AddAction(std::move(column_set_compression))
.AddAction(std::move(column_set_default))
.AddAction(std::move(column_set_encoding))
.AddAction(std::move(column_set_comment))
.AddAction(std::move(copy_table))
.AddAction(std::move(create_table))
.AddAction(std::move(delete_column))
.AddAction(std::move(delete_table))
.AddAction(std::move(describe_table))
.AddAction(std::move(drop_range_partition))
.AddAction(std::move(get_extra_configs))
.AddAction(std::move(list_in_flight))
.AddAction(std::move(list_tables))
.AddAction(std::move(locate_row))
.AddAction(std::move(recall))
.AddAction(std::move(rename_column))
.AddAction(std::move(rename_table))
.AddAction(std::move(scan_table))
.AddAction(std::move(set_comment))
.AddAction(std::move(set_extra_config))
.AddAction(std::move(set_replication_factor))
.AddAction(std::move(statistics))
.Build();
}