我正在尝试ALTER一个表,但它给出了下面的错误:
alter table TABLE_NAME partition by EXTRACT(YEAR FROM to_timestamp(CC));
ROLLBACK 2552: Cannot use meta function or non-deterministic function in PARTITION BY expression
alter table TABLE_NAME partition by date_part('YEAR',to_timestamp(CC));
ROLLBACK 2552: Cannot use meta function or non-deterministic function in PARTITION BY expressionCC列的数据如下
1441650600 纪元时间
有人知道原因吗?
发布于 2016-01-29 07:06:09
发布于 2016-02-01 18:18:08
就我个人而言,我发现通过执行以下操作可以更容易地进行这些类型的更改: 1.创建一个新的临时表(包含要进行的更改),以镜像我想要更改的表。2.然后将所有数据复制到新表中。3.删除原始表4.将新表重命名为现有名称。
这是我们在我工作的地方使用的版本控制的一个方面,所有的东西都存储在Delta脚本中,所以对我代码的所有更改都有完整的文档记录。
至于使用alter语句创建投影,我不能真正评论,但是我确实有一个脚本,我觉得它可以为您工作,因为我使用的数据格式与您的相似。该列的名称为DateKey,格式为YYYYMMDD00:
2014020100我想按年和季度进行分区,所以我写了以下内容
CREATE TABLE Schema1.fct_Table1 (
DateKey INT NOT NULL,
col1 INT NOT NULL,
col2 INT NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
col5 INT NOT NULL
)
ORDER BY DateKey, col1, col2, col3
PARTITION BY left(cast(DateKey as char(10)),4)
|| case
when substring(cast(DateKey as char(10)),5,2) in ('01','02','03') then '01'
when substring(cast(DateKey as char(10)),5,2) in ('04','05','06') then '02'
when substring(cast(DateKey as char(10)),5,2) in ('07','08','09') then '03'
when substring(cast(DateKey as char(10)),5,2) in ('10','11','12') then '04' end;因此,我的脚本是按年份和该年的季度进行分区,即1-3个月是Qtr 1,4-6是qtr 2,依此类推。
我想你可以这样写:
PARTITION BY case
when substring(cast(DateKey as char(10)),5,2) = '01' then '01'
when substring(cast(DateKey as char(10)),5,2) = '02' then '02'等。
https://stackoverflow.com/questions/35054931
复制相似问题