Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 30 31 32 33 34 35 36 [37] 38 39   вперед  Ctrl
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2473
21887033

.....
stax
14 фев 20, 20:33    [22080368]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
andrey_anonymous
partition by dt_till позволяет нормально работать с актуальным срезом
Актуальный срез факта или измерения?
Какой процент записей актуален?
Чем подход лучше в сравнении с секционированием по вычислимому столбцу "актуально/неактуально"?
andrey_anonymous
Ну тут мне как-то сложно сложить в один сценарий "доступ по business_key" и "чтоб Оракл соединял с остальными таблицами как HJ а не NL.".
Было просто показано что и для конерктной сущности и для всех проблемы с доступом по индексу не возникает (если это вообще необходимо).
andrey_anonymous
Либо паттерн OLTP, либо DWH - под какой сценарий хорошо прокатывает null?
Как уже было замечено, главный плюс null - правильная оценка кардинальности Ораклом когда подавляющее большинство записей актуальны.
При 9999 либо другой фиксированной максимальной дате эта оценка абсолютно некорректна
(хотя может в последних версиях что-то докрутили для случая когда есть особо перекошенные бакеты).
17 фев 20, 20:35    [22081685]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
booby
Member

Откуда:
Сообщений: 1974
-2-
https://docs.oracle.com/en/database/oracle/oracle-database/20/books.html


FOR power IN 1, REPEAT power*2 WHILE power <= 64 LOOP


v := vec_rec_t( FOR r rec_t IN (EXECUTE IMMEDIATE query_var) SEQUENCE => r);


FOR r rec_t IN VALUES OF (EXECUTE IMMEDIATE cursor_str) WHEN r.employee_id < 103 LOOP


result := intvec_t(FOR i,j IN PAIRS OF vec INDEX j => i);
   FOR i,j IN PAIRS OF result LOOP
      DBMS_OUTPUT.PUT_LINE(i || '=>'|| j);
   END LOOP;


вау...
давненько я в доки не заглядывал...
18 фев 20, 01:54    [22081784]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кобанчег
главный плюс null - правильная оценка кардинальности Ораклом когда подавляющее большинство записей актуальны.
Для подавляющенности смещенная оценка height-histogram не принципиально отличается от количества не-null значений.
Кобанчег
При 9999 либо другой фиксированной максимальной дате эта оценка абсолютно некорректна
top-frequency histogram подходит для оценки, когда несколько значений составляют большинство.
18 фев 20, 07:25    [22081805]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
Кобанчег
andrey_anonymous
partition by dt_till позволяет нормально работать с актуальным срезом
Актуальный срез факта или измерения?
У фактов бывают актуальные срезы?
Обычно, говоря о версионировании, имеют ввиду SCD.
В случае dt_from...dt_till - SCD2 или гибриды на ее основе.

Кобанчег

Какой процент записей актуален?
Не все равно, если они лежат в отдельном partition и работает partition pruning?

Кобанчег
Чем подход лучше в сравнении с секционированием по вычислимому столбцу "актуально/неактуально"?
22079614

Кобанчег

andrey_anonymous
Либо паттерн OLTP, либо DWH - под какой сценарий хорошо прокатывает null?
Как уже было замечено, главный плюс null - правильная оценка кардинальности Ораклом когда подавляющее большинство записей актуальны.
При 9999 либо другой фиксированной максимальной дате эта оценка абсолютно некорректна

И это достойный повод ограничить функционал, попутно повысив стоимость поддержки?
18 фев 20, 16:02    [22082321]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
andrey_anonymous
У фактов бывают актуальные срезы?
Именно про этот сценарий и речь: пользователи могут править факты через приложение и делают это мизерного процента записей.
andrey_anonymous
Кобанчег

Какой процент записей актуален?
Не все равно, если они лежат в отдельном partition и работает partition pruning?
Если актуальных 99% то прунинг не нужен в принципе.
andrey_anonymous
И это достойный повод ограничить функционал, попутно повысив стоимость поддержки?
Не очень понятно что ограничивается и как повышается стоимость, впрочем этот диалог себя исчерпал.
Если в вашей консерватории идет целенаправленная завязка на максимальную непустую дату и вы не видите как от этого уйти я ж не против.
18 фев 20, 17:15    [22082396]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18065
Кобанчег
andrey_anonymous
У фактов бывают актуальные срезы?
Именно про этот сценарий и речь: пользователи могут править факты через приложение и делают это мизерного процента записей.
В этом случае не стоит применять терминологию хранилищ, чтобы не терять нить беседы.
Факты не подлежат правке, в крайнем случае они подлежат перезаливке.
Кобанчег

