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

本節介紹DDL語法的說明和示例。

概述

Lindorm CQL將數據存儲在表中,其模式定義了表中所述數據的布局,并且這些表被分組在鍵空間中。Keyspace定義了許多選項,這些選項適用于它包含的所有Table,其中最主要的是Keyspace使用的復制策略,這里Lindorm CQL并不支持Keyspace的復制策略定義,以及副本數的定義,都是默認定義的值。Lindorm CQL支持使用CQL語言操作Lindorm高性能二級索引以及Lindorm全文索引Search Index,滿足用戶對于索引的使用需求。

Keyspace和Table的語法定義

Lindorm CQL Keyspace語法定義:

keyspace_name ::=  name
name          ::=  unquoted_name | quoted_name
unquoted_name ::=  re('[a-zA-Z_0-9]{1, 48}')
quoted_name   ::=  '"' unquoted_name '"'

Lindorm CQL Table語法定義:

table_name    ::=  [ keyspace_name '.' ] name
name          ::=  unquoted_name | quoted_name
unquoted_name ::=  re('[a-zA-Z_0-9]{1, 48}')
quoted_name   ::=  '"' unquoted_name '"'
說明
  • Keyspace名和Table名都由字母、數字、字符組成,不能為空。

  • Keyspace名和Table名不超過48個字符。該限制主要是為了避免文件名(可能包括Keyspace名和Table名)超過某些文件的限制系統。

  • 默認情況下,Keyspace名和Table名不區分大小寫,比如myTable和mytable是一樣的。但使用雙引號可強制進行區分,例如“myTable”和"mytable"是不一樣的。

  • 表是Keyspace的一部分,并且表名可以由Keyspace名進行強制限定,比如:鍵空間KS和鍵空間GC都具有表Table,但他們的表名分別為ks.table和gc.table。

索引

Lindorm CQL同時支持二級索引和基于搜索引擎的Search Index。

  • 二級索引

    Lindorm CQL支持在表上創建二級索引,從而允許查詢表時使用這些索引。二級索引由以下名稱定義:

    index_name ::=  re('[a-zA-Z_0-9]+')

    如果要使用高性能二級索引,請參見二級索引

  • Search Index

    Search Index支持的功能如下:

    • 多維查詢。給定多個列的隨機組合,快速返回查詢結果。

    • 排序。提供Order By能力,返回結果按照任意指定列進行排序。

    • 模糊匹配。

    如果您想要通過Lindorm CQL使用Search Index,需要先在Lindorm上開通全文檢索以及LTS服務,請參見搜索索引介紹

CREATE KEYSPACE

創建Keyspace。

語法

CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name WITH options
說明

Keyspace在Lindorm中類似于Namespace的概念,由于底層設計限制,所以Lindorm CQL暫時不支持設置副本復制策略以及副本數,都是使用默認參數。

參數

參數名稱

示例值

描述

keyspace_name

testks

鍵值空間名稱。

options

replication

目前取值固定為replication和durable_writes。

  • replication:Map類型。表示副本的默認數據,底層默認2副本存儲。

  • durable_writes:Boolean類型。表示數據是否持久化寫入。默認值為True。

示例

CREATE KEYSPACE testks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
說明

Lindorm CQL Keyspace兼容層暫時不支持設置replicationdurable_writes屬性,您可以看到默認的2副本或者默認值為True的durable_writes屬性,后續會開放對應功能設置。

ALTER KEYSPACE

修改Keyspace的選項。

語法

ALTER KEYSPACE keyspace_name WITH options
說明

ALTER KEYSPACE語句中的options和CREATE KEYSPACE語句中的options是一樣的,但是由于Keyspace級別的options都是默認的,所以無需修改。

參數

ALTER KEYSPACE語句中的options和CREATE KEYSPACE語句中的options是一樣的,請參見參數說明

示例

ALTER KEYSPACE testks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

USE

使用某個Keyspace。Lindorm CQL中的許多對象都綁定到一個鍵空間(表、用戶定義的類型、函數等),并且當前鍵空間是在引用這些對象而沒有完全限定的名稱(即沒有前綴)時使用的默認鍵空間、鍵空間名稱。

語法

