Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование по нескольким атрибутам / 11 сообщений из 11, страница 1 из 1
25.03.2019, 18:28
    #39791119
andrey2185
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
Здравствуйте, поддерживает ли в оракл интервальное секционирование по нескольким атрибутам?
...
Рейтинг: 0 / 0
25.03.2019, 18:36
    #39791121
andrey2185
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
т.е. допустим есть два поля с датой в таблице, я хочу секционировать таблицу по ним, задаю интервалы и в результате моя таблицы представляет из себя как бы пространство в клетку
...
Рейтинг: 0 / 0
25.03.2019, 19:41
    #39791139
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
andrey2185т.е. допустим есть два поля с датой в таблице, я хочу секционировать таблицу по ним, задаю интервалы и в результате моя таблицы представляет из себя как бы пространство в клетку
Partitioning работает не так.
Можете сделать свою "клетку" посредством subpartitioning, но не partitioning по двум атрибутам.
...
Рейтинг: 0 / 0
25.03.2019, 19:46
    #39791143
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
Или reference partitioning на справочник-матрицу.
...
Рейтинг: 0 / 0
25.03.2019, 21:44
    #39791191
SY
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
25.03.2019, 22:05
    #39791200
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
SYа так:
Соломон, и где Вы тут углядели "пространство в клетку" (с) ТС?
...
Рейтинг: 0 / 0
26.03.2019, 00:40
    #39791231
SY
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
26.03.2019, 01:34
    #39791234
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
SYНапример:
Уж от кого-кого, но от Вас не ожидал.
Контрпример, надеюсь, публиковать не надо?
...
Рейтинг: 0 / 0
26.03.2019, 01:52
    #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
26.03.2019, 16:07
    #39791674
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интервальное секционирование по нескольким атрибутам
andrey_anonymous...причем работает строго "по чертежу".

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

SY.
...
Рейтинг: 0 / 0
26.03.2019, 16:53
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интервальное секционирование по нескольким атрибутам / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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