Как я могу создать столбец идентификатора случайным образом, не повторяя целые числа?

Предположим, у меня есть таблица с именем sourcetable и colA, colB, colC. Я просто хочу создать столбец идентификаторов с неповторяющимися, уникальными и случайными целыми числами. Как я могу создать это либо в netezza SQL, либо с помощью proc SQL (SAS)?


person Community    schedule 14.03.2019    source источник


Ответы (1)


Чтобы обеспечить уникальность, вы обязательно ограничите id либо первичным ключом, либо уникальным.

Функции SAS UUIDGEN или RANUNI являются кандидатами на создание значений с очень высокой вероятностью уникальности во время вычисления. Я не думаю, что существует какая-либо простая/изолированная функция, которая может гарантировать 100%, что она не будет вычислять ранее возвращенное значение.

UUIDGEN возвращает 36-байтовое символьное значение, например 170bf2ef-16c7-4b7f-b25b-000333d9679b

RANUNI, масштабированное на 1E15, вернет целочисленное значение, содержащее до 14 цифр.

data want;
  do i = 1 to 100;
    id_v1 = uuidgen();
    id_v2 = floor(1e15 * ranuni(0));
    output;
  end;
  format id_v2 15.;
run;

Для Netezza попробуйте посмотреть SO Как преодолеть Отсутствие в Netezza уникального ограничения/обеспечения ссылочной целостности? "

person Richard    schedule 14.03.2019
comment
Как это можно сделать с помощью proc sql? Мой набор данных составляет более 2 миллиардов записей, и мне нужно написать этот код с помощью sql. - person ; 14.03.2019
comment
Есть ли конкретная причина, по которой вы не можете использовать серийный номер, возвращенный из последовательности? Звучит больше как вопрос к экспертам Netezza, если у вас есть записи 2B на стороне Netezza. Не уверен, как вы получаете такую ​​большую таблицу в предполагаемом DW без уникального идентификатора строки, уже запеченного в дизайне. - person Richard; 14.03.2019