USE keyspace_name

參數

參數名稱

示例值

描述

keyspace_name

testks

鍵值空間名稱。

示例

USE testks;

DROP KEYSPACE

刪除Keyspace。

語法

DROP KEYSPACE [ IF EXISTS ] keyspace_name
說明
  • 使用DROP KEYSPACE刪除Keyspace會立即生效并且不可恢復,包括Keyspace中的所有表、UTD和函數以及這些表中包含的所有數據。

  • 如果Keyspace不存在,使用該語句系統會返回錯誤。除非您使用IF EXISTS,系統不返回錯誤,但該操作為無效操作。

  • 只有root用戶具有DROP KEYSPACE的權限。

參數

參數名稱

示例值

描述

keyspace_name

testks

鍵值空間名稱。

示例

DROP KEYSPACE testks;

CREATE TABLE

創建TABLE。

語法

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 ] [ PRIMARY KEY]
primary_key            ::=  partition_key [ ',' clustering_columns ]
partition_key          ::=  column_name
                            | '(' column_name ( ',' column_name )* ')'
clustering_columns     ::=  column_name ( ',' column_name )*
table_options          ::=  CLUSTERING ORDER BY '(' clustering_order ')' [ AND options ]
                            | options
clustering_order       ::=  column_name (ASC | DESC) ( ',' column_name (ASC | DESC) )*

說明

Lindorm CQL表具有名稱,由一組行組成。創建TABLE表示將定義一行數據將由哪些列組成,哪些列將組成主鍵(Primary Key)以及該表的可選選項(Table Options)。除非使用IF NOT EXISTS語句,否則創建一個已經存在的表將返回錯誤。

Lindorm CQL表中的每一行都有一組預定義列,這些預定義列在創建表時定義(或后面使用ALTER語句添加)。

column_definition主要由定義的列的名稱和類型組成,它限制了該列接受哪些值。此外,列定義可以具有以下修飾符:

  • STATIC:表示將列聲明為靜態列(暫不支持)。

  • PRIMARY KEY:表示該列是表主鍵的唯一組成部分。

在一個表中,一行數據由其PRIMARY KEY唯一標識,因此所有表都必須定義一個PRIMARY KEY(只有一個)。PRIMARY KEY定義由表中定義的一列或多列組成。在語法上,主關鍵字定義為關鍵字PRIMARY KEY,后跟用括號括起來的列名稱的列表,該列名稱用括號括起來,但是如果主鍵只有一列,則可以用PRIMARY KEY關鍵字替換該列定義。主鍵中定義的列的順序很重要,將會影響數據的分布和存儲順序。

Lindorm CQL主鍵由兩部分組成:

  • partition key:它是主鍵(Primary Key)的第一部分。它可以是單個列,或者使用附加的括號可以是多個列。一個表總是至少有一個分區鍵。

  • clustering columns:這些是主鍵定義的第一部分之后的列,這些列的順序定義了聚類順序,Lindorm CQL中允許不定義clustering columns

PRIMARY KEY定義的一些示例:

  • PRIMARY KEY(a):a是分區鍵,沒有聚類列。

  • PRIMARY KEY(a,b,c):a是分區鍵,b和c是聚簇列。

  • PRIMARY KEY((a,b),c):a和b組成分區鍵(通常稱為復合分區鍵),c是聚簇列。

在Lindorm CQL中,PRIMARY KEY具有較強的意義,partition keyclustering columns組成PRIMARY KEY,單獨的partition keyclustering columns不具有獨立使用的意義。

在表中,Lindorm CQL定義分區的概念。分區就是一組共享相同分區鍵值的行。請注意,如果分區鍵由多個列組成,則行僅屬于同一分區,并且所有分區鍵列的值都相同。給定以下表定義和內容:

CREATE TABLE persioninfo (
    a int,
    b int,
    c int,
    d int,
    PRIMARY KEY ((a, b), c, d)
);

SELECT * FROM persioninfo;
   a | b | c | d
  ---+---+---+---
   0 | 0 | 0 | 0    // row 1
   0 | 0 | 1 | 1    // row 2
   0 | 1 | 2 | 2    // row 3
   0 | 1 | 3 | 3    // row 4
   1 | 1 | 4 | 4    // row 5

