powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сохранение порядка строк в UNION ALL
25 сообщений из 51, страница 2 из 3
Сохранение порядка строк в UNION ALL
    #39998525
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Оракл не рекомендуется использовать для хождения в интернет?
Основная задача у БД, как ни странно звучит, хранить и отдавать хранящиеся данные. Ходить за почтой за 50 косарей с ядра - откровенно так себе затея, никто же в здравом уме на S-классе картоху мешками не возит.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998541
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
НеофитSQL
Оракл не рекомендуется использовать для хождения в интернет?
Основная задача у БД, как ни странно звучит, хранить и отдавать хранящиеся данные. Ходить за почтой за 50 косарей с ядра - откровенно так себе затея, никто же в здравом уме на S-классе картоху мешками не возит.


Справедливое замечание, из соображений бережливости (экономии ЦПУ?).

С другой стороны, Оракл придумал/внедрил целую библиотеку для того, чтоб PL/SQL мог общаться с веб сайтами.
https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS70954

Если использование встроенных функций оракла для доступа к интернету считается плохим тоном, как принято это делать, учитывая что задача должна инициироваться по SQL запросу? подать сигнал на на обновление внешнему (не-Оракл) скрипту через виртуальную колонку?
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998547
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender
НеофитSQL,

Теперь все понятно, ваше понимание параллельного выполнения неверно, оттого и все проблемы и изчально странный вопрос. Вам стоит это изучить досконально, тогда и этот вопрос бы не появился. Пока достаточно вам запомнить, что никакого порядка нет пока не указан order by.


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

В 22196853 я изложил как я понимаю исполнение параллельных подзапросов в Оракле (когда они включены, для педантов :))
Для человека с практическим опытом было бы легко указать ошибку, тем самым улучшив не только мое понимание, но один из немногочисленных русскоязычных ресурсов по SQL.

Если вы здесь с другой целью, то с какой?
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998549
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL,

НеофитSQL
В 22196853 я изложил как я понимаю исполнение параллельных подзапросов в Оракле (когда они включены, для педантов :))
я и так достаточно просто изложил в 22196830 , но вы не понимаете, так как вы даже не понимаете элементарно необходимые термины, что особенно четко видно по этому бредовому описанию - 22196853 .
Все эти "оракл запускает несколько запросов одновременно", "три подзапроса А,Б,В все начались", "порядок завершения", "результаты Б и В будут сидеть в памяти" - это все полный бред в контексте даже простых планов, даже без параллельного выполнения. Поймите сначала как хотя бы простые планы читать. Не надо пытаться перескочить на обсуждение тем, азов которых еще не понимаете.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998550
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

С другой стороны, Оракл придумал/внедрил целую библиотеку для того, чтоб PL/SQL мог общаться с веб сайтами.
https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS70954

Если использование встроенных функций оракла для доступа к интернету считается плохим тоном, как принято это делать, учитывая что задача должна инициироваться по SQL запросу? подать сигнал на на обновление внешнему (не-Оракл) скрипту через виртуальную колонку?

UTL_HTTP - это нечто, появившееся в версии 7.3.3 (это аж прошлый век) и тянущееся до текущих версий разве что из соображений обратной совместимости, а вот рассчитывать на то, что БД сможет полноценно общаться по HTTP с сегодняшним интернетом совершенно не следует, поскольку в HTTP сейчас понавернуто столько, что индусы из оракла за этим принципиально не поспевают.

Если нужно делать фигню, то можете делать ее через external table , там на каком-нить петоне можете хоть перпендикулярно почту забирать.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998551
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL
как я понимаю
начать с чтение плана запроса , потом сюда 21144264
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998553
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов,

Спасибо, я понял про внешние таблицы, я такую недавно использовал чтобы прочитать директорию на сервере,
но потом все-таки переделал на "родную" джава-функцию, для простоты. Директорию читать из Оракла наверное можно, это как одну картофелину в S-классе перевезти.

Я в целом понял что если задача посложнее, и для Оракла непрофильная, то лучше ее разгрузить в другое место (возможно, и другой хост через ssh), и общаться через external table, как в вашем примере. Почитаю, в какой сессии исполняются действию для таких таблиц.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998558
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

Увы, параллельное исполнение мне пока недоступно (версия 11.2).

Документация доступна. Давайте, вы мне немного поможете там, где можно обойтись без терминов.

Код: plsql
1.
2.
3.
4.
-- Функция FetchNewestEmails() возвращает таблицу
select FetchNewestEmails( 'imap:server1', credentials1, limit => 10 ) union all
select FetchNewestEmails( 'imap:server2', credentials2, limit => 10 ) union all
select FetchNewestEmails( 'imap:server3', credentials3, limit => 10 )



Мое понимание параллельности подзапросов было такое:
- оракл запускает несколько запросов одновременно. Для примера, три подзапроса А,Б,В все начались в пределах 10-миллисекунд.
- Подзапрос А продолжался 10 секунд, подзапрос Б 5 секунд, подзапрос В - 7 секунд. Порядок завершения: Б,В,А
- учитывая что задана сортировка через order by, результаты Б и В будут сидеть в памяти пока запрос А не завершится.
- когда запрос А завершится, результат будет отсортирован и выдан в порядке А,Б,В (это исходное условие).
- Параллелизм позволяет такую задачу решить за 10 секунд, вместо 22 секунд при последовательном исполнении.

