2014-09-25 2 views
0

나는 내가 네티에서, 코드가 제대로 작동하지하려고 할 때 내가, https://gist.github.com/johngrimes/408559Netezza에서 시간 차원을 만드는 방법?

모든 MySQL의에서 완벽 링크에서

를 얻을 수 있지만, 시간하는 치수를 구축하기 위해 예를 들어 SQL을 발견, 몇 가지 오류가 표시입니다 , 등등, " '', '' ')'USING' or 기대 '또는"와 같은

내가

CREATE TABLE numbers_small (number INT); 
INSERT INTO numbers_small VALUES (0); 
INSERT INTO numbers_small VALUES (1); 
INSERT INTO numbers_small VALUES (2); 
INSERT INTO numbers_small VALUES (3); 
INSERT INTO numbers_small VALUES (4); 
INSERT INTO numbers_small VALUES (5); 
INSERT INTO numbers_small VALUES (6); 
INSERT INTO numbers_small VALUES (7); 
INSERT INTO numbers_small VALUES (8); 
INSERT INTO numbers_small VALUES (9); 

CREATE TABLE numbers (number BIGINT); 
INSERT INTO numbers 
SELECT thousands.number * 1000 + hundreds.number * 100 + tens.number * 10 + ones.number 
    FROM numbers_small thousands, numbers_small hundreds, numbers_small tens, numbers_small ones 
LIMIT 1000000; 



CREATE TABLE D_TIME_DAILY_TES (
    TIME_ID   BIGINT PRIMARY KEY, 
    TANGGAL    DATE NOT NULL, 
    TAHUN    INT NOT NULL, 
    BULAN   CHAR(10) NOT NULL, 
    HARI  CHAR(10) NOT NULL, 
    LAST_UPDATE timestamp NOT NULL, 
    constraint D_TIME_DAILY_TES UNIQUE KEY (TANGGAL) 
); 


INSERT INTO D_TIME_DAILY_TES (TIME_ID, TANGGAL, LAST_UPDATE) 
SELECT number, DATE_ADD('2010-01-01', INTERVAL number DAY), CURRENT_TIMESTAMP 
    FROM numbers 
    WHERE DATE_ADD('2010-01-01', INTERVAL number DAY) BETWEEN '2014-01-01' AND '2014-12-31' 
    ORDER BY number; 


UPDATE D_TIME_DAILY_TES SET 
    HARI = DATE_FORMAT(TANGGAL, "%W"), 
    BULAN =  DATE_FORMAT(TANGGAL, "%M"), 
    TAHUN =  DATE_FORMAT(TANGGAL, "%Y"), 
    LAST_UPDATE = CURRENT_TIMESTAMP; 

을 수정 시도했지만 여전히 작동하지 않을 것 :(

어떻게 해결할 수 있습니까?

xx :

답변

0

구문 관점에서 볼 때 두 가지 문제점이 있습니다.

첫 번째 테이블 D_TIME_DAILY_TES이 생성됩니다.

TANGGAL의 고유 키 제약 조건을 제거하면 올바르게 실행됩니다.

CREATE TABLE D_TIME_DAILY_TES 
    (
     TIME_ID BIGINT PRIMARY KEY, 
     TANGGAL DATE NOT NULL, 
     TAHUN INT NOT NULL, 
     BULAN CHAR(10) NOT NULL, 
     HARI CHAR(10) NOT NULL, 
     LAST_UPDATE TIMESTAMP NOT NULL 
    ); 

두 번째 테이블은 동일한 테이블을 채우는 데 사용됩니다. DATE_ADD는 날짜에 정수를 추가 할 필요가 없으며 실제로 존재하지 않습니다. 대신이 양식을 사용할 수 있습니다. D_TIME_DAILY_TES에 대해 정의한 모든 열은 NOT NULL이므로 3 개의 열만 삽입하므로이 삽입은 실제로 실패합니다. 따라서 수정해야합니다.

INSERT INTO D_TIME_DAILY_TES 
    (
     TIME_ID, 
     TANGGAL, 
     LAST_UPDATE 
    ) 
    SELECT   NUMBER, 
    '2010-01-01'::DATE + NUMBER, 
    CURRENT_TIMESTAMP 
    FROM numbers 
    WHERE '2010-01-01'::DATE + NUMBER BETWEEN '2014-01-01'::DATE AND '2014-12-31'::DATE 
    ORDER BY NUMBER;