本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon Keyspaces 中建立使用者定義類型 (UDT)
若要在單一區域金鑰空間中建立 UDT,您可以在 CQL、 create-type命令與 AWS CLI或 主控台中使用 CREATE TYPE陳述式。
UDT 名稱不得超過 48 個字元、開頭必須是英文字母字元,且只能包含英數字元和底線。Amazon Keyspaces 會自動將大寫字元轉換成小寫字元。
或者,您可以使用雙引號宣告 UDT 名稱。在 UDT 名稱前後加上雙引號來宣告名稱時,Amazon Keyspaces 會保留大寫並允許特殊字元。
您也可以在建立 UDT 時使用雙引號作為名稱的一部分,但必須使用額外的雙引號字元來逸出每個雙引號字元。
下表顯示允許的 UDT 名稱範例。第一欄顯示如何在建立類型時輸入名稱,第二欄顯示 Amazon Keyspace 如何在內部格式化名稱。Amazon Keyspaces 預期 GetType 這類操作使用格式化的名稱。
| 輸入的名稱 |
格式化名稱 |
注意 |
MY_UDT
|
my_udt |
若沒有雙引號,Amazon Keyspaces 就會將所有大寫字元轉換成小寫字元。 |
"MY_UDT"
|
MY_UDT |
若有雙引號,Amazon Keyspaces 就會遵循大寫字元,並從格式化名稱中移除雙引號。 |
"1234"
|
1234 |
若有雙引號,名稱開頭就可以是數字,而且 Amazon Keyspaces 會從格式化名稱中移除雙引號。 |
"Special_Ch@r@cters<>!!"
|
Special_Ch@r@cters<>!! |
若有雙引號,名稱就可以包含特殊字元,而且 Amazon Keyspaces 會從格式化名稱中移除雙引號。 |
"nested""""""quotes"
|
nested"""quotes |
Amazon Keyspaces 會從格式化名稱中移除最外層的雙引號及逸出雙引號。 |
- Console
-
- Cassandra Query Language (CQL)
-
使用 CQL 建立使用者定義類型 (UDT)
在此範例中,我們建立了 中使用的新版本書籍獎勵表在 Amazon Keyspaces 中建立資料表。在此表格中,我們會存放作者為指定書籍收到的所有獎勵。我們建立兩個巢狀 UDTs,其中包含有關獲得 獎勵之書籍的資訊。
-
建立名稱為 的金鑰空間catalog。
CREATE KEYSPACE catalog WITH REPLICATION = {'class': 'SingleRegionStrategy'};
-
建立第一個類型。此類型存放 BISAC 代碼,用於定義書籍類型。BISAC 代碼由英數字元代碼組成,最多四個主題區域。
CREATE TYPE catalog.bisac (
bisac_code text,
subject1 text,
subject2 text,
subject3 text,
subject4 text
);
-
為使用第一個 UDT 的書籍獎勵建立第二個類型。巢狀 UDT 必須凍結。
CREATE TYPE catalog.book (
award_title text,
book_title text,
publication_date date,
page_count int,
ISBN text,
genre FROZEN <bisac>
);
-
使用作者名稱的資料欄建立資料表,並使用書籍獎勵的清單類型。請注意,清單中使用的 UDT 必須凍結。
CREATE TABLE catalog.authors (
author_name text PRIMARY KEY,
awards list <FROZEN <book>>
);
-
在此步驟中,我們會將一列資料插入新資料表。
CONSISTENCY LOCAL_QUORUM;
INSERT INTO catalog.authors (author_name, awards) VALUES (
'John Stiles' ,
[{
award_title: 'Wolf',
book_title: 'Yesterday',
publication_date: '2020-10-10',
page_count: 345,
ISBN: '026204630X',
genre: { bisac_code:'FIC014090', subject1: 'FICTION', subject2: 'Historical', subject3: '20th Century', subject4: 'Post-World War II'}
},
{award_title: 'Richard Roe',
book_title: 'Who ate the cake?',
publication_date: '2019-05-13',
page_count: 193,
ISBN: '9780262046305',
genre: { bisac_code:'FIC022130', subject1: 'FICTION', subject2: 'Mystery & Detective', subject3: 'Cozy', subject4: 'Culinary'}
}]
);
-
在最後一個步驟中,我們從資料表讀取資料。
SELECT * FROM catalog.authors;
命令的輸出應如下所示。
author_name | awards
-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
John Stiles | [{award_title: 'Wolf', book_title: 'Yesterday', publication_date: 2020-10-10, page_count: 345, isbn: '026204630X', genre: {bisac_code: 'FIC014090', subject1: 'FICTION', subject2: 'Historical', subject3: '20th Century', subject4: 'Post-World War II'}}, {award_title: 'Richard Roe', book_title: 'Who ate the cake?', publication_date: 2019-05-13, page_count: 193, isbn: '9780262046305', genre: {bisac_code: 'FIC022130', subject1: 'FICTION', subject2: 'Mystery & Detective', subject3: 'Cozy', subject4: 'Culinary'}}]
(1 rows)
如需 CQL 語法的詳細資訊,請參閱 CREATE TYPE。
- CLI
-
使用 建立使用者定義類型 (UDT) AWS CLI
-
若要建立類型,您可以使用下列語法。
aws keyspaces create-type
--keyspace-name 'my_keyspace'
--type-name 'my_udt'
--field-definitions
'[
{"name" : "field1", "type" : "int"},
{"name" : "field2", "type" : "text"}
]'
該命令的輸出看起來與此範例類似。請注意, 會typeName傳回 UDT 的格式化名稱。
{
"keyspaceArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/my_keyspace/",
"typeName": "my_udt"
}