Идентичная параллельная задача на другом языке. Исполняется параллельно, соответствует описанию выше. Терминов не требует, хотя при желании можно долго и нудно рассказывать про методы синхронизации исполнения на уровне 0 для многоядерных процессоров :)

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#!/bin/bash
(sleep 10; echo "ResultsetA"  > 1.txt) &
process_idA=$!
(sleep  5; echo "ResultsetB" > 2.txt) &
process_idB=$!
(sleep  7; echo "ResultsetC" > 3.txt)

wait $process_idA
wait $process_idB
cat 1.txt 2.txt 3.txt



Подзапросы стартанули "одновременно" (очередно, но в пределах малого промежутка времени), самый долгий занял 10 секунд, поэтому весь запрос занял 10 секунд, но строки вернулись не в порядке запуска запросов, а в каком-то другом. Скорее всего в порядке завершения запросов, но и это Оракл вроде не гарантирует.

Где-то есть ошибка? Если есть, скажите, пожалуйста, в какой строчке.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998561
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ранее упомянул, что нашел-таки решение без "бейсика", но оно не изящнее, хоть и отвечает всем моим требованиям.

Прошу не пинать, это в товарный код не идет, упражнение для моего образования - на что способен SQL

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- QueryLine(GUID) возвращает число, соответствующее номеру строки в этом исходнике.
-- EXTERNAL_TABLE используется как интерфейс для вызова внешних, МЕДЛЕННЫХ источников данных
-- автор ожидает что при параллельном исполнении весь запрос займет не дольше чем самый медленный
-- из трех подзапросов (желаемый эффект параллельного исполнения), а порядок строчек в результате 
-- будет совпадать с порядком подзапросов в исходнике как если бы параллелизма не было.

create or replace view VZ_TEST as
select /*+ PQ_CONCURRENT_UNION(@"SET$1") */ * from (
select QueryLine('a3f9cd2a-6d17-4721-b6f2-435c2df9d152') as ord, v1.* from V_EXTERNAL_TABLE1 v1 union all
select QueryLine('13d865f8-2269-406f-a8cb-2c943ece4c76'),        v2.* from V_EXTERNAL_TABLE2 v2 union all
select QueryLine('524a3aaa-34ed-476b-ac36-fcd555a53875'),        v3.* from V_EXTERNAL_TABLE3 v3
) order by ord
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998581
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
НеофитSQL
обойтись без терминов
это проф.форум Oracle, поэтому здесь нужно пользоваться соответствующей проф. терминологией. Хотите в стиле "я художник - я так вижу", напишите мне на почту - объясню. Здесь же такой профанацией заниматься не стоит.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998592
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender
Здесь же такой профанацией заниматься не стоит.
Ну почему же? Ведь пошла же движуха, тролля покормили всласть...
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998598
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
...

create or replace view VZ_TEST as
select /*+ PQ_CONCURRENT_UNION(@"SET$1") */ * from (
select QueryLine('a3f9cd2a-6d17-4721-b6f2-435c2df9d152') as ord, v1.* from V_EXTERNAL_TABLE1 v1 union all
select QueryLine('13d865f8-2269-406f-a8cb-2c943ece4c76'),        v2.* from V_EXTERNAL_TABLE2 v2 union all
select QueryLine('524a3aaa-34ed-476b-ac36-fcd555a53875'),        v3.* from V_EXTERNAL_TABLE3 v3
) order by ord



У вас выражения "select ..." расположены одно под другим, т.е. последовательно, нет никаких оснований полагать что при таком расположении они будут выполняться параллельно.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998669
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Идентичная параллельная задача на другом языке

Нет

НеофитSQL
Меня интересует порядок запросов в исходном коде, и PL/SQL содержит макро для этого. SQL, увы, его не содержит.

Как ещё вам объяснить, что зелёное и мягкое сравнивать нет смысла?


НеофитSQL
у меня задача показать в запросе первые 10 сообщений из каждого из трех email почтовых ящиков на разных континентах

Зачем для этого СУБД?

Если требуется анализировать эти сообщения, то отдельно обеспечьте регулярную загрузку сообщений в таблицы, отдельно делайте запрос к этим таблицам. Да, оракл может и "на лету", но зачем?!
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998748
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов
НеофитSQL

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
...

create or replace view VZ_TEST as
select /*+ PQ_CONCURRENT_UNION(@"SET$1") */ * from (
select QueryLine('a3f9cd2a-6d17-4721-b6f2-435c2df9d152') as ord, v1.* from V_EXTERNAL_TABLE1 v1 union all
select QueryLine('13d865f8-2269-406f-a8cb-2c943ece4c76'),        v2.* from V_EXTERNAL_TABLE2 v2 union all
select QueryLine('524a3aaa-34ed-476b-ac36-fcd555a53875'),        v3.* from V_EXTERNAL_TABLE3 v3
) order by ord