Lindorm CQL中,partition key以及clustering columns共同組成PRIMARY KEY,他們的地位是等價的,Lindorm CQL中partition keycluster column組合在一起共同決定一條數據屬于哪個節點,而不是CQL中由partition key單獨決定一條數據屬于哪個節點,例如上述例子中row1和row2在Lindorm CQL中可以確定是在一個節點中,但是在CQL中并不能保證,這是Lindorm CQL與傳統CQL的較大區別。

示例

CREATE TABLE tb (name text PRIMARY KEY , age int);   //默認創建以name為主鍵的表。
CREATE TABLE ttltb (name text PRIMARY KEY, age int) WITH defult_time_to_live = 1000;  //設置表的ttl時間是1000s。
CREATE TABLE cptb (name text PRIMARY KEY, age int) WITH compression = {'sstable_compression': 'LZ4Compressor'};   //設置壓縮為LZ4壓縮;默認是SNAPPY。
CREATE TABLE hct ( name text PRIMARY KEY , age int  ) WITH extensions = {'COLD_BOUNDARY':'10'};  //設置lindorm的冷熱分離的時間線是10s。

Lindorm CQL Table暫不支持的定義功能

partition key:確定數據分布式從屬的對應節點,Lindorm CQL不能由單一的partition key確定該行數據從屬的物理節點。

支持的table_Option列表

Lindorm CQL的table_options和Cassandra的table_options有一定差異,Lindorm CQL目前支持如下的選項設置。

選項

類型

描述

default_time_to_live

int

表的默認到期時間(“ TTL”),以秒為單位。默認值為0。

compression

map

可以設置對應文件(sstable)的compression算法,支持LZ4、ZSTD、SNAPPY算法。具體請參考下文Compresion介紹。

extensions

map

支持擴展設置,包括設置是否使用冷存儲、使用冷熱分離、表的一致性級別等屬性。具體請參考下文Extensions介紹。

Compression

Lindorm CQL支持如下幾種可配置的壓縮算法,各個壓縮算法的系數暫時使用默認參數進行設置。

  • LZ4(LZ4Compressor)。創建LZ4壓縮的表如下:

    CREATE TABLE persioninfo (
       id int,
       name text,
       address text,
       PRIMARY KEY (id, name)
    ) with compression = {'class': 'LZ4Compressor'};
  • ZSTD(ZstdCompressor)。創建ZSTD壓縮的表如下:

    CREATE TABLE persioninfo (
       id int,
       name text,
       address text,
       PRIMARY KEY (id, name)
    ) with compression = {'class': 'ZstdCompressor'};
  • SNAPP(SnappyCompressor)。創建SNAPPY壓縮的表如下:

    CREATE TABLE persioninfo (
       id int,
       name text,
       address text,
       PRIMARY KEY (id, name)
    ) with compression = {'class': 'SnappyCompressor'};
說明

compression屬性也可以通過ALTER TABLE語法進行修改設置。

Extensions

