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

2015년 5월 19일 화요일

[PostgreSQL 8.2] 사용자 정의 함수 DateDiff 만들기 (Create DateDiff Function Like SQL Server)

* 문제: Greenplum에서 DateDiff 함수가 존재하지 않을 경우

* 해결: 간단한 사용자 정의 함수를 만들어 사용한다.

사용자 정의 함수 생성
CREATE OR REPLACE FUNCTION simple_datediff(difftype character varying, date1 date, date2 date)
RETURNS integer AS
$BODY$
DECLARE
DateValue Double Precision := 0;
ReturnValue Integer := 0;
flag Integer := 1 ;
af_date date;
bf_date date;
BEGIN
IF date2 < date1 THEN
flag := -1 ;
af_date := date1;
bf_date := date2;
ELSE
af_date := date2;
bf_date := date1;
END IF;

IF lower($1) IN ('yy','yyyy','year') THEN
DateValue := EXTRACT(YEAR FROM af_date) - EXTRACT(YEAR FROM bf_date);

ELSEIF lower($1) IN ('m','mm','month') THEN
DateValue := (EXTRACT(YEAR FROM af_date) - EXTRACT(YEAR FROM bf_date))*12 + (EXTRACT(month FROM af_date) - EXTRACT(month FROM bf_date));

ELSEIF lower($1) IN ('wk','ww','week') THEN
DateValue := TRUNC((EXTRACT(day from (af_date::timestamp - bf_date::timestamp)) + EXTRACT(dow from (bf_date::timestamp)))/7);

ELSEIF lower($1) IN ('d','dd','day') THEN
DateValue := af_date - bf_date;
END IF;

ReturnValue := CAST(DateValue AS Integer) * flag;

RETURN ReturnValue;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
함수 사용
select simple_datediff('year','2014-12-31','2015-02-01')
select simple_datediff('month','2014-12-31','2015-02-01')
select simple_datediff('week','2014-12-31','2015-01-01')
select simple_datediff('week','2015-01-31','2015-02-01')
select simple_datediff('day','2014-12-31','2015-02-01')

[PostgreSQL 8.2] 지연 쿼리( Postgres Delay Execution )

* 문제: Greenplum에서 일정 시간동안 쿼리 문 실행을 정지 시켜야 할 경우

* 해결: pg_sleep 함수 사용하기

* Step1. 일반적인 쿼리
SELECT pg_sleep(seconds);
예제
SELECT CURRENT_TIMESTAMP;
SELECT pg_sleep(2);
SELECT CURRENT_TIMESTAMP;
결과

"2015-03-30 21:31:32.54101+09"

"2015-03-30 21:33:32.54121+09"

* Step2. 함수 내부에서 사용할 경우
CREATE OR REPLACE FUNCTION test_pg_sleep()
           RETURNS void AS
$BODY$
begin
           perform pg_sleep(2);
​end;
$BODY$
           LANGUAGE plpgsql VOLATILE;

추천 게시물

python: SVD(Singular Value Decomposition)로 간단한 추천시스템 만들기( feat. surprise )

svd_example In [15]: # !pip install surprise In [21]: from...