DMLAmazon Keyspaces 中的語句(數據操作語言) - Amazon Keyspaces (適用於 Apache Cassandra)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

DMLAmazon Keyspaces 中的語句(數據操作語言)

數據操作語言(DML)是一組卡桑德拉查詢語言(CQL)語句,用於管理 Amazon Keyspaces(對於阿帕奇卡桑德拉)表中的數據。您可以使用DML陳述式來新增、修改或刪除資料表中的資料。

您也可以使用DML陳述式來查詢資料表中的資料。(請注意,CQL不支持聯接或子查詢。)

SELECT

使用SELECT陳述式來查詢資料。

語法

select_statement ::= SELECT [ JSON ] ( select_clause | '*' ) FROM table_name [ WHERE 'where_clause' ] [ ORDER BY 'ordering_clause' ] [ LIMIT (integer | bind_marker) ] [ ALLOW FILTERING ] select_clause ::= selector [ AS identifier ] ( ',' selector [ AS identifier ] ) selector ::= column_name | term | CAST '(' selector AS cql_type ')' | function_name '(' [ selector ( ',' selector )* ] ')' where_clause ::= relation ( AND relation )* relation ::= column_name operator term TOKEN operator ::= '=' | '<' | '>' | '<=' | '>=' | IN | CONTAINS | CONTAINS KEY ordering_clause ::= column_name [ ASC | DESC ] ( ',' column_name [ ASC | DESC ] )*

範例

SELECT name, id, manager_id FROM "myGSGKeyspace".employees_tbl ; SELECT JSON name, id, manager_id FROM "myGSGKeyspace".employees_tbl ;

如需將JSON編碼資料類型對應至 Amazon Keyspaces 資料類型的表格,請參閱。JSONAmazon Keyspaces 數據類型的編碼

使用關IN鍵字

IN關鍵字會指定一或多個值的相等性。它可以應用於分區索引鍵和叢集資料行。結果會以索引鍵在SELECT陳述式中呈現的順序傳回。

範例

SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 = 2; SELECT * from mykeyspace.mytable WHERE primary.key1 IN (1,2) and clustering.key1 <= 2; SELECT * from mykeyspace.mytable WHERE primary.key1 = 1 and clustering.key1 IN (1, 2); SELECT * from mykeyspace.mytable WHERE primary.key1 <= 2 and clustering.key1 IN (1, 2) ALLOW FILTERING;

如需關IN鍵字以及 Amazon Keyspaces 如何處理陳述式的詳細資訊,請參閱在 Amazon Keyspaces 查詢中使用IN運算符與SELECT語句

訂購結果

ORDER BY子句指定返回結果的排序順序。它需要作為參數列的列名列表以及每列的排序順序。您只能在排序子句中指定叢集資料行。不允許使用非叢集資料行。排序順序選項用ASC於升序和DESC降序排序順序。如果省略排序順序,則會使用叢集資料行的預設順序。如需可能的排序順序,請參閱ORDER BY在 Amazon Keyspaces 中訂購結果

範例

SELECT name, id, division, manager_id FROM "myGSGKeyspace".employees_tbl WHERE id = '012-34-5678' ORDER BY division;

ORDER BY搭配IN關鍵字使用時,結果會在頁面中排序。不支持禁用分頁完全重新排序。

TOKEN

您可以將TOKEN函數套用至SELECTWHERE子句中的PARTITION KEY欄。使用該TOKEN函數,Amazon Keyspaces 返回基於的對應令牌值,PARTITION_KEY而不是對的值的PARTITION KEY行。

TOKENIN鍵字不支援關係。

範例

SELECT TOKEN(id) from my_table; SELECT TOKEN(id) from my_table WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;

TTL函數

您可以將TTL函數與SELECT陳述式搭配使用,擷取為資料行儲存的到期時間 (以秒為單位)。如果未設定任何TTL值,則函數會傳回null

範例

SELECT TTL(my_column) from my_table;

TTL函數無法用於多儲存格欄 (例如集合)。

WRITETIME 函數

只有在資料表使用用戶端時間戳記時,您才能搭配使用此WRITETIME函數,擷取儲存為資料行值中繼資料的時間戳記。SELECT如需詳細資訊,請參閱Amazon Keyspaces 間中的客戶端時間戳

SELECT WRITETIME(my_column) from my_table;

WRITETIME函數無法用於多儲存格欄 (例如集合)。

注意

為了與既定的 Cassandra 驅動程序行為兼容性,當您通過 Cassandra 驅動程序和開發人員工具使用 Cassandra 查詢語言(CQL)API調用在系統表上執行操作時,基於標籤的授權策略不會強制執行。如需詳細資訊,請參閱 基於標籤的 Amazon Keyspaces 資源訪問

INSERT

使用該INSERT語句將行添加到表中。

語法

