在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...