Существует два основных способа добавления пользовательских картографов / редукторов к запросам улья.
- с использованием
transform
SELECT TRANSFORM (stuff1, stuff2)FROM table1, ИСПОЛЬЗУЯ «script» КАК thing1, thing2
, где stuff1, stuff2 - поля в table1, а script - любой исполняемый файл, который принимает формат, который я опишу позже.thing1, thing2 - это выходные данные из скрипта
- , использующие карту и уменьшающие
FROM (
FROM table
MAP table.f1 table.f2
USING 'map_script'
AS mp1, mp2
CLUSTER BY mp1) map_output
INSERT OVERWRITE TABLE someothertable
REDUCE map_output.mp1, map_output.mp2
USING 'reduce_script'
AS reducef1, reducef2;
Это немного сложнее, но дает больший контроль.Есть 2 части к этому.В первой части скрипт mapper получит данные из table
и отобразит их в поля mp1 и mp2.затем они передаются в reduce_script
, этот скрипт получит отсортированный вывод по ключу, который мы указали в CLUSTER BY mp1
. Обратите внимание, более одного ключа будет обрабатываться одним редуктором .Выходные данные сценария сокращения будут идти в таблицу someothertable
Теперь все эти сценарии следуют простому шаблону.они будут читать строку за строкой из стандартного ввода.Поля будут \t
разделены, и они будут записывать обратно в стандартный вывод таким же образом (поля, разделенные '\ t')
Посмотрите этот блог, есть несколько хороших примеров.
http://dev.bizo.com/2009/07/custom-map-scripts-and-hive.html
http://dev.bizo.com/2009/10/reduce-scripts-in-hive.html