Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

CREATE TABLE

定義新表格的欄位。

Apache Cassandra 支援在選取的鍵空間中建立新的 表格。如果表格已存在,請使用 IF NOT EXISTS 來抑制錯誤訊息;不會建立任何表格。靜態欄位 可以在分區的許多叢集列中儲存相同的資料,然後使用單一 SELECT 陳述式擷取該資料。

表格支援單一 計數器欄位

另請參閱: ALTER TABLEDROP TABLECREATE CUSTOM INDEX(適用於儲存附加索引 (SAI))、CREATE INDEX(適用於次要索引 (2i))

語法

BNF 定義

create_table_statement::= CREATE TABLE [ IF NOT EXISTS ] table_name '('
	column_definition  ( ',' column_definition )*
	[ ',' PRIMARY KEY '(' primary_key ')' ]
	 ')' [ WITH table_options ]
column_definition::= column_name cql_type [ STATIC ] [ column_mask ] [ PRIMARY KEY]
column_mask::= MASKED WITH ( DEFAULT | function_name '(' term ( ',' term )* ')' )
primary_key::= partition_key [ ',' clustering_columns ]
partition_key::= column_name  | '(' column_name ( ',' column_name )* ')'
clustering_columns::= column_name ( ',' column_name )*
table_options::= COMPACT STORAGE [ AND table_options ]
	| CLUSTERING ORDER BY '(' clustering_order ')'
	[ AND table_options ]  | options
clustering_order::= column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*
CREATE TABLE [ IF NOT EXISTS ] [<keyspace_name>.]<table_name>
  ( <column_definition> [ , ... ] | PRIMARY KEY (column_list) )
  [ WITH [ <table_options> ]
  [ [ AND ] CLUSTERING ORDER BY [ <clustering_column_name> (ASC | DESC) ] ]
  [ [ AND ] ID = '<table_hash_tag>' ] ] ;
語法圖例
圖例
語法慣例 說明

大寫

文字關鍵字。

小寫

非文字。

< >

變數值。以使用者定義的值取代。

[]

選用。方括號 ([]) 括住選用的命令引數。請勿輸入方括號。

( )

群組。圓括號 ( ( ) ) 識別可供選擇的群組。請勿輸入圓括號。

|

或。直線 (|) 分隔替代元素。輸入其中任一元素。請勿輸入直線。

...

可重複。省略號 ( ... ) 表示您可以根據需要重複語法元素。

'<文字字串>'

