Laz*_*der 5 java sql database teradata
我需要使用 select 语句提取行 ID。类似于 oracle 的行 ID 的东西。我将如何在 Teradata 中做到这一点?我正在尝试以下查询,但它抛出错误。
select rowid,emp_id,e_name from test;
Error msg : Syntax error: ROWID not allowed.
Run Code Online (Sandbox Code Playgroud)
提前致谢。
尝试ROW_NUMBER()窗口聚合函数:
SELECT ROW_NUMBER() OVER(ORDER BY empid) AS RowID_
, empid
, empName
FROM test;
Run Code Online (Sandbox Code Playgroud)
RANK()与窗口聚合不同,ROW_NUMBER()结果集中不允许出现联系。您的另一种选择是IDENTITY在表中使用一列,但这些很混乱,并且会在以后引起问题。ROW_NUMBER()如果您需要维护代理键,则可以更轻松地将其合并到 ETL 处理中。
应该注意的是,如果您的ORDER BY或PARTITION BY列倾斜,则STAT FUNCTION查询计划中的步骤的性能可能会受到大量数据的影响。该PARTITION BY子句是可选的,允许您定义一个窗口,ROW_NUMBER()当分区更改时,该窗口的结果将被重置。不常用与ROW_NUMBER()但可能会派上用场。
编辑 使用代理来唯一标识记录,而不必依赖 ETL 使用中的逻辑和表中的标识列。正确配置后,删除记录时,IDENTITY 列将不会重用任何域值。
| 归档时间: |
|
| 查看次数: |
4826 次 |
| 最近记录: |