Предположим, у меня есть таблица с именем sourcetable
и colA
, colB
, colC
. Я просто хочу создать столбец идентификаторов с неповторяющимися, уникальными и случайными целыми числами. Как я могу создать это либо в netezza SQL, либо с помощью proc SQL (SAS)?
Как я могу создать столбец идентификатора случайным образом, не повторяя целые числа?
Ответы (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
Как это можно сделать с помощью proc sql? Мой набор данных составляет более 2 миллиардов записей, и мне нужно написать этот код с помощью sql.
- person ; 14.03.2019
Есть ли конкретная причина, по которой вы не можете использовать серийный номер, возвращенный из последовательности? Звучит больше как вопрос к экспертам Netezza, если у вас есть записи 2B на стороне Netezza. Не уверен, как вы получаете такую большую таблицу в предполагаемом DW без уникального идентификатора строки, уже запеченного в дизайне.
- person Richard; 14.03.2019