如何向上插入行\u时间戳

eqfvzcg8  于 2021-06-08  发布在  Hbase
关注(0)|答案(1)|浏览(481)

我正在使用hbase 1.1、phoenix 4.7,下面是关于行时间戳的链接(将hbase的本机行时间戳Map到phoenix列):https://phoenix.apache.org/rowtimestamp.html
我创建了一个示例表

CREATE TABLE DESTINATION_METRICS_TABLE
(CREATED_DATE DATE NOT NULL,
METRIC_ID CHAR(15) NOT NULL,
METRIC_VALUE LONG
CONSTRAINT PK PRIMARY KEY(CREATED_DATE ROW_TIMESTAMP, METRIC_ID))
SALT_BUCKETS = 8;

再往上插一行

UPSERT INTO DESTINATION_METRICS_TABLE (METRIC_ID, METRIC_VALUE) VALUES (?, ?) - this sets the value of CREATED_DATE to the server side time

但是phoenix似乎不会自动处理创建日期的行时间戳。
我的java代码不起作用:

String sql = "UPSERT INTO DESTINATION_METRICS_TABLE (METRIC_ID, METRIC_VALUE) VALUES (?, ?)";

ps = connection.prepareStatement(sql);
connection.setAutoCommit(false);

ps.setString(1, "asdasd");
ps.setString(2, "123123");

ps.executeUpdate()

我得到一个错误:

org.apache.phoenix.schema.TypeMismatchException: ERROR 203 (22005): Type mismatch. VARCHAR cannot be coerced to BIGINT

有没有人给我举一个关于行的语法升级的例子?
先谢谢你。

ryoqjall

ryoqjall1#

在我的环境中尝试了相同的create/upsert语句。首先,create语句给出了度量值列的以下错误问题。
错误:错误201(22000):非法数据。不支持的sql类型:long(state=22000,code=201)
我将类型改为double并创建表,upsert也起作用。问题出现在下面的一行中,该行正在为数值类型的列设置字符串。

ps.setString(2, "123123");

相关问题