主键语义holodesk表使用说明

  其他常见问题
内容纲要

概要描述


本文主要介绍主键语义下,rowkey表在下面2个参数的作用下的不同体现。

holodesk.rowkey.strategy,表示遇到重复 RowKey 时候应该怎么处理,2个备选值:

  • replace(默认值) 表示遇到重复的 RowKey 时,用新的数据覆盖旧的数据
  • conflict 表示遇到重复 RowKey 时,直接抛出异常

holodesk.rowkey.unique.scope,表示 RowKey 的作用范围,2个备选值:

  • section(默认值),表示 RowKey 在同一个分区内是唯一的,不同的分区可以包含相同的 RowKey
  • global,表示 RowKey 是全局唯一的,不同的分区不可以包含相同的 RowKey

详细介绍


1. 分区内唯一,重复值覆盖(默认情况)

holodesk.rowkey.strategy=replace
holodesk.rowkey.unique.scope=section

drop table rk_bigint_1;
CREATE TABLE IF NOT EXISTS rk_bigint_1
(
c1 INT,
c2 STRING
)
partitioned by (p string)
CLUSTERED BY(c1)
STORED AS HOLODESK
TBLPROPERTIES 
('holodesk.rowkey'='c1');

insert into rk_bigint_1 select 1,'a','p1';
insert into rk_bigint_1 select 1,'b','p1';

SELECT * FROM rk_bigint_1;

执行不报错,p=p1的分区内,相同rowkey会被replace覆盖掉:

2. 全局唯一

holodesk.rowkey.strategy=conflict
holodesk.rowkey.unique.scope=global

drop table IF EXISTS rk_bigint_2;
CREATE TABLE  rk_bigint_2(
c1 int
)partitioned by (p string)
CLUSTERED BY(c1)
STORED AS HOLODESK
TBLPROPERTIES (
'holodesk.rowkey'='c1',
'holodesk.rowkey.strategy'='conflict',
'holodesk.rowkey.unique.scope'='global'
);

--先插入一条数据
insert into rk_bigint_2 select 1,'p1';
--另一个分区,相同rowkey,插入失败 java.lang.RuntimeException: There is a rowKey conflict between the new data and the old data globally.
insert into rk_bigint_2 select 1,'p2';

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。