天天看點

Impala——Impala原理知識以及與Hive的差別(持續更新中...)Impala Metadata and the MetastoreImpala RefreshImpala與Hive在文法上的差別

文章目錄

  • Impala Metadata and the Metastore
  • Impala Refresh
    • 1. 為什麼要執行refresh語句
    • 2. 如何執行refresh語句
  • Impala與Hive在文法上的差別
    • 1. Impala不支援Date類型
    • 2. union字段類型
    • 3. 中文占用的長度
    • 4. 不相容的函數
    • 5. 數字的Int類型和String類型

Impala Metadata and the Metastore

Impala和Hive在底層是共用相同的中繼資料庫的,比如MySQL或者PostgreSQL,是以,Impala才能被Hive定義加載的表,不過前提是表中的列要使用Impala支援的資料類型、檔案格式和壓縮編碼。

對于那些大資料量多分區的表,要擷取這些表的所有中繼資料可能是比較耗時的。是以,Impala為了後期重用同一張表的中繼資料,會提前将所有的中繼資料緩存到每一個Impala節點,以提升查詢效率。但也是以帶了一些不便,看下面refresh内容。

Impala Refresh

1. 為什麼要執行refresh語句

從上面我們可以知道,Impala會緩存表的中繼資料,但是一旦表定義或者表資料發生了更新的話,再去查詢表之前就要先更新中繼資料。Impala1.2及之後的版本,對于在Impala中執行的DDL和DML語句,catalogd 程序是會自動更新中繼資料,但是在Hive中執行的DDL和DML語句或者是手動變更HDFS檔案的情況,還是要使用REFRESH語句或者INVALIDATE METADATA語句,才能使新的變更生效。

2. 如何執行refresh語句

  • 重新整理指定表的中繼資料。

    重新整理指定表執行如下語句:

    REFRESH table_name
               
    這種方式适用于有新資料添加到已存在表的情況。
  • 重新整理所有表的中繼資料。

    重新整理所有表執行如下語句:

    INVALIDATE METADATA
               
    這種方式适用于建立了新表、删除了表、執行了HDFS Rebalance操作和删除了資料檔案等情況。

Impala與Hive在文法上的差別

1. Impala不支援Date類型

Impala是不支援Date資料類型的。

Hive支援Date資料類型。

2. union字段類型

Impala中兩表union時,對應字段的資料類型必須一緻(比如,int類型不能和空字元串""union。

而Hive中是允許的。

3. 中文占用的長度

Impala中一個中文占3位,

Hive中一個中文占1位。

4. 不相容的函數

Hive中支援而Impala不支援的函數:

  • date_format()
  • current_date()

5. 數字的Int類型和String類型

在Hive中,比較同一個數字的int類型和String類型,結果是相等的。如下SQL結果傳回true:

而Impala不支援不同資料類型之間的比較。