我需要使用 select 语句提取行 ID。类似于 oracle 的行 ID 的东西。我将如何在 Teradata 中做到这一点?我正在尝试以下查询,但它抛出错误。
select rowid,emp_id,e_name from test;
Error msg : Syntax error: ROWID not allowed.
提前致谢。
试试ROW_NUMBER()
窗口聚合函数:
SELECT ROW_NUMBER() OVER(ORDER BY empid) AS RowID_
, empid
, empName
FROM test;
与窗口聚合不同RANK()
,ROW_NUMBER()
不允许在结果集中出现联系。您的另一种选择是IDENTITY
在表格中使用一列,但这些列很乱并且会导致问题。ROW_NUMBER()
如果您需要维护代理键,则更容易将其合并到您的 ETL 处理中。
需要注意的是,如果您的ORDER BY
orPARTITION BY
列有偏差,那么您STAT FUNCTION
在查询计划中的步骤上的性能会受到大量数据的影响。该PARTITION BY
子句是可选的,允许您定义一个窗口,ROW_NUMBER()
当分区更改时,将在其中重置结果。不常用,ROW_NUMBER()
但它可能会派上用场。
编辑 使用代理项唯一标识记录,而不必依赖 ETL 使用中的逻辑和表中的标识列。正确配置 IDENTITY 列在删除记录时不会重用任何域值。