日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過DELETE實現刪除

本文介紹如何在云數據庫 SelectDB 版實例中,通過DELETE命令刪除數據

概述

DELETE不同于其他導入方式,它是一個同步過程,與INSERT INTO相似。所有的DELETE操作在SelectDB中是一個獨立的導入作業。通常DELETE語句需要指定表和分區以及刪除的條件來篩選要刪除的數據,并會同時刪除BASE表和ROLLUP表的數據。

使用方式

該語句用于按條件刪除指定Table及其ROLLUP中的數據。

語法

DELETE FROM table_name [PARTITION partition_name | PARTITIONS (partition_name [, partition_name])]
WHERE
column_name op { value | value_list } [ AND column_name op { value | value_list } ...];

參數說明

參數名稱

參數說明

table_name

指定需要刪除數據的表。

PARTITION partition_name | PARTITIONS (partition_name[, partition_name])

可選參數。指定執行刪除數據的分區名,如果表不存在此分區,則報錯。

column_name

指定需要刪除數據的表的列名。

op

邏輯比較操作符,可選類型包括:=, >, <, >=, <=, !=, in, not in

value | value_list

做邏輯比較的值或值列表。

重要
  • 使用聚合類的表模型(AGGREGATE、UNIQUE)只能指定Key列上的條件。

  • 若選定的Key列不存在于某個物化視圖或ROLLUP中,則無法進行DELETE。

  • 條件之間只能是“與”的關系。若希望達成“或”的關系,需要將條件分寫在兩個DELETE語句中。

  • 如果為分區表,刪除時需要指定分區。如果不指定,SelectDB會從條件中推斷出分區。當分區表未指定分區,或者無法從條件中推斷分區的時,需要設置Session變量delete_without_partition為 true。

    # 當前Session
    set delete_without_partition = true;
    
    # 全局
    set global delete_without_partition = true;

    此時DELETE會應用到所有分區。以下兩種情況會使SelectDB無法從條件中推斷出分區。

    • 條件中不包含分區列。

    • 分區列的op為not in。

  • DELETE語句可能會降低執行后一段時間內的查詢效率。影響程度取決于語句中指定的刪除條件的數量。指定的條件越多,影響越大。

  • 不同于Insert into命令,DELETE不能手動指定label

返回結果

DELETE命令是一個SQL命令,返回結果是同步的,分為以下三種。

執行成功

DELETE順利執行完成并可見,將返回如下結果,Query OK表示成功。

DELETE FROM test_tbl PARTITION p1 WHERE k1 = 1;
Query OK, 0 rows affected (0.04 sec)
{'label':'delete_e7830c72-eb14-4cb9-bbb6-eebd4511d251', 'status':'VISIBLE', 'txnId':'4005'}

提交成功,但未可見

SelectDB的事務提交分為兩步提交和發布版本。

完成了發布版本步驟后,結果才對您可見。若已經提交成功,那么最終一定會發布成功。SelectDB會嘗試在提交完后等待發布版本一段時間,如果超時后發布版本還未完成,會優先返回,提示您提交已經完成。

DELETE FROM test_tbl PARTITION p1 WHERE k1 = 1;
Query OK, 0 rows affected (0.04 sec)
{'label':'delete_e7830c72-eb14-4cb9-bbb6-eebd4511d251', 'status':'COMMITTED', 'txnId':'4005', 'err':'delete job is committed but may be taking effect later' }

返回結果的JSON字符串參數說明如下。

參數名稱

參數說明

rows affected

表示此次刪除影響的行。由于SelectDB的刪除目前是邏輯刪除,因此當前的這個值恒為0。

label

自動生成的Label,是該導入作業的標識。每個導入作業都有一個在單Database內部唯一的Label。

status

表示數據刪除是否可見,如果可見則顯示VISIBLE,如果不可見則顯示COMMITTED。

txnId

這個Delete job對應的事務ID。

err

顯示一些本次刪除的詳細報錯信息。

提交失敗,事務取消

DELETE語句沒有提交成功,將會被SelectDB自動中止,返回如下結果。

DELETE FROM test_tbl PARTITION p1 WHERE k1 > 80;
ERROR 1064 (HY000): errCode = 2, detailMessage = {錯誤原因}

若刪除操作超時,將會返回timeout時間和未完成的(tablet=replica)

DELETE FROM test_tbl PARTITION p1 WHERE k1 > 80;
ERROR 1064 (HY000): errCode = 2, detailMessage = failed to delete replicas from job: 4005, Unfinished replicas:10000=60000, 10001=60000, 10002=60000

通過上述示例,DELETE操作返回結果的正確處理邏輯為:

  • 返回結果為ERROR 1064 (HY000),則表示刪除失敗。

  • 返回結果為Query OK,則表示刪除執行成功。

    • 如果status為COMMITTED,表示數據仍不可見,您可以稍等一段時間再用show delete命令查看結果。

    • 如果status為VISIBLE,表示數據刪除成功。

查看歷史記錄

您可以通過SHOW DELETE語句查看歷史上已執行完成的刪除記錄。

語法如下。

SHOW DELETE [FROM db_name]

示例如下。

SHOW DELETE FROM test_db;
+-----------+---------------+---------------------+-----------------+----------+
| TableName | PartitionName | CreateTime          | DeleteCondition | State    |
+-----------+---------------+---------------------+-----------------+----------+
| empty_tbl | p3            | 2020-04-15 23:09:35 | k1 EQ "1"       | FINISHED |
| test_tbl  | p4            | 2020-04-15 23:09:53 | k1 GT "80"      | FINISHED |
+-----------+---------------+---------------------+-----------------+----------+
2 rows in set (0.00 sec)

相關FE配置

TIMEOUT配置

SelectDB刪除作業的超時時間限制在30秒到5分鐘時間內,具體時間可通過如下配置項調整。

  • tablet_delete_timeout_second

    DELETE自身的超時時間是由分區下Tablet的數量彈性改變的。此項配置為平均一個Tablet所貢獻的Timeout時間,默認值為2,單位是秒。假設此次刪除所指定分區下有5個Tablet,那么可提供給DELETE的Timeout時間為10秒,由于低于最低超時時間30秒,因此最終超時時間為30秒。

  • load_straggler_wait_second

    如果您預估的刪除數據量確實比較大,使得5分鐘的上限不足時,您可以通過此項調整Timeout上限,默認值為300,單位是秒。Timeout的具體計算規則為:

    TIMEOUT = MIN(load_straggler_wait_second, MAX(30, tablet_delete_timeout_second * tablet_num))
  • query_timeout

    DELETE本身是一個SQL命令,因此刪除語句也會受Session限制。Timeout還受Session中的query_timeout值影響,因此可以通過SET query_timeout = xxx來增加超時時間,默認值為900,單位是秒。

IN謂詞配置

  • max_allowed_in_element_num_of_delete

    如果在使用IN謂詞時需要占用的元素比較多,您可以通過此項調整允許攜帶的元素上限,默認值為1024。