You need to enable JavaScript to run this app.
导航

ACID

最近更新时间2023.03.03 15:40:43

首次发布时间2022.02.24 10:15:59

1. ACID

在建表时设置主键,LAS 表可支持行级别的数据更新和删除操作,且支持 ACID 属性。
ACID 代表数据库事务的四个特征:

  • 原子性:操作完全成功或失败,它不会留下部分数据。

  • 一致性:一旦应用程序执行操作,该操作的结果在每个后续操作中都对其可见。

  • 隔离性:一个用户的不完整操作不会给其他用户带来意想不到的副作用。

  • 持久性:一旦操作完成,即使面对机器或系统故障,它也会被保留。

需要注意的是,如果多个任务并发写入 ACID 表并存在写入冲突后,会存在写入失败或数据异常问题。

2. 建表

2.1 可视化建表

点击新建表,除填写必要字段信息外,需勾选部分字段为主键列,以支持行级别的 ACID 能力。

2.2 DDL 建表

通过 DDL 语句建表时,用户需使用 PRIMARY KEY 关键字指定主键,以支持行级别的 ACID 能力,例如:

USE test_db;

CREATE TABLE test_table
(
    `name` STRING PRIMARY KEY,
    `age` INT,
    `city` STRING
);

如需复合主键,可使用 PRIMARY KEY (col_a, col_b) 语法进行指定,例如:

USE test_db;

CREATE TABLE test_table
(
    `name` STRING,
    `age` INT,
    `city` STRING,
    PRIMARY KEY (name, age)
);

需要注意的是,目前主键类型仅支持基本的 string,int,bigint,double 这几种类型,如果设置其它类型作为主键,会在数据插入时产生预期之外的问题。

3. 数据操作

3.1 插入

Insert Overwrite:适用于首次导入全量数据场景,会覆盖历史数据,相对 Insert Into 写入性能更高(BulkInsert)。 注:对于 ACID 表,insert overwrite 引擎不会做去重,需要由业务侧增加去重逻辑。

Insert Into:可以保证去重
对于设置了主键的表,若插入多条相同主键的记录,最终仅保留最新的数据,例如:

USE test_db;

-- CREATE TABLE test_table
-- (
--    `name` STRING,
--    `age` INT,
--    `city` STRING,
--    PRIMARY KEY (name, age)
-- );

INSERT INTO test_table
VALUES ('Jack', 17, 'Macau'), 
       ('Jack', 17, 'Shanghai'),
       ('Nico', 19, 'NYC');
+-------+------+-----------+--+
| name  | age  |   city    |
+-------+------+-----------+--+
| Jack  | 17   | Shanghai  |
| Nico  | 19   | NYC       |
+-------+------+-----------+--+

3.2 更新

支持 UPDATE 操作,例如:

USE test_db;

UPDATE test_table
SET city = 'Beijing'
WHERE city = 'Shanghai'
+-------+------+-----------+--+
| name  | age  |   city    |
+-------+------+-----------+--+
| Jack  | 17   | Beijing   |
| Nico  | 19   | NYC       |
+-------+------+-----------+--+

3.3 删除

支持 DELETE 操作,例如:

DELETE FROM test_table
WHERE city = 'NYC'
+-------+------+-----------+--+
| name  | age  |   city    |
+-------+------+-----------+--+
| Jack  | 17   | Beijing   |
+-------+------+-----------+--+