カスタム マッパー/リデューサーをハイブ クエリに追加するには、基本的に 2 つの方法があります。
- 使用して
transform
SELECT TRANSFORM(stuff1, stuff2) FROM table1 USING 'script' AS thing1, thing2
ここで、stuff1、stuff2 は table1 のフィールドで、script は後で説明する形式を受け入れる任意の実行可能ファイルです。thing1、thing2 はスクリプトからの出力です
- map と reduce の使用
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 つの部分があります。最初の部分では、マッパー スクリプトがデータを受け取りtable
、フィールド mp1 と mp2 にマップします。これらは に渡されreduce_script
、このスクリプトは で指定したキーでソートされた出力を受け取りますCLUSTER BY mp1
。注意してください、複数のキーが 1 つの reducer によって処理されます。reduce スクリプトの出力は table に移動しますsomeothertable
現在、これらのスクリプトはすべて単純なパターンに従っています。stdin から 1 行ずつ読み取ります。フィールドは\t
分離され、同じ方法で stdout に書き戻されます (フィールドは '\t' で区切られます)。
このブログをチェックしてください。いくつかの素晴らしい例があります。
http://dev.bizo.com/2009/07/custom-map-scripts-and-hive.html
http://dev.bizo.com/2009/10/reduce-scripts-in-hive.html