如何在纯SQL中使用Apache Phoenix来复制时间戳

时间:2016-03-10 06:52:08

标签: apache hbase upsert phoenix

我们正在使用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)
);

问题是:使用普通旧SQL在这样的表中使用UPSERT行的正确语法是什么?您可以使用哪种格式将时间戳值传递给TMSTP列?

5 个答案:

答案 0 :(得分:1)

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

2002-05-30T09:30:10.5

然后,对表UPSERT的结果T1操作将为

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

UPSERT INTO T1 (T1_KEY, TMSP) 
  select '0123456789', current_date() 
  from <some table that exists and has rows in in> 
  limit 1; 

答案 4 :(得分:0)

正如rbinnun所说,给timestamp前缀对我有用。

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