andrey_anonymous
пропущено...
Не все равно, если они лежат в отдельном partition и работает partition pruning?
Если актуальных 99% то прунинг не нужен в принципе.
Это один очень специфический случай, и рекомендации для него не стоит публиковать без соответствующих оговорок, поскольку в других сценариях оно не работает или работает не так, как ожидалось.
Отдельно замечу, что partitioning может вводиться не только из соображений обеспечения performance, но и из соображений ILM.
Хотя в описываемом Вами вырожденном случае и эти соображения, вероятно, не очень актуальны.
Кобанчег

andrey_anonymous
И это достойный повод ограничить функционал, попутно повысив стоимость поддержки?
Не очень понятно что ограничивается и как повышается стоимость, впрочем этот диалог себя исчерпал.

Ограничение функционала: если актуальные вычисляются флагом, то требуется ограничить создание версий в будущем.
Зачем это может быть нужно - уже указывал.
Стоимость разработки и сопровождения: если Ваша схема данных требует написания отдельных запросов при обращении к актуальному срезу (предикат is null) и срезу на момент времени (предикат больше-меньше), то объем работ по разработке и сопровождению системы ~удваивается.
18 фев 20, 18:58    [22082479]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
andrey_anonymous
Факты не подлежат правке, в крайнем случае они подлежат перезаливке.
В моём колхозе всё запущенней.
Еще эти дерзкие юзеры хотят чтоб поправленные факты были отражены в olap кубе in near real-time.
18 фев 20, 19:20    [22082497]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
-2-
https://docs.oracle.com/en/database/oracle/oracle-database/20/books.html
По-моему она из крутейших фич
SQL_MACRO Clause.
Наконец-то если захочется "передать параметр во view" можно будет Using a Table Macro in a Table Expression.



Еще одна фишка достаточно узконапраленная, но мощная.
Для аналитики можно будет указывать ROWS | RANGE | GROUPS.
Use GROUPS to specifiy the window frame extent with both ROWS and RANGE characteristics.



Реальные задачи на аналитику где надо EXCLUDE options сходу в голову не приходят.
Enhanced Analytic Functions
Analytical window functions now supports the EXCLUDE options of the SQL standard window frame clause.
The query_block clause of the SELECT statement now supports the window_clause, which implements the window clause of the SQL standard table expression as defined in the SQL:2011 standard.
19 фев 20, 20:00    [22083335]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
booby
Member

Откуда:
Сообщений: 1974
Кобанчег
Реальные задачи на аналитику где надо EXCLUDE options сходу в голову не приходят.

В оличие от SQL_MACRO, это как раз понятная пожелалка.

При работе с логическими окнами появился вменяемый способ сказать "все логически предыдущие, но не включая текущую строку".
Или все логически следующие от сего момента, но не включая текущую строку.
что называется, стотыщпятьсот таких смотрелок вперед или назад,
в которых не всегда удобно работать с физическими окнами.
19 фев 20, 21:13    [22083357]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кобанчег

Наконец-то если захочется "передать параметр во view" можно будет Using a Table Macro in a Table Expression.
Это не параметризованные view. Параметры не могут быть коррелированными.
19 фев 20, 21:58    [22083364]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
booby
Кобанчег
Реальные задачи на аналитику где надо EXCLUDE options сходу в голову не приходят.

В оличие от SQL_MACRO, это как раз понятная пожелалка.

При работе с логическими окнами появился вменяемый способ сказать "все логически предыдущие, но не включая текущую строку".
Или все логически следующие от сего момента, но не включая текущую строку.
что называется, стотыщпятьсот таких смотрелок вперед или назад,
в которых не всегда удобно работать с физическими окнами.
"все логически предыдущие, но не включая текущую строку" = "between unbounded preceding and 1 preceding" это еще в 8i можно было использовать.
Там написано нескольо иное, но с английского я переводить и сам умею.

Например, в Oracle 20 можно запилить все строки кроме текущей.
Мне интересен пример задачи когда это понадобится.

Например, если такое надо для функции sum, то можно просто сделать "sum(x) over () - x" и в "exclude current row" особой необходимости нет.

Вот за 20 лет на этом форуме хоть раз возникала тема, где реально помогла бы эта фича?
19 фев 20, 22:34    [22083380]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
-2-
Кобанчег

