:original_name: ddm_10_0013.html .. _ddm_10_0013: Range ===== Application Scenarios --------------------- This algorithm applies to routing data in different ranges to different shards. Less-than signs (<), greater-than signs (>), and BETWEEN ... AND ... are frequently used in SQL queries. Instructions ------------ The sharding key can only be an integer, a date, or used in combination with a date function. If a date function is used, the sharding key must be DATE, DATETIME, or TIMESTAMP. Data Routing ------------ Data is routed to different shards by the sharding key value based on algorithm metadata rules. Metadata needs to be set when a table is created. For example, if there are eight shards in one schema, the metadata range can be [1-2]=0, [3-4]=1, [5-6]=2, [7-8]=3, [9-10]=4, [11-12]=5, [13-14]=6, and default=7. Data is routed to shards by the sharding key value based on the range. Calculation Method ------------------ **Method 1: Use an Integer as the Sharding Key** .. table:: **Table 1** Required calculation methods when the sharding key is the integer data type +-----------------------+----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+ | Condition | Calculation Method | Example | +=======================+======================================================================================================================+=================================================================================================+ | Integer sharding keys | Database routing result: Data is routed to different shards based on the sharding key and the preset metadata range. | Data is routed to shard1 if the sharding key value is 3 and the preset metadata range is [3-4]. | +-----------------------+----------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+ **Method 2: Use a Date as the Sharding Key** .. table:: **Table 2** Supported date functions +-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+ | Date Function | Calculation Method | Example | +=======================+================================================================================================================================================================================================================================================+==============================+ | year() | year(yyyy-MM-dd)=yyyy | year('2019-10-11')=2019 | +-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+ | month() | month(yyyy-MM-dd)=MM | month('2019-10-11')=10 | +-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+ | weekofyear() | weekofyear(yyyy-MM-dd)=Week number of the current year | weekofyear ('2019-10-11')=41 | | | | | | | .. note:: | | | | | | | | The Weekofyear() function is used to return the week number of a specific date represented by the date parameter in a year. For details, see `WEEK `__. | | +-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+ | day() | day(yyyy-MM-dd)=dd | day ('2019-10-11')=11 | +-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+ .. table:: **Table 3** Calculation methods +-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ | Condition | Calculation Method | Example | +===================+=======================================================================================================================================================+=========================================================================================================================================+ | Date sharding key | Database routing: Data is routed to different database shards based on the date function (database sharding key value) and the preset metadata range. | Data is routed to shard 4 based on the metadata range 9-10 when the sharding key value is 10: month(2019-10-11)=10 belongs to [9-10]=4. | +-------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------+ Syntax for Creating Tables -------------------------- .. code-block:: text create table range_tb( id int, name varchar(30) DEFAULT NULL, create_time datetime DEFAULT NULL, primary key(id) ) dbpartition by range(id) { 1-2=0, 3-4=1, 5-6=2, 7-8=3, 9-10=4, 11-12=5, 13-14=6, default=7 }; Precautions ----------- None