在Redshift中,如何将CTAS与“if not exists”子句结合起来?

时间:2015-03-27 14:50:17

标签: postgresql amazon-web-services amazon-redshift

我在创建此表格创建查询时遇到了一些麻烦,我想知道我是否遇到了红移的限制。

这是我想做的事: 我有需要在架构之间移动的数据,我需要动态创建数据的目标表,但前提是它们不存在。

以下是我认识的查询:

create table if not exists temp_table (id bigint);

如果表格已经存在,则会创建一个表格,并且工作正常。

create table temp_2 as select * from temp_table where 1=2;

这样就创建了一个与前一个结构相同的空表。这也很好。

但是,当我执行此查询时:

create table if not exists temp_2 as select * from temp_table where 1=2;

Redshift窒息,并说附近有一个错误(为了记录,我确实尝试删除" as"然后它说选择附近有错误)

我无法在redshift文档中找到任何内容,此时我只是猜测如何解决这个问题。这是我在红移中无法做到的事情吗?

我应该提一下,我绝对可以分离出有选择地创建表并用数据填充它的查询,我可能最终会这样做。如果有人能告诉我该查询有什么问题,我大多只是好奇。

编辑:

我不相信这是重复的。链接的帖子提供了许多依赖于用户定义函数的解决方案...... redshift不支持UDF。他们最近实现了一个基于python的UDF系统,但我的理解是它处于测试阶段,我们也不知道如何实现它。

感谢您的关注。

1 个答案:

答案 0 :(得分:4)

  

我在redshift文档中找不到任何内容,此时我就是   只是猜测如何解决这个问题。这是我不能做的事情   在红移?

确实它不存在。CREATE TABLE ... AS SELECTIF NOT EXISTS的这种组合是不可能的,不仅在Redshift中,而且在PostgreSQL本身(至少从9.4开始)。

此外,此功能对PG提交者是否合理appears controversial

在SO上,这里讨论了这个问题:PostgreSQL: Create table if not exists AS

接受的答案提供了不需要任何UDF或程序代码的选项,因此它们也可能适用于Redshift。