| Recursive CTE вопрос | |
|---|---|
|
Дмитрий Петров Автор Сообщений: 3142 Откуда: Пермь Дата регистрации: 09.07.2001 |
Привет!
Может кто сталкивался- решал? Я столкнулся с проблемой на больших данных в Postgresql, точнее в ArenadataDB (GreenPlum) Банальная задача- подготовить готовую денормализованную таблицу для витрины по 2м полям id-parent_id. Рекурсивная CTE, с нерекурсивной частью в 26 млн. записей просто сдыхает в рекурсивной части. Я попробовал простым циклом обойти верхние элементы и руками пособирать иерархию- тоже медленно. Не знаю куда копать. ( ориентация таблицы колоночная) |
| Re: Recursive CTE вопрос | |
|---|---|
|
alex; Сообщений: 4085 Откуда: Москва Дата регистрации: 23.11.2004 |
А если получить все записи второго или третьего уровня,
а уже по ним запускать рекурсию до последнего уровня? |
| Re: Recursive CTE вопрос | |
|---|---|
|
Дмитрий Петров Автор Сообщений: 3142 Откуда: Пермь Дата регистрации: 09.07.2001 |
А без "сквозного" прохода я не знаю какая запись какому уровню принадлежит.
Там ключ родителя - это MD5(от т.н бизнес полей/уникальных) На небольшой тестовой таблице, где ключи типа int4 - рекурсия отрабатывает. А на больших данных, когда даже нерекурсивную часть ограничиваю 2-3 записями- все висит upd Какой то бы хитрый джойн сам на себя, или как у оракла есть конструкция connected by Исправлено 3 раз(а). Последнее : Дмитрий Петров, 05.06.25 19:24 |
| Re: Recursive CTE вопрос | |
|---|---|
|
alex; Сообщений: 4085 Откуда: Москва Дата регистрации: 23.11.2004 |
|
| Re: Recursive CTE вопрос | |
|---|---|
|
Дмитрий Петров Автор Сообщений: 3142 Откуда: Пермь Дата регистрации: 09.07.2001 |
Леша, спасибо! Завтра уже проверю. Блин, тоже надо научиться этим ИИ пользоваться.
Бегло посмотрел- все вроде по делу отвечает) ![]() ![]() ![]() |
| Re: Recursive CTE вопрос | |
|---|---|
|
alex; Сообщений: 4085 Откуда: Москва Дата регистрации: 23.11.2004 |
![]() |
| Re: Recursive CTE вопрос | |
|---|---|
|
alex; Сообщений: 4085 Откуда: Москва Дата регистрации: 23.11.2004 |
Кста, есть такая фича...
В телеге можно создать свой чат(группу) или использовать чат Избранное и туда запостить код с обратными апострофами(где ё) и получится "форматированный" разными цветами код. Например ```SQL select 1 ``` Исправлено 3 раз(а). Последнее : alex;, 05.06.25 20:46 |
| Re: Recursive CTE вопрос | |
|---|---|
|
PaulWist Сообщений: 14819 Дата регистрации: 01.04.2004 |
Ну, добавить в таблицу тип данных ltree — тип данных для представления меток данных в иерархической древовидной структуре (аналог hyerarchy MSSQL) Пример: Hierarchical data in postgres с триггером поддержания типа ltree ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 2 раз(а). Последнее : PaulWist, 06.06.25 09:02 |
| Re: Recursive CTE вопрос | |
|---|---|
|
Дмитрий Петров Автор Сообщений: 3142 Откуда: Пермь Дата регистрации: 09.07.2001 |
Не, это исключено. Добавление/изменение 1 поля- это целая эпопея. Между схемами и разнымтбазами его прокинуть- то еще занятие. У нас солянка Posrgresql, Greenplum и Clikhouse на выходе |
| Re: Recursive CTE вопрос | |
|---|---|
|
Владимир Максимов Сообщений: 14185 Откуда: Москва Дата регистрации: 02.09.2000 |
Хорошего решения при такой структуре данных не будет. Проблема здесь именно в количестве записей. По крайней мере MS SQL всегда "плохо" работает с выборками, где надо объединить два больших списка
Если количество уровней вложенности ограниченно и заранее известно, то можно попробовать просто "в лоб" собрать из последовательных UNION
|
| Re: Recursive CTE вопрос | |
|---|---|
|
Дмитрий Петров Автор Сообщений: 3142 Откуда: Пермь Дата регистрации: 09.07.2001 |
Спасибо, Владимир. Я попробую. Вроде уровней меньше 5
|
| Re: Recursive CTE вопрос | |
|---|---|
|
PaulWist Сообщений: 14819 Дата регистрации: 01.04.2004 |
Сделай matview + индексы на него + вычисляемое поле, вАще от таблиц отвяжешься. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 09.06.25 11:35 |
| Re: Recursive CTE вопрос | |
|---|---|
|
Дмитрий Петров Автор Сообщений: 3142 Откуда: Пермь Дата регистрации: 09.07.2001 |
Точно, надо попробовать. Сейчас на темповых таблицах сделал с минимумом полей.
В 10 минут отрабатывает |
| © 2000-2025 Fox Club  |