Teradata标识列和volatile/temp表问题的解决方法

Teradata标识列和volatile/temp表问题的解决方法,teradata,temp-tables,identity-column,Teradata,Temp Tables,Identity Column,我对Teradata有些陌生,无法理解为什么不能在volatile表中选择标识列。当执行类似于以下的操作时,我会得到下面的错误 create multiset volatile table Temp_Events as ( select es.eventSettingId, -- this is an identity column evt.lob from ForecastDevDW.cal_eventSettings es join For

我对Teradata有些陌生,无法理解为什么不能在volatile表中选择标识列。当执行类似于以下的操作时,我会得到下面的错误

create multiset volatile table Temp_Events as
  (
    select es.eventSettingId, -- this is an identity column 
           evt.lob
    from ForecastDevDW.cal_eventSettings es
    join ForecastDevDW.cal_eventTypes evt
     on evt.eventTypeId = es.eventTypeId
  )
with data
  primary index (eventSettingId)
  on commit preserve rows;
错误:由于当前不支持标识列而创建表


有没有办法在Teradata中的易失性/临时表中选择标识列?这个错误有什么解决方法吗?还有,有人知道为什么不能在volatile表中选择标识列吗?(我习惯使用SQL Server,这根本不是问题。)

这确实是一个奇怪的限制,即使是对VarChar的类型转换也会失败,并显示相同的错误消息

但有一个解决方法,将Select放在派生表中:

create multiset volatile table Temp_Events as
  (
    select *
    from
     (
       select es.eventSettingId, -- this is an identity column 
              evt.lob
       from ForecastDevDW.cal_eventSettings es
       join ForecastDevDW.cal_eventTypes evt
         on evt.eventTypeId = es.eventTypeId
     ) as dt
  )
with data
  primary index (eventSettingId)
  on commit preserve rows;

我还没有遇到这个问题。如果必须解决这个问题,我会创建一个VOLATILE DDL,指定列和列类型(类似于常规的createtable语句)。然后接着插入到。。。SELECT语句。也许这是允许的。我认为Teradata不支持易失性表中的标识列。您可以将其设置为整数列,并使用行号或类似的行填充它。也许,基于@Andrew的注释
选择CAST(es.eventSettingID为INT)作为eventSettingID…
?感谢您的建议。我尝试了@JNevill的演员想法,但收到了同样的错误。该死!我想也许我们会幸运的。我会尝试创建volatile表,然后在COMMIT PRESERVE行上插入
创建多集volatile表temp_事件(eventSettingID INT,evt.lob where),然后插入
到temp_事件中这适用于创建静态表的场景,该静态表是较大数据的子集。如果要向该表添加其他数据,则必须认识到主索引的行为不会像本机标识列那样。您必须从具有标识列的表中复制此变通方法,或者您正准备为主索引生成代理项值。