對于Lindorm的特有屬性我們通過extensions擴展屬性進行設置,擴展屬性如下:

  • 冷存儲。關鍵字為STORAGE_POLICY,配置值為COLD表示冷存儲,DEFAULT表示使用默認熱存儲。

    CREATE TABLE persioninfo (name text PRIMARY KEY, age int) WITH extensions = {'STORAGE_POLICY' : 'COLD'};  //建表指定表為冷存儲。
    ALTER TABLE persioninfo WITH extensions = {'STORAGE_POLICY' : 'DEFAULT'};  //修改表屬性為熱存儲。
  • 冷熱分離。關鍵字為COLD_BOUNDARY,在冷熱分離使用過程中,無需把表或列簇的屬性設置為COLD,如果已經把列簇的屬性設置為了COLD,請您將冷存儲的屬性去除,具體請參考冷存儲介紹

    CREATE TABLE persioninfo (name text PRIMARY KEY, age int) with extensions = {'COLD_BOUNDARY':'86400'};  //建表指定冷熱分離時間線為1天(86400秒),超過時間線數據被寫到冷介質。
    ALTER TABLE persioninfo with extensions = {'COLD_BOUNDARY':''};    //取消冷熱分離。
    ALTER TABLE persioninfo with extensions = {'COLD_BOUNDARY':'1000'};   //修改時間線為1000s。
  • CONSISTENCY_TYPE:對于lindorm多zone場景下,設置表的一致性級別,有eventual、timtstamp、basic、strong四種級別。

    CREATE TABLE persioninfo (name text PRIMARY KEY, age int) with extensions = {'CONSISTENCY_TYPE':'strong'};  //建表一致性級別為strong。
    ALTER TABLE persioninfo with extensions = {'CONSISTENCY_TYPE':'eventual'};  //修改一致性級別為eventual。
  • Mutability:用戶在使用二級索引、search index之前需要設置Mutability,取值:IMMUTABLE、IMMUTABLE_ROWS(CONSISTENCY_TYPE必須為strong),MUTABLE_LATEST(CONSISTENCY_TYPE必須為strong),MUTABLE_ALL(建表默認的級別,CONSISTENCY_TYPE必須為strong)。

    CREATE TABLE persioninfo (name text PRIMARY KEY, age int) with extensions = {'MUTABILITY':'IMMUTABLE'};  //建表指定mutability為IMMUTABLE。
    ALTER TABLE persioninfo with extensions = {'MUTABILITY':'MUTABLE_LATEST'};   //修改表mutability為MUTABLE_LATEST。

暫不支持的table_Option列表

選項

類型

描述

comment

string

表示對表的描述。默認值為f。

speculative_retry

simple simple

默認值為99PERCENTILE。

cdc

boolean

在表上創建一個更改數據捕獲(CDC)日志。默認值為false。

gc_grace_seconds

int

等待垃圾收集墓碑(刪除標記)之前的時間。默認值為86400。

bloom_filter_fp_chance

float

穩定布隆過濾器誤報的目標概率。所述布隆過濾器的大小將確定所提供的概率,因此降低此值會影響內存中和磁盤上布隆過濾器的大小。默認值為0.00075。

compaction

map

默認值為STCS策略。

caching

map

memtable_flush_period_in_ms

map

默認值為0。

read_repair

int

默認值為BLOCKING。

ALTER TABLE

修改TABLE。

語法

ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=  ADD column_name cql_type ( ',' column_name cql_type )*
                             | DROP column_name ( column_name )*
                             | WITH options

說明

ALTER TABLE語句可以進行以下操作:

  • 可以通過ADD指令,將新列添加到表中。由于表的主鍵無法更改,因此新添加的列將永遠不會成為主鍵的一部分。需要注意,緊湊表對列添加有一定的限制。

  • Lindorm CQL暫時不支持DROP column操作。

  • 可以通過WITH指令,更改表的選項。支持修改的表的選項與創建表時的選項相同,但是無法更改CLUSTERING ORDER。Lindorm CQL支持修改default_time_to_livecompressionextensions選項的設置。

示例

CREATE TABLE persioninfo (name text PRIMARY KEY, age int);
ALTER TABLE persioninfo ADD address text;

DROP TABLE

刪除TABLE。

語法

DROP TABLE [ IF EXISTS ] table_name
說明
  • 使用DROP TABLE刪除TABLE會立即生效并且不可恢復,包括Table中的所有數據。

  • 如果TABLE不存在,使用該語句系統會返回錯誤。除非您使用IF EXISTS,系統不返回錯誤,但該操作為無效操作。

  • 只有root用戶具有DROP TABLE的權限。

參數

參數名稱

示例值

描述

table_name

persioninfo

表名稱。

示例

DROP TABLE persioninfo;

TRUNCATE

清空表數據。

語法

TRUNCATE [ TABLE ] table_name
說明
  • 使用TRUNCATE會永久刪除表中所有的數據,但不會刪除表本身的表結構狀態。

  • 只有root用戶具有TRUNCATE TABLE的權限。

參數

參數名稱

示例值

描述

table_name

persioninfo

表名稱。

示例

TRUNCATE TABLE persioninfo;

CREATE INDEX

創建二級索引。

語法

