捕获 select 语句中除表中的一列之外的所有列

Pkr*_*Pkr 5 snowflake-cloud-data-platform

有没有办法像我们在bigquery中那样选择除 Snowflake 中的一列之外的所有列:

select * except(columnname) from table
Run Code Online (Sandbox Code Playgroud)

Fel*_*ffa 9

2022 更新:Snowflake 现在支持 EXCLUDE():

测试:

with data as (
    select 1 col_a, 2 col_b, 3 col_c, 4 col_d
)

select *, col_a as id
    exclude (col_c, col_b, col_a)
from data
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


之前的回答:

我编写了一个存储过程来代替EXCEPT语法,它可以为您提供列列表SELECT


create or replace procedure cols_except(table_name varchar, except varchar)
returns varchar
language sql as 
begin
    describe table identifier(:table_name);
    return (
        select listagg("name", ', ') cols_except
        from table(result_scan(last_query_id())) 
        where not array_contains("name"::variant, (split(:except, ','))) 
    );
end;
Run Code Online (Sandbox Code Playgroud)

在消除与 except 子句匹配的值后,您可以使用它来获取要选择的列:

call cols_except('snowflake_sample_data.tpch_sf1.nation', 'N_NAME,N_REGIONKEY');
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述