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

通配符列

通配符列是指列名由通配符組成的列,多用于模糊匹配、動態列寫入等場景,可以更靈活地匹配和查找目標列。在Lindorm寬表引擎中使用通配符列,可以滿足多數據類型動態寫入的需求。本文介紹通配符列的使用限制及使用方法。

背景信息

在大數據量的場景下,傳統SQL通常無法滿足業務需求。例如車聯網場景,數據通常有幾百甚至上千個列,且這些列多數情況下并不是固定的。如果此時想要寫入新的列,則需要執行ALTER TABLE語句,這樣的操作非常影響寫入效率。

Lindorm支持動態列,可以動態寫入數據并執行查詢。但動態列支持的數據類型較少,目前僅支持VARBINARY類型的數據寫入。為解決這一問題,Lindorm推出通配符列,幫助您實現多數據類型動態列的寫入。

通配符列名目前支持的通配符為星號(*)和英文問號(?)。系統會將通配符匹配到的列中的數據轉換為指定數據類型。詳細規則如下:

  • 英文問號(?)可以匹配任何單個字符。

  • 星號(*)可以匹配任意字符序列,包括空字符序列。

例如,在表結構中加入通配符列c* int,則可以任意寫入列名以“c”開頭的列(例如c10、c11、c20等),并且這些列中的數據都會被轉換為INT數據類型。

前提條件

寬表引擎為2.5.3及以上版本。如何查看或升級當前版本,請參見寬表引擎版本說明升級小版本

使用限制

  • 通配符列不能作為主鍵。

  • 對于包含通配符列的表,使用SELECT *語句進行查詢時,必須添加LIMIT限制。例如,SELECT * FROM t_dynamic_columns LIMIT 10;

  • 僅支持為通配符列創建搜索索引,不支持二級索引。例如,不支持CREATE INDEX idx on tb(c2*)

  • 不支持使用含通配符的列名進行數據查詢。SELECT和WHERE條件中必須填寫實際的列名,不支持填寫通配符列名。例如,不支持SELECT c1*,c2 WHERE c2 > 10;SELECT c1*,c2 WHERE c1* > 10;。正確語法例如SELECT pk, c1, c2, c21, c31 WHERE c21 > 10 AND c31 < 'c300'

DDL

創建表tb,設置pk為主鍵列,并在WITH條件中指定通配符列c2*c3*,類型分別為BIGINT和VARCHAR。

CREATE TABLE tb(pk integer, c1 varchar, `c2*` bigint, `c3*` varchar, primary key(pk)) WITH(wildcard_column='c2*,c3*');

根據表tb的創建規則,列名以c2開頭(如c2、c21、c22)且數據類型為BIGINT的列,都可以被寫入表tb中;數據類型為非BIGINT但符合匹配規則的列,則會被轉化為BIGINT類型寫入。列名以c3開頭(如c32、c33、c35)且數據類型為VARCHAR的列都可以被寫入表tb中;數據類型為非VARCHAR但符合匹配規則的列,則會被轉化為VARCHAR類型寫入。

搜索索引

支持為通配符列創建搜索索引。符合通配符匹配規則的列,都會被索引至搜索索引中。

 CREATE SEARCH INDEX IF NOT EXISTS sidx ON tb(`c2*`, `c3*`);

DML

寫入

寫入數據時,寫入列的列名需要滿足以下兩點要求:

  • 符合通配符列的匹配規則。

  • 數據類型符合通配符列的定義類型。

UPSERT INTO tb(pk, c1, c2, c21, c22, c31) values (1, 'a1', 2, 21, 22, 'c3');