内容纲要
概要描述
ArgoDB中 rowkey 是关系数据库系统中用于确保一条记录的唯一标识和正确引用的一系列列(或字段)。因此被设置为 rowkey 的字段(或一系列列)是唯一的、且不允许为空。
本节主要为您介绍运用 rowkey 实现 UPSERT 功能。
- ArgoDB 使用 rowkey 实现 UPSERT 功能,且尚不支持 UPSERT 语法。
- UPSERT 是 UPDATE 和 INSERT 的组合。在关系数据库的上下文中,如果表中已经存在指定的rowkey值,则更新现有行,如果指定的 rowkey 值不存在,则插入新行
详细介绍
1、创建rowkey表
--单值rowkey表
CREATE TABLE if not exists srk_bucket_product(
id INT,
prod_no INT,
prod_name string,
prod_time date,
price double)
CLUSTERED BY (id)
STORED AS HOLODESK
tblproperties("holodesk.rowkey"="id");
--多值rowkey表
CREATE TABLE if not exists mrk_bucket_product(
id INT,
prod_no INT,
prod_name string,
prod_time date,
price double)
CLUSTERED BY (id,prod_NO,price)
STORED AS HOLODESK
tblproperties("holodesk.rowkey"="id,prod_no,price");
2、创建数据源表
--创建数据源表并插入数据
CREATE TABLE if not exists rk_resource1(
id INT,
prod_no INT,
prod_name string,
prod_time date,
price double)
STORED AS HOLODESK;
INSERT INTO rk_resource1 VALUES
(1, 11, '薯片', '2023-2-10', 10.00),
(2, 22, '火腿', '2023-2-11', 12.11),
(3, 33, '卫生纸', '2023-1-1', 15.00),
(4, 44, '牛肉', '2023-2-15', 49.98);
CREATE TABLE if not exists rk_resource2(
id INT,
prod_no INT,
prod_name string,
prod_time date,
price double)
STORED AS HOLODESK;
INSERT INTO rk_resource2 VALUES
(1, 12, '薯片|update', '2023-2-10', 10.00),
(2, 22, '火腿|update', '2023-2-11', 11.99),
(3, 33, '卫生纸|update', '2023-2-15', 15.00),
(5, 55, '青菜|insert', '2023-2-15', 3.55);
3、数据写入单值 rowkey 分桶表
--首先向表 srk_bucket_product 插入数据 rk_resource1
insert into srk_bucket_product select * from rk_resource1;
查询表 srk_bucket_product 结果如下
--再向表 srk_bucket_product 插入数据 rk_resource2
insert into srk_bucket_product select * from rk_resource2;
再次查询表 srk_bucket_product 结果,可以看出
- 更新rowkey列id值为1,2,3的数据;
- 保留rowkey列id值为4的数据不变;
- 插入rowkey列id值为5的数据;
4、数据写入多值 rowkey 分桶表
--首先向表 mrk_bucket_product 插入数据 rk_resource1
insert into mrk_bucket_product select * from rk_resource1;
查询表 mrk_bucket_product 结果如下
--再向表 mrk_bucket_product 插入数据 rk_resource2
insert into mrk_bucket_product select * from rk_resource2;
再次查询表 srk_bucket_product 结果,可以看出
- 更新rowkey列(id,prod_no,price)值为(3,33,15.00)的数据;
- 保留rowkey列(id,prod_no,price)值为(4,44,49.98)的数据不变;
- 插入rowkey列(id,prod_no,price)值不完全相同的两条数据,以及完全不同的一条新增数据