hive_hiveql
Last updated
Last updated
https://cwiki.apache.org/confluence/display/hive/design
SELECT ... FROM μ
SQLμμ SELECT νλ‘μ μ (projection) μ°μ°μ. FROM μ μ λ μ½λλ₯Ό μ ννκΈ° μν΄ νμν ν μ΄λΈ. λ·° λλ μ€μ²© 쿼리(nested query)λ₯Ό μλ³ν©λλ€.
컬λ μ λ°μ΄ν°νμ 컬λΌμ μ ννλ©΄ νμ΄λΈλ μΆλ ₯μ μν΄ JSON(Java Script Object Notation)λ¬Έλ²μ μ¬μ©ν©λλ€.
ARRAY λ°μ΄ν°νμ μΌνλ‘ κ΅¬λΆλ λͺ©λ‘μ΄ [...]λ‘ λλ €μΈμ¬ μμ΅λλ€.
MAPμ κ²½μ° μΌνλ‘ κ΅¬λΆλ ν€:κ° μμ λͺ©λ‘μ {...}λ‘ λλ¬μΈλ JSON ννμ μ¬μ©ν©λλ€.
STRUCTλ‘ JSON 맡 νμμ μ¬μ©ν©λλ€.
νμ΄λΈλ μ€λ² νλ‘μ°λ μΈλνλ‘μ°κ° λ°μν λ λ λμ λ²μμ λ°μ΄ν°νμ΄ μ‘΄μ¬νλλΌλ κ²°κ³Όλ₯Ό μλμΌλ‘ λ³ννμ§ μλ μλ° λ°μ΄ν°ν κ·μΉμ λ°λ¦λλ€.
κΈ°ν λ΄μ₯ ν¨μ
parse_url(url,partname,key) : HOST, PATH, QUERY, REF,PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:. μ΅μ ν€λ λ§μ§λ§μ QUERY:λ₯Ό μμ²ν¨
find_in_set(s, μΌνλ‘ κ΅¬λΆλ String) : μΌνλ‘ κ΅¬λΆλ λ¬Έμμ΄μμ sμ μμΈμ λ°νν¨. μ°Ύμ§ λͺ»νλ©΄ NULLμ΄ λ°νλ¨
locate(substr,str,pos) : strμ post μμΉλ‘λΆν° substrμ΄ μλ μμΈμ λ°νν¨
instr(str,substr) : strμμ substrμ μμΈμ λ°νν¨
str_to_map(s,delim1,delim2) : delim1μ ν€-κ° μμ ꡬλΆμλ‘ μ¬μ©νκ³ delim2λ₯Ό ν€μ κ°μ ꡬλΆμλ‘ μ¬μ©νμ¬ λ¬Έμμ΄ sλ₯Ό νμ±ν ν 맡μ μμ±ν¨
sentences(s,lang,locale) : λ¬Έμμ΄ sλ₯Ό λ¨μ΄μ λ°°μ΄λ‘ μ΄λ£¨μ΄μ§ λ¬Έμ₯μ λ°°μ΄λ‘ λ°νν¨
ngrams(array<array>, N, K, pf) : ν μ€νΈμμ top-K n-gramμ λ°νν¨. pfλ μ λ°λ
context_ngrams(array<array>,array, int K, int pf> : ngramsμ κ°μ§λ§ μΆλ ₯ λ°°μ΄μμ λ λ²μ§Έ λ¨μ΄ λ°°μ΄λ‘ μμνλ n-gramμ μ°Ύμ
in_file(s, filename) : filenmae νμΌμμ λ¬Έμμ΄ sκ° λνλλ©΄ trueλ₯Ό λ°νν¨
WHERE μ
WHERE μ μμ μ»¬λΌ λ³μΉμ μ¬μ©ν μ μμ΅λλ€. νμ§λ§ μ€μ²© SELECT λ¬Έμ μ¬μ©ν μ μμ΅λλ€.
LIKEμ RLIKE
νμ΄λΈλ LIKE μ μ μλ° μ κ·ννμμ μ¬μ©ν μ μλ RLIKEμ λ‘ νμ₯ν©λλ€.
λ§μΉ¨ν(.)λ μ΄λ ν λ¬Έμμ μΌμΉνκ³ λ³(*)μ μΌμͺ½μ μλ κ²μ΄ 0λ²μμ μ¬λ¬ λ² λ°λ³΅λλ κ²μ μλ―Έν©λλ€.
(x|y) ννμμ x νΉμ yκ° μΌμΉνλ κ²μ μλ―Έν©λλ€.
μ‘°μΈ λ¬Έ
νμ΄λΈλ κ³ μ μ μΈ SQL μ‘°μΈ λ¬Έμ μ 곡νλ©° λλ± μ‘°μΈ(EQUAL-JOIN)λ§ μ 곡ν©λλ€.
μ‘°μΈ μ΅μ ν
νμ΄λΈλ 쿼리μ λ§μ§λ§ ν μ΄λΈμ΄ κ°μ₯ ν¬λ€κ³ κ°μ ν©λλ€. λ€λ₯Έ ν μ΄λΈμ λ²νΌλ§νλ €κ³ μλνκ³ κ° λ μ½λμ λν΄μ μ‘°μΈμ μννλ©΄μ λ§μ§λ§ ν μ΄λΈμ νλ €λ³΄λ λλ€. μ‘°μΈ μΏΌλ¦¬λ₯Ό ꡬμ±ν λλ κ°μ₯ ν° ν μ΄λΈμ΄ κ°μ₯ λ§μ§λ§μ μ€λλ‘ ν©λλ€.
νμ΄λΈλ 쿼리 μ΅μ ν(optimizer)μ΄κΈ°μ μ΄λ€ ν μ΄λΈμ λ§μ§λ§μΌλ‘ νλ €λ³΄λ΄μΌ νλμ§ μ§μ νλ ννΈ(hint) λ©μΉ΄λμ¦μ μ 곡ν©λλ€.
μ€μ²© SELECT λ¬Έ
μ€μ²© SELECT λ¬Έμ λ°μ΄ν° μ‘°μΈ μ μ νν°μ νν°λ₯Ό μ μ©νλ λ° νμν νΈμλ€μ΄(push down)μ μνν©λλ€.
νΈμλ€μ΄μ WHERE μ μ μ μ΄ μ€ μΌλΆλ₯Ό λΌμ΄λ΄μ΄ 미리 μ€ννλ κ²μ λ§ν©λλ€. 리μ§μ£ΌμΌ(residual)μ νΈμλ€μ΄ νμ λ¨μ μ μ΄λ₯Ό μΌμ»«μ΅λλ€.
νμ΄λΈλ μ‘°μΈμ μνν νμ WHERE μ μ νκ°ν©λλ€. WHERE μ μ NULLμ΄ λμ§ μλ 컬λΌκ°μ λν΄μλ§ νν°λ₯Ό μ μ©νλ μ μ΄λ₯Ό μ¬μ©ν΄μΌν©λλ€. νμ΄λΈ λ¬Έμμλ λ¬λ¦¬ νν°μ νν°λ μΈλΆ μ‘°μΈμ ON μ μμ λμνμ§ μμ΅λλ€.
μΌμͺ½ μΈλ―Έ μ‘°μΈ
μΌμͺ½ μΈλ―Έ μ‘°μΈ(LEFT SEMI-JOIN)μ μ€λ₯Έμͺ½ ν μ΄λΈμμ ONμ μ μ΄λ₯Ό λ§μ‘±νλ λ μ½λλ₯Ό μ°Ύμ κ²½μ° μΌμͺ½ ν μ΄λΈμ λ μ½λλ₯Ό λ°ννλ©° νμ΄λΈλ μ€λ₯Έμͺ½ μΈλ―Έ μ‘°μΈμ μ§μνμ§ μμ΅λλ€.
맡 μ¬μ΄λ μ‘°μΈ(Map-side Join)
λ§μ½ ν ν μ΄λΈλ§ λΉΌκ³ λͺ¨λ μλ€λ©΄ μμ ν μ΄λΈμ λ©λͺ¨λ¦¬μ μΊμνκ³ κ°μ₯ ν° ν μ΄λΈμ 맡νΌλ‘ νλ €λ³΄λΌ μ μμ΅λλ€. νμ΄λΈλ λ©λͺ¨λ¦¬μ μΊμν μμ ν μ΄λΈλ‘λΆν° μΌμΉνλ λͺ¨λ κ²μ μ°Ύμ λΌ μ μκΈ° λλ¬Έμ 맡μμ λͺ¨λ μ‘°μΈμ ν μ μμ. μ΄λ κ² νλ©΄ μΌλ° μ‘°μΈ μλ리μ€μμ νμν 리λμ€ λ¨κ³λ₯Ό μ κ±°ν μ μμ΅λλ€.
νμ΄λΈλ μ€λ₯Έμͺ½ μΈλΆ μ‘°μΈκ³Ό μμ μΈλΆ μ‘°μΈμ λν΄μ μ΅μ νλ₯Ό μ§μνμ§ μμ΅λλ€.
ORDER BYμ SORT BY
https://sqlrelease.com/sort-by-order-by-distribute-by-and-cluster-by-in-hive
νμ΄λΈλ ORDER BY λμ λ°μ΄ν°λ₯Ό κ° λ¦¬λμμ μ λ ¬νλ SORT BYλ₯Ό μΆκ°ν©λλ€. κ° λ¦¬λμ€μ μΆλ ₯μ΄ μ λ ¬λλλ‘ μ§μ μ λ ¬(local ordering)μ μννλ κ²μ μλ―Έν©λλ€.
SORT BYμ ν¨κ» μ¬μ©νλ DISTRIBUTE BY
https://sqlrelease.com/sort-by-order-by-distribute-by-and-cluster-by-in-hive
DISTRIBUTE BYλ 맡μ μΆλ ₯μ 리λμλ‘ μ΄λ»κ² λλμ΄ λ³΄λ΄λμ§λ₯Ό μ μ΄ν©λλ€.
κΈ°λ³Έμ μΌλ‘ 맡리λμ€λ 맡νΌκ° μΆλ ₯νλ ν€μ λν΄μ ν΄μκ°μ κ³μ°νκ³ ν΄μκ°μ μ΄μ©νμ¬ ν€-κ° μμ κ°μ©ν 리λμλ‘ κ· λ±νκ² λΆμ°νλ €κ³ λ Έλ ₯ν©λλ€.
맡νΌμμ μΆλ ₯ν ν€-κ° μμ κ°μ κ³μ°νμ¬ λ¦¬λμλ₯Ό μ ννλ κ²μ νν°μ λμ μν
SORT BYλ 리λμ μμμ λ°μ΄ν° μ λ ¬μ μ μ΄νλ λ°λ©΄ DISTRIBUTE BYλ 리λμκ° μ²λ¦¬ν λ‘μ°λ₯Ό μ΄λ»κ² λ°λμ§ μ μ΄νλ€λ μ μμ GROUP BYμ²λΌ λμν©λλ€.
νμ΄λΈλ SORT BY μ μ μ DISTRIBUTE BY μ μ μ¬μ©ν κ²μ μꡬνλ―λ‘ μ£Όμν΄μΌν©λλ€.
SORT BY μ μ μ¬λ¬ 리λμλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ λ ¬νλ λ°λ©΄ ORDER BY μ μ λ¨μΌ 리λμλ₯Ό μ¬μ©νμ¬ λͺ¨λ λ°μ΄ν°λ₯Ό ν¨κ» μ λ ¬νκΈ° λλ¬Έμ λμ©λ λ°μ΄ν° μΈνΈλ₯Ό μ λ ¬ν΄μΌ ν λ ORDER BY λμ SORT BYλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. λ°λΌμ λ§μ μμ μ λ ₯μ λν΄ ORDER BYλ₯Ό μ¬μ©νλ©΄ μ€ννλ λ° λ§μ μκ°μ΄ 걸립λλ€.
CLUSTER BY
https://sqlrelease.com/sort-by-order-by-distribute-by-and-cluster-by-in-hive
DISTRIBUTE BY ... SORT BY λλ κ°λ¨ν μ¬μ©νλ CLUSTER BY μ μ μΆλ ₯ νμΌ κ°μ μ 체 μ λ ¬μ μ΄λ£¨λ©΄μ SORT BYμ λ³λ ¬ μ²λ¦¬λ₯Ό μ¬μ©νλλ‘ νλ λ°©λ²
λ°μ΄ν° νλ³Έμ λ§λλ 쿼리
λ§€μ° ν° λ°μ΄ν°μ μ λν΄μ μ 체λ₯Ό μ¬μ©νλ κ²μ΄ μλλΌ μ΄λ€ 쿼리λ₯Ό μννμ¬ λμ¨ κ²°κ³Όλ₯Ό λν νλ³ΈμΌλ‘ νμ¬ μμ νκ³ μ νλ κ²½μ°κ° μ’ μ’ μμ΅λλ€.
νμ΄λΈλ ν μ΄λΈμ λ²ν·μΌλ‘ ꡬμ±νμ¬ νλ³Έμ λ§λ λ μΏΌλ¦¬λ‘ μ΄λ₯Ό μ§μν©λλ€.
λ²ν· ν μ΄λΈμ λν μ λ ₯ νΈλ£¨λ
pruning(νΈλ£¨λ)μ λ°μ΄ν° λΆμ μμ μ λΆνμν λ°μ΄ν°λ₯Ό 미리 μλΌλ΄λ μμ μ λ§ν©λλ€. κ°μ§μΉκΈ°, μΆλ¦¬κΈ° μ λλ‘ λ²μν μ μμΌλ λ°μ΄ν°λ² μ΄μ€λ λ°μ΄ν° λΆμμ λ§μ΄ μ¬μ©νλ μ©μ΄μ λλ€.
https://www.amazon.com/Programming-Hive-Warehouse-Language-Hadoop/dp/1449319335
https://www.amazon.com/Hadoop-Definitive-Guide-Tom-White/dp/1449311520