У вас выражения "select ..." расположены одно под другим, т.е. последовательно, нет никаких оснований полагать что при таком расположении они будут выполняться параллельно.


Это как раз один из сценариев, для которых Оракл ввел параллелизм в 12й версии.
Подробнее об этом можно прочитать здесь:
https://docs.oracle.com/database/121/VLDBG/GUID-1F4C90F9-3EF5-423A-B55B-2593FB3F1433.htm

Если вы только присоединяетесь к теме: до разрешения параллелизма Оракл гарантировал результат UNION ALL в том же порядке, как селекты написаны в коде запроса - это удобно тогда, когда нет удобного ключа сортировки.
При параллельном исполнении селектов порядок нарушался, и для его восстановления требуется order by.
Вопрос темы заключался в том, как избежать ручной нумерации строк а-ля бэйсик (10, 20, 30, 35, ..).

В PL/SQL есть встроенное макро $$PLSQL_LINE, которое дает номер строки исходника, и оно для этой цели просто идеально.
Я извернулся и написал свою функцию QueryLine() которая возвращает номер строки, но она требует GUID, что не так элегантно.
Зато теперь результаты параллельных селектов возвращаются в том же порядке, что написаны, и если мне нужно передвинуть строчки вверх-вниз в огромном селекте, мне не нужно помнить каждый раз менять ручную нумерацию.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998820
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
как избежать ручной нумерации строк а-ля бэйсик (10, 20, 30, 35, ..).

НеофитSQL
Я извернулся и написал свою функцию QueryLine() которая возвращает номер строки, но она требует GUID

Разумеется, заменить число на строку в 36 символов и вызов функции - очень элегантное решение.

Автор, может уже поясните, какую реальную задачу пытаетесь столь извращённо решить?
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998822
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env

Автор, может уже поясните, какую реальную задачу пытаетесь столь извращённо решить?

Автор просто пытается перенести подходы и практику программирования на императивных языках в декларативные.
Наблюдаю с удовольствием.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998825
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

ты слова не путай человеку.

Ясно, что "элегантный" это рояль, а он говорил изящное , подразумевая "решение".
хорошо, хоть не грациозное...
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998829
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
env

Автор, может уже поясните, какую реальную задачу пытаетесь столь извращённо решить?

Автор просто пытается перенести подходы и практику программирования на императивных языках в декларативные.
Наблюдаю с удовольствием.

Ну, это не обязательно всегда преступление.

Но читается, правда, с французским прононсом при разговоре прозой.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998915
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
как избежать ручной нумерации строк а-ля бэйсик (10, 20, 30, 35, ..).

НеофитSQL
Я извернулся и написал свою функцию QueryLine() которая возвращает номер строки, но она требует GUID

Разумеется, заменить число на строку в 36 символов и вызов функции - очень элегантное решение.

Автор, может уже поясните, какую реальную задачу пытаетесь столь извращённо решить?


Так вот же :)

НеофитSQL
как избежать ручной нумерации строк а-ля бэйсик (10, 20, 30, 35, ..).


Решение с гуидами не требует ручной перенумерации (параллельные подзапросы вернутся в порядке как записаны, и строчки можно свободно двигать внутри UNION ALL), но выглядит громоздко, не говоря уже о внутренностях функции QueryLine, которая ковыряется в блобах исходного кода.
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998918
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLТак вот же :)

Это не задача, это попытка натянуть сову на глобус. Какую задачу в терминах теории
множеств (на которой и базируется SQL) Вы пытаетесь решить?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998923
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Какую задачу ....

Сделать текстовый редактор на SQL ?

Автор уже упоминал, что ему нужно и в интернет лазать. Может даже и на полноценный Web Browser замахнулся! Пожелаем ему успехов.

IMHO
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998946
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
которая ковыряется в блобах исходного кода.

исходного кода чего?
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998960
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Это не задача, это попытка натянуть сову на глобус. Какую задачу в терминах теории
множеств (на которой и базируется SQL) Вы пытаетесь решить?


Сугубо прикладную - улучшить понимание нового для меня языка и его возможностей.
Поэтому примеры не затасканные из учебника, а необычные, требующие живого мышления.
В рабочем коде все будет скучно и просто, с комментариями и без экзотики.

Браузер в Оракле? Нечем рендерить, поэтому вряд ли, да и задача большая, не для примера.
А вот забацать простой стрим крипто на SQL - это стОящий челлендж. Но поскольку
вряд ли крипто специалисты будут тут слоняться, это прикол для другого форума.

Солнышко светит, травка растет. Кто легче характером, тот дольше живет :)
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39998964
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQLСугубо прикладную - улучшить понимание нового для меня языка и его возможностей.

В таком случае именно изучение теории множеств Вам поможет.

НеофитSQLПоэтому примеры не затасканные из учебника, а необычные, требующие живого мышления.

Рекомендую https://www.sql-ex.ru
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сохранение порядка строк в UNION ALL
    #39999010
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, посмотрю.
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сохранение порядка строк в UNION ALL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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