"programming hive" reading #1

27
“Programming Hive” Reading #1

Upload: moai-kids

Post on 29-Nov-2014

15.096 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Page 2: "Programming Hive" Reading #1
Page 3: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Today’s Agenda

•Chapter4. Data Difinition

•PARTITION / BUCKET

•Chapter6. Queries

•SELECT / WHERE / JOIN / DISTRIBUTE BY / CLUSTER BY / UNION ALL

•Chapter7. Views

•View

3

Page 4: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Hive

4

http://www.learncomputer.com/hadoop-with-hive/

Page 5: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Chapter4. Data Definition

•基本的な事項は割愛

•PARTITION / BUCKET のみ触れます。

5

Page 6: "Programming Hive" Reading #1

“Programming Hive” Reading #1

PARTITIONED BY

•特定のカラムでデータのパーティショニング。

•HDFS上では指定したカラムの値ごとにディレクトリが分離される。

6

Page 7: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Dynamic Partition

•INSERT時にPARTITION対象のカラムを指定することも可能

•使用するためには設定が必要hive.exec.dynamic.partition=true

7

Page 8: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Bucketing Table

•特定のカラムをキーに、あらかじめ用意したBucketにごとにデータを振り分ける。(上記は、user_idをキーに96のBucketにデータを振り分ける、の意)

•使用するためには設定が必要hive.enforce.bucketing=truemapred.reduce.tasks = [int]

8

Page 9: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Chapter6. Queries

9

操作 HiveQL SQL

検索 SELECT SELECT

更新 - UPDATE

挿入 INSERT OVERWRITE TABLEINSERT INTO TABLE INSERT INTO

削除 - DELETE FROM

※『はじめてのHadoop』P245より引用加筆

Page 10: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Chapter6. Queries

10

カテゴリ 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より引用加筆

Page 11: "Programming Hive" Reading #1

“Programming Hive” Reading #1

SELECT:Functions

11

Nameround(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

Page 12: "Programming Hive" Reading #1

“Programming Hive” Reading #1

SELECT:Table Generating Functions

12

Function 備考

explode()SELECT explode(myCol) AS myNewCol FROM myTable;#myCol : [1,2,3][4,5,6]#myNewCol : 1 2 3 4 5 6

json_tuple()select a.timestamp, b.*from log a lateral view json_tuple(a.appevent, 'eventid', 'eventname') b as f1, f2;

parse_url_tuple() SELECT parse_url_tuple(url, ‘HOST’,‘PATH’.‘QUERY’) as (host, path, query) FROM url_table

Page 14: "Programming Hive" Reading #1

“Programming Hive” Reading #1

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’;

14

Page 15: "Programming Hive" Reading #1

“Programming Hive” Reading #1

WHERE:Predicate Operations

15

NameA = BA <=> BA <> BA < BA <= BA > BA >= BA [NOT] BETWEEN B AND CA IS NULLA IS NOT NULLA LIKE BA RLIKE BA REGEXP B

Page 16: "Programming Hive" Reading #1

“Programming Hive” Reading #1

WHERE:RLIKE/REGEXP

•正規表現を用いてあいまい検索

•LIKE

•RLIKE

16

Page 17: "Programming Hive" Reading #1

“Programming Hive” Reading #1

JOIN

•Inner JOIN

•LEFT OUTER JOIN

•RIGHT OUTER JOIN

•FULL OUTER JOIN

•LEFT SEMI-JOIN

17

Page 18: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Map Side Join

•Map処理のみを用いてJOINを行う事を強制する。メモリ上に指定したテーブルのデータ(上記例の場合は”b”)を読み込むため、小さめのデータでの使用を推奨。※上記記法は0.7以降ではdeprecated

•RIGHT OUTER JOIN / FULL OUTER JOIN では使用できない

18

Page 19: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Map Side Join

19

•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/1332950392http://d.hatena.ne.jp/wyukawa/20110818/1313670105

Page 20: "Programming Hive" Reading #1

“Programming Hive” Reading #1

DISTRIBUTE BY

•DISTRIBUTE BY句で指定したカラムのデータのうち、同値の場合は必ず同じReducerに振り分けられる事を保証する。

20

Page 21: "Programming Hive" Reading #1

“Programming Hive” Reading #1

CLUSTER BY

•DISTRIBUTE BY句とSORT BY句で同じカラムを指定するのと同じ動作になる。

21

Page 22: "Programming Hive" Reading #1

“Programming Hive” Reading #1

•全体のデータからサンプリングをして特定の比率のデータを取得する。

•上記は全体データを10のBucketに分類し、そのうち3つのBucketを抽出する、の意。

Sampling

22

Page 23: "Programming Hive" Reading #1

“Programming Hive” Reading #1

•TABLESAMPLE(0.1 PERCENT)

•全データから0.1%のデータを抽出する。

•TABLESAMPLE(100M)

•全データから100MB分のデータを抽出

•TABLESAMPLE(100 ROWS)

•全データから100行のデータを抽出

Block Sampling

23

https://cwiki.apache.org/Hive/languagemanual-sampling.html

Page 24: "Programming Hive" Reading #1

“Programming Hive” Reading #1

•Hiveでは副問い合わせの時のみ使用可能。

•UNION ALLでは必ず副問い合わせ文の数分Full Scanになるので、ORやCASE...WHEN...THEN 構文で記載できる場合はそちらの方が処理が速い。

UNION ALL

24

Page 25: "Programming Hive" Reading #1

“Programming Hive” Reading #1

UNION ALL

25

SELECT log.ymd, log.level, log.message FROM ( 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' ) logSORT BY log.ymd ASC;

SELECT ymd, level, message FROM log WHERE type = ‘A’ OR type = ‘B’ SORT BY log.ymd ASC;

STAGE PLANS: Stage: Stage-1 Map Reduce Alias -> Map Operator Tree: null-subquery1:log-subquery1:m1 TableScan (中略) null-subquery2:log-subquery2:m2 TableScan (中略) Union Select Operator (後略)

STAGE PLANS: Stage: Stage-1 Map Reduce Alias -> Map Operator Tree: TableScan (中略) Select Operator (後略)

Page 26: "Programming Hive" Reading #1

“Programming Hive” Reading #1

•Viewからデータを参照する際は、DDLで定義したSELECT~文が発行される。

•上記クエリー発行時は、・”SELECT * FROM people~” でscanしつつ・”SELECT lastname FROM shorter_join~”の条件でデータを抽出する

Chapter7. View

26

Page 27: "Programming Hive" Reading #1

“Programming Hive” Reading #1

Chapter7. View

27

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