Разница между LATERAL FLATTEN () и TABLE (FLATTEN ()) в Snowflake

В чем разница между использованием LATERAL FLATTEN(...) и TABLE(FLATTEN(...)) в Snowflake? Я проверил документацию по FLATTEN, _ 4_ и _ 5_ и не может понять функциональную разницу между следующими запросами.

select
    id as account_id,
    account_regions.value::string as region
from
    salesforce.accounts,
    lateral flatten(split(salesforce.accounts.regions, ', ')) account_regions
select
    id as account_id,
    account_regions.value::string as region
from
    salesforce.accounts,
    table(flatten(split(salesforce.accounts.regions, ', '))) account_regions

person Marty C.    schedule 02.12.2020    source источник


Ответы (1)


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

Настоящая потребность в ключевом слове flatten возникает из таких запросов:

select * 
from departments as d
  , lateral (
    select * 
    from employees as e 
    where e.department_id = d.department_id
  ) as iv2
order by employee_id;
-- https://docs.snowflake.com/en/sql-reference/constructs/join-lateral.html

Без ключевого слова lateral для этого соединения вы получите Error: invalid identifier 'D.DEPARTMENT_ID'.

person Felipe Hoffa    schedule 03.12.2020