CREATE [ CUSTOM ] INDEX [ IF NOT EXISTS ] [ index_name ]
                                ON table_name '(' index_identifier ')'
                                [ USING string [ WITH OPTIONS = map_literal ] ]
index_identifier       ::=  column_name
                           | '(' column_name ')'

說明

CREATE INDEX語句用于為指定的表中的列自動創建二級索引。您可以在ON關鍵字之前指定索引名。如果該列已經存在數據,則將對其進行異步索引。創建索引后,您在插入數據時,系統將自動為該列的新數據建立索引。

如果創建一個已經存在的索引系統將返回錯誤。如果使用IF NOT EXISTS選項創建一個已經存在的索引,則操作屬于無效操作。

CREATE INDEX語句只支持對單個列進行索引構建。如果想要對表下面的多個列構建索引的話,您可以使用CREATE CUSTOM INDEX語句中的USING 'com.alibaba.lindorm.cserver.schema.index.LindormSecondaryIndex'進行構建。

示例

CREATE INDEX myindex ON persioninfo (c2);
CREATE INDEX ON persioninfo (c2);
CREATE CUSTOM INDEX myindex ON persioninfo (c1,c2) USING 'com.alibaba.lindorm.cserver.schema.index.LindormSecondaryIndex';

DROP INDEX

刪除二級索引。

語法

DROP INDEX [ IF EXISTS ] index_name
說明
  • 使用DROP INDEX語句用于刪除已存在的二級索引。語句的變量是索引名稱index_name,可以選擇指定索引的鍵空間。

  • 如果索引不存在,使用該語句系統會返回錯誤。除非您使用IF EXISTS,系統不返回錯誤,但該操作為無效操作。

示例

DROP INDEX myindex;

CREAT SEARCH INDEX

創建全文索引。

語法

CREATE SEARCH INDEX [ IF NOT EXISTS ] index_name ON [keyspace_name.]table_name
| [ WITH [ COLUMNS (column1,...,columnn) ]
| [ WITH [ COLUMNS (*) ]
說明
  • CREATE SEARCH INDEX語句支持在源數據表的某些列上構建全文索引。

  • WITH COLUMNS(column):指定某個或某幾個列構建SEARCH INDEX,各column間以英文逗號(,)分隔。

  • WITH COLUMNS(*):使用(*)符號表示對所有列構建全文索引。

  • 創建SEARCH INDEX的表需要對源數據表的屬性通過Extension進行擴展。如果是Lindorm多Zone場景下,默認需要指定一致性以及MUTABLE屬性,非多Zone場景下不需要進行設置。

示例

CREATE SEARCH INDEX schidx ON persioninfo WITH COLUMNS (c2, c3); 

DROP SEARCH INDEX

刪除全文索引。

語法

DROP SEARCH INDEX [IF EXISTS] ON [keyspace_name.]table_name;

示例

DROP SEARCH INDEX ON testks.persioninfo;

REBUILD SEARCH INDEX

將索引狀態設置為有效。

語法

REBUILD SEARCH INDEX [ASYNC] [IF EXISTS] ON [keyspace_name.]table_name;
說明

全文索引構建完成以后,索引的狀態是INACTIVE的,需要手動執行REBUILD操作,才能將索引狀態置為有效。執行REBUILD操作還會為存量數據構建SEACH INDEX,整個過程會比較漫長,可以通過ASYNC參數指定此次構建是異步操作。

示例

REBUILD SEARCH INDEX ON persioninfo;
REBUILD SEARCH INDEX ASYNC ON persioninfo;

ALTER SEARCH INDEX

修改全文索引的狀態、手動添加索引列或者刪除索引列。

語法

ALTER SEARCH INDEX SCHEMA [IF EXISTS] ON [keyspace_name.]table_name
  ( ADD FIELD column_name
  | DROP FIELD column_name) ;
說明
  • 使用ALTER SEARCH INDEX修改全文索引的狀態后,需要使用REBUILD 重建索引的狀態。

  • 添加ADD SEARCH INDEX或刪除DROP SEARCH INDEX的索引列需要在源數據表中存在。

示例

ALTER SEARCH INDEX SCHEMA ON persioninfo ADD  (c3);
ALTER SEARCH INDEX SCHEMA ON persioninfo DROP  (c2);