Mais conteúdo relacionado Semelhante a "Programming Hive" Reading #1 (20) "Programming Hive" Reading #13. Today’s Agenda
•Chapter4. Data Difinition
•PARTITION / BUCKET
•Chapter6. Queries
•SELECT / WHERE / JOIN / DISTRIBUTE BY /
CLUSTER BY / UNION ALL
•Chapter7. Views
•View
“Programming Hive” Reading #1 3
4. Hive
http://www.learncomputer.com/hadoop-with-hive/
“Programming Hive” Reading #1 4
6. PARTITIONED BY
•特定のカラムでデータのパーティショニング。
•HDFS上では指定したカラムの値ごとにディレクト
リが分離される。
“Programming Hive” Reading #1 6
7. Dynamic Partition
•INSERT時にPARTITION対象のカラムを指定するこ
とも可能
•使用するためには設定が必要
hive.exec.dynamic.partition=true
“Programming Hive” Reading #1 7
8. Bucketing Table
•特定のカラムをキーに、あらかじめ用意した
Bucketにごとにデータを振り分ける。
(上記は、user_idをキーに96のBucketにデータを
振り分ける、の意)
•使用するためには設定が必要
hive.enforce.bucketing=true
mapred.reduce.tasks = [int]
“Programming Hive” Reading #1 8
9. Chapter6. Queries
操作 HiveQL SQL
検索 SELECT SELECT
更新 - UPDATE
INSERT OVERWRITE TABLE
挿入 INSERT INTO TABLE
INSERT INTO
削除 - DELETE FROM
※『はじめてのHadoop』P245より引用加筆
“Programming Hive” Reading #1 9
10. Chapter6. Queries
カテゴリ HiveQL 備考
整数型 TINYINT 1バイト
SMALLINT 2バイト
INT 4バイト
BIGINT 8バイト
浮動小数点型 FLOAT 4バイト
DOUBLE 8バイト
文字列型 STRING
真偽値 BOOLEAN TRUE/FALSE
配列型 ARRAY hoge[0]
MAP型 MAP hoge[‘fuga’]
構造体型 STRUCT hoge.fuga
※『はじめてのHadoop』P245より引用加筆
“Programming Hive” Reading #1 10
11. SELECT:Functions
Name
round(double a)
round(double a, int d)
floor(double a)
ceil(double a), ceiling(double a)
rand(), rand(int seed)
exp(double a)
ln(double a)
log10(double a)
log2(double a)
・・・
※詳細はHiveのWikiを参照ください。
https://cwiki.apache.org/Hive/languagemanual-udf.html
“Programming Hive” Reading #1 11
12. SELECT:Table Generating Functions
Function 備考
SELECT explode(myCol) AS myNewCol FROM myTable;
#myCol : [1,2,3][4,5,6]
explode()
#myNewCol : 1 2 3 4 5 6
select a.timestamp, b.*
json_tuple() from log a lateral view json_tuple(a.appevent, 'eventid',
'eventname') b as f1, f2;
SELECT parse_url_tuple(url, ‘HOST’,‘PATH’.‘QUERY’) as (host,
parse_url_tuple() path, query) FROM url_table
“Programming Hive” Reading #1 12
13. json_tuple memo
•json_tuple()
• http://javasourcecode.org/html/open-source/hive/hive-0.9.0/org/
apache/hadoop/hive/ql/udf/generic/GenericUDTFJSONTuple.java.html
•JSONObject
•Hive-JSON-Serde
• https://github.com/rcongiu/Hive-JSON-Serde/blob/master/src/main/
java/org/openx/data/jsonserde/JsonSerDe.java
•org.openx.data.jsonserde.JsonSerDe
(独自実装)
“Programming Hive” Reading #1 13
14. SELECT:When Hive Can Avoid M/R
•以下の条件に合致する場合はMapReduceが起動
しない(HDFSへのシーケンシャルアクセス)
•From句ならびにWhere句が指定されてない時
•SELECT * FROM employees;
•From句が未指定で、Where句にパーティション
用のカラムが指定されている時
•SELECT * FROM employees WHERE
country = ‘USA’ and state = ‘CA’;
“Programming Hive” Reading #1 14
15. WHERE:Predicate Operations
Name
A=B
A <=> B
A <> B
A<B
A <= B
A>B
A >= B
A [NOT] BETWEEN B AND C
A IS NULL
A IS NOT NULL
A LIKE B
A RLIKE B
A REGEXP B
“Programming Hive” Reading #1 15
17. JOIN
•Inner JOIN
•LEFT OUTER JOIN
•RIGHT OUTER JOIN
•FULL OUTER JOIN
•LEFT SEMI-JOIN
“Programming Hive” Reading #1 17
18. Map Side Join
•Map処理のみを用いてJOINを行う事を強制する。
メモリ上に指定したテーブルのデータ(上記例の
場合は”b”)を読み込むため、小さめのデータで
の使用を推奨。
※上記記法は0.7以降ではdeprecated
•RIGHT OUTER JOIN / FULL OUTER JOIN では使
用できない
“Programming Hive” Reading #1 18
19. Map Side Join
•hive.auto.convert.join=[true|false]
•JOIN最適化を有効にする。JOINの際片方のテー
ブルサイズが小さい場合はMap Side Join。
•hive.mapjoin.smalltable.filesize=[int]
•指定したサイズよりデータが小さい場合、一般的
なM/R処理でなくMap Side Joinが行われる。
※参考:
http://d.hatena.ne.jp/wyukawa/20120328/1332950392
http://d.hatena.ne.jp/wyukawa/20110818/1313670105
“Programming Hive” Reading #1 19
20. DISTRIBUTE BY
•DISTRIBUTE BY句で指定したカラムのデータの
うち、同値の場合は必ず同じReducerに振り分け
られる事を保証する。
“Programming Hive” Reading #1 20
21. CLUSTER BY
•DISTRIBUTE BY句とSORT BY句で同じカラムを
指定するのと同じ動作になる。
“Programming Hive” Reading #1 21
22. Sampling
•全体のデータからサンプリングをして特定の比率
のデータを取得する。
•上記は全体データを10のBucketに分類し、その
うち3つのBucketを抽出する、の意。
“Programming Hive” Reading #1 22
23. Block Sampling
•TABLESAMPLE(0.1 PERCENT)
•全データから0.1%のデータを抽出する。
•TABLESAMPLE(100M)
•全データから100MB分のデータを抽出
•TABLESAMPLE(100 ROWS)
•全データから100行のデータを抽出
https://cwiki.apache.org/Hive/languagemanual-sampling.html
“Programming Hive” Reading #1 23
24. UNION ALL
•Hiveでは副問い合わせの時のみ使用可能。
•UNION ALLでは必ず副問い合わせ文の数分Full
Scanになるので、ORやCASE...WHEN...THEN 構
文で記載できる場合はそちらの方が処理が速い。
“Programming Hive” Reading #1 24
25. UNION ALL
SELECT log.ymd, log.level, log.message SELECT ymd, level, message FROM log WHERE type = ‘A’ OR type = ‘B’
FROM ( SORT BY log.ymd ASC;
SELECT l1.ymd, l1.level, l1.message FROM log l1 WHERE l1.type = 'A'
UNION ALL
SELECT l2.ymd, l2.level, l2.message FROM log l2 WHERE l2.type = 'B'
) log
SORT BY log.ymd ASC;
STAGE PLANS: STAGE PLANS:
Stage: Stage-1 Stage: Stage-1
Map Reduce Map Reduce
Alias -> Map Operator Tree: Alias -> Map Operator Tree:
null-subquery1:log-subquery1:m1 TableScan
TableScan (中略)
(中略) Select Operator
null-subquery2:log-subquery2:m2 (後略)
TableScan
(中略)
Union
Select Operator
(後略)
“Programming Hive” Reading #1 25
26. Chapter7. View
•Viewからデータを参照する際は、DDLで定義した
SELECT∼文が発行される。
•上記クエリー発行時は、
・”SELECT * FROM people∼” でscanしつつ
・”SELECT lastname FROM shorter_join∼”の条
件でデータを抽出する
“Programming Hive” Reading #1 26
27. Chapter7. View
STAGE DEPENDENCIES:
Stage-1 is a root stage
Stage-0 is a root stage
STAGE PLANS:
Stage: Stage-1
Map Reduce
Alias -> Map Operator Tree:
hoge_view:hoge_source
TableScan
alias: hoge_source
Filter Operator
(中略)
Select Operator
(中略)
Select Operator
(中略)
Limit
File Output Operator
compressed: false
GlobalTableId: 0
table:
input format: org.apache.hadoop.mapred.TextInputFormat
output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Stage: Stage-0
Fetch Operator
limit: 10
“Programming Hive” Reading #1 27