Java Teradata中的RowID

Java Teradata中的RowID,java,sql,database,teradata,Java,Sql,Database,Teradata,我需要使用select语句提取行ID。类似于oracle的行ID的内容。在Teradata中我将如何做到这一点?我正在尝试以下查询,但它抛出了错误 select rowid,emp_id,e_name from test; Error msg : Syntax error: ROWID not allowed. 提前感谢。尝试行号()窗口聚合功能: SELECT ROW_NUMBER() OVER(ORDER BY empid) AS RowID_ , empid , e

我需要使用select语句提取行ID。类似于oracle的行ID的内容。在Teradata中我将如何做到这一点?我正在尝试以下查询,但它抛出了错误

select rowid,emp_id,e_name from test;

Error msg : Syntax error: ROWID not allowed.
提前感谢。

尝试
行号()
窗口聚合功能:

SELECT ROW_NUMBER() OVER(ORDER BY empid) AS RowID_
     , empid
     , empName
  FROM test;
RANK()
不同,
ROW\u NUMBER()
窗口聚合将不允许结果集中出现关联。另一种选择是在表中使用
IDENTITY
列,但这些列很混乱,会导致问题。如果需要维护代理密钥,则在ETL处理中更容易合并
ROW_NUMBER()

需要注意的是,如果您的
ORDER BY
PARTITION BY
列出现偏差,则对于大型数据集,您在查询计划me中的
STAT函数
步骤的性能将受到影响。
PARTITION BY
子句是可选的,允许您定义一个窗口,当分区更改时,
行编号()的结果将被重置。不常用于
行编号()
,但它可能会派上用场

编辑
使用代理项唯一标识记录,而不必依赖表中ETL use和identity列中的逻辑。正确配置标识列在删除记录时不会重用任何域值

我发现了一些可能解决你问题的方法,但我不确定它是否适用于你的案例Hi AurA,我尝试了与你提供的链接中提到的相同的查询。但它抛出了一个类似“ROWID not allowed”的错误。还要注意,这与Oracle的“ROWID”不同。在Oracle中,“rowid”是表中特定行的永久地址(至少我认为它是这样工作的)。如果在表中插入了新行,则使用
行数
将给出不同的结果。我认为Teradata中没有类似的概念。只是一个警告和+1。我需要唯一的id来标识每一行,即使我们删除了一些记录,此id也不应得到更改。请参阅关于使用表中的标识列作为代理项的最新编辑。