代码之家  ›  专栏  ›  技术社区  ›  riccardo.cardin

如何在纯SQL中使用Apache Phoenix升级时间戳

  •  1
  • riccardo.cardin  · 技术社区  · 8 年前

    我们正在使用Apache Phoenix与我们的HBase安装进行交互。我们选择Phoenix是因为它使我们能够将数据类型添加到HBase列中,并且使您可以使用纯文本 SQL 以与底层数据库交互。

    使用Phoenix,可以将表列的类型声明为 TIMESTAMP (参见 this 链接)。例如,让我们声明下表:

    Create table T1
    (
        T1_KEY VARCHAR(10) NOT NULL,
        TMSTP TIMESTAMP,
        CONSTRAINT PK_T1 PRIMARY KEY (T1_KEY)
    );
    

    问题是:哪个是正确的语法 UPSERT 这样一个表中的一行使用普通的旧SQL?您要以何种格式传递时间戳值 TMSTP

    5 回复  |  直到 8 年前
        1
  •  1
  •   riccardo.cardin    8 年前

    好吧,到 UPSERT 类型的列的值 TIMESTAMP 在普通的旧SQL中,您必须恢复 XML standard date format 。按照此格式,时间戳值如下所示:

    2002-05-30T09:30:10.5
    

    然后 向上插入 对表的操作 T1

    UPSERT INTO T1 (T1_KEY, TMSTP) VALUES ('0123456789', '2002-05-30T09:30:10.5');
    

    请注意,您必须将时间戳值作为格式正确的 VARCHAR .

        2
  •  1
  •   James Taylor    8 年前

    除非您需要纳秒级的粒度,否则请坚持使用DATE类型,它可以为您提供毫秒级的粒度和更好的性能。

        3
  •  0
  •   kliew    8 年前

    您还可以将时间戳或日期作为表示自epoch以来的毫秒数传递。这样,您就不必在应用程序中格式化日期字符串。

        4
  •  0
  •   Paul Roub jim    7 年前
    UPSERT INTO T1 (T1_KEY, TMSP) 
      select '0123456789', current_date() 
      from <some table that exists and has rows in in> 
      limit 1; 
    
        5
  •  0
  •   Erwan    5 年前

    正如rbinnun所说,前缀为 timestamp 为我工作。

    UPSERT INTO T1 (T1_KEY, TMSTP) VALUES ('0123456789', timestamp'2002-05-30T09:30:10.5');