2017-03-17 64 views
0

我有兩個意見。 V1和V2。我有columnNames和他們各自的數據類型。 有沒有一種方法,我可以找出哪些列(數據類型)可以是V1和V2之間的連接條件。找出兩個表之間的可連接數據類型

實施例:

V1 - >

ID:整數

名稱:VARCHAR

DOB:日期

V2->

ID:BIGINT

薪酬:REAL

性別:布爾

所以,如果我想執行聯接我需要返回給用戶:

V1 - > ID(整數)可與V2被連接 - > ID,薪水。 (性別不能在那裏由於沒有聯接可以用布爾數據類型來執行)

同樣V1 - >名稱(VARCHAR)可以與(ID,薪水)加入

所以最終我需要一個JSON: {ID:ID,Salary} {Name:ID,Salary}

有什麼方法可以確定兩個數據類型是否可以連接?

謝謝。

+0

是否可以/應該在連接中使用屬性較少依賴於各自的數據類型,更多依賴於屬性實際包含的數據。當然,我可以加入ID和Age(兩者都可能是int),但這樣做沒有意義。 – HoneyBadger

+0

我知道這沒有意義。以上只是一個例子。因爲我覺得沒有辦法根據屬性(列)的名稱找出確切的連接,所以我希望用戶通過數據類型來選擇相應的屬性。 –

+0

我不明白這可能是一個問題。你知道視圖中有什麼數據,對嗎?那麼爲什麼你必須猜測如何加入? – HoneyBadger

回答

0

好吧,所以你實際上不要有一個數據模型,它定義了兩個表如何結合在一起。這聽起來像是其中一個「用戶端報告工具」,其中一個應該能夠以表格形式任意連接數據。

這一切都很好,但它意味着如何提出潛在的加入標準並沒有硬性規定。在這樣的情況下,你需要經驗法則,也就是「啓發式」。

這樣的啓發式方法已經在許多工具中實現,通常不會遵循任何「標準」,但大多數情況下(至少,我所見過的)試圖按照常識行事。 一種這樣的規則肯定是:

「當我看到走起來像鴨子,游泳像鴨子, 叫聲也像鴨子一隻鳥,我稱之爲鳥鴨子」 quote reference

我的意思是:你試圖匹配一起的數據類型,至少在域級別。因此,時間日期列可以與其他時間日期列一起使用,錢列可以與其他貨幣列一起使用,將列集與其他地址列集合在一起。

這種匹配不會幫助找到任何意義上的聯繫,但他們可以幫助清除那些根本沒有任何意義的聯繫。 不幸的是,這種方法比僅僅查看用於存儲數據的技術數據類型要複雜得多。例如,日期可以很容易地存儲在任何種類的數據類型中。存儲在文本列中的日期非常常見 - 所以您需要嘗試確定何時出現這種情況。

提示可能是列名('date','dt','day'等等)或實際內容(格式匹配'YYYY-MM-DD'或'DDMMYY'或'....')。

其他列類型可能存在類似提示,並且成功預測正確的數據域是數據挖掘工具的主要任務之一。由於數據通常很混亂,這不是一項簡單的任務。

回到你原來的問題:沒有HANA功能可以爲你做到這一點,而且僅僅在查看技術數據類型(可能太簡單/愚蠢以覆蓋天真測試用例之外的任何東西)和一套廣泛的啓發式用於猜測列條目的正確語義域。

+0

感謝@Lars的建議。 解決方案我去了什麼(有些類似於你的建議,因爲它的所有內容都違反了常識。)將數據類型分爲三大類: 1.整數類型2.數據/時間3. Varbinary/BLOB參數。 給了用戶選擇的選項。如果某種情況下,用戶選擇錯誤的選擇,然後立即從後端拋出一個錯誤(錯誤 - 這是一個不錯的工作!) 再次感謝拉爾斯。 :) –