Наконец-то если захочется "передать параметр во view" можно будет Using a Table Macro in a Table Expression.
Это не параметризованные view. Параметры не могут быть коррелированными.
Example 14-3 Budget : Using a Table Macro in a Table Expression
CREATE FUNCTION budget(job VARCHAR2) RETURN VARCHAR2 SQL_MACRO IS
BEGIN
   RETURN q'{SELECT deptno, SUM(sal) budget 
             FROM scott.emp
             WHERE job = budget.job
             GROUP BY deptno}';
END;

SELECT * FROM budget('MANAGER');

19 фев 20, 22:37    [22083382]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
booby
Member

Откуда:
Сообщений: 1974
Кобанчег,

автор
"between unbounded preceding and 1 preceding" это еще в 8i можно было использовать.

1 что, если перед between слово range помещено?

дело не в том, что можно было "обойтись" или "использовать" rows, а в том, что вам дали способ при использовании логического, а не физического диапазона вменяемо сказать - текущая строка не нужна.
это не вынос мозга, но малое потенциальное удобство.

также ясно, что SELECT * FROM budget('MANAGER');
в угоду мордописателям творился.
с закосом на возможность статической проверки на компилируемость динамического sql
при замене морд.
тоже для них удобство, размер которого им и оценивать.
на обратной стороне подозреваю такую их возможную реакцию - а не надо нам больше ваших пограничных представлений.
19 фев 20, 23:39    [22083405]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
booby
что, если перед between слово range помещено?
Тогда можно написать
1e-38 preceding

booby
также ясно, что SELECT * FROM budget('MANAGER');
в угоду мордописателям творился.
Другим может быть ясно совсем иное.
В моём колхозе кроме мордописателей еще есть отчетостроители и это жирнейший плюс, что можно логику инкапсулировать так, чтоб для построения отчета выполнялся просто запрос из функции.
И главное преимущество здесь по сравнению с текущими версиями, что не надо создавать тип и при запуске отчета тип не будет конструироваться на каждую строку результата выжирая CPU.
20 фев 20, 02:14    [22083432]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кобанчег
Например, если такое надо для функции sum, то можно просто сделать "sum(x) over () - x" и в "exclude current row" особой необходимости нет.
А если max(x)?
exclude имеет смысл еще и в качестве модификатора именованного окна.

Кобанчег
booby
что, если перед between слово range помещено?
Тогда можно написать
1e-38 preceding
Этак и строгое сравнение избыточно. Можно обойтись нестрогим.

Кобанчег
И главное преимущество здесь по сравнению с текущими версиями, что не надо создавать тип и при запуске отчета тип не будет конструироваться на каждую строку результата выжирая CPU.
А ведь еще и расконструирование объекта в строку результата... Осталось оценить сколько это "выжирая". И еще сравнить с параметризацией контекстом.
"не надо создавать тип" против "создавать функцию-макрос" слабоватый аргумент. К тому же, макрос является строкой и прелести статической компиляции отсутствуют.
20 фев 20, 07:45    [22083471]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2473
Кобанчег

"все логически предыдущие, но не включая текущую строку" = "between unbounded preceding and 1 preceding" это еще в 8i можно было использовать.
Там написано нескольо иное, но с английского я переводить и сам умею.

Например, в Oracle 20 можно запилить все строки кроме текущей.
Мне интересен пример задачи когда это понадобится.

Например, если такое надо для функции sum, то можно просто сделать "sum(x) over () - x" и в "exclude current row" особой необходимости нет.

Вот за 20 лет на этом форуме хоть раз возникала тема, где реально помогла бы эта фича?

мож пригодится для окон PRECEDING AND FOLLOWING
аля max/min неделя до і неделя после, кроме текущей
некоторым удобно будет

.....
stax
20 фев 20, 09:43    [22083517]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
booby
Member

Откуда:
Сообщений: 1974
-2-
...К тому же, макрос является строкой и прелести статической компиляции отсутствуют.

формально говоря, для любого сорта клинтотворителей - морды они рисуют, или отчеты творят, -
если они не в технологиях oracle forms/reports,
понятие статической компиляции против экземпляра базы отсутствует.
А задача теста/проверки компилируемости против базы клиентских строк sql-запросов, хранимых как ресурсы, например,
остается.
Свертывание клиентского sql-кода в серверные макросы здесь может выглядеть привлекательным.
Но, будучи заменой одних интерфейсов на другие, само по себе, без внедрения порядка использования,
к автоматическому устранению бардака на клиентской стороне не приводит.
Может быть полезным. Но пить шампанское я не вижу повода.
20 фев 20, 09:53    [22083532]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2473
-2-

