Виртуальные поля
Виртуальные поля - поля, значения в которых вычисляются в момент обращения. Данные физически не хранятся в файлах, только метаинформация как вычислять поле.
Объявление выглядит так:
Функция может быть пользовательская, но обязательно должна быть deterministic.
Альтернатива? обычный столбец, заполнение которого контролируется вручную в API, триггере и т.д.
#теория #column
Виртуальные поля - поля, значения в которых вычисляются в момент обращения. Данные физически не хранятся в файлах, только метаинформация как вычислять поле.
Объявление выглядит так:
create table имя_таблицыМожно создавать индексы, можно использовать в качестве ключа партиционирования, легко можно реализовать доп бизнесовую логику, легко контролируется заполнение и т.д. Вставлять данные в него нельзя.
(
...
имя_столбца generated always as (выражение) virtual
…
);
Функция может быть пользовательская, но обязательно должна быть deterministic.
Альтернатива? обычный столбец, заполнение которого контролируется вручную в API, триггере и т.д.
#теория #column
Партиционирование по виртуальному полю
Можно использовать в качестве ключа партиционирования - виртуальный столбец.
1. Создается вычисляемое “на лету” поле в таблице, зависящее от других полей или deterministic-функции.
2. По виртуальному полю создается партиционирование.
Иногда это может быть удобно. Если мы хотим партиционировать не по исходным данным, а по преобразованным. Например, не по столбцу с timestamp, а по date и т.д.
Не стесняйтесь применять этот подход.
Можно использовать в качестве ключа партиционирования - виртуальный столбец.
1. Создается вычисляемое “на лету” поле в таблице, зависящее от других полей или deterministic-функции.
2. По виртуальному полю создается партиционирование.
Иногда это может быть удобно. Если мы хотим партиционировать не по исходным данным, а по преобразованным. Например, не по столбцу с timestamp, а по date и т.д.
Не стесняйтесь применять этот подход.
create table my_tab#теория #секционирование #column
(
id number(20) not null,
dtime timestamp(6) default systimestamp,
minute date generated always as (trunc(dtime, 'mi')) virtual,
status number(10) default 10
)
partition by range (minute)
(
partition pmin values less than (to_date(' 2008-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'))
);