如何在纯sql中使用apachephoenix升级时间戳

avwztpqn  于 2021-06-09  发布在  Hbase
关注(0)|答案(5)|浏览(370)

我们正在使用apachephoenix与hbase安装进行交互。我们选择phoenix是因为它使我们能够向hbase列添加数据类型,并且使您可以使用plain SQL 与底层数据库交互。
使用phoenix可以将表列的类型声明为 TIMESTAMP (请参阅此链接)。例如,让我们声明下表:

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

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

neskvpey

neskvpey1#

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

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

plupiseo2#

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

7vux5j2d3#

好吧,去吧 UPSERT 类型的列的值 TIMESTAMP 在普通的老式sql中,必须恢复xml标准日期格式。按照此格式,时间戳值如下所示:

2002-05-30T09:30:10.5

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

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

请注意,必须将timestamp值作为格式正确的 VARCHAR .

mefy6pfw

mefy6pfw4#

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

ccgok5k5

ccgok5k55#

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

相关问题