相容性、棄用和遷移計畫
測試計畫
當前狀態:已接受
討論線索:
jira:flink-14386 - support computed column for create table statement open在任務flink-10232中,我們在新模組flink-sql-parser中引入了create table
語法。在設計文件flink sql ddl中,我們建議使用計算列來描述process time的時間屬性,因此使用者可以建立乙個具有process time屬性的表,如下所示:
create
table t1(
a int
, b bigint
, c varchar
, d as proctime,
)with
('k1'
='v1'
,'k2'
='v2'
);
d欄位將成為t1表的乙個process time屬性
除此之外,計算列還有以下作用:
ms-sql-2016[1]、mysql-5.6[2]和oracle-11g[3]中引入了計算列
計算列語法
結合ms-sql-2017[1]和mysql-5.6[2]的語法,我們提出計算列語法如下:
col_name as expr
[comment
'string'
]
限制:
initializerexpressionfactory
initializerexpressionfactory定義計算列值的生成策略。它將為每個虛擬列生成乙個rexnode,可以在邏輯計畫中使用它來派生我們想要的值。下面的圖表說明了它對select語句的工作原理:
tablecolumn描述表的列定義,包括列名、列資料型別和列策略的定義。
tableschema
tableschema描述用於內部和當前聯結器的表結構。
計畫重寫
假設我們有乙個名為t2的表,其schema如下:
create
table t2(
a int
, b as a +
1 virtual,
c bigint
, e varchar
)with
( k1=v1,
k2=v2
);
讀取如果t2表用作掃瞄表(source表),t2的列b將在掃瞄正上方的投影中計算。這意味著,我們將從掃瞄節點到掃瞄上方的投影進行等價轉換。
我們將為所有虛擬計算列新增投影表示式,tablesource行型別應排除這些虛擬列。
寫入
如果t2表用作插入目標表(sink表),t2列b被完全忽略,因為它是虛擬的(不儲存)。
我們將計算非虛擬列並將其插入到目標表中。tablesink行型別應排除這些虛擬列。
注意:這些計畫重寫發生在sql-to-rel轉換階段。
對於scan,從表示式計算虛擬列;從實際表源查詢儲存列。
對於sink,虛擬列被忽略;儲存的列在插入接收器時從表示式計算。
我們將擴充套件tableschema以支援計算列(我們應該始終在**中保留乙個tableschema,將來聯結器只能看到行型別,而不能看到tableschema,所以我們不應該擔心這個問題)
我們將引入乙個名為tablecolumn的新結構來儲存列名、列資料型別和列策略資訊。tableschema持有tablecolumn,而不是原始欄位名和字段資料型別。
在tableschema中,我們在推導行型別時總是忽略虛擬列。此行型別對應於source的輸出物理型別和sink的輸入物理型別。
我們將把tableschema的tablecolumn資訊放入catalogtable屬性中,這些屬性將用於持久化。對於每個列表示式,有三個項要持久化:
反序列化時,我們使用sqlparser將表示式字串解析為sqlnode,然後將其轉換為rexnode並應用投影。
這是乙個新功能,與舊版本的flink相容。我們可以擴充套件tablesourcetable以支援計算列介面,但這對使用者是透明的。
對於每個新特性,都可以使用單元測試來測試實現。我們還可以為聯結器新增整合測試,以驗證它是否可以與現有的source實現相容。
參考文獻
[1]
[2]
[3]
FLIP動畫思想
flip是一種助記縮寫也是一種 paul lewis首創 的技術,代表 first,last,invert,play。他的文章包含了對這一技術的乙個很好的解釋,但我會在這裡概括一下 first 記錄元素動畫前的位置和尺寸 last 記錄元素動畫後的位置和尺寸,可以直接修改style,讓元素瞬移過去 ...
vue之flip動畫解析
template div ul class container li v for item in base key item.id ref lis div class item style backgroundcolor item.c div li ul el button click sort 排...
CSS3實現翻轉 Flip 效果
今天,我們用比較簡潔的css3來實現翻轉效果。當滑鼠滑過包含塊時,元素整體翻轉180度,以實現 正 反 面的切換。分析 container,flip為了實現動畫效果做準備。front,back各包裹一張。實現該效果的html如下 1.元素布局 為了實現以上效果,先進行元素布局。給.front,bac...