在redshift上创建视图和数据类型

时间:2019-02-13 11:17:16

标签: amazon-redshift

猜测这很简单,但无法使其运行。我遇到的问题是在视图中显式设置列数据类型。

我需要这样做,因为我将把它与另一个表合并,并且需要匹配该表的数据类型。

下面是我尝试运行的代码(我也尝试过不使用sortkey,但仍然无法运行)

DROP VIEW IF EXISTS testing.test_view;

CREATE OR REPLACE VIEW testing.test_view;
(
channel VARCHAR(80) ENCODE zstd,
trans_date TIMESTAMP ENCODE zstd
)
SORTKEY
(
       trans_date
)

AS

SELECT channel,
      trans_date

        from (
SELECT to_date(date,'DD-MM-YYYY') as trans_date,channel
FROM testing.plan
group by date,  channel
)
group by trans_date,channel;

我收到的错误消息:

  

执行SQL命令时发生错误:CREATE或REPLACE   查看trading.trading_squads_​​plan_v_test(channel,trans_date)

     

AS

     

选择通道VARCHAR(80)ENCODE zstd,         trans_date TIM ...

     

Amazon无效操作:“ VARCHAR”处或附近的语法错误   位置:106;

这是您无法设置数据类型的视图的问题吗?如果可以的话,有没有解决方法?

谢谢

1 个答案:

答案 0 :(得分:0)

正如乔恩(Jon)所指出的那样,我的错误是试图在视图级别设置数据类型,这是不可能的,因为它只能从表中提取该数据类型。

所以我在表的选择调用中强制转换了值:

DROP VIEW IF EXISTS testing.test_view;

CREATE OR REPLACE VIEW testing.test_view;
(
channel,
trans_date,
source_region
)

AS

SELECT CAST(channel as varchar(80)),
       CAST(trans_date as timestamp),
       CAST(0 as varchar(80)) as source_region
        from (
SELECT to_date(date,'DD-MM-YYYY') as trans_date,channel
FROM testing.plan
group by date,  channel
)
group by trans_date,channel;