Hive Table добавить раздел для загрузки всех подкаталогов

Я использую куст (с внешними таблицами) для обработки данных, хранящихся на amazon S3.

Мои данные разделены следующим образом: group/team/dt/ (например, файл данных может храниться по пути group=myGroup/team=myTeam/dt=20120603)

Я хотел бы обработать данные для нескольких команд (в разных группах). Поскольку RCOVER PARTITIONS занимает много времени, я хочу добавить несколько разделов на основе значений группы и команды в таблицу куста (т. Е. Учитывая данные о загрузке группы и команды для всех дат, доступных в этой команде).

Функциональность, которую я ищу, это:

CREATE EXTERNAL TABLE myData(
attr1 string, attr2 string, attr3 string)
PARTITIONED BY (group string, team string, dt string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://myBucket/${DATA_ROOT_DIR}'; 

-- Add paritions without specifying values for dt
ALTER TABLE myData ADD PARTITION (group='group1',team='team1') ; 
ALTER TABLE myData ADD PARTITION (group='group2',team='team2') ;

Спасибо!


person hailrok    schedule 12.06.2012    source источник


Ответы (2)


Hive не знает об этих каталогах, пока вы не сообщите ему о них, поэтому нет возможности получить доступ к разделам без их добавления.

Вы можете написать простой скрипт, чтобы добавить все разделы для данной команды/группы:

results = "ALTER TABLE something ADD "
groups.each do |group|
  teams.each do |team|
    partitions = listDirectories("s3n://bucket/", group, team)
    partitions.each do |partition|
      results += "PARTITION(group='#{group}', team='#{team}', dt='#{partition}')"
    end

  end
end

puts results

Похоже, вы работаете на EMR (обычный куст даже не имеет RECOVER PARTITIONS), в любом случае это в значительной степени то, что RECOVER PARTITIONS делает, но, по крайней мере, таким образом у вас больше контроля.

Другой вариант — добавить разделы при добавлении данных и просто убедиться, что все разделы обновлены.

person Matthew Rathbone    schedule 13.06.2012
comment
Как или на чем запустить этот скрипт? - person the M; 23.07.2018

Пожалуйста, проверьте вставку динамического раздела - https://cwiki.apache.org/confluence/display/Hive/Tutorial#Tutorial-DynamicpartitionInsert

в этом методе сам столбец становится разделом. Это эффективно позволяет избежать жесткого кодирования имени раздела в операторе вставки.

person ROHIT NARAYANA    schedule 31.08.2012
comment
Вопрос о восстановлении/добавлении раздела, а не о динамическом создании раздела. Согласно вопросу, раздел уже существует, он хочет выборочно восстановить определенные разделы. - person Mayank Jaiswal; 15.09.2014