Как получить результат CONNECT_BY_ISCYCLE и CONNECT_BY_ISLEAF в снежинке, не используя их? - PullRequest
0 голосов
/ 09 ноября 2019

Мне нужно сделать иерархические запросы, и мне нужно получить результаты CONNECT_BY_ISCYCLE и CONNECT_BY_ISLEAF, но эти функции поддерживаются в Oracle, а не в Snowflake.

Каковы альтернативные способы реализации функциональных возможностей CONNECT_BY_ISCYCLEи CONNECT_BY_ISLEAF в снежинке без их использования, поскольку эти ключевые слова там не поддерживаются?

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Интересно, взглянули ли вы на следующие функции Snowflake?

https://docs.snowflake.net/manuals/user-guide/queries-hierarchical.html#using-connect-by-or-recursive-ctes-to-query-hierarchical-data

0 голосов
/ 11 ноября 2019

Да, я посмотрел там. Я также взглянул на https://docs.snowflake.net/manuals/sql-reference/constructs/connect-by.html, где ясно сказано, что эти функции не поддерживаются в Snowflake. Я пытался под блоком кода найти альтернативу, но столкнулся с различными ошибками в снежинке.

person_vertex as (
    select 
        emp_number, 
        user_id 
    from person
),

person_edges as ( 
    select 
        supervisor_emp_number, 
        emp_number 
    from person 
    where supervisor_emp_number is not null
),

select
    pv.emp_number emp_id_pk,
    level,
    CONNECT_BY_ROOT pv.emp_number AS root,
    concat(SYS_CONNECT_BY_PATH(pv.emp_number,':'),':') as path,
    -- CONNECT_BY_ISCYCLE AS iscyclic, ------------------- no idea how to implement this
    -- CONNECT_BY_ISLEAF as isleaf ------------------- i tried below block, but it is not working
    case
        when (pe.supervisor_emp_number in (select emp_number from pv)) then 0
        else 1
    end AS isleaf
from person_vertex pv
    left join person_edges pe on pv.emp_number = pe.emp_number
connect by prior A.emp_number = A.supervisor_emp_number
start with A.supervisor_emp_number is null

Любая помощь с этим блоком действительно приветствуется.

Спасибо.

enter code here
...