Можно ли использовать UUID в качестве суррогатного ключа для хранилища данных в улье?

Если

$_SERVER['HTTP_REFERER']

не работает, попробуйте

getenv('HTTP_REFERER')

Это может сработать для вас.

1
задан Sparrow 11 March 2019 в 14:29
поделиться

2 ответа

Для файлов ORC и последовательности BLOCK__OFFSET__INSIDE__FILE не является уникальным для каждого файла, и в официальной документации говорится, что это смещение файла первого байта текущего блока

В [113 ] В некоторых ресурсах в Интернете сказано, что BLOCK__OFFSET__INSIDE__FILE является уникальным внутри текстовых файлов. Даже если это правда, почему вы должны ограничивать себя только текстовыми файлами.

Кроме того, UUID не зависит от входных файлов и может быть рассчитан после некоторого преобразования, в рабочем процессе, читающем тему Kaffka, вообще без файлов и т. Д. Также UUID, сгенерированный в какой-либо другой системе, также уникален в вашей системе, поскольку UUID глобально уникальный. Кроме того, идентификаторы UUID имеют одинаковую длину, не зависят от длины структуры файлового каталога, и INPUT__FILE__NAME содержит все пути к файлам, что делает имя файла уникальным в одной и той же файловой системе.

Вот почему UUID является предпочтительным решением

0
ответ дан leftjoin 11 March 2019 в 14:29
поделиться

Я бы использовал встроенный 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

0
ответ дан Jainik 11 March 2019 в 14:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: