本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 * frommykeyspace.mytable
WHERE primary.key1 IN (1,2) and clustering.key1 <= 2; SELECT * frommykeyspace.mytable
WHERE primary.key1 = 1 and clustering.key1 IN (1, 2); SELECT * frommykeyspace.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
函數套用至SELECT
和WHERE
子句中的PARTITION KEY
欄。使用該TOKEN
函數,Amazon Keyspaces 返回基於的對應令牌值,PARTITION_KEY
而不是對的值的PARTITION KEY
行。
TOKEN
關IN
鍵字不支援關係。
範例
SELECT TOKEN(id) from
my_table
; SELECT TOKEN(id) frommy_table
WHERE TOKEN(id) > 100 and TOKEN(id) < 10000;
TTL函數
您可以將TTL
函數與SELECT
陳述式搭配使用,擷取為資料行儲存的到期時間 (以秒為單位)。如果未設定任何TTL
值,則函數會傳回null
。
範例
SELECT TTL(
my_column
) frommy_table
;
此TTL
函數無法用於多儲存格欄 (例如集合)。
WRITETIME 函數
只有在資料表使用用戶端時間戳記時,您才能搭配使用此WRITETIME
函數,擷取儲存為資料行值中繼資料的時間戳記。SELECT
如需詳細資訊,請參閱Amazon Keyspaces 間中的客戶端時間戳。
SELECT WRITETIME(
my_column
) frommy_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十二時正。