Post List

레이블이 Trino인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Trino인 게시물을 표시합니다. 모든 게시물 표시

2025년 8월 17일 일요일

오.. 아래 글에 따르면


TPC-DS Benchmark: Trino 476, Spark 4.0.0, and Hive 4 on MR3 2.1 (MPP vs MapReduce)

https://mr3docs.datamonad.com/blog/2025-07-02-performance-evaluation-2.1/


Hive 4 on MR3 2.1가 Trino와 비슷한 성능을 보여주고 있다.

성능적으로 보면 훌륭하구만.. 


하지만, Trino 아직도 Trino가 우위에 있다고 본다. 

  • Data Federation
  • Row나 Array 등의 구조화된 데이터 처리 지원
  • 기타 편리한 함수들
  • 설치의 편안함



 


2025년 6월 21일 토요일

MATCH_RECOGNIZE

Contents

1 예제: 퍼널 분석
2 예제: 증감 패턴
3 참고자료



시퀀스 패턴 분석에 유용하다.


1 예제: 퍼널 분석 #

  • 1,2,5,6 순서대로 로그가 남은 캐릭터를 조회하고 싶다.
  • 중간에 왔다갔다 헤도 상관없다.

with gamelog(pc_id, log_date, log_no) 
as 
(
    values
    ('pc_id_1', DATE '2020-05-11', 1),
    ('pc_id_1', DATE '2020-05-12', 2),
    ('pc_id_1', DATE '2020-05-13', 3),
    ('pc_id_1', DATE '2020-05-14', 3),
    ('pc_id_1', DATE '2020-05-15', 4),
    ('pc_id_1', DATE '2020-05-16', 5),
    ('pc_id_1', DATE '2020-05-17', 4),
    ('pc_id_1', DATE '2020-05-18', 6),
    ('pc_id_1', DATE '2020-05-18', 5),
    ('pc_id_2', DATE '2020-05-11', 1),
    ('pc_id_2', DATE '2020-05-12', 2),
    ('pc_id_2', DATE '2020-05-13', 3),
    ('pc_id_2', DATE '2020-05-14', 3),
    ('pc_id_2', DATE '2020-05-15', 4),
    --('pc_id_2', DATE '2020-05-16', 5),
    ('pc_id_2', DATE '2020-05-17', 4),
    ('pc_id_2', DATE '2020-05-18', 6)  
)
select * 
from gamelog
match_recognize
(
    partition by pc_id order by log_date
    measures
        prev(log_date) as prev_log_date
    ,   match_number() as match_no
    ,   classifier() as class
    --one row per match --패턴에 맞는 하나의 row만
    all rows per match --패턴에 맞는 모든 row
    --after match skip past last row
    pattern(a+ z* b+ z* c+ z* d+)
    define
        a as a.log_no = 1
    ,   b as b.log_no = 2
    ,   c as c.log_no = 5
    ,   d as d.log_no = 6
    ,   z as 1=1
)
where class <> 'Z'


2 예제: 증감 패턴 #

  • 시작 -> 감소 -> 증가 패턴

with orders(customer_id, order_date, price) 
as 
(
    values
    ('cust_1', DATE '2020-05-11', 100),
    ('cust_1', DATE '2020-05-12', 200),
    ('cust_2', DATE '2020-05-13', 100),
    ('cust_1', DATE '2020-05-14', 100),
    ('cust_2', DATE '2020-05-15',  90),
    ('cust_1', DATE '2020-05-16',  50),
    ('cust_1', DATE '2020-05-17', 100),
    ('cust_2', DATE '2020-05-18', 120)
)
select 
    customer_id
,   order_date
,   price
,   start_price
,   down_price
,   up_price
from orders
match_recognize
(
    partition by customer_id order by order_date
    measures
        start.price as start_price --시작값
    ,   order_date as order_date
    ,   price as price
    ,   last(up.price) as up_price --최고치 중 마지막값
    ,   last(down.price) as down_price --최저치 중 마지막값
    ,   match_number() as match_no
    ,   classifier() as class
    one row per match --패턴에 맞는 하나의 row만
    --all rows per match --패턴에 맞는 모든 row
    --after match skip past last row
    after match skip to next row
    pattern(start down{1} up{1})
    define
        up as price > prev(price)
    ,   down as price < prev(price)
)


3 참고자료 #