"не надо создавать тип" против "создавать функцию-макрос" слабоватый аргумент.


SELECT * FROM budget('JOB=MANAGER',
q'{SELECT deptno, SUM(sal) budget
FROM scott.emp
WHERE job = %JOB%
GROUP BY deptno}'

);

......
stax
20 фев 20, 09:57    [22083536]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
booby
понятие статической компиляции против экземпляра базы отсутствует.
Вне контекста хранимых процедур, обсуждать хранимые процедуры-макросы нет смысла.
20 фев 20, 10:06    [22083544]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
booby
Member

Откуда:
Сообщений: 1974
-2-,

вне контекста и не надо.
макросы как раз привносят привкус этого контекста туда, где он традиционно скорее почти не использовался, чем был массовым явлением.
20 фев 20, 10:30    [22083559]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
-2-
А если max(x)?
Если мы все еще про range до предыдущей строки, то это элементарно разруливается предварительным lag в inline view.
Но мы опять уходит в обсуждение синтетических деталей.
-2-
exclude имеет смысл еще и в качестве модификатора именованного окна
А что такое именованое окно?
20 фев 20, 14:06    [22083809]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
Stax
мож пригодится для окон PRECEDING AND FOLLOWING
аля max/min неделя до і неделя после, кроме текущей
некоторым удобно будет
Ладно, мы опять переходим к обсуждению абстрактных применений в вакууме.
Меня интересовало может кто-то сталкивался с реальной необходимостью.
Короче время покажет, посмотрим лет через 5 кому пригодилось.

PS. preceding and following exclude current row тоже без особых затруднений реализуется текущими средствами.
20 фев 20, 14:08    [22083811]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 768
-2-
А ведь еще и расконструирование объекта в строку результата... Осталось оценить сколько это "выжирая".
На 146 130% больше.
+

create or replace type point as object (x int, y int, z int)
/

SQL> set timing on
SQL>
SQL> declare
  2     dummy   int;
  3  begin
  4
  5     for i in (select level x,
  6                      level y,
  7                      level z
  8                 from dual
  9               connect by level <= 2e6)
 10     loop
 11        dummy   := i.x + i.y + i.z;
 12     end loop;
 13
 14  end;
 15  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:01.68
SQL> declare
  2     dummy   int;
  3  begin
  4
  5     for i in (select point(level, level, level) p
  6                 from dual
  7               connect by level <= 2e6)
  8     loop
  9        dummy   := i.p.x + i.p.y + i.p.z;
 10     end loop;
 11
 12  end;
 13  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:03.87

-2-
И еще сравнить с параметризацией контекстом.
Это вообще недоразумение, во-первых производительногсть с контекстами может быть не такая как с переменными.
Во-вторых внешнему потребителю нафиг не нужен головняк с установкой костылей контекстных переменных.
В-третьих во многих случаях это в принципе невозможно сделать - например Excel поддерживает только параметризированный запрос но не PL/SQL код для pivot таблицы (по крайней мере до определенных версий).
-2-
"не надо создавать тип" против "создавать функцию-макрос" слабоватый аргумент.
Если не хочется выносить логику вовне то функцию-макрос или функцию-конвейер или вьюху или что-то еще в любом случае создать надо для инкапсуляции. В этом цель.
-2-
К тому же, макрос является строкой и прелести статической компиляции отсутствуют.
Что есть, то есть.
Впрочем я ж не агитирую.
20 фев 20, 14:36    [22083843]     Ответить | Цитировать Сообщить модератору
 Re: Курилка  [new]
-2-
Member

Откуда:
Сообщений: 15330
Кобанчег
А что такое именованое окно?
Синтаксические диаграммы обсуждаемого предмета есть по ссылке в сообщении 22083335.
Кобанчег
без особых затруднений реализуется текущими средствами.
Когда-то все бизнес-потребности реализовывалась средствами когтей и зубов. Насколько особенными являются затруднения, вопрос субъективный. Кому и lag-подзапрос невеста.
Кобанчег
к обсуждению абстрактных применений в вакууме.
Исключение текущей строки из аналитики на форуме возникало не раз. В том числе, поднимался вопрос эффективности окон с разным 1 preceding/current row против одинаковых окон и вычитания из суммы.
20 фев 20, 14:44    [22083852]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 30 31 32 33 34 35 36 [37] 38 39   вперед  Ctrl
Все форумы / Oracle Ответить