我正在阅读RowKind#UPDATE_BEFORE
的javadoc,它说:
/**
* Update operation with the previous content of the updated row.
*
* <p>This kind SHOULD occur together with {@link #UPDATE_AFTER} for modelling an update that
* needs to retract the previous row first. It is useful in cases of a non-idempotent update,
* i.e., an update of a row that is not uniquely identifiable by a key.
*/
UPDATE_BEFORE("-U", (byte) 1),
我会问:
- 如果行
is not uniquely identifiable by a key
, flink如何知道哪一行撤回,我认为必须有一个唯一的键来识别行? - 上面说对
non-idempotent update
有用,这里的non-idempotent update
是什么意思?
- 在table api中,一行可以有一个主键
- 考虑这种情况
id | data
1 | data_1
2 | data_1
,如果我们有一个类似上面的表。我们可以像这样更新一行:update data set data='data_x' where id = 1"在本例中,id不是update而是幂等update">
但是如果我们有这样一个表(缺少id字段)
数据data_1data_1
则更新到第二行是"非幂等的"。因为我们没有id或其他唯一的东西来标识行对象