presto_tuning
Last updated
Last updated
Partitioned
Partitioned : 쿼리μ μ°Έμ¬νλ κ° λ Έλλ λ°μ΄ν°μ μΌλΆμμ ν΄μ ν μ΄λΈμ μμ±ν©λλ€.
Prestoμμ μ¬μ©λλ κΈ°λ³Έ μ‘°μΈ μκ³ λ¦¬μ¦μ λΆμ°λ PARTITION μ‘°μΈμ λλ€. μ΄ μκ³ λ¦¬μ¦μ μ‘°μΈ ν€μ ν΄μ κ°μ μ¬μ©νμ¬ μΌμͺ½ ν μ΄λΈκ³Ό μ€λ₯Έμͺ½ ν μ΄λΈμ λͺ¨λ λΆν ν©λλ€. λΆν λ μ‘°μΈμ 쿼리λ₯Ό μ²λ¦¬νκΈ° μν΄ μ¬λ¬ μμ μ λ Έλλ₯Ό μ¬μ©ν©λλ€.
μΌλ°μ μΌλ‘ λ λΉ λ₯΄κ³ λ μ μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©ν©λλ€.
-- SET SESSION join_distribution_type = 'PARTITIONED'
Broadcast
Broadcast : 쿼리μ μ°Έμ¬νλ κ° λ Έλλ λͺ¨λ λ°μ΄ν°μμ ν΄μ ν μ΄λΈμ μμ±ν©λλ€.(λ°μ΄ν°λ κ° λ Έλμ 볡μ λ¨).
μ‘°μΈ ν μ΄λΈ μ€ νλκ° λ§€μ° μμ μΌλΆ κ²½μ° λΆμ° PARTITION μ‘°μΈμ μ¬μ©νμ¬ λ€νΈμν¬λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λΆν νλ μ€λ²ν€λκ° μ‘°μΈ μμ μ μ°Έμ¬νλ λͺ¨λ λ Έλμ μ 체 ν μ΄λΈμ λΈλ‘λμΊμ€νΈνλ μ΄μ μ μ΄κ³Όν μ μμ΅λλ€. μ΄λ¬ν κ²½μ° 'BROADCAST' μ‘°μΈμ΄ λ μ μνλ μ μμ΅λλ€.
BROADCAST μ‘°μΈμ μ¬μ©νλ κ²½μ° μ‘°μΈ μ μμ λ¨Όμ ν° ν μ΄λΈμ μ§μ νλ€μ λ§€μ§ μ½λ©νΈλ₯Ό μ§μ νμ¬ BROADCAST μ‘°μΈμ νμ±νν μ μμ΅λλ€.
-- SET SESSION join_distribution_type = 'BROADCAST'
μ΄ μ΅μ μ μ¬λ°λ₯Έ μ‘°μΈ ν μ΄λΈμ΄ λͺ¨λ λ Έλμ 볡μ¬λλ―λ‘ λ λ§μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©ν©λλ€.
μ λ ¬ μκ³ λ¦¬μ¦
ORDER BY μ μ΄ μλ 쿼리μ κ²½μ° Prestoλ κΈ°λ³Έμ μΌλ‘ λΆμ° μ λ ¬μ μ¬μ©ν©λλ€. μ λ ¬ μμ μ μ¬λ¬ λ Έλμμ λ³λ ¬λ‘ μ€νλλ©° λ¨μΌ λ Έλκ° μ΅μ’ κ²°κ³Όλ₯Ό λ³ν©ν©λλ€.
κ·Έλ¬λ λ¨μΌ λ Έλ μ λ ¬ μμ μ΄ λ μ μνλλ κ²½μ°κ° μμ μ μμ΅λλ€. μ΄λ¬ν κ²½μ° λ§€μ§ μ½λ©νΈλ₯Ό μ¬μ©νμ¬ λΆμ° μ λ ¬μ λΉνμ±νν μ μμ΅λλ€.
-- set distributed_sort=false
λΆμ° μ λ ¬μ λΉνμ±ννλ©΄ λ¨μΌ λ Έλμ λ©λͺ¨λ¦¬κ° λ λ§μ΄ μ¬μ©λ©λλ€. μ΅λ λ©λͺ¨λ¦¬ μ νμΌλ‘ μΈν΄ μΏΌλ¦¬κ° μ€ν¨ν μ μμ΅λλ€.
CREATE TABLE AS SELECT λ¬Έμ μ¬μ©νμ¬ μΏΌλ¦¬ κ²°κ³Ό μΆλ ₯ νλ‘μΈμ€λ₯Ό λ³λ ¬νν μ μμ΅λλ€.
쿼리λ₯Ό μ€ννκΈ° μ μ ν μ΄λΈμ DROPνλ©΄ μ±λ₯μ΄ ν¬κ² ν₯μν©λλ€. κ²°κ³Ό μΆλ ₯ μ±λ₯μ SELECT *λ₯Ό μ€ννλ κ²λ³΄λ€ 5λ°° λΉ λ¦ λλ€.
DROP TABLEμ μ¬μ©νμ§ μκ³ Prestoλ JSON ν μ€νΈλ₯Ό μ¬μ©νμ¬ μΏΌλ¦¬ κ²°κ³Όλ₯Ό ꡬ체νν©λλ€. κ·Έλ¦¬κ³ κ²°κ³Ό ν μ΄λΈμ 100GBμ λ°μ΄ν°κ° μμΌλ©΄ μ½λλ€μ΄ν°λ 쿼리 κ²°κ³Όλ₯Ό μ μ₯νκΈ° μν΄ 100GB μ΄μμ JSON ν μ€νΈλ₯Ό μ μ‘ν©λλ€. λ°λΌμ μ§μ κ³μ°μ΄ κ±°μ λλλ JSON κ²°κ³Όλ₯Ό μΆλ ₯νλ λ° μκ°μ΄ μ€λ 걸립λλ€.
1.쿼리 맨 μμ DROP TABLE λ¬Έμ μΆκ°ν©λλ€.
2.CREATE TABLE(ν μ΄λΈ) AS SELECT μ¬μ©ν©λλ€.
Prestoλ κ° μΏΌλ¦¬μ λ©λͺ¨λ¦¬ μ¬μ©λμ μΆμ νλλ° λ©λͺ¨λ¦¬λ₯Ό λ§μ΄ μ¬μ©νλ μμ λͺ©λ‘μ λλ€.
distinct
approx_distinct() κ°μ κ·Όμ¬ μ§κ³ ν¨μ μ¬μ©ν©λλ€.
COUNT(DISTINCT x)λ₯Ό μ¬μ©νλ λμ approx_distinct(x)λ₯Ό μ¬μ©νμ¬ λλ¦° λ©λͺ¨λ¦¬ μλͺ¨ μ°μ°μλ₯Ό μ¬μ©νμ§ λ§μμΌ ν©λλ€
UNION
UNION λμ μ UNION ALLμ μ¬μ©ν©λλ€.
ORDER BY
ORDER BYμ ν¨κ» LIMIT μ¬μ©ν©λλ€.
GROUP BY (of many columns)
GROUP BY μ λ΄μ μΉ΄λλλ¦¬ν° κ³ λ €
GROUP BY λ΄μ νλ λͺ©λ‘μ λμ μΉ΄λλλ¦¬ν° μμλ‘ μ μ€νκ² μ λ ¬νμ¬ GROUP BY κΈ°λ₯μ μ±λ₯μ ν₯μ
μ’μ 쿼리 : SELECT GROUP BY uid, gender
λμ 쿼리 : SELECT GROUP BY gender, uid
GROUP BY μ΄μ λ¬Έμμ΄ λμ μ«μλ₯Ό μ¬μ©ν©λλ€. μ«μλ λ¬Έμμ΄λ³΄λ€ μ μ λ©λͺ¨λ¦¬λ₯Ό νμλ‘ νκ³ λΉκ΅κ° λ λΉ λ₯΄κΈ° λλ¬Έμ λλ€.
joins
ν° ν μ΄λΈλΆν° μμ ν μ΄λΈ μμΌλ‘ ν μ΄λΈμ μ‘°μΈν΄μΌ ν©λλ€.
λλ±νμ§ μμ μ‘°μΈ μ‘°κ±΄μ μ¬μ©νλ©΄ 쿼리 μ²λ¦¬ μλκ° λλ €μ§λλ€.
Prestoλ κΈ°λ³Έμ μΌλ‘ λΈλ‘λμΊμ€νΈ μ‘°μΈμ μννμ¬ μΌμͺ½ ν μ΄λΈμ μ¬λ¬ μμ μ λ Έλλ‘ λΆν ν λ€μ μ€λ₯Έμͺ½ ν μ΄λΈμ μ 체 볡μ¬λ³Έμ νν°μ μ΄ μλ μμ μ λ Έλλ‘ λ³΄λ λλ€. μ€λ₯Έμͺ½ μ¬μ΄λ ν μ΄λΈμ΄ ν¬κ³ μμ μ λ Έλμ λ©λͺ¨λ¦¬μ λ§μ§ μμΌλ©΄ μ€λ₯κ° λ°μν©λλ€.
λΆμ° μ‘°μΈ μ¬μ©
μΏΌλ¦¬κ° μ¬μ ν μλνμ§ μμΌλ©΄ μΈμ μμ±μ μ€μ νλ λ§€μ§ μ£Όμμ μΆκ°νμ¬ λΆμ° μ‘°μΈμ μ¬μ©ν©λλ€.
λΆμ° μ‘°μΈ μκ³ λ¦¬μ¦ μ μ‘°μΈ ν€μ ν΄μ κ°μ λΆν ν€λ‘ μ¬μ©νμ¬ μΌμͺ½ λ° μ€λ₯Έμͺ½ ν μ΄λΈμ λͺ¨λ λΆν ν©λλ€. μ€λ₯Έμͺ½ μ¬μ΄λ ν μ΄λΈμ΄ ν¬λλΌλ μλν©λλ€. κ·Έλ¬λ λ€νΈμν¬ λ°μ΄ν° μ μ‘ νμλ₯Ό λ릴 μ μμΌλ©° μΌλ°μ μΌλ‘ λΈλ‘λμΊμ€νΈ μ‘°μΈλ³΄λ€ λ립λλ€.
μ΄ μ μ₯ νΉμ±
λ무 λ§μ μ΄μ μ ννλ©΄ 쿼리 μ²λ¦¬ μλκ° λλ €μ§λλ€.
쿼리 κ²°κ³Ό ν¬κΈ°
λ무 λ§μ νμ μμ±νλ €λ©΄ μκ°μ΄ 걸립λλ€. λμ CREATE TABLE AS... λλ INSERT INTO λλ result_output_redirect λ§€μ§ μ½λ©νΈλ₯Ό μ¬μ©ν©λλ€.
νμν μ΄ μ§μ
μκ° κΈ°λ° νν°μ λ νμ©
μΌλ ¨μ LIKE μ μ νλμ λ¨μΌ regexp_like μ λ‘ μ§κ³
https://trino.io/Presto_SQL_on_Everything.pdf
https://api-docs.treasuredata.com/en/tools/presto/presto_performance_tuning/