forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
236 lines
39 KiB
HTML
236 lines
39 KiB
HTML
<a name="EN-US_TOPIC_0000001510402657"></a><a name="EN-US_TOPIC_0000001510402657"></a>
|
|
|
|
<h1 class="topictitle1">Defining Table Partitions </h1>
|
|
<div id="body8662426"><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p19741182013610">Partitioning refers to splitting what is logically one large table into smaller physical pieces based on specific schemes. The table based on the logic is called a partition cable, and a physical piece is called a partition. Data is stored on these smaller physical pieces, namely, partitions, instead of the larger logical partitioned table. During conditional query, the system scans only the partitions that meet the conditions rather than scanning the entire table improving query performance.</p>
|
|
<p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p44651741151">Advantages of partitioned tables:</p>
|
|
<ul id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_ul1956341269"><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li551034267">Improved query performance. You can search in specific partitions, improving the search efficiency.</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li1662341569">Enhanced availability. If a partition is faulty, data in other partitions is still available.</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li76434766">Improved maintainability. For expired historical data that needs to be periodically deleted, you can quickly delete it by dropping or truncate partitions.</li></ul>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section1286114551305"><h4 class="sectiontitle">Supported Table Partition Types</h4><ul id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_ul7208175111111"><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li1540171113589">Range partitioning: partitions are created based on a numeric range, for example, by date or price range.</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li13407110582">List partitioning: partitions are created based on a list of values, such as sales scope or product attribute. Only clusters of 8.1.3 and later versions support this function.</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section184603191919"><h4 class="sectiontitle">Choosing to Partition a Table</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p48919371679">You can choose to partition a table when the table has the following characteristics:</p>
|
|
<ul id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_ul1120520294711"><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li1020572914715">There are obvious ranges among the fields of the table.<p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p653615413711"><a name="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li1020572914715"></a><a name="en-us_topic_0000001233681707_li1020572914715"></a>A table is partitioned based on obvious rangeable fields. Generally, columns such as date, area, and value are used for partitioning. The time column is most commonly used.</p>
|
|
</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li19206162913714">Queries to the table have obvious range characteristics.<p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p46421157776"><a name="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li19206162913714"></a><a name="en-us_topic_0000001233681707_li19206162913714"></a>If the queried data fall into specific ranges, its better tables are partitioned so that through partition pruning, only the queried partition needs to be scanned, improving data scanning efficiency and reducing the I/O overhead of data scanning.</p>
|
|
</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li320652914716">The table contains a large amount of data.<p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p81471159675"><a name="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li320652914716"></a><a name="en-us_topic_0000001233681707_li320652914716"></a>Scanning small tables does not take much time, therefore the performance benefits of partitioning are not significant. Therefore, you are advised to partition only large tables. In column-store table, each column is an independent file storage unit, and the minimum storage unit CU can store 60,000 rows of data. Therefore, for column-store partitioned tables, it is recommended that the data volume in each partition be greater than or equal to the number of DNs multiplied by 60,000.</p>
|
|
</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_sdb508113f5ee42f2b71458f1ddffccdb"><h4 class="sectiontitle">Creating a Range Partitioned Table</h4><div class="p" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p5765185218101">Example: Create a table <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b143403274411">web_returns_p1</strong> partitioned by the range <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b12595536124417">wr_returned_date_sk</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen173184517919"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span>
|
|
<span class="normal">16</span>
|
|
<span class="normal">17</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">wr_returned_date_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_returned_time_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_item_sk</span><span class="w"> </span><span class="nb">integer</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_refunded_customer_sk</span><span class="w"> </span><span class="nb">integer</span>
|
|
<span class="p">)</span>
|
|
<span class="k">WITH</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">)</span>
|
|
<span class="n">DISTRIBUTE</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">HASH</span><span class="w"> </span><span class="p">(</span><span class="n">wr_item_sk</span><span class="p">)</span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">RANGE</span><span class="w"> </span><span class="p">(</span><span class="n">wr_returned_date_sk</span><span class="p">)</span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2016</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="mi">20161231</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2017</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="mi">20171231</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2018</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="mi">20181231</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2019</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="mi">20191231</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">pxxxx</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="k">maxvalue</span><span class="p">)</span>
|
|
<span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="p" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p154091123142914">Create partitions in batches, with fixed partition ranges. The following example can be used:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen178661533162913"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p2</span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">wr_returned_date_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_returned_time_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_item_sk</span><span class="w"> </span><span class="nb">integer</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_refunded_customer_sk</span><span class="w"> </span><span class="nb">integer</span>
|
|
<span class="p">)</span>
|
|
<span class="k">WITH</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">)</span>
|
|
<span class="n">DISTRIBUTE</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">HASH</span><span class="w"> </span><span class="p">(</span><span class="n">wr_item_sk</span><span class="p">)</span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">RANGE</span><span class="p">(</span><span class="n">wr_returned_date_sk</span><span class="p">)</span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2016</span><span class="w"> </span><span class="k">START</span><span class="p">(</span><span class="mi">20161231</span><span class="p">)</span><span class="w"> </span><span class="k">END</span><span class="p">(</span><span class="mi">20191231</span><span class="p">)</span><span class="w"> </span><span class="k">EVERY</span><span class="p">(</span><span class="mi">10000</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p0</span><span class="w"> </span><span class="k">END</span><span class="p">(</span><span class="k">maxvalue</span><span class="p">)</span>
|
|
<span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="p" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p29106734610">Partition the table <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b2043944954313">web_returns_p2</strong> by date and time, using time as the partition key.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen8911371469"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p2</span>
|
|
<span class="p">(</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">idle</span><span class="w"> </span><span class="nb">numeric</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">IO</span><span class="w"> </span><span class="nb">numeric</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="k">scope</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">IP</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="k">time</span><span class="w"> </span><span class="k">timestamp</span>
|
|
<span class="p">)</span>
|
|
<span class="w"> </span><span class="k">WITH</span><span class="w"> </span><span class="p">(</span><span class="n">TTL</span><span class="o">=</span><span class="s1">'7 days'</span><span class="p">,</span><span class="k">PERIOD</span><span class="o">=</span><span class="s1">'1 day'</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">RANGE</span><span class="p">(</span><span class="k">time</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="p">(</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">P1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="s1">'2022-01-05 16:32:45'</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">P2</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="p">(</span><span class="s1">'2022-01-06 16:56:12'</span><span class="p">)</span>
|
|
<span class="w"> </span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section16324173872714"><h4 class="sectiontitle">Creating a List Partitioned Table</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p139012515251">A list partitioned table can use any column that allows value comparison as the partition key column. When creating a list partitioned table, you must declare the value partition for each partition.</p>
|
|
<p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p590105152512">Example: Create a list partitioned table <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b1293362112207">sales_info</strong>.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen758312442482"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span>
|
|
<span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">sales_info</span>
|
|
<span class="p">(</span>
|
|
<span class="n">sale_time</span><span class="w"> </span><span class="n">timestamptz</span><span class="p">,</span>
|
|
<span class="k">period</span><span class="w"> </span><span class="nb">int</span><span class="p">,</span>
|
|
<span class="n">city</span><span class="w"> </span><span class="nb">text</span><span class="p">,</span>
|
|
<span class="n">price</span><span class="w"> </span><span class="nb">numeric</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span>
|
|
<span class="n">remark</span><span class="w"> </span><span class="n">varchar2</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">DISTRIBUTE</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">HASH</span><span class="p">(</span><span class="n">sale_time</span><span class="p">)</span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">LIST</span><span class="w"> </span><span class="p">(</span><span class="k">period</span><span class="p">,</span><span class="w"> </span><span class="n">city</span><span class="p">)</span>
|
|
<span class="p">(</span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="n">province1_202201</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">((</span><span class="s1">'202201'</span><span class="p">,</span><span class="w"> </span><span class="s1">'city1'</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="s1">'202201'</span><span class="p">,</span><span class="w"> </span><span class="s1">'city2'</span><span class="p">)),</span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="n">province2_202201</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">((</span><span class="s1">'202201'</span><span class="p">,</span><span class="w"> </span><span class="s1">'city3'</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="s1">'202201'</span><span class="p">,</span><span class="w"> </span><span class="s1">'city4'</span><span class="p">),</span><span class="w"> </span><span class="p">(</span><span class="s1">'202201'</span><span class="p">,</span><span class="w"> </span><span class="s1">'city5'</span><span class="p">)),</span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="n">rest</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="k">DEFAULT</span><span class="p">)</span>
|
|
<span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section279351102"><h4 class="sectiontitle">Partitioning an Existing Table</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p872411292002">A table can be partitioned only when it is created. If you want to partition a table, you must create a partitioned table, load the data in the original table to the partitioned table, delete the original table, and rename the partitioned table as the name of the original table. You must also re-grant permissions on the table to users. For example:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen181578017512"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
|
<span class="normal"> 2</span>
|
|
<span class="normal"> 3</span>
|
|
<span class="normal"> 4</span>
|
|
<span class="normal"> 5</span>
|
|
<span class="normal"> 6</span>
|
|
<span class="normal"> 7</span>
|
|
<span class="normal"> 8</span>
|
|
<span class="normal"> 9</span>
|
|
<span class="normal">10</span>
|
|
<span class="normal">11</span>
|
|
<span class="normal">12</span>
|
|
<span class="normal">13</span>
|
|
<span class="normal">14</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p2</span><span class="w"> </span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">wr_returned_date_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_returned_time_sk</span><span class="w"> </span><span class="nb">integer</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_item_sk</span><span class="w"> </span><span class="nb">integer</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span>
|
|
<span class="w"> </span><span class="n">wr_refunded_customer_sk</span><span class="w"> </span><span class="nb">integer</span><span class="w"> </span>
|
|
<span class="p">)</span><span class="w"> </span>
|
|
<span class="k">WITH</span><span class="w"> </span><span class="p">(</span><span class="n">orientation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">column</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="n">DISTRIBUTE</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">HASH</span><span class="w"> </span><span class="p">(</span><span class="n">wr_item_sk</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="n">PARTITION</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">RANGE</span><span class="p">(</span><span class="n">wr_returned_date_sk</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="p">(</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2016</span><span class="w"> </span><span class="k">START</span><span class="p">(</span><span class="mi">20161231</span><span class="p">)</span><span class="w"> </span><span class="k">END</span><span class="p">(</span><span class="mi">20191231</span><span class="p">)</span><span class="w"> </span><span class="k">EVERY</span><span class="p">(</span><span class="mi">10000</span><span class="p">),</span>
|
|
<span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p0</span><span class="w"> </span><span class="k">END</span><span class="p">(</span><span class="k">maxvalue</span><span class="p">)</span><span class="w"> </span>
|
|
<span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen11115855108"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">web_returns_p2</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="p">;</span>
|
|
<span class="k">DROP</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="p">;</span>
|
|
<span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p2</span><span class="w"> </span><span class="k">RENAME</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="p">;</span>
|
|
<span class="k">GRANT</span><span class="w"> </span><span class="k">ALL</span><span class="w"> </span><span class="k">PRIVILEGES</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">dbadmin</span><span class="p">;</span>
|
|
<span class="k">GRANT</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">jack</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section13379231132714"><h4 class="sectiontitle">Adding a Partition</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p658810145131">Run the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b84070503581">ALTER TABLE</strong> statement to add a partition to a partitioned table. For example, to add partition <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b9154758115817">P2020</strong> to the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b118874414595">web_returns_p1</strong> table, run the following command:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_s95b29ec2305a4560be128f735ba03184"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="k">ADD</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">P2020</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="k">LESS</span><span class="w"> </span><span class="k">THAN</span><span class="w"> </span><span class="p">(</span><span class="mi">20201231</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section11365501930"><h4 class="sectiontitle">Splitting a Partition</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p16597577178">The syntax for splitting a partition varies between a range partitioned table and a list partitioned table.</p>
|
|
<ul id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_ul14585145817310"><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li185858581338">Run the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b211440168681210">ALTER TABLE</strong> statement to split a partition in a range partitioned table. For example, the partition <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b1364261312152">pxxxx</strong> of the table <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b47765592144">web_returns_p1</strong> is split into two partitions <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b1041913220157">p2020</strong> and <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b17707172561518">p20xx</strong> at the splitting point <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b364313582154">20201231</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen18961521547"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="n">SPLIT</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">pxxxx</span><span class="w"> </span><span class="k">AT</span><span class="p">(</span><span class="mi">20201231</span><span class="p">)</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="p">(</span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p2020</span><span class="p">,</span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p20xx</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li15779699419">Run the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b173133191613">ALTER TABLE</strong> statement to split a partition in a list partitioned table. For example, split the partition <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b18539103012167">province2_202201</strong> of table <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b16889843201613">sales_inf</strong> into two partitions <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b194962916179">province3_202201</strong> and <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b66674511710">province4_202201</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen232071119414"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">sales_info</span><span class="w"> </span><span class="n">SPLIT</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">province2_202201</span><span class="w"> </span><span class="k">VALUES</span><span class="p">((</span><span class="s1">'202201'</span><span class="p">,</span><span class="w"> </span><span class="s1">'city5'</span><span class="p">))</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="p">(</span><span class="n">PARTITION</span><span class="w"> </span><span class="n">province3_202201</span><span class="p">,</span><span class="n">PARTITION</span><span class="w"> </span><span class="n">province4_202201</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section1264104191614"><h4 class="sectiontitle">Merging Partitions</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p573218263246">Run the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b7687323511727">ALTER TABLE</strong> statement to merge two partitions in a partitioned table. For example, merge partitions <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b2315193381713">p2016 </strong>and <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b638813517178">p2017 </strong>of table <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b6856164901716">web_returns_p1</strong> into one partition <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b1151455619174">p20162017</strong>.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen47067192243"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="n">MERGE</span><span class="w"> </span><span class="n">PARTITIONS</span><span class="w"> </span><span class="n">p2016</span><span class="p">,</span><span class="n">p2017</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">p20162017</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section0317927299"><h4 class="sectiontitle">Deleting a Partition</h4><div class="p" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p2017055081615">Run the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b4117121828">ALTER TABLE</strong> statement to delete a partition from a partitioned table. For example, run the following command to delete partition <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b126911110626">P2020</strong> from the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b1587281419216">web_returns_p1</strong> table:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen828618203128"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">ALTER</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="k">DROP</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="n">P2020</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section128131138276"><h4 class="sectiontitle">Querying a Partition</h4><ul id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_ul158096407154"><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li781044081518">Query partition <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b16581720181712">p2019</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen02993208125"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="p">(</span><span class="n">p2019</span><span class="p">);</span>
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="w"> </span><span class="n">PARTITION</span><span class="w"> </span><span class="k">FOR</span><span class="w"> </span><span class="p">(</span><span class="mi">20201231</span><span class="p">);</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</li><li id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_li2561143191515">View partitioned tables using the system catalog <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b95978651141632">dba_tab_partitions</strong>.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen944011815719"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">dba_tab_partitions</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="k">table_name</span><span class="o">=</span><span class="s1">'web_returns_p1'</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</li></ul>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_section717055182618"><h4 class="sectiontitle">Deleting a Partitioned Table</h4><p id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_p1783318530147">Run the <strong id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_b193191947181712">DROP TABLE</strong> statement to delete a partitioned table.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510402657__en-us_topic_0000001233681707_screen2643427122617"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">DROP</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">web_returns_p1</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0016.html">Defining Database Objects</a></div>
|
|
</div>
|
|
</div>
|
|
|