Big Data/HBase&Phoenix

Phoenix - Row timestamp

신씅 2016. 8. 15. 23:03
Phoenix v4.6 부터는 phoenix 컬럼에 HBase 의 native row timestamp 를 맵핑할 수 있는 방법을 제공합니다.
이는 HBase 에서 제공하는 시간 범위에 대한 다양한 최적화의 이점을 얻을 수 있습니다.

ROW_TIMESTAMP 로 설계된 컬럼은 특정 제약을 가지게 됩니다.
  • TIME, DATE, TIMESTAMP, UNSIGNED_LONG 타입의 primary key 컬럼만 ROW_TIMESTAMP 로 사용 가능
  • 하나의 primary key 컬럼만 ROW_TIMESTAMP 로 사용 가능
  • 컬럼의 값은 null 이 될 수 없음 (HBase 의 row timestamp 와 직접 맵핑되기 때문에)
  • 테이블을 생성할 때만 선언 가능
  • ROW_TIMESTAMP 컬럼의 값은 음수는 불가 (epoch time 은 0보다 작을 수 없기 때문에)

row timestamp 컬럼을 사용하는 테이블에 upsert 할 때, row timestamp 컬럼의 직정 설정하거나 Phoenix 가 자동으로 설정하도록 할 수 있다.
직접 설정하지 않으면, Phoenix 는 서버의 시간을 이용하여 설정한다.

Sample Schema

CREATE TABLE DESTINATION_METRICS_TABLE (
    CREATED_DATE NOT NULL DATE
  , METRIC_ID NOT NULL CHAR(15)
  , METRIC_VALUE LONG CONSTRAINT PK PRIMARY KEY(CREATED_DATE ROW_TIMESTAMP, METRIC_ID)
)
SALT_BUCKETS = 8;

// row timestamp 직접 설정
UPSERT INTO DESTINATION_METRICS_TABLE
VALUES (?, ?, ?)

// row timestamp 를 서버시간으로 자동 설정
UPSERT INTO DESTINATION_METRICS_TABLE (METRIC_ID, METRIC_VALUE)
VALUES (?, ?)

// SOURCE METRICS_TABLE 의 DATE 컬럼을 row timestamp 로 설정
UPSERT INTO DESTINATION_METRICS_TABLE (CREATED_DATE, METRICS_ID, METRIC_VALUE)
SELECT DATE, METRICS_ID, METRIC_VALUE FROM SOURCE_METRICS_TABLE

// 서버 시간으로 자동 설정
UPSERT INTO DESTINATION_METRICS_TABLE (METRICS_ID, METRIC_VALUE)
SELECT METRICS_ID, METRIC_VALUE FROM SOURCE_METRICS_TABLE

Row timestamp 컬럼으로 필터링 할 때, rowkey 컬럼을 위한 일반적인 최적화 외에도 min/max 시간 범위를 적절하게 설정한다.
이 시간 범위를 통해, 서버의 HBase는 시간 범위에 해당되지 않는 저장된 파일들을 스킵하기 때문에, data를 tailing 할 때, 특히 성능이 좋다.