2017-07-19 47 views
1

我想使用Flink Table API在同一個字段上連接兩個表。Flink Table API:連接具有重疊字段名稱的表

我想要實現

SELECT 
    a.id 
    b.id 
FROM 
    table1 AS a 
JOIN 
    table2 AS b 
ON 
    a.id = b.id 

我試過了,但發現來實現我的目標的唯一途徑就是像

val table1 = tableEnv.fromDataSet(dbData, "id1") 
val table2 = tableEnv.fromDataSet(dbData, "id2") 
val res = table1.join(table2).where("id1=id2") 

但我想重用鍵「ID」。

我發現這對弗林克文檔:

兩個表必須有不同的字段名和平等的聯接謂詞必須使用WHERE或過濾操作進行定義。

如何重新使用提交的密鑰?

回答

0

連接結果的模式是兩個輸入模式的連接。 例如,如果您有left: [a, b, c]right: [d, e, f],則leftright的加入結果是一個新的Table,其模式[a, b, c, d, e, f]

如果leftright具有相同名稱的字段,則後續操作(例如select)無法識別該字段而沒有歧義。

,因爲有兩個字段的結果稱爲id所以基本上

val left: Table = ??? // [id, valLeft] 
val right: Table = ??? // [id, valRight] 
val result: Table = left.join(right).where('id === 'id) 

相當於一個SQL查詢

SELECT l.id AS id, l.valLeft, r.id AS id, r.valRight 
FROM left l, right r 
WHERE l.id = r.id 

這SQL查詢也將不被接受。

您可以通過

  • 僅重命名輸入字段的一個解決問題和再利用等
  • 重命名這兩個輸入框和後與加入重命名其中的一個as