Подготовка и загрузка данных в ClickHouse
Для того чтобы в рамках ADCP была возможность работы с данными, данные должны быть загружены в ClickHouse, который в свою очередь подключается к ADCP и Apache Atlas.
Для того чтобы все компоненты системы работали корректно, необходимо исполнять следующие правила подготовки и загрузки данных в ClickHouse:
В ClickHouse выделяются отдельные БД для:
- Публикуемых в маркетплейсе данных,
- Результатов промышленного исполнения моделей из Cleanroom (после согласования скрипта поставщиками данных по итогам моделирования в DataLab).
В качестве Engine таблиц использовать “MergeTree”
В наименованиях объектов (БД / таблиц / полей) ClickHouse необходимо использовать символы только в нижнем регистре.
Допускается использовать только скалярные типы данных из списка date, float32, float64, int8, int16, int32, int64, string, uint8, uint16, uint32, uint64. Любые древовидные структуры, массивы, географические типы использовать нельзя.
Каждая таблица (набор данных) должна обязательно включать атрибут матчинга «номер мобильного телефона» и признак согласия. Каждая таблица (набор данных) может включать в себя следующие дополнительные атрибуты матчинга:
- Фамилия;
- Имя;
- Отчество;
- Серия и номер паспорта;
- Дата рождения;
- E-mail;
- Пол;
- Номер телефона.
Должна обеспечиваться уникальность каждого атрибута. То есть при наличии, например, 2-х номеров мобильного телефона компания самостоятельно выбирает и указывает какой-либо 1 из них.
Все персональные данные хэшируются единым алгоритмом SHA512(data + “salt”), значение хэшей должно быть в нижнем регистре (LOWER CASE). Значение соли согласовывается компаниями-участниками отдельно. Предварительно значения должны быть приведены к каноническому формату. Пример скрипта хэширования
import hashlib
#Строчки для хеширования
lines = ["-", "_", "79126784576", "79146384571", "", "79274534324"]
hashedLines = []
salt = "p^4%<EQaz\"hs=aG4'(_utj2]V5uS+{2f"
fillers = ["", "-", "_"]
for str in lines:
if str in fillers:
hashedLines.append("")
else:
salted = str + salt
h = hashlib.new('sha512')
h.update(salted.encode())
hashedLines.append(h.hexdigest())
print(hashedLines)
Признак согласия не должен хэшироваться. Поле согласия должно быть формата UInt8 и должен принимать значение 1 или 0.
Абсолютные суммовые значения предоставляются в виде диапазона значений. При этом в бизнес-глоссарии необходимо расшифровать значения диапазонов.
Используется единый формат представления даты и времени ISO-8601:
- Дата. (пример: “2021-12-31“)
- Время. (пример: “18:25:10+03:00”)
- Дата и время. (пример: “2021-09-25T18:25:10+03:00”)
Требования к канонической модели данных:
Все данные перед хэшированием должны быть представлены в кодировке UTF-8.
Идентифицирующие атрибуты, используемые для сопоставления (матчинга) клиентов, перед хэшированием должны быть приведены к следующему формату:
a. Фамилия. Хэш от строки: UPPER CASE без пробелов и дополнительных символов, кроме дефиса. Например, "ИВАНОВ".
b. Имя. Хэш от строки: UPPER CASE без пробелов и дополнительных символов, кроме дефиса.
c. Отчество. Хэш от строки: UPPER CASE без пробелов и дополнительных символов, кроме дефиса
d. Номер мобильного телефона. Хэш от строки: номер телефона без +, без пробелов с кодом региона. Например, "79600667821".
e. Номер мобильного телефона. Хэш от строки: номер телефона без +, без пробелов с кодом региона. Например, "79600667821".
f. Серия и номер паспорта. Хэш от строки: серия номер без пробелов "8833285567".
g. Дата рождения. Хэш даты рождения "ГГГГ-ММ-ДД" - ISO-8601
h. Email. Хэш lower(trim(email)). Например, "someusermail@mail.com"
i. Пол. Хэш от строки с возможными значениями “m/f”.
Неопределенные (NULL) значения, значения филлеры, значения заглушки не допускаются. При отсутствии фактического значения необходимо записывать в датасет пустую строку.
Каждая компания-участник обмена данных самостоятельно обеспечивает выполнение вышеприведенных требований по подготовке собственных данных к публикации в платформу Vaultee.