文章目錄
- 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
-
重新整理所有表的中繼資料。
重新整理所有表執行如下語句:
這種方式适用于建立了新表、删除了表、執行了HDFS Rebalance操作和删除了資料檔案等情況。INVALIDATE METADATA
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不支援不同資料類型之間的比較。