CQL 陳述式中的字串常數必須以單引號 (') 標示。使用單引號保留大寫。

{ <key> : <value> }

Map 彙集。大括號 ({ }) 將 map 彙集或鍵值對括起來。冒號分隔鍵和值。

<datatype2

集合、清單、map 或 tuple。尖括號 ( < > ) 將集合、清單、map 或 tuple 中的資料類型括起來。以逗號分隔資料類型。

<cql_statement>;

結束 CQL 陳述式。分號 (;) 會終止所有 CQL 陳述式。

[--]

使用兩個連字號 ( -- ) 將命令列選項與命令列引數分開。當引數可能被誤認為命令列選項時,此語法很有用。

' <<schema\> ... </schema\>> '

僅搜尋 CQL:單引號 (') 將整個 XML 架構宣告括起來。

@<xml_entity>='<xml_entity_type>'

僅搜尋 CQL:識別實體和字串常數以覆寫架構和 solrConfig 檔案中的 XML 元素。

必要參數

table_name

要建立索引的表格名稱。

column_name

欄位名稱。

column_definition

在表格名稱後以括號括起來,使用逗號分隔清單來定義多個欄位。所有表格都必須至少有一個 主鍵 欄位。每個欄位都使用下列語法定義:column_name cql_type_definition [STATIC | PRIMARY KEY] [, ...]

限制

  • 表格必須至少有一個 PRIMARY KEY

  • PRIMARY KEY 出現在欄位定義的結尾時,該欄位就是表格中唯一的「主鍵」,並定義為 分割鍵[分割鍵]。

  • 靜態欄位不能是主鍵。

  • 主鍵可以包含凍結的彙集。

    column_name

    對表格中的每個欄位使用唯一名稱。若要保留大小寫或使用特殊字元,請將名稱用雙引號括起來。

    cql_type_definition

    定義欄位中允許的資料類型。請參閱 CQL 資料類型使用者定義類型

    STATIC

    欄位有一個單一值(選用)。

    PRIMARY KEY

    PRIMARY KEY 是單一欄位時,將 PRIMARY KEY 附加到欄位定義的結尾。這是建立表格時唯一需要的架構資訊。當有一個主鍵時,它就是分割鍵;資料會依據此欄位中的唯一值進行分割和儲存:column_name cql_type_definition PRIMARY KEY

    或者,您可以宣告僅由單一欄位組成的主鍵,其方式與宣告複合主鍵相同。

column_definition

在表格名稱後以括號括起來,使用逗號分隔清單來定義多個欄位。所有表格都必須至少有一個 主鍵 欄位。每個欄位都使用下列語法定義:column_name cql_type_definition [STATIC | PRIMARY KEY] [, ...]

限制

  • 表格必須至少有一個 PRIMARY KEY

  • PRIMARY KEY 出現在欄位定義的結尾時,該欄位就是表格中唯一的「主鍵」,並定義為 分割鍵[分割鍵]。

  • 靜態欄位不能是主鍵。

  • 主鍵可以包含凍結的彙集。

    column_name

    對表格中的每個欄位使用唯一名稱。若要保留大小寫或使用特殊字元,請將名稱用雙引號括起來。

    cql_type_definition

    定義欄位中允許的資料類型。請參閱 CQL 資料類型使用者定義類型

    STATIC

    欄位有一個單一值(選用)。

    PRIMARY KEY

    PRIMARY KEY 是單一欄位時,將 PRIMARY KEY 附加到欄位定義的結尾。這是建立表格時唯一需要的架構資訊。當有一個主鍵時,它就是分割鍵;資料會依據此欄位中的唯一值進行分割和儲存:column_name cql_type_definition PRIMARY KEY

    或者,您可以宣告僅由單一欄位組成的主鍵,其方式與宣告複合主鍵相同。

table_options

處理曲調資料,包括 I/O 作業、壓縮和壓實。表格屬性選項使用下列語法

  • 單一值:<option_name> = '<value>'

  • 多個值:<option_name> = { '<subproperty>' : '<value>' [, ...] } [AND ...]

    簡單的 JSON 格式,大括弧中以逗號分隔的鍵值對清單。

未指定值時,使用預設值。

在 CREATE TABLE (或 ALTER TABLE) CQL 陳述式中,使用 WITH 子句定義表格屬性選項。使用 AND 分隔多個值。

CREATE TABLE [<keyspace_name>.]<table_name>
WITH option_name = '<value>'
AND option_name = {<option_map>};
bloom_filter_fp_chance = <N>

SSTable 布隆過濾器 的假陽性機率。當客戶端要求資料時,布隆過濾器會在執行磁碟 I/O 之前檢查列是否存在。值介於 0 到 1.0,其中:0 是用來啟用最大布隆過濾器(使用最多記憶體)的最小值,而 1.0 是停用布隆過濾器的最大值。

建議設定:0.1。較高的值會產生遞減報酬。

預設值bloom_filter_fp_chance = '0.01'

caching = { 'keys' : 'value', 'rows_per_partition' : 'value'}

最佳化快取記憶體的使用,無需手動調整。根據大小和存取頻率衡量快取資料。將此設定與 cassandra.yaml 檔案中的全域快取屬性協調。有效值

  • ALL-- 所有主鍵或列

  • NONE-- 沒有主鍵或列

  • <N>: (僅限每個分區的列) — 指定一個整數 預設值{ 'keys': 'ALL', 'rows_per_partition': 'NONE' }

cdc

在表格上建立變更資料擷取 (CDC) 記錄。

有效值

  • TRUE- 建立 CDC 記錄

  • FALSE- 不要建立 CDC 記錄

comment = 'some text that describes the table'

提供表格文件。

輸入表格設計為滿足的查詢類型描述。

default_time_to_live

TTL (存活時間) 以秒為單位,其中零表示已停用。可設定的最大值為 630720000 (20 年)。從 2018 年開始,到期時間戳記可能會超過儲存引擎所支援的最大值;請參閱以下警告。如果值大於零,則會為整個表格啟用 TTL,並將到期時間戳記新增至每個欄位。每當資料更新時,就會計算新的 TTL 時間戳記,且在所有資料到期後,就會移除列。

預設值:0 (已停用)。

由於 2038 年問題,資料庫儲存引擎只能編碼至 2038 年 1 月 19 日 03:14:07 UTC 的 TTL 時間戳記。TTL 日期溢位政策會決定是否拒絕或插入到期時間戳記晚於最大日期的請求。

gc_grace_seconds

資料以墓碑 (刪除標記) 標示後,經過多少秒才符合垃圾回收資格。預設值:864000 (10 天)。預設值讓資料庫有時間在刪除前將一致性最大化。

寬限期內的墓碑記錄會從 提示批次變更 中排除。

在單一節點叢集,此屬性可以安全地設定為零。您也可以為資料未明確刪除的表格降低此值,例如,僅包含設定 TTL 的資料的表格,或設定 default_time_to_live 的表格。不過,如果您降低 gc_grace_seconds 值,請考量它與這些操作的互動

  • 提示重播:當節點關閉然後再重新啟動時,其他節點會重播在該節點沒有回應時排入佇列的寫入操作 (稱為 提示)。資料庫不會重播建立 gc_grace_seconds 後較舊的提示。在 cassandra.yaml 檔案中,max_hint_window 設定會設定收集沒有回應節點提示的時間限制 (預設為 3 小時)。

  • 批次重播:類似提示佇列,批次操作會儲存依序重播的資料庫變更。與提示相同,資料庫不會在建立後 gc_grace_seconds 秒後重播批次變更。如果應用程式使用批次操作,請考慮降低 gc_grace_seconds 會增加批次寫入操作還原已刪除資料的機率。cassandra.yaml 檔案中的 configuration/cass_yaml_file.html#batchlog_replay_throttle[batchlog_replay_throttle] 屬性可以控制批次重播程序。不過,最重要的因素是您所使用的批次大小和範圍。

memtable_flush_period_in_ms

與資料表相關聯的 memtables 沖刷前的毫秒數。當 memtable_flush_period_in_ms=0 時,memtable 會在下列情況下沖刷

  • 達到沖刷臨界值時

  • 關閉時

  • 執行 nodetool flush 時

  • 提交記錄填滿時 預設值0

min_index_interval

索引摘要中索引項目之間的最小間隔。較小的 min_index_interval 表示索引摘要包含來自索引的更多項目,這讓資料庫可以搜尋較少的索引項目來執行讀取。較大的索引摘要也可能使用更多記憶體。min_index_interval 的值是索引最密集的可能抽樣。

max_index_interval

如果所有索引摘要的總記憶體使用量達到此值,Apache Cassandra 會將最冷 SSTable 的索引摘要減少到 max_index_interval 設定的最大值。max_index_interval 是與記憶體壓力相關的最稀疏可能抽樣。

speculative_retry

設定快速讀取保護。正常的讀取要求只會傳送給足夠的複本節點以滿足一致性層級。在快速讀取保護中,會在滿足一致性層級後傳送額外的讀取要求給其他複本。speculative retry 屬性會指定這些額外讀取要求的觸發器。

  • ALWAYS:協調器節點會在每次讀取該資料表後,傳送額外的讀取要求給所有其他複本。

  • <X>percentile:追蹤每個資料表的典型讀取延遲(以毫秒為單位)。協調器節點會擷取正在讀取的資料表的典型延遲時間,並計算該數字的 X 百分比。如果協調器等待回應的毫秒數超過計算出的數字,協調器會傳送重複的讀取要求。

    例如,如果 Table_A 的 speculative_retry 屬性設定為 80percentile,而該資料表的典型延遲為 60 毫秒,則處理 Table_A 讀取的協調器節點會先傳送正常的讀取要求,如果在 48 毫秒(60 毫秒的 80%)內未收到任何回應,則會傳送重複的讀取要求。

  • <N>ms:如果協調器節點在 N 毫秒內未收到任何回應,則協調器節點會傳送額外的讀取要求給所有其他複本。

  • NONE:協調器節點在對該資料表進行任何讀取後都不會傳送額外的讀取要求。

壓縮策略

UCS

LCS

STCS

TWCS

compression = { compression_map }

透過指定壓縮演算法 class 後接簡單 JSON 格式的子屬性來設定 compression_map

使用 org.apache.cassandra.io.compress.ICompressor 介面實作自訂壓縮類別。

compression = {
   ['class' : '<compression_algorithm_name>',
     'chunk_length_in_kb' : '<value>',
     'crc_check_chance' : '<value>',]
   | 'sstable_compression' : '']
}
class

設定壓縮器名稱。Apache Cassandra 提供下列內建類別

壓縮演算法 Cassandra 類別 壓縮 解壓縮 比率 C* 版本

LZ4

LZ4Compressor

A+

A+

C+

>=1.2.2

LZ4HC

LZ4Compressor

C+

A+

B+

>= 3.6

Zstd

ZstdCompressor

A-

A-

A+

>= 4.0

Snappy

SnappyCompressor

A-

A

C

>= 1.0

Deflate (zlib)

DeflateCompressor

C

C

A

>= 1.0

僅使用與 Apache Cassandra 捆綁的壓縮實作。

選擇正確的壓縮器取決於您對儲存空間節省與讀取效能的要求。LZ4 的解壓縮速度最快,其次是 Snappy,然後是 Deflate。壓縮效率與解壓縮速度成反比。Deflate 或 Snappy 的額外壓縮不足以彌補一般工作負載的效能下降,但對於歸檔資料而言,它們可能值得考慮。

預設值LZ4Compressor

chunk_length_in_kb

區塊大小(以 KB 為單位)。在磁碟上,SSTable 會按區塊進行壓縮以允許隨機讀取。大於預設值的值可能會改善壓縮率,但會增加讀取時從磁碟讀取資料的最小大小。預設值是壓縮資料表的良好折衷方案。調整壓縮大小以考量讀取/寫入存取模式(一次通常要求多少資料)和資料表中列的平均大小。

預設值64

crc_check_chance

當啟用壓縮時,每個壓縮區塊都會包含該區塊的檢查碼,目的是偵測磁碟位元腐敗並避免損毀傳播到其他副本。此選項定義在讀取期間檢查這些檢查碼的機率。預設情況下,它們總是會被檢查。設定為 0 以停用檢查碼檢查,例如設定為 0.5,則在每次讀取時檢查它們。

預設值1.0

sstable_compression

停用壓縮。指定 null 值。

壓縮 = {compaction_map}

定義寫入後清理資料的策略。

語法使用簡單的 JSON 格式

compaction = {
     'class' : '<compaction_strategy_name>',
     '<property_name>' : <value> [, ...] }

僅使用與 Apache Cassandra 捆綁的壓縮實作。有關更多詳細資訊,請參閱 壓縮

共用屬性

下列屬性適用於所有壓縮策略。

compaction = {
     'class' : 'compaction_strategy_name',
     'enabled' : (true | false),
     'log_all' : (true | false),
     'only_purge_repaired_tombstone' : (true | false),
     'tombstone_threshold' : <ratio>,
     'tombstone_compaction_interval' : <sec>,
     'unchecked_tombstone_compaction' : (true | false),
     'min_threshold' : <num_sstables>,
     'max_threshold' : <num_sstables> }
enabled

啟用背景壓縮。

  • true 執行次要壓縮。

  • false 停用次要壓縮。

使用 nodetool enableautocompaction 開始執行壓縮。

預設值:true

log_all

啟用整個叢集的高階記錄。

預設值:false

only_purge_repaired_tombstone

啟用此屬性可防止資料在未於 gc_grace_seconds 內執行修復時復活。如果修復間隔過長,資料庫會保留所有墓碑。

  • true - 僅允許對已修復的 SSTable 進行墓碑清除。

  • false - 即使資料表尚未修復,也於壓縮期間清除 SSTable 上的墓碑。

預設值:false

tombstone_threshold

可供垃圾收集的墓碑與所有包含欄的比率。如果比率超過此限制,壓縮僅在該資料表上開始清除墓碑。

預設值:0.2

tombstone_compaction_interval

在 SSTable 建立後,壓縮可在其上執行的秒數。當 SSTable 超過 tombstone_threshold 時,即符合壓縮資格。由於在執行單一 SSTable 壓縮時可能無法刪除墓碑,而且壓縮是根據估計的墓碑比率觸發,因此此設定可調整兩個單一 SSTable 壓縮之間的最小間隔,以防止 SSTable 持續重新壓縮。

預設值:86400 (1 天)

unchecked_tombstone_compaction

設定為 true 可允許墓碑壓縮在未預先檢查哪些資料表符合操作資格的情況下執行。即使沒有此預先檢查,Apache Cassandra 仍會檢查 SSTable 以確保可以安全地刪除墓碑。

預設值:false

min_threshold

觸發次要壓縮的 SSTable 最小數量。

限制:不適用於 LeveledCompactionStrategy

預設值:4

max_threshold

觸發次要壓縮之前的 SSTable 最大數量。

限制:不適用於 LeveledCompactionStrategy

預設值:32

SizeTieredCompactionStrategy

壓縮類別 SizeTieredCompactionStrategy (STCS) 在資料表符合 min_threshold 時觸發次要壓縮。次要壓縮不涉及鍵空間中的所有資料表。請參閱 SizeTieredCompactionStrategy (STCS)

預設壓縮策略。

下列屬性僅適用於 SizeTieredCompactionStrategy

compaction = {
     'class' : 'SizeTieredCompactionStrategy',
     'bucket_high' : <factor>,
     'bucket_low' : <factor>,
     'min_sstable_size' : <int> }
bucket_high

依大小分層的壓縮會合併大小近似的 SSTable 組。資料庫會將每個 SSTable 大小與節點上此資料表的 SSTable 大小平均值進行比較。它會合併大小以 KB 為單位的 SSTable,範圍在 [平均大小 * bucket_low] 和 [平均大小 * bucket_high] 之間。

預設值:1.5

bucket_low

依大小分層的壓縮會合併大小近似的 SSTable 組。資料庫會將每個 SSTable 大小與節點上此資料表的 SSTable 大小平均值進行比較。它會合併大小以 KB 為單位的 SSTable,範圍在 [平均大小 * bucket_low] 和 [平均大小 * bucket_high] 之間。

預設值:0.5

min_sstable_size

STCS 會將 SSTable 分組到儲存區。分組程序會將大小差異小於 50% 的 SSTable 分組。此分組程序對於小型 SSTable 來說過於細緻。如果您的 SSTable 很小,請使用此選項定義一個大小閾值 (以 MB 為單位),低於此閾值的所有 SSTable 都屬於一個唯一的儲存區。

預設值:50 (MB)

cold_reads_to_omit 屬性不再支援 SizeTieredCompactionStrategy (STCS)

TimeWindowCompactionStrategy

壓縮類別 TimeWindowCompactionStrategy (TWCS) 會使用一系列時間視窗儲存區壓縮 SSTable。TWCS 會在每個連續時間段內建立一個新的時間視窗。在活動時間視窗期間,TWCS 會將所有從記憶體清除的 SSTable 壓縮成更大的 SSTable,方法是使用 STCS。在時間段結束時,所有這些 SSTable 都會壓縮成一個 SSTable。然後下一個時間視窗會開始,程序會重複。請參閱 TimeWindowCompactionStrategy (TWCS)

STCS 的所有屬性也適用於 TWCS。

下列屬性僅適用於 TimeWindowCompactionStrategy

compaction = {
     'class' : 'TimeWindowCompactionStrategy,
     'compaction_window_unit' : <days>,
     'compaction_window_size' : <int>,
     'split_during_flush' : (true | false) }
compaction_window_unit

用於定義儲存區大小的時間單位。此值基於 Java TimeUnit。有關有效值的清單,請參閱位於 docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html 的 Java API TimeUnit 頁面。

預設:天數

compaction_window_size

每個儲存區的單位。

預設:1

LeveledCompactionStrategy

壓縮類別 LeveledCompactionStrategy (LCS) 會建立大小固定且相對較小的 SSTable (預設為 160 MB),並將其分組到層級中。在每個層級中,SSTable 保證不會重疊。每個層級 (L0、L1、L2 等) 都比前一個層級大 10 倍。在較高層級中,磁碟 I/O 會比在較低層級中更均勻且可預測,因為 SSTable 會持續壓縮到逐漸更大的層級中。在每個層級中,列鍵會合併到下一個層級中不重疊的 SSTable 中。請參閱 LeveledCompactionStrategy (LCS)

如需更多指引,請參閱 何時使用分層壓縮Apache Cassandra 中的分層壓縮 部落格。

下列屬性只適用於 LeveledCompactionStrategy

compaction = {
     'class' : 'LeveledCompactionStrategy,
     'sstable_size_in_mb' : <int> }
sstable_size_in_mb

使用 LeveledCompactionStrategy 的 SSTable 的目標大小。雖然 SSTable 大小應該小於或等於 sstable_size_in_mb,但壓縮在壓縮期間可能會產生更大的 SSTable。當特定分割鍵的資料特別大時,就會發生這種情況。Apache Cassandra 資料庫不會將資料分割成兩個 SSTable。

預設:160

預設值 160 MB 可能沒有效率,而且會對資料庫索引和依賴索引的查詢產生負面影響。例如,考慮在使用 (SAI) 索引的表格中使用較高 sstable_size_in_mb 值的好處。如需相關資訊,請參閱 壓縮策略

DateTieredCompactionStrategy (已棄用)

將在特定時間範圍內寫入的資料儲存在同一個 SSTable 中。

base_time_seconds

第一個時間視窗的大小。

預設:3600

max_sstable_age_days (已棄用)

如果 SSTable 中最新資料比這個屬性舊,Apache Cassandra 就不會壓縮 SSTable。可以設定小數天數。

預設:1000

max_window_size_seconds

以秒為單位的最大視窗大小。

預設:86400

timestamp_resolution

單位,<MICROSECONDS> 或 <MILLISECONDS>,以符合插入資料的時間戳記。

預設:MICROSECONDS

選用參數

表格關鍵字

CLUSTERING ORDER BY ( column_name ASC | DESC)

依據資料欄的磁碟排序,對列儲存排序。指定順序可以讓查詢結果更有效率。選項如下:

ASC:遞增(預設順序)

DESC:遞減,反向順序

ID

如果表格不小心被 DROP TABLE 刪除,請使用這個選項來 重新建立表格,並執行提交記錄重播以擷取資料。

index_name

索引名稱。使用特殊字元或保留大小寫時,請用引號括起來。如果未指定名稱,Apache Cassandra 會將索引命名為:<table_name>_<column_name>_idx

keyspace_name

包含要建立索引的表格的鍵空間名稱。如果未指定名稱,則使用目前的鍵空間。

使用說明

如果資料欄已包含資料,則會在執行此陳述期間建立索引。建立索引後,當資料欄中的資料變更時,索引會自動更新。

使用 CREATE INDEX 指令建立索引可能會影響效能。在建立索引之前,請了解 何時建立索引 以及 何時不建立索引

限制:不支援建立計數器資料欄的索引。

範例

建立以 UUID 為主鍵的表格

建立以 UUID 為主鍵的 cyclist_name 表格

CREATE TABLE IF NOT EXISTS cycling.cyclist_name (
  id UUID PRIMARY KEY,
  lastname text,
  firstname text
);

建立複合主鍵

建立 cyclist_category 表格,並以反向順序儲存資料

CREATE TABLE IF NOT EXISTS cycling.cyclist_category (
  category text,
  points int,
  id UUID,
  lastname text,
  PRIMARY KEY (category, points)
)
WITH CLUSTERING ORDER BY (points DESC);

建立複合分割鍵

建立一個最佳化查詢的表格,依據自行車手的年度排名

CREATE TABLE IF NOT EXISTS cycling.rank_by_year_and_name (
  race_year int,
  race_name text,
  cyclist_name text,
  rank int,
  PRIMARY KEY ((race_year, race_name), rank)
);

建立帶有向量資料欄的表格

建立帶有向量資料欄的表格

CREATE TABLE IF NOT EXISTS cycling.comments_vs (
  record_id timeuuid,
  id uuid,
  commenter text,
  comment text,
  comment_vector VECTOR <FLOAT, 5>,
  created_at timestamp,
  PRIMARY KEY (id, created_at)
)
WITH CLUSTERING ORDER BY (created_at DESC);

建立帶有凍結 UDT 的表格

建立具有凍結使用者自訂類型 (UDT) 的 race_winners 表格

CREATE TABLE IF NOT EXISTS cycling.race_winners (
  cyclist_name FROZEN<fullname>,
  race_name text,
  race_position int,
  PRIMARY KEY (race_name, race_position)
);

請參閱 建立使用者自訂類型,以取得建立 UDT 的相關資訊。如果在使用者自訂類型建立中只使用非集合欄位,則可以建立非凍結的 UDT。如果表格建立時使用非凍結的 UDT,則可以 更新和刪除個別欄位值

建立帶有 CDC 記錄的表格

cyclist_id 表建立變更資料擷取記錄

CREATE TABLE IF NOT EXISTS cycling.cyclist_id (
  lastname text,
  firstname text,
  age int,
  id UUID,
  PRIMARY KEY ((lastname, firstname), age)
);

必須在 cassandra.yaml 中啟用 CDC 記錄。

在啟用 CDC 記錄之前,請規劃移動和使用記錄資訊。在磁碟空間達到限制後,寫入啟用 CDC 的表格會遭到拒絕,直到釋出更多空間。請參閱 變更資料擷取 (CDC) 空間設定,以取得有關可用 CDC 設定的資訊。

依遞減順序儲存資料

下列範例顯示表格定義,其中會先儲存點數最高的類別。

CREATE TABLE IF NOT EXISTS cycling.cyclist_category (
  category text,
  points int,
  id UUID,
  lastname text,
  PRIMARY KEY (category, points)
)
WITH CLUSTERING ORDER BY (points DESC);

從表格 ID 還原以重播提交記錄

使用原始 ID 重新建立表格,以便透過重播提交記錄來還原表格資料

CREATE TABLE IF NOT EXISTS cycling.cyclist_emails (
  userid text PRIMARY KEY,
  id UUID,
  emails set<text>
)
WITH ID = '1bb7516e-b140-11e8-96f8-529269fb1459';

若要擷取表格的 ID,請查詢 system_schema.tablesid 欄位。例如

SELECT id
FROM system_schema.tables
WHERE keyspace_name = 'cycling'
  AND table_name = 'cyclist_emails';

若要還原表格,請參閱 備份 以取得更多資訊。