HIVE子查詢轉換成連線

2021-08-30 02:42:49 字數 1082 閱讀 7957

在hive中進行子查詢,經常會報不支援子查詢的錯誤,導致有些sql可能在mysql中可以使用但是在hive中卻無法使用,因此在hive中可以採用連線替換子查詢的方式。

hive有一種連線方式,叫做左半連線,關鍵字為:left semi join,這種連線方式與左連線類似,但是屬於一種查詢的方式。

教師表(teacher):

idname1小六

2小七3小八

4小九授課表(course):

idcourse_name

teacher_id

1編譯原理12

資料庫1

3作業系統24

計算機網路

3那麼對於mysql來說,我想要查詢有課程安排的老師,sql可以這樣寫:

select * from teacher

where id in (

select teacher_id from course

);

這樣的子查詢(簡單舉例,這樣的子查詢在hive是支援的)我們在hive中轉換成如下的**:

select * from teacher t1

left semi join

course t2

on t1.id = t2.teacher_id

得到的結果就是:

idname1小六

2小七3小八

實際上左半連線與連線有很大的差異,它並不會把右邊的資料展現出來。 左半連線使用的右表僅僅是乙個篩選條件,而on 就是替代了sql種的in的作用,右表就是in中的表。

左半連線由於只有左表的資料,因此在連線外面是無法使用右表的字段作為where條件的,對於整個語句來說,只有左表的字段才是合法字段。

左連線的話,如果關聯的key在右邊有多條資料,很有可能導致左表的資料產生**,例如本次的例子,改用左連線的結果:

idname

idcourse_name1小六

1編譯原理1小六

2資料庫2小七

3作業系統3小八

4計算機網路4小九

null

null

這樣會導致左表資料產生**

將串列埠轉換成TCP連線

在linux環境下,可以使用socat命令將串列埠轉換成tcp連線,也可以轉換成其它形式的socket連線。理論上講,在windows上通過cygwin也可以完成同樣的功能。mingu.zhengatgmaildotcom sudo socat file dev ttys0,b115200,inlc...

漢字轉換成拼音

c 乙個有用的漢字轉拼音類 c 漢字轉換為拼音的類,含大小寫轉換 因為是靜態函式 呼叫方法很簡單 crazycoderpinyin.convert 瘋狂 如下 using system using system.collections.generic using system.text using ...

分數轉換成小數

問題描述,輸入兩個整數a,b,將分數輸出a b的小數格式,如果a b是迴圈小數,則將迴圈部分用括號括起來,例如 1 4 0.25 1 3 0.3 1 6 0.1 6 分析 實質上是實現高精度浮點數除法。借助雜湊表來獲取迴圈部分。public class solution static int b i...