: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 |
+---------------+--------------------------------------------------------+------------------------------+
| day() | day(yyyy-MM-dd)=Day number of the current month | 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