insert_statement ::= INSERT INTO table_name ( names_values | json_clause ) [ IF NOT EXISTS ] [ USING update_parameter ( AND update_parameter )* ] names_values ::= names VALUES tuple_literal json_clause ::= JSON string [ DEFAULT ( NULL | UNSET ) ] names ::= '(' column_name ( ',' column_name )* ')'

範例

INSERT INTO "myGSGKeyspace".employees_tbl (id, name, project, region, division, role, pay_scale, vacation_hrs, manager_id) VALUES ('012-34-5678','Russ','NightFlight','US','Engineering','IC',3,12.5, '234-56-7890') ;

更新參數

INSERT支援下列值update_parameter

  • TTL— 以秒為單位的時間值。最大可設定的值為 630,720,000 秒,相當於 20 年。

  • TIMESTAMP— 代bigint表自標準基準時間之後的微秒數 (稱為 epoch: 一九七零年一月一日下午GMT十二時正。Amazon Keyspaces 間中的時間戳記必須介於過去的 2 天和 future 5 分鐘之間。

範例

INSERT INTO my_table (userid, time, subject, body, user) VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello','205.212.123.123') USING TTL 259200;

JSON支持

如需將JSON編碼資料類型對應至 Amazon Keyspaces 資料類型的表格,請參閱。JSONAmazon Keyspaces 數據類型的編碼

您可以使用JSON關鍵字將JSON已編碼的對應作為單一列插入。對於存在於資料表中但在 JSON insert 陳述式中省略的資料行,請使用DEFAULT UNSET來保留現有的值。用於DEFAULT NULL將NULL值寫入每一列省略的資料欄,並覆寫現有的值 (需支付標準寫入費用)。 DEFAULT NULL為預設選項。

範例

INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678", "name": "Russ", "project": "NightFlight", "region": "US", "division": "Engineering", "role": "IC", "pay_scale": 3, "vacation_hrs": 12.5, "manager_id": "234-56-7890"}';

如果JSON數據包含重複的密鑰,Amazon 密 Keyspaces 存儲密鑰的最後一個值(類似於阿帕奇卡桑德拉)。在下列範例中,重複索引鍵所在id的位置會使234-56-7890用值。

範例

INSERT INTO "myGSGKeyspace".employees_tbl JSON '{"id":"012-34-5678", "name": "Russ", "project": "NightFlight", "region": "US", "division": "Engineering", "role": "IC", "pay_scale": 3, "vacation_hrs": 12.5, "id": "234-56-7890"}';

UPDATE

使用UPDATE陳述式來修改資料表中的資料列。

語法

update_statement ::= UPDATE table_name [ USING update_parameter ( AND update_parameter )* ] SET assignment ( ',' assignment )* WHERE where_clause [ IF ( EXISTS | condition ( AND condition )*) ] update_parameter ::= ( integer | bind_marker ) assignment ::= simple_selection '=' term | column_name '=' column_name ( '+' | '-' ) term | column_name '=' list_literal '+' column_name simple_selection ::= column_name | column_name '[' term ']' | column_name '.' `field_name condition ::= simple_selection operator term

範例

UPDATE "myGSGKeyspace".employees_tbl SET pay_scale = 5 WHERE id = '567-89-0123' AND division = 'Marketing' ;

若要遞增 acounter,請使用下列語法。如需詳細資訊,請參閱计数器

UPDATE ActiveUsers SET counter = counter + 1 WHERE user = A70FE1C0-5408-4AE3-BE34-8733E5K09F14 AND action = 'click';

更新參數

UPDATE支援下列值update_parameter

  • TTL— 以秒為單位的時間值。最大可設定的值為 630,720,000 秒,相當於 20 年。

  • TIMESTAMP— 代bigint表自標準基準時間之後的微秒數 (稱為 epoch: 一九七零年一月一日下午GMT十二時正。Amazon Keyspaces 間中的時間戳記必須介於過去的 2 天和 future 5 分鐘之間。

範例

UPDATE my_table (userid, time, subject, body, user) VALUES (B79CB3BA-745E-5D9A-8903-4A02327A7E09, 96a29100-5e25-11ec-90d7-b5d91eceda0a, 'Message', 'Hello again','205.212.123.123') USING TIMESTAMP '2022-11-03 13:30:54+0400';

DELETE

使用DELETE陳述式從資料表中移除資料列。

語法

delete_statement ::= DELETE [ simple_selection ( ',' simple_selection ) ] FROM table_name [ USING update_parameter ( AND update_parameter )* ] WHERE where_clause [ IF ( EXISTS | condition ( AND condition )*) ] simple_selection ::= column_name | column_name '[' term ']' | column_name '.' `field_name condition ::= simple_selection operator term

其中:

  • table_name是包含您要刪除之列的表格。

範例

DELETE manager_id FROM "myGSGKeyspace".employees_tbl WHERE id='789-01-2345' AND division='Executive' ;

DELETE支援下列值update_parameter

  • TIMESTAMP— 代bigint表自標準基準時間之後的微秒數 (稱為 epoch: 一九七零年一月一日下午GMT十二時正。