CREATE SHARDING TABLE RULE
Description
The CREATE SHARDING TABLE RULE syntax is used to add sharding table rule for the currently selected database
Syntax
CreateShardingTableRule ::=
'CREATE' 'SHARDING' 'TABLE' 'RULE' ifNotExists? (tableRuleDefinition | autoTableRuleDefinition) (',' (tableRuleDefinition | autoTableRuleDefinition))*
ifNotExists ::=
'IF' 'NOT' 'EXISTS'
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;ifNotExistsclause is used to avoidDuplicate sharding ruleerror.
Example
1.Standard sharding table rule
CREATE SHARDING TABLE RULE t_order_item (
DATANODES("ds_${0..1}.t_order_item_${0..1}"),
DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=user_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${user_id % 2}")))),
TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=order_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="t_order_item_${order_id % 2}")))),
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
CREATE 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,TYPE(NAME="snowflake")),
AUDIT_STRATEGY (TYPE(NAME="DML_SHARDING_CONDITIONS"),ALLOW_HINT_DISABLE=true)
);3.Reference an existing key generator
CREATE 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)
);4.Create sharding rule with ifNotExists clause
- Standard sharding table rule
CREATE SHARDING TABLE RULE IF NOT EXISTS t_order_item (
DATANODES("ds_${0..1}.t_order_item_${0..1}"),
DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=user_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${user_id % 2}")))),
TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=order_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="t_order_item_${order_id % 2}")))),
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake")),
AUDIT_STRATEGY (TYPE(NAME="DML_SHARDING_CONDITIONS"),ALLOW_HINT_DISABLE=true)
);- Auto sharding table rule
CREATE SHARDING TABLE RULE IF NOT EXISTS 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,TYPE(NAME="snowflake")),
AUDIT_STRATEGY (TYPE(NAME="DML_SHARDING_CONDITIONS"),ALLOW_HINT_DISABLE=true)
);Reserved word
CREATE, SHARDING, TABLE, RULE, IF, NOT, EXISTS, 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