Hive 面試問題

banq發表於2021-12-23

什麼是Hive?
Hive是適用於 Hadoop 的資料倉儲系統,有助於輕鬆進行資料彙總、即席查詢以及對儲存在 Hadoop 相容檔案系統中的大型資料集的分析。
Hive 最初是在 Facebook 開發的。它現在是一個有許多貢獻者的Hadoop子專案。使用者只需要關注頂級的 hive 語言,而不是 java map reduce 程式。Hive 的主要優點之一是它的 SQLish 特性。因此,它在更高的程度上利用了可用性。
hive 程式將自動編譯為在 Hadoop 上執行的 map-reduce 作業。此外,HiveQL 支援將自定義 map-reduce 指令碼插入到查詢中。
從名為 tbl_employee 的 hive 表中選擇工資超過 100 美元的員工姓名:

SELECT employee_name FROM tbl_employee WHERE salary > 100;

與 SQL 非常相似。
 

Hive中有哪些表型別?
有兩種型別的表。
1. 託管表。
2. 外部表。
只有 drop table 命令區分託管表和外部表。否則,兩種型別的表都非常相似。
  

Hive 是否支援記錄級別的插入、刪除或更新?
Hive不提供記錄級別的更新、插入或刪除。此後,Hive 也不提供事務。但是,使用者可以透過 CASE 語句和 Hive 的內建函式來滿足上述 DML 操作。因此,RDBMS 中的複雜更新查詢可能需要 Hive 中的多行程式碼。
 

什麼樣的資料倉儲應用適合Hive?
Hive 不是一個完整的資料庫。Hadoop 和 HDFS 的設計約束和限制對 Hive 的功能施加了限制。
Hive 最適合資料倉儲應用程式,其中

  • 1)分析相對靜態的資料,
  • 2) 不需要快速響應時間,並且
  • 3) 當資料沒有快速變化時。

Hive 不提供 OLTP、線上事務處理所需的關鍵功能。它更接近於 OLAP 工具、線上分析處理。因此,Hive 最適合資料倉儲應用程式,其中維護和挖掘大型資料集以獲得洞察力、報告等。
 

hive中表的列如何寫入檔案?
透過在 shell 中使用 awk 命令,可以將 HiveQL (Describe) 的輸出寫入檔案。

hive -S -e “describe table_name;” | awk -F” ” ’{print 1}’ > ~/output

 

Hive 中的 CONCAT 函式?

CONCAT (‘Hive’,’-‘,’performs’,’-‘,’good’,’-‘,’in’,’-‘,’Hadoop’);


輸出:
Hive-performs-good-in-Hadoop
CONCAT適合'-'分隔字串。如果所有字串都通用,則 Hive 提供另一個命令 CONCAT_WS。在這裡,您必須首先指定分隔符。

CONCAT_WS (‘-‘,’Hive’,’performs’,’good’,’in’,’Hadoop’);

Output: Hive-performs-good-in-Hadoop

 

以 Hive 中的 REPEAT 函式為例?
REPEAT 函式將命令中指定的輸入字串重複 n 次。

REPEAT(‘Hadoop’,3);
Output:
HadoopHadoopHadoop.


注意:您也可以在輸入字串中新增一個空格。
 

Hive 中的 TRIM 函式示例?
TRIM 函式將刪除與字串關聯的空格。

TRIM(‘  Hadoop  ‘);

Output:
Hadoop.


如果您只想刪除前導或試用空格,則可以分別指定以下命令。

LTRIM(‘  Hadoop’);

RTRIM(‘Hadoop  ‘);


 

以 Hive 中的 REVERSE 函式為例?
REVERSE 函式將反轉字串中的字元。
 
例子:
REVERSE('Hadoop');
 
輸出:poodaH
 

以 Hive 中的 LOWER 或 LCASE 函式為例?
LOWER 或 LCASE 函式將輸入字串轉換為小寫字元。

LOWER(‘Hadoop’);
LCASE(‘Hadoop’);

Output:
hadoop


如果字元已經是小寫,那麼它們將被保留。
 

以 Hive 中的 UPPER 或 UCASE 函式為例?
UPPER 或 UCASE 函式將輸入字串轉換為大寫字元。
 

例子:
UPPER('Hadoop');
UCASE('Hadoop');
輸出:
HADOOP


如果字元已經是大寫,那麼它們將被保留。
 

Hive 中的雙重型別 – 要點?
瞭解 Hive 中的 double 型別很重要。與 RDBMS 不同,Hive 中的 Double 型別將以不同的方式呈現資料。
請參閱下面的雙型別資料:

24624.0
32556.0
3.99893E5
4366.0

E5 在這裡代表 10^5。因此,值 3.99893E5 代表 399893。所有計算都將使用 double 型別準確執行。IEEE 754 雙精度的最大值約為 2.22E308。
將 double 型別資料匯出到任何 RDBMS 時,這一點至關重要,因為該型別可能會被錯誤地解釋。因此,建議在匯出之前將 double 型別轉換為適當的型別。
 

重新命名 Hive 中的表 - 怎麼做?
使用 ALTER 命令,我們可以重新命名 Hive 中的表。

ALTER TABLE hive_table_name RENAME  TO new_name;


還有另一種方法可以在 Hive 中重新命名錶。有時,如果基礎表具有更多分割槽/函式,則 ALTER 可能需要更多時間。在這種情況下,可以使用匯入和匯出選項。在這裡,您將 hive 資料儲存到 HDFS 並匯入回新表,如下所示。

EXPORT TABLE tbl_name TO ‘HDFS_location’;

IMPORT TABLE new_tbl_name FROM ‘HDFS_location’;


如果您只想保留資料,您可以從舊錶建立一個新表,如下所示。

CREATE TABLE new_tbl_name AS SELECT * FROM old_tbl_name;

DROP TABLE old_tbl_name;
 


如何更改 Hive 中的列資料型別?

ALTER TABLE table_name CHANGE column_name column_name new_datatype;

示例:如果要在名為employee 的表中將ID 列的資料型別從integer 更改為bigint。

ALTER TABLE employee  CHANGE id id BIGINT;

 

Hive中的排序依據和排序依據之間的區別?
SORT BY 將對每個減速器中的資料進行排序。您可以使用任意數量的 reducer 進行 SORT BY 操作。
ORDER BY 會將所有資料排序在一起,這些資料必須透過一個 reducer。因此,蜂巢中的 ORDER BY 使用單個減速器。
ORDER BY 保證輸出中的總順序,而 SORT BY 僅保證減速器中行的排序。如果有多個 reducer,SORT BY 可能會給出部分排序的最終結果
 

在 Hive 中 RLIKE?
RLIKE(Right-Like)是 Hive 中的一個特殊函式,如果 A 的任何子字串與 B 匹配,則它的計算結果為真。它還遵循 Java 正規表示式模式。使用者不需要在 RLIKE 中為簡單匹配新增 % 符號。
例子:

'Express' RLIKE 'Exp' –> True
'Express' RLIKE '^E.*' –> True(正規表示式)

此外,當字串有一些空格時,RLIKE 會派上用場。不使用TRIM函式,RLIKE滿足需要的場景。假設如果 A 的值為“Express”(另外 2 個空格)並且 B 的值為“Express”,則 RLIKE 將在不使用 TRIM 的情況下工作得更好。

‘Express’ RLIKE ‘Express’ –> True

如果 A 或 B 為 NULL,則 RLIKE 評估為 NULL。

相關文章