2015-11-13 2 views
-1

У меня есть две проблемы, пожалуйста, помогите мне решить их.Импорт нескольких файлов в Hive с различными структурами

Задача 1: Файловая структура У меня есть 3 файлов с этими столбцами:

  • log_in.csv (request_id, date_in, происхождение)
  • log_out.csv (request_id, date_out, место назначения)
  • request.csv (request_id, date_request, пользователь)

Каждый файл записывается в Дифференц моменты, так что "дата" является п от того же. Request_id одинаково во всех файлах, если запрос завершен.

Exemple:

log_out.csv

request_id |  date_out  | destination 
    1  | 2015-11-13 01:02:02 | 192.168.0.7 
    3  | 2015-11-13 05:01:05 | 192.168.0.5 
    4  | 2015-11-13 03:09:02 | 192.168.0.10 

log_in.csv

request_id |  date_in  | origin 
    1  | 2015-11-13 01:02:03 | 192.168.0.10 
    2  | 2015-11-13 02:03:04 | 192.168.0.9 
    4  | 2015-11-13 03:09:02 | 192.168.0.3 

request.csv

request_id |  date_in  | user 
    1  | 2015-11-13 01:02:01 | user1 
    2  | 2015-11-13 02:03:01 | user2 
    3  | 2015-11-13 02:03:01 | user1 
    4  | 2015-11-13 03:09:01 | user3 

Каков наилучший способ хранения этих файлов?

Задача 2: Каталог

Как правильно STRUCT мой diretory и загружать файлы, если они имеют такое же имя, днем ​​в HDFS?

Exemple как:

LOGS/20151113/log_out.csv 
LOGS/20151113/log_in.csv 
LOGS/20151113/request.csv 
LOGS/20151114/log_out.csv 
LOGS/20151114/log_in.csv 
LOGS/20151114/request.csv 
. 
. 
. 

Спасибо заранее

+0

Что именно вы пытаетесь достичь? Вы хотите сохранить данные в трех таблицах? или попытаться загрузить данные в hdfs наилучшим образом? относительно структуры каталогов: вы хотите сохранить файлы в каталоге даты. Если да, это возможно! – Anil

+0

@Anil Может ли это быть 3 таблицы, но если вы можете хранить в HDFS в другой структуре, это также послужит этой ситуации. –

+0

@ Когда я пытаюсь найти лучший способ хранения и загрузки этих файлов, структура которых должна Я использую в HDFS и лучший способ получить доступ к данным позже.О структуре файла, не обязательно в директории с датой (Вероятно, это будет envolve partition и я не знаю, если это лучший способ) –

ответ

0

@Otavio Р. Росси: Вы можете создать 3 (внешние) таблицы, вход, выход и запрос, если данные уже в HDFS

Что-то подобное,

CREATE EXTERNAL TABLE login(
    request_id INT, 
    date_out TIMESTAMP, 
    destination STRING 
    ) 
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '|' 
    STORED AS TEXTFILE; 
    LOAD DATA INPATH 'hdfs location' 

Теперь эти таблицы могут быть разделены по дате или году/месяцу/дню в зависимости от вашего usecse.

Кроме того, если вы ищете корреляцию, вы можете рассмотреть возможность загрузки всех данных в одну таблицу путем объединения всех трех таблиц на request_id. надеюсь это поможет !

+0

Спасибо за ваш ответ. Однако в этом случае вы упомянули (загружая все данные в одну таблицу), как я могу загрузить данные из 3-х файлов, объединив их в одну таблицу, если каждый файл имеет разное количество столбцов? Это возможно? Что, если количество столбцов будет равно 10 (много нулей внутри таблицы)? –

+0

yes @ OtavioR.Rossi: То, как работает агрегация;) Присоединитесь к трем таблицам на ключе (request_id) здесь – Anil

Смежные вопросы