Playground 

Hive Study

Hadoopの象本を読み返してみています。2013年に出版された第3版ってことは、hpでデータ系の部署に配属された時に買ったんだっけな〜と朧げな記憶が蘇ります。今日はHiveの部分を重点的に。


Hiveは読み込み時点ではデータを確認せず、クエリの発行時に確認する。これを読み込み時のスキーマ適用と呼ぶ。

compact/bitmapインデックス

HiveQLはSQL92への準拠がゴールとして設定されたことはなく、ユーザーの要求を満たせるように機能追加してきた。

管理対象/外部テーブル

バケット
同じ列でバケット化された2つのテーブルの結合処理は、map側結合として効率的に実装できる。

create table bucketed_users (id int, name string)
clustered by (id) into 4 buckets
;
create table bucketed_users (id int, name string)
clustered by (id) sorted by (id asc) into 4 buckets
;
select * from bucketed_users
tablesample(bucket 1 out of 4 on id)
;

複数テーブルへのinsert

from s1
insert overwrite table t1
 select c1, count(c1)
 group by c1
insert overwrite table t2
 select c2, count(c2)
 group by c2
;   

空テーブルの複製

create table t1_new like t1
;

ソート
sort by: reducer毎にソートされたファイルを生成する distribute by: 特定の行がどのreducerに行くのかを制御する

from records2
select year, temperature
distribute by year
sort by year asc, temperature desc
;

関数の確認

show functions
;
describe function length
;

map結合 1つのテーブルがメモリに収まるほど小さければ、小さい方のテーブルをmapperのメモリに読み込んで結合処理を行うことができる。

select /**+ MAPJOIN(things) */ sales.*, things.*
from sales
 join things on (sales.id = things.id)
;

ビュー
生成時点ではディスクにマテリアライズ化されず、ビューの参照時点で、ビューのselect文が実行される。

ユーザー定義関数

UDFを作成する際はorg.apache.hadoop.hive.ql.exec.UDFをextendsし、最低限evaluateメソッドを実装する必要がある Hiveへの登録するにはjarファイルとしてパッケージ化し、add jarおよびcreate temporary functionを実行する

add jar /path/to/hive-examples.jar
create temporary function strip as 'com.hadoopbook.hive.strip'

(UDAFの作成方法はUDFと異なる部分もあるが割愛)