查询hbase sink结果表,有时查到数据,有时查不到

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

查询hbase sink结果表,有时查到数据,有时查不到

kandy.wang
insert into hive.temp_dw.day_order_index select rowkey, ROW(orderN,)
from
(
    select order_date as rowkey,
    count(distinct parent_sn) as orderN,
    ....
    group by order_date
)


通过sql查hbase时,有时查到数据,有时候查不到数据。是不是group操作,会有下游算子 发送撤回消息,导致在delete hbase的某条rowkey数据,导致客户端查不到数据?
我理解 hbase sink 应该是upsert数据吧。会不会先delete 再put 导致这样的现象 ?
Reply | Threaded
Open this post in threaded view
|

Re:查询hbase sink结果表,有时查到数据,有时查不到

ying
hbase写入时会有buffer [1],按照时间或者数据量写入 [2],可以看下是不是调整过?



1. https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-hbase/src/main/java/org/apache/flink/connector/hbase/sink/HBaseSinkFunction.java
2. https://ci.apache.org/projects/flink/flink-docs-master/dev/table/connectors/hbase.html 







在 2020-09-23 17:55:44,"kandy.wang" <[hidden email]> 写道:

>insert into hive.temp_dw.day_order_index select rowkey, ROW(orderN,)
>from
>(
>    select order_date as rowkey,
>    count(distinct parent_sn) as orderN,
>    ....
>    group by order_date
>)
>
>
>通过sql查hbase时,有时查到数据,有时候查不到数据。是不是group操作,会有下游算子 发送撤回消息,导致在delete hbase的某条rowkey数据,导致客户端查不到数据?
>我理解 hbase sink 应该是upsert数据吧。会不会先delete 再put 导致这样的现象 ?
Reply | Threaded
Open this post in threaded view
|

Re: 查询hbase sink结果表,有时查到数据,有时查不到

Leonard Xu
In reply to this post by kandy.wang
Hi
> 通过sql查hbase时,有时查到数据,有时候查不到数据。是不是group操作,会有下游算子 发送撤回消息,导致在delete hbase的某条rowkey数据,导致客户端查不到数据?
> 我理解 hbase sink 应该是upsert数据吧。会不会先delete 再put 导致这样的现象 ?

是的,group by 算子会像下游 hbase sink发retract消息,hbase sink处理retract消息的实现就是先delete再insert,所以去查hbase的时候就会碰到你说的有时查不到的情况。

祝好
Leonard
Reply | Threaded
Open this post in threaded view
|

Re:Re: 查询hbase sink结果表,有时查到数据,有时查不到

kandy.wang
hi Leonard:

实际在HBaseSinkFunction中打log测试下来发现,都是UPDATE_AFTER类型的RowData数据写Hbase,没有你说的那种retract消息呢。如果是retract 应该是 会先发一条UPDATE_BEFORE 消息,再发一条UPDATE_AFTER消息吧。实际测下来 都是UPDATE_AFTER,转成了hbase的Put操作,就好比每次都是upsert一样。





在 2020-09-25 10:03:34,"Leonard Xu" <[hidden email]> 写道:
>Hi
>> 通过sql查hbase时,有时查到数据,有时候查不到数据。是不是group操作,会有下游算子 发送撤回消息,导致在delete hbase的某条rowkey数据,导致客户端查不到数据?
>> 我理解 hbase sink 应该是upsert数据吧。会不会先delete 再put 导致这样的现象 ?
>
>是的,group by 算子会像下游 hbase sink发retract消息,hbase sink处理retract消息的实现就是先delete再insert,所以去查hbase的时候就会碰到你说的有时查不到的情况。
>
>祝好
>Leonard
Reply | Threaded
Open this post in threaded view
|

Re: 查询hbase sink结果表,有时查到数据,有时查不到

Leonard Xu
Hi
> 实际在HBaseSinkFunction中打log测试下来发现,都是UPDATE_AFTER类型的RowData数据写Hbase,没有你说的那种retract消息呢。如果是retract 应该是 会先发一条UPDATE_BEFORE 消息,再发一条UPDATE_AFTER消息吧。实际测下来 都是UPDATE_AFTER,转成了hbase的Put操作,就好比每次都是upsert一样。

HBase Sink 是upsert sink,一条retract消息里的 UPDATE_BEFORE 和 UPDATE_AFTER, UPDATE_BEFORE是会被框架推断后省略的,这是upsert sink里的一个小优化,但是upsert sink是能收到DELETE消息的,根据query的changlog推导,部分query会产生DELETE消息的,所以upsert sink会处理 INSERT,UPDATE_AFTER, DELETE三种消息,如果有DELETE消息就会出现查询时刚好被删除的情况。

祝好
Leonard Xu