создать первичный ключ ROW_NUMBER () над функцией sql teradata - PullRequest
0 голосов
/ 05 июня 2019

Я хочу создать первичный ключ в моем операторе select. Я прочитал, что я могу использовать функцию ROW_NUMBER() over. Но так как это будет первичный ключ, у меня нет столбцов для over или partition by. Я пытался использовать только select row_number() as PK, но это выдает ошибку [3706] syntax error: expected something between ( and as keyword.

как я могу решить проблему?

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Пытаетесь ли вы создать автоматически сгенерированный номер, который затем можно использовать в качестве основного индекса для хорошего распределения по AMP в узлах Teradata (который вы называете PK в операторе select)?

Если это таки если вы не хотите использовать тип данных IDENTITY COLUMN, чтобы сделать это для вас (плюсы и минусы существуют), то вы можете сгенерировать такой автоматический номер, который будет использоваться как PI в Teardata, просто используя функцию csum.(Имейте в виду, ваша целевая таблица не должна быть слишком большой, т. Е. Превышать несколько сотен тысяч до миллиона)

SELECT 
   mx.max_id + csum(1,1) as PI_column
  ,src.columnABC
from 
  source_table src
cross join 
  (SELECT max(id) as max_id from target_table) as mx
group by 1,2
order by 1;

Это создаст новый столбец PI / PK / уникальный идентификатор, который будет использоваться для PI схорошее распределение для каждой уникальной комбинации ColumnABC.

Надеюсь, это поможет.

Если мое утверждение «если» в начале было неверным, то, пожалуйста, объясните, что вы пытаетесь сделать, и я буду рад помочь вам с этим.

0 голосов
/ 05 июня 2019

Вам понадобится предложение over. Я не уверен, является ли order by необязательным в Teradata (у меня нет версии под рукой):

row_number() over ()
row_number() over (order by <some column here>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...