Я бы использовал встроенный SURROGATE_KEYS
UDF. Это имеет преимущества перед UUID. Эта функция автоматически генерирует числовые идентификаторы для ваших строк при вводе данных в таблицу и может работать быстрее, чем UUID.
Пример:
1) Создайте таблицу учеников в формате ORC по умолчанию, который имеет свойства ACID.
CREATE TABLE students (row_id INT, name VARCHAR(64), dorm INT);
2) Вставить данные в таблицу. Например:
INSERT INTO TABLE students VALUES (1, 'fred flintstone', 100), (2, 'barney rubble', 200);
3) Создайте версию таблицы учеников, используя UDF SURROGATE_KEY.
CREATE TABLE students_v2
(`ID` BIGINT DEFAULT SURROGATE_KEY(),
row_id INT,
name VARCHAR(64),
dorm INT,
PRIMARY KEY (ID) DISABLE NOVALIDATE);
4) Вставить данные, которые автоматически генерируют суррогатные ключи для первичных ключей.
INSERT INTO students_v2 (row_id, name, dorm) SELECT * FROM students;
5) Просмотр суррогатных ключей.
SELECT * FROM students_v2;
6) Добавьте суррогатные ключи в качестве внешнего ключа в другую таблицу, такую как таблица student_grades, чтобы ускорить последующие объединения таблиц.
ALTER TABLE student_grades ADD COLUMNS (gen_id BIGINT);
MERGE INTO student_grades g USING students_v2 s ON g.row_id = s.row_id
WHEN MATCHED THEN UPDATE SET gen_id = s.id;
7) Выполнять быстрые соединения на суррогатных ключах.
( ПРИМЕЧАНИЕ: этот пример был скопирован из документации Hortonworks и добавлен здесь, так что даже если ссылка удалена, у нас есть пример для ссылки):
Есть и другие способы иметь суррогатный ключ в вашей таблице. Вот хорошая тема в этом обсуждении.
https://community.hortonworks.com/idea/8619/how-do-we-create-surrogate-keys-in-hive.html