carbondata-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cao, Lionel (JIRA)" <>
Subject [jira] [Created] (CARBONDATA-910) Implement Partition feature
Date Wed, 12 Apr 2017 06:02:41 GMT
Cao, Lionel created CARBONDATA-910:

             Summary: Implement Partition feature
                 Key: CARBONDATA-910
             Project: CarbonData
          Issue Type: New Feature
          Components: core, data-load, data-query
            Reporter: Cao, Lionel
            Assignee: Cao, Lionel

Why need partition table
Partition table provide an option to divide table into some smaller pieces. 
With partition table:
      1. Data could be better managed, organized and stored. 
      2. We can avoid full table scan in some scenario and improve query performance. (partition
column in filter, 
      multiple partition tables join in the same partition column etc.)

Partitioning design
Range Partitioning           
       range partitioning maps data to partitions according to the range of partition column
values, operator '<' defines non-inclusive upper bound of current partition.
List Partitioning
       list partitioning allows you map data to partitions with specific value list
Hash Partitioning
       hash partitioning maps data to partitions with hash algorithm and put them to the given
number of partitions
Composite Partitioning(2 levels at most for now)
       Range-Range, Range-List, Range-Hash, List-Range, List-List, List-Hash, Hash-Range,
Hash-List, Hash-Hash

Create table sales(
     itemid long, 
     logdate datetime, 
     customerid int
[partition by range logdate(...)]
[subpartition by list area(...)]
Stored By 'carbondata'

range partition: 
     partition by range logdate(<  '2016-01-01', < '2017-01-01', < '2017-02-01',
< '2017-03-01', < '2099-01-01')
list partition:
     partition by list area('Asia', 'Europe', 'North America', 'Africa', 'Oceania')
hash partition:
     partition by hash(itemid, 9) 
composite partition:
     partition by range logdate(<  '2016- -01', < '2017-01-01', < '2017-02-01', <
'2017-03-01', < '2099-01-01')
     subpartition by list area('Asia', 'Europe', 'North America', 'Africa', 'Oceania')

DDL-Rebuild, Add
Alter table sales rebuild partition by (range|list|hash)(...);
Alter table salse add partition (< '2018-01-01');    #only support range partitioning,
list partitioning
Alter table salse add partition ('South America');

#Note: No delete operation for partition, please use rebuild. 
If need delete data, use delete statement, but the definition of partition will not be deleted.

Partition Table Data Store
[Option One]
Use the current design, keep partition folder out of segments
   |          |___Segment_0
   |                         |___ *******-[bucketId]-.carbondata
   |                         |___ *******-[bucketId]-.carbondata
   |          |___Segment_1
   |          ...
   |          |___Segment_0
   |          |___Segment_1

[Option Two]
remove partition folder, add partition id into file name and build btree in driver side.
   |                  |___ *******-[bucketId]-[partitionId].carbondata
   |                  |___ *******-[bucketId]-[partitionId].carbondata

Pros & Cons: 
Option one would be faster to locate target files
Option two need to store more metadata of folders

Partition Table MetaData Store
partitioni info should be stored in file footer/index file and load into memory before user

Relationship with Bucket
Bucket should be lower level of partition.

Partition Table Query

Select * from sales
where logdate <= date '2016-12-01';

User should remember to add a partition filter when write SQL on a partition table.

This message was sent by Atlassian JIRA

View raw message