Я бы предложил пойти немного дальше.Я бы не стал использовать соединение между наборами данных.
Я бы следовал следующему подходу:
- Sqoop всех таблиц, участвующих в процессе.
- Используйте Apache Spark или Apache Crunch для создания документов Avro.
- Смонтируйте таблицу Hive к данным, созданным на предыдущем шаге.
Давайте поиграем с примером, который вы упомянули:
1.Sqoop данных: вы уже рассмотрели этот шаг.
2.Создание документов Avro
Фиктивные данные
Departament
id, name
1 Sales
2 Technology
Employers
id, department_id, name
1 1 John
2 1 Bruno
3 2 Alicia
4 2 George
Структура документа будет зависеть от того, как вы собираетесь использовать данные, может быть 2 варианта:
Работодатель
{"name": "John", "department": "Sales"}
{"name": "Bruno", "department": "Sales"}
{"name": "Alicia", "department": "Technology"}
{"name": "George", "department": "Technology"}
Отдел
{"name": "Sales", "Employers": ["John", "Bruno"]}
{"name": "Technology", "Employers": ["Alicia", "George"]}
Тогда запросы гораздо проще выполнять.
Преимущество использования этого подхода состоит в том, что при наличии модели реляционной базы данных со слишком большим количеством таблиц ваши запросы становятся более сложными, а также, когда таблицы слишком велики по размеру, объединение данных при запускеВремя - это дорогое время, потому что вы хотите передавать данные во время конвейера ETL, а не во время выполнения.
Надеюсь, это прояснит подход.