FRAGMENT BY Clause for Tables
Use the FRAGMENT BY option of the INIT clause of the ALTER FRAGMENT statement to fragment an existing nonfragmented table, or to convert one table fragmentation strategy to another.
FRAGMENT BY Clause for Tables
{ FRAGMENT BY | PARTITION BY }
{ ROUND ROBIN { IN dbspace | PARTITIONpart INdbspace } | EXPRESSION <Fragment List> | RANGE( fragment_key) <Interval Fragment Clause>[] | LIST( fragment_key) <List Fragment Clause> [] }
Element | Description | Restrictions | Syntax |
---|---|---|---|
column | Column to which the strategy applies | Must exist in the table | Identifier |
dbspace | Dbspace that contains the table fragment | Must specify at least 2 but no more than 2,048 dbspaces | Identifier |
expr | Expression that defines a table fragment | Must evaluate to a Boolean value (t or f ) |
Expression |
part | Name of a fragment | Required for any named fragment in the same dbspace as another named fragment of the same table. Name must be unique among fragments of the same table. | Identifier |
This supports the same syntax as the FRAGMENT BY (or PARTITION BY) clause of the CREATE TABLE statement. For more information on the fragmentation strategies available for tables, see the FRAGMENT BY clause of the CREATE TABLE statement.
Examples of range interval fragmentation
These examples define statement define range interval fragmentation strategies for an existing table. The following ALTER FRAGMENT statement defines three fragments of a range interval fragmentation strategy that includes no NULL fragment, where numeric column c1 is the fragmentation key:
ALTER FRAGMENT ON TABLE T1 INIT
FRAGMENT BY RANGE(c1)
INTERVAL (100+100) STORE IN (dbs3, dbs4, dbs5, dbs6, dbs7, dbs8)
PARTITION part0 VALUES < 0 IN dbs0,
PARTITION part1 VALUES < 1000 IN dbs1,
PARTITION part2 VALUES < 2000 IN dbs2;
Here
the interval value expression of (100+100
defines
the interval fragment size as 200 within the range of column c1.
No fragment is defined for fragmentation key values of 2000 or greater.
If this were still the storage distribution when a row with c1 equal
to or greater than 2000 is inserted, the database server automatically
creates a new fragment to store that row, which was outside the range
of any existing fragment. Interval partitions are stored in the dbspaces dbs2, dbs3, dbs4, dbs5, dbs6, dbs7,
and dbs8 in round-robin fashion.
The following statement similarly defines three fragments of a range interval fragmentation strategy that includes no NULL fragment, and where the DATE or DATETIME column c2 is the fragmentation key:
ALTER FRAGMENT ON TABLE T1 INIT
FRAGMENT BY RANGE(c2)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
PARTITION part0 VALUES < DATE('01/01/2009') IN dbs0,
PARTITION part1 VALUES < DATE('07/01/2009') IN dbs1,
PARTITION part2 VALUES < DATE('01/01/2010') IN dbs2;
Here
the interval value expression of NUMTOYMINTERVAL(1,'MONTH')
defines
the interval fragment size as a single month within the range of column c2.
The PARTITION list defines three fragments: part0 for
December of 2008, part1 for June of 2008, and part2 for
December of 2009. If rows are inserted whose c2 value is not
in one of these months, the database server will create new fragments
for those rows. Because no STORE IN clause is specified, the database
server will store these new range interval fragments in a round-robin
fashion in the dbspaces dbs0, dbs1,
and dbs2 that this example lists after the IN keywords
of the three PARTITION specifications.