#recursion #snowflake-cloud-data-platform #common-table-expression
Вопрос:
Я создаю рекурсивный CTE в snowflake для получения полного пути и получаю следующую ошибку:
Строка ‘AAAA_50>BBBB_47>>CCCC_92’ слишком длинная и будет усечена в ‘CONCAT’
Мой сценарий выглядит следующим образом: (он отлично работает для 2 уровней, начинает отказывать для 3-го уровня)
with recursive plant
(child_col,parent_col,val )
as
(
select child_col, '' parent_col , trim(child_col) from My_view
where condition1 = 'AAA'
union all
select A.child_col,A.parent_col,
concat(trim(A.child_col),'>')||trim(val)
from My_view A
JOIN plant as B ON trim(B.child_col) = trim(A.parent_col)
)
select distinct * from plant
Ответ №1:
Скорее всего, тип данных child_col определен как VARCHAR (N), этот тип передается. Потому Что CONCAT Возвращает:
Тип данных возвращаемого значения совпадает с типом данных входных значений.
Попробуйте явно привести тип к строке, подобной этой cast(trim(child_col) as string)
:
Полный код:
with recursive plant (child_col,parent_col,val )
as (
select child_col, '' parent_col , cast(trim(child_col) as string)
from My_view
where condition1 = 'AAA'
union all
select A.child_col, A.parent_col, concat(trim(A.child_col),'>')||trim(val)
from My_view A
join plant as B ON trim(B.child_col) = trim(A.parent_col)
)
select distinct * from plant
Помните, что рекурсия в Snowflake по умолчанию ограничена 100 циклами.
Если вы хотите их увеличить, вам необходимо обратиться в службу поддержки.