ALTER SHARDING TABLE RULE
Description
The ALTER SHARDING TABLE RULE syntax is used to alter sharding table rule for the currently selected database
Syntax
AlterShardingTableRule ::=
'ALTER' 'SHARDING' 'TABLE' 'RULE' (tableRuleDefinition | autoTableRuleDefinition) (',' (tableRuleDefinition | autoTableRuleDefinition))*
tableRuleDefinition ::=
ruleName '(' 'DATANODES' '(' dataNode (',' dataNode)* ')' (',' 'DATABASE_STRATEGY' '(' strategyDefinition ')')? (',' 'TABLE_STRATEGY' '(' strategyDefinition ')')? (',' 'KEY_GENERATE_STRATEGY' '(' keyGenerateStrategyDefinition ')')? (',' auditStrategyDefinition)? ')'
autoTableRuleDefinition ::=
ruleName '(' 'STORAGE_UNITS' '(' storageUnitName (',' storageUnitName)* ')' ',' 'SHARDING_COLUMN' '=' columnName ',' algorithmDefinition (',' 'KEY_GENERATE_STRATEGY' '(' keyGenerateStrategyDefinition ')')? (',' auditStrategyDefinition)? ')'
strategyDefinition ::=
'TYPE' '=' 'NONE'
| 'TYPE' '=' 'STANDARD' ',' 'SHARDING_COLUMN' '=' columnName ',' shardingAlgorithm
| 'TYPE' '=' 'COMPLEX' ',' 'SHARDING_COLUMNS' '=' columnName ',' columnName (',' columnName)* ',' shardingAlgorithm
| 'TYPE' '=' 'HINT' ',' shardingAlgorithm
shardingAlgorithm ::=
'SHARDING_ALGORITHM' '(' algorithmDefinition ')'
keyGenerateStrategyDefinition ::=
'COLUMN' '=' columnName ',' keyGenerateAlgorithmDefinition
keyGenerateAlgorithmDefinition ::=
algorithmDefinition
| 'GENERATOR' '=' keyGeneratorName
auditStrategyDefinition ::=
'AUDIT_STRATEGY' '(' algorithmDefinition (',' algorithmDefinition)* ',' 'ALLOW_HINT_DISABLE' '=' boolean ')'
boolean ::=
'TRUE' | 'FALSE'
algorithmDefinition ::=
'TYPE' '(' 'NAME' '=' algorithmType (',' propertiesDefinition)? ')'
propertiesDefinition ::=
'PROPERTIES' '(' (key '=' value (',' key '=' value)*)? ')'
key ::=
string
value ::=
literal
ruleName ::=
identifier
dataNode ::=
string
storageUnitName ::=
identifier
columnName ::=
identifier
keyGeneratorName ::=
identifier
algorithmType ::=
stringSupplement
tableRuleDefinitionis defined for standard sharding table rule;autoTableRuleDefinitionis defined for auto sharding table rule. For standard sharding rules and auto sharding rule, refer to Data Sharding;- use standard sharding table rule:
DATANODEScan only use resources that have been added to the current database, and can only use INLINE expressions to specify required resources;DATABASE_STRATEGY,TABLE_STRATEGYare the database sharding strategy and the table sharding strategy, which are optional, and the default strategy is used when not configured;- The attribute
TYPEinstrategyDefinitionspecifies the strategy type.STANDARD,COMPLEX,HINT, andNONEare supported. UsingCOMPLEXrequires specifying multiple sharding columns withSHARDING_COLUMNS.
- use auto sharding table rule:
STORAGE_UNITScan only use storage units that have been registered to the current database, and the required storage units can be specified by enumeration or INLINE expression;- Only auto sharding algorithm can be used, please refer to Auto Sharding Algorithm.
algorithmTypeis the sharding algorithm type, please refer to Sharding Algorithm;- The auto-generated algorithm naming rule is
tableName_strategyType_shardingAlgorithmType; - The auto-generated primary key strategy naming rule is
tableName_strategyType; KEY_GENERATE_STRATEGYis used to specify the primary key generation strategy, which is optional. For the primary key generation strategy, please refer to Distributed Primary Key.KEY_GENERATE_STRATEGYsupports two key generator definition styles:- Define the key generation algorithm inline with
TYPE(NAME=..., PROPERTIES(...)); - Reference an existing independent
SHARDING KEY GENERATORwithGENERATOR=keyGeneratorName;
- Define the key generation algorithm inline with
AUDIT_STRATEGYis used to specify the sharding audit strategy, which is optional. For the sharding audit generation strategy, please refer to Sharding Audit.
Example
1.Standard sharding table rule
ALTER SHARDING TABLE RULE t_order_item (
DATANODES("ds_${0..3}.t_order_item${0..3}"),
DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=user_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${user_id % 4}")))),
TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=order_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="t_order_item_${order_id % 4}")))),
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake")),
AUDIT_STRATEGY(TYPE(NAME="dml_sharding_conditions"),ALLOW_HINT_DISABLE=true)
);2.Auto sharding table rule
ALTER SHARDING TABLE RULE t_order (
STORAGE_UNITS(ds_0,ds_1,ds_2,ds_3),
SHARDING_COLUMN=order_id,TYPE(NAME="hash_mod",PROPERTIES("sharding-count"="16")),
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake")),
AUDIT_STRATEGY(TYPE(NAME="dml_sharding_conditions"),ALLOW_HINT_DISABLE=true)
);3.Reference an existing key generator
ALTER SHARDING TABLE RULE t_order (
STORAGE_UNITS(ds_0,ds_1),
SHARDING_COLUMN=order_id,TYPE(NAME="hash_mod",PROPERTIES("sharding-count"="4")),
KEY_GENERATE_STRATEGY(COLUMN=another_id,GENERATOR=snowflake_generator),
AUDIT_STRATEGY(TYPE(NAME="dml_sharding_conditions"),ALLOW_HINT_DISABLE=true)
);Reserved word
ALTER, SHARDING, TABLE, RULE, DATANODES, DATABASE_STRATEGY, TABLE_STRATEGY, KEY_GENERATE_STRATEGY, STORAGE_UNITS, SHARDING_COLUMN, SHARDING_COLUMNS, TYPE, GENERATOR, SHARDING_ALGORITHM, COLUMN, NAME, PROPERTIES, AUDIT_STRATEGY, ALLOW_HINT_DISABLE, TRUE, FALSE