【问题标题】:Creating View and Datatypes on redshift在 redshift 中创建视图和数据类型
【发布时间】:2019-02-13 11:17:15
【问题描述】:

猜测这是直截了当的,但无法让它运行。我遇到的问题是在视图中明确设置列数据类型。

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

以下是我尝试运行的代码(我也尝试过不使用排序键但仍然无法运行)

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 OR REPLACE 查看 trading.trading_squads_​​plan_v_test ( 通道 , trans_date )

作为

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

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

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

谢谢

【问题讨论】:

  • 表有数据类型和排序键,视图没有。
  • 好的,我认为可能是这种情况,对很多列使用 0 占位符。我将使用一种解决方法。谢谢

标签: amazon-redshift


【解决方案1】:

正如 Jon 指出的那样,我的错误是尝试在视图级别设置数据类型,这是不可能的,因为它只是从表中拉出这个。

所以我从表中将值转换为 select 调用:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多