如何在netezza中设置时间维度?

问题描述 投票:0回答:1

我发现了一个用于建立时间维度的示例sql,我从此链接https://gist.github.com/johngrimes/408559中获得

一切在MySQL中都是完美的,

但是,当我在netezza中尝试时,代码无法正常工作,会出现一些错误,例如“ expecting 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;

但是它仍然不起作用:(

我该如何解决?

mysql sql netezza
1个回答
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
   );

第二个是在INSERT中填充相同的表。 DATE_ADD不需要向日期添加整数,并且实际上不存在。您可以改用此表格。请注意,此插入实际上将失败,因为我们仅插入三列,而您为D_TIME_DAILY_TES定义的所有列都不为NULL,因此您也需要对其进行修复。

  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;
© www.soinside.com 2019 - 2024. All rights reserved.