猜测这很简单,但无法使其运行。我遇到的问题是在视图中显式设置列数据类型。
我需要这样做,因为我将把它与另一个表合并,并且需要匹配该表的数据类型。
下面是我尝试运行的代码(我也尝试过不使用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;
这是您无法设置数据类型的视图的问题吗?如果可以的话,有没有解决方法?
谢谢
答案 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;