天天看點

Impala查詢功能測試1. 準備測試資料2. 檢視表結構3. impala-shell 指令4. 導入資料并查詢5. join 連接配接查詢6. 聚合查詢

關于 impala 使用方法的一些測試,包括加載資料、檢視資料庫、聚合關聯查詢、子查詢等等。

以下測試以 impala 使用者來運作:

準備一些測試資料,tab1.csv 檔案内容如下:

tab1.csv 檔案内容如下:

将這兩個表上傳到 hdfs:

在 impala 中建表,建表語句如下:

其中 tab1 和 tab2 都是外部表,tab3 是内部表。

将上面 sql 儲存在 init.sql 語句,然後運作下面指令進行建立表:

也可以進入到 impala-shell 指令行模式,直接運作 sql 語句。

檢視所有資料庫:

檢視預設資料庫下的所有表:

檢視 tab1 表結構:

使用 impala-shell 進入指令行互動模式:

傳入一個檔案:

執行指定的 sql:

導入資料:

準備資料

建立表

加資料導入到建立的表

查詢資料:

帶 offset 語句查詢

帶 offset 語句查詢,需要和 order by 一起使用,起始編号從 0 開始往後偏移,offset 為 0 時,其結果和去掉 offset 的 limit 結果一緻。

測試如下:

以上 sql 語句等同于下面語句,用法同樣适用于多個字段:

由上可以看到左邊表 tab1 的記錄都查詢出來了,右邊表 tab2 隻查詢出跟 tab1 關聯的記錄。

以上語句可以修改為:

查詢結果為:

如果去掉 where 語句,會提示錯誤:

impala 允許自連接配接,例如:

為了避免産生大量的結果集,impala 不允許下面形式的笛卡爾連接配接:

如果,你的确想使用笛卡爾連接配接,建議使用 cross join:

預設地,impala的兩表連接配接需要一個等值的比較,或者使用 on、using、where 語句。在impala 1.2.2 之後,非等值連接配接也支援。同樣需要避免因為産生大量的結果集而造成記憶體溢出。一旦你想使用非等值連接配接,建議使用 cross 連接配接并增加額外的 where 語句。

查詢出來的結果會有一些重複的記錄,這個時候可以通過 distinct 去重。

左半連接配接是為了實作 in 語句,左邊的記錄會查詢出來,而不管右邊表有多少比對的記錄。impala 2.0版本之後,支援右半連接配接。

impala 不支援 natural join 操作,以避免産生不一緻或者大量的結果。自然連接配接不适應 on 和 using 語句,而是自動的關聯所有列相同值的記錄。這種連接配接是不建議的,特别是當表結構發生變化的時候,如添加或者删除列的時候,會産生不一樣的結果集。

impala 2.0 / cdh 5.2 以上版本中支援反連接配接,包括左反連接配接和右反連接配接。左反連接配接的意思是傳回左邊表不在右邊表中的記錄。

找出 tab2 的 id 不在 tab1 中的記錄:

聚合關聯查詢:

聚合關聯子查詢:

impala 2版本中,支援where 條件子查詢,包括 in 、exists 和比較符的子查詢:

插入查詢:

這時候查詢 tab3 的記錄: