powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование по нескольким атрибутам
11 сообщений из 11, страница 1 из 1
Интервальное секционирование по нескольким атрибутам
    #39791119
andrey2185
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, поддерживает ли в оракл интервальное секционирование по нескольким атрибутам?
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791121
andrey2185
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
т.е. допустим есть два поля с датой в таблице, я хочу секционировать таблицу по ним, задаю интервалы и в результате моя таблицы представляет из себя как бы пространство в клетку
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791139
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey2185т.е. допустим есть два поля с датой в таблице, я хочу секционировать таблицу по ним, задаю интервалы и в результате моя таблицы представляет из себя как бы пространство в клетку
Partitioning работает не так.
Можете сделать свою "клетку" посредством subpartitioning, но не partitioning по двум атрибутам.
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791143
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или reference partitioning на справочник-матрицу.
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791191
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousPartitioning работает не так.
Можете сделать свою "клетку" посредством subpartitioning, но не partitioning по двум атрибутам.

Интервал нет (разве-что в 18C разрешили), а так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table date_ranges(
                         date1 date, 
                         date2 date
                        )
  partition by range(
                     date1,
                     date2
                    )
    (
     partition p1 values less than(date '2000-01-01',date '2000-01-01'),
     partition p2 values less than(date '2001-01-01',date '2001-01-01'),
     partition p3 values less than(maxvalue,maxvalue)
    )
/

Table created.

SQL> 



SY.
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791200
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYа так:
Соломон, и где Вы тут углядели "пространство в клетку" (с) ТС?
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791231
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousСоломон, и где Вы тут углядели "пространство в клетку" (с) ТС?

А включить воображение? Ведь partition/subpartition это лишь частный случай партиционирования по двум полям.
Например:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table date_ranges(
                         date1 date, 
                         date2 date
                        )
  partition by range(
                     date1
                    )
    subpartition by range(
                          date2
                         )
    (
     partition p1 values less than(date '2000-01-01')
      (
       subpartition p1_s1 values less than(date '2000-01-01'),
       subpartition p1_s2 values less than(date '2001-01-01'),
       subpartition p1_s3 values less than(date '2002-01-01')
      )
    )
/



И:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table date_ranges(
                         date1 date, 
                         date2 date
                        )
  partition by range(
                     date1,
                     date2
                    )
    (
     partition p1 values less than(date '2000-01-01',date '2000-01-01'),
     partition p2 values less than(date '2000-01-01',date '2001-01-01'),
     partition p3 values less than(date '2000-01-01',date '2002-01-01')
    )
/



SY.
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791234
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНапример:
Уж от кого-кого, но от Вас не ожидал.
Контрпример, надеюсь, публиковать не надо?
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791235
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousSYНапример:
Уж от кого-кого, но от Вас не ожидал.
Не знаю уж над кем Соломон хотел подшутить, но работает оно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
create table date_ranges( 
                         date1 date,  
                         date2 date 
                        ) 
  partition by range( 
                     date1, 
                     date2 
                    ) 
    ( 
     partition p1 values less than(date '2000-01-01',date '2000-01-01'), 
     partition p2 values less than(date '2000-01-01',date '2001-01-01'), 
     partition p3 values less than(date '2000-01-01',date '2002-01-01') 
    ) 
Table created.

insert into date_ranges values(date'1999-12-31',date '2000-01-01')
1 row(s) inserted.

insert into date_ranges values(date'1999-12-31',date '2001-01-01')
1 row(s) inserted.

insert into date_ranges values(date'1999-12-31',date '2002-01-01')
1 row(s) inserted.

insert into date_ranges values(date'1999-12-31',date '3333-01-01')
1 row(s) inserted.

select * from  date_ranges partition (p3)
no data found

select * from  date_ranges partition (p2)
no data found

select * from  date_ranges partition (p1)

DATE1	DATE2
31-DEC-99	01-JAN-00
31-DEC-99	01-JAN-01
31-DEC-99	01-JAN-02
31-DEC-99	01-JAN-33

4 rows selected.


...причем работает строго "по чертежу".
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791674
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous...причем работает строго "по чертежу".

Каюсь, совершенно неправильно понял "чертеж".

SY.
...
Рейтинг: 0 / 0
Интервальное секционирование по нескольким атрибутам
    #39791710
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYнеправильно понял "чертеж".
На случай, если кто-либо еще из коллег не совсем понимает как работает range partitioning при составном ключе секционирования, попробую зафиксировать:
- он принципиально линейный, границы разделов образуют возрастающую последовательность
- если ключ секционирования составной, то семантика сравнения фактического значения ключа с границей раздела - как у строки.

Другими словами, второй (и последующие) атрибуты ключа секционирования будут "работать" только при полном совпадении значения фактического значения первого атрибута с первым же атрибутом границы раздела.
На рассматриваемом примере:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
ключи
(date '1999-12-31',%)
(date '2000-01-01',date '1999-12-31')
войдут в раздел
     less than(date '2000-01-01',date '2000-01-01')

ключи
(date '2000-01-01',date '2000-01-01'..date '2000-12-31')
войдут в раздел
     less than(date '2000-01-01',date '2001-01-01'),

ключи
(date '2000-01-01',date '2001-01-01'..date '2001-12-31')
     less than(date '2000-01-01',date '2002-01-01')

ключи
(date '2000-01-01',date '2002-01-01'..maxvalue)
(date '2000-01-02',%)
окажутся выше верхней границы и вызовут соответствующий exception
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование по нескольким атрибутам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]