我试图通过Spark-Redshift执行S3复制操作,我想在运行copy命令之前修改Redshift表结构,以便添加任何缺少的列(它们应该是所有VARCHAR )。
我能够做的是在运行副本之前发送SQL查询,所以理想情况下我会喜欢ALTER TABLE ADD COLUMN IF NOT NOT EXISTS column_name VARCHAR(256)。不幸的是,Redshift不支持ADD COLUMN IF NOT NOT EXISTS,所以我目前正在寻找解决方法。
我试图查询pg_table_def
表以检查列是否存在,这是有效的,但我不确定如何使用ALTER TABLE语句将其链接。这是我查询的当前状态,我对完成上述任何建议持开放态度。
select
case when count(*) < 1 then ALTER TABLE tbl { ADD COLUMN 'test_col' VARCHAR(256) }
else 'ok'
end
from pg_table_def where schemaname = 'schema' and tablename = 'tbl' and pg_table_def.column = 'test_col'
此外,我已经看到了这个问题:Redshift: add column if not exists,但是接受的答案并未提及如何实现这一目标。