如何upsert row_timestamp Phoenix Hbase

时间:2018-05-23 03:41:34

标签: hbase phoenix

我使用的是HBase 1.1,Phoenix 4.7 关于Row Timestamp的这个链接(将HBase的本机行时间戳映射到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并没有自动处理row_timestamp CREATED_DATE。

我的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

有没有人给我一个关于row_stamp Apache Phoenix语法UPSERT的例子?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

在我的环境中尝试了相同的create / upsert语句。首先,create语句给出了METRIC_VALUE列的跟随错误的问题。

  

错误:ERROR 201(22000):非法数据。不支持的sql类型:LONG   (状态= 22000,代码= 201)

我将类型更改为double并且CREATE TABLE和UPSERT也有效。问题出在以下行,即为数字类型的列设置字符串。

ps.setString(2, "123123");