如何在普通 SQL 中使用 Apache Phoenix 更新时间戳
How to upsert a Timestamp using Apache Phoenix in plain SQL
我们正在使用 Apache Phoenix 与我们的 HBase 安装进行交互。我们选择 Phoenix 是因为它使我们能够向 HBase 列添加数据类型,并且因为它使您能够使用普通 SQL
与底层数据库进行交互。
使用 Phoenix,您可以将 table 列的类型声明为 TIMESTAMP
(请参阅 this link)。例如,声明以下 table:
Create table T1
(
T1_KEY VARCHAR(10) NOT NULL,
TMSTP TIMESTAMP,
CONSTRAINT PK_T1 PRIMARY KEY (T1_KEY)
);
问题是:在这样的 table 中使用普通旧 SQL 的 UPSERT
一行的正确语法是什么?您以哪种格式将时间戳值传递给 TMSTP
列?
好吧,要 UPSERT
一个值到 TIMESTAMP
类型的列(在普通旧 SQL 中),您必须恢复 XML standard date format。按照这种格式,时间戳值如下所示:
2002-05-30T09:30:10.5
然后,对 table T1
的 UPSERT
操作将是
UPSERT INTO T1 (T1_KEY, TMSTP) VALUES ('0123456789', '2002-05-30T09:30:10.5');
请注意,您必须以格式正确的方式传递时间戳值 VARCHAR
。
除非您需要纳秒级粒度,否则请坚持使用 DATE 类型,它可以为您提供毫秒级粒度和更好的性能。
您还可以将时间戳或日期作为表示自纪元以来的毫秒数的数字传递。这样,您就不必在应用程序中格式化日期字符串。
UPSERT INTO T1 (T1_KEY, TMSP)
select '0123456789', current_date()
from <some table that exists and has rows in in>
limit 1;
正如 rbinnun 所说,timestamp
前缀对我有用。
UPSERT INTO T1 (T1_KEY, TMSTP) VALUES ('0123456789', timestamp'2002-05-30T09:30:10.5');
我们正在使用 Apache Phoenix 与我们的 HBase 安装进行交互。我们选择 Phoenix 是因为它使我们能够向 HBase 列添加数据类型,并且因为它使您能够使用普通 SQL
与底层数据库进行交互。
使用 Phoenix,您可以将 table 列的类型声明为 TIMESTAMP
(请参阅 this link)。例如,声明以下 table:
Create table T1
(
T1_KEY VARCHAR(10) NOT NULL,
TMSTP TIMESTAMP,
CONSTRAINT PK_T1 PRIMARY KEY (T1_KEY)
);
问题是:在这样的 table 中使用普通旧 SQL 的 UPSERT
一行的正确语法是什么?您以哪种格式将时间戳值传递给 TMSTP
列?
好吧,要 UPSERT
一个值到 TIMESTAMP
类型的列(在普通旧 SQL 中),您必须恢复 XML standard date format。按照这种格式,时间戳值如下所示:
2002-05-30T09:30:10.5
然后,对 table T1
的 UPSERT
操作将是
UPSERT INTO T1 (T1_KEY, TMSTP) VALUES ('0123456789', '2002-05-30T09:30:10.5');
请注意,您必须以格式正确的方式传递时间戳值 VARCHAR
。
除非您需要纳秒级粒度,否则请坚持使用 DATE 类型,它可以为您提供毫秒级粒度和更好的性能。
您还可以将时间戳或日期作为表示自纪元以来的毫秒数的数字传递。这样,您就不必在应用程序中格式化日期字符串。
UPSERT INTO T1 (T1_KEY, TMSP)
select '0123456789', current_date()
from <some table that exists and has rows in in>
limit 1;
正如 rbinnun 所说,timestamp
前缀对我有用。
UPSERT INTO T1 (T1_KEY, TMSTP) VALUES ('0123456789', timestamp'2002-05-30T09:30:10.5');