kudu-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dan Burkert <danburk...@apache.org>
Subject Re: mixing range and hash partitioning
Date Fri, 24 Feb 2017 21:20:28 GMT
Hi Paul,

I think the issue you are running into is that if you don't add a range
partition explicitly during table creation (by calling add_range_partition
or inserting a split with add_range_partition_split), Kudu will default to
creating 1 unbounded range partition.  So your two options are to add the
range partition during table creation time, or if you only know that
partition you want at a later time, you can drop the existing partition
(alterer->DropRangePartition with two empty rows), then add the range
partition.  Note that dropping the range partition will effectively
truncate the table.  This can be done with the same alterer in a single
transaction.  If you want to see a bunch of examples, you can check out
this unit test:
https://github.com/apache/kudu/blob/master/src/kudu/integration-tests/alter_table-test.cc#L1106
.

- Dan

On Fri, Feb 24, 2017 at 10:53 AM, Paul Brannan <paul.brannan@thesystech.com>
wrote:

> I'm trying to create a table with one-column range-partitioned and another
> column hash-partitioned.  Documentation for add_hash_partitions and
> set_range_partition_columns suggest this should be possible ("Tables must
> be created with either range, hash, or range and hash partitioning").
>
> I have a schema with three INT64 columns ("time", "key", and "value").
> When I create the table, I set up the partitioning:
>
> (*table_creator)
>   .table_name("test_table")
>   .schema(&schema)
>   .add_hash_partitions({"key"}, 2)
>   .set_range_partition_columns({"time"})
>   .num_replicas(1)
>   .Create()
>
> I later try to add a partition:
>
> auto timesplit(KuduSchema & schema, std::int64_t t) {
>   auto split = schema.NewRow();
>   check_ok(split->SetInt64("time", t));
>   return split;
> }
>
> alterer->AddRangePartition(
>   timesplit(schema, date_start),
>   timesplit(schema, next_date_start));
>
> check_ok(alterer->Alter());
>
> But I get an error "Invalid argument: New range partition conflicts with
> existing range partition".
>
> How are hash and range partitioning intended to be mixed?
>
>

Mime
View raw message