Это правильное объяснение раздела Range-Ha sh? - PullRequest
1 голос
/ 07 мая 2020
CREATE TABLE sales
  ( prod_id       NUMBER(6)
  , cust_id       NUMBER
  , time_id       DATE
  , channel_id    CHAR(1)
  , promo_id      NUMBER(6)
  , quantity_sold NUMBER(3)
  , amount_sold   NUMBER(10,2)
  )
 PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
  SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
 ( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))
 , PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy'))
 , PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy'))
 , PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
 );

В приведенном выше примере создается раздел диапазона ha sh, который разбивает базу данных на четыре части: ts1, ts2, ts3, ts4. Затем создается раздел диапазона, который разделяет данные за квартал продаж на четыре части (ts1, ts2, ts3, ts4). Несмотря на то, что кварталы продаж разделены на разделы (ts1, ts2, ts3, ts4), эти части данных затем разбиваются на 8 подразделов?

Если это помогает, это тот веб-сайт, который я использовал для пример: https://docs.oracle.com/database/121/VLDBG/GUID-A596B6B1-62C7-4701-A872-BDC5632CEE43.htm

Спасибо

1 Ответ

1 голос
/ 08 мая 2020

Почти. Я нахожу этот пример довольно запутанным, и мне пришлось его протестировать, прежде чем разбираться в нем.

Таблица разделена на части sales_q1_2006 ... sales_q4_2006. A time_id первого квартала 2006 г. попадает в раздел sales_q1_2006, et c. Каждый из этих разделов разделен на 8 подразделов значением ha sh столбца cust_id.

Теперь бит (ts1, ts2, ts3, ts4). Немного легче понять, если использовать 8 табличных пространств для 8 подразделов:

   SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4, ts5, ts6, ts7, ts8)

Если вы создаете таблицу, каждая из 8 частей сохраняется в отдельном табличном пространстве:

SELECT partition_position AS pos, partition_name, subpartition_name, tablespace_name 
  FROM USER_TAB_SUBPARTITIONS 
 ORDER BY table_name, partition_position, subpartition_name;

POS PARTITION     SUBPARTITION TABLESPACE
1   SALES_Q1_2006 SYS_SUBP525  TS1
1   SALES_Q1_2006 SYS_SUBP526  TS2
1   SALES_Q1_2006 SYS_SUBP527  TS3
1   SALES_Q1_2006 SYS_SUBP528  TS4
1   SALES_Q1_2006 SYS_SUBP529  TS5
1   SALES_Q1_2006 SYS_SUBP530  TS6
1   SALES_Q1_2006 SYS_SUBP531  TS7
1   SALES_Q1_2006 SYS_SUBP532  TS8
2   SALES_Q2_2006 SYS_SUBP533  TS1
2   SALES_Q2_2006 SYS_SUBP534  TS2
2   SALES_Q2_2006 SYS_SUBP535  TS3
...

Итак, первые подразделы ha sh всех разделов хранятся в табличном пространстве ts1, вторые подразделы ha sh всех разделов хранятся в табличном пространстве ts2, et c. до табличного пространства ts8.

Возвращаясь к вашему примеру, с 4 именами табличных пространств и 8 подразделами: четыре указанных табличных пространства с ts1 по ts4 просто циклически просматриваются, пока все подразделы не получат табличное пространство. В вашем примере 8 подразделов go для табличных пространств ts1, ts2, ts3, ts4, ts1, ts2, ts3 и ts4:

SELECT partition_position AS pos, partition_name, subpartition_name, tablespace_name 
  FROM USER_TAB_SUBPARTITIONS 
 ORDER BY table_name, partition_position, subpartition_name;

POS PARTITION       SUBPARTITION   TABLESPACE
1   SALES_Q1_2006   SYS_SUBP589    TS1 <= first cycle
1   SALES_Q1_2006   SYS_SUBP590    TS2
1   SALES_Q1_2006   SYS_SUBP591    TS3
1   SALES_Q1_2006   SYS_SUBP592    TS4
1   SALES_Q1_2006   SYS_SUBP593    TS1 <= next cycle
1   SALES_Q1_2006   SYS_SUBP594    TS2
1   SALES_Q1_2006   SYS_SUBP595    TS3
1   SALES_Q1_2006   SYS_SUBP596    TS4
2   SALES_Q2_2006   SYS_SUBP597    TS1 <= next partition
2   SALES_Q2_2006   SYS_SUBP598    TS2
2   SALES_Q2_2006   SYS_SUBP599    TS3
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...