?根據(jù)個人理解整理,大佬們有更好的想法可以評論
-
Row
首先,Row是一種固定長度、可識別空值的復(fù)合類型,使用確定的字段順序存儲多個值。 無論字段的類型如何,每個字段都可以為空。 無法自動推斷行字段的類型; 因此,無論何時生成一行,都需要提供類型信息。
Row 的主要目的是在 Flink 的 Table 和 SQL 生態(tài)系統(tǒng)以及其他 API 之間架起一座橋梁。 因此,行不僅由模式部分(包含字段)組成,而且還附加了一個 RowKind 用于對更改日志中的更改進(jìn)行編碼。 因此,可以將一行視為更改日志中的一個條目。 例如,在常規(guī)批處理方案中,更改日志將包含 RowKind.INSERT 行的有界流。 行種類與字段分開,可以使用 getKind() 和 setKind(RowKind) 訪問。
Row有三種模式:
Position-based field mode:根據(jù)位置設(shè)置field
Name-based field mode:根據(jù)fieldName設(shè)置
Hybrid / named-position field mode:混合模式
-
RowData
首先,RowData是一個接口噢,有很多基于接口的實(shí)現(xiàn),其中可以看下GenericRowData的構(gòu)造函數(shù),基本就明白了,傳入rowKind以及參數(shù)個數(shù)。RowData是在運(yùn)行時通過 Table API 或 SQL 管道傳輸?shù)乃许敿壗涌凇?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-628479.html
private final Object[] fields;
private RowKind kind;
public GenericRowData(RowKind kind, int arity) {
this.fields = new Object[arity];
this.kind = kind;
}
所以總結(jié)下來可以這樣理解,Row為RowData的低階數(shù)據(jù)類型,常常用于DataStream中的使用;而RowData是通過不同的Conveter轉(zhuǎn)換Row得到的高階數(shù)據(jù),用于TableAPI和Sql中使用?;兩者中的存儲內(nèi)容基本是一致的。文章來源地址http://www.zghlxwxcb.cn/news/detail-628479.html
到了這里,關(guān)于【Flink】Table\Sql API 筆記:Row和RowData的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!