使用 Data Lake Tools for Visual Studio 執行 Apache Hive 查詢

了解如何使用 Data Lake Tools for Visual Studio 查詢 Apache Hive。 Data Lake Tools 可讓您在 Azure HDInsight 上輕鬆地建立、提交和監視對 Apache Hadoop 的 Hive 查詢。

必要條件

使用 Visual Studio 執行 Apache Hive 查詢

您有兩個選項可建立和執行 Hive 查詢:

  • 建立特定查詢。
  • 建立 Hive 應用程式。

建立臨機操作 Hive 查詢

臨機操作查詢可以在 Batch 或 [互動式] 模式中執行。

  1. 啟動 Visual Studio,然後選取 [不使用程式碼繼續]

  2. 在 [伺服器總管] 中,用滑鼠右鍵按一下 Azure,選取 [連線到 Microsoft Azure 訂閱...],然後完成登入程序。

  3. 展開 HDInsight,在您想要執行查詢的叢集上按一下滑鼠右鍵,然後選取 [撰寫 Hive 查詢]

  4. 輸入下列 Hive 查詢:

    SELECT * FROM hivesampletable;
    
  5. 選取 [執行]。 執行模式預設為 [互動式]

    Execute interactive Hive query, Visual Studio.

  6. 若要在 Batch 模式中執行相同的查詢,請將下拉式清單從 [互動式] 切換為 Batch。 執行按鈕會從 [執行] 變更為 [提交]

    Submit batch Hive query, Visual Studio.

    Hive 編輯器支援 Intellisense。 Data Lake Tools for Visual Studio 支援在編輯 Hive 指令碼時載入遠端中繼資料。 例如,如果您輸入 SELECT * FROM,IntelliSense 會列出所有建議的資料表名稱。 若已指定資料表名稱,IntelliSense 會列出資料行名稱。 此工具支援大部分的 Hive DML 陳述式、子查詢及內建 UDF。 IntelliSense 只建議 HDInsight 工具列中已選取的叢集中繼資料。

  7. 在查詢工具列中 (查詢索引標籤下方和查詢文字上方),選取 [提交],或選取 [提交] 旁的下拉箭號,然後從下拉式清單中選擇 [進階]。 如果您選取後者選項,

  8. 如果您選取進階提交選項,請在 [指令碼提交] 對話方塊中設定 [作業名稱]、[引數]、[其他組態] 和 [狀態目錄]。 然後,選取 [提交]

    Submit Script dialog box, HDInsight Hadoop Hive query.

建立 Hive 應用程式

若要藉由建立 Hive 應用程式來執行 Hive 查詢,請遵循下列步驟:

  1. 開啟 Visual Studio

  2. 在 [開始] 視窗中,選取 [建立新專案]

  3. 在 [建立新專案] 視窗中,於 [搜尋範本] 方塊中,輸入 Hive。 然後選擇 [Hive 應用程式],並選取 [下一步]

  4. 在 [設定新專案] 視窗中,輸入 [專案名稱],選取或建立新專案的 [位置],然後選取 [建立]

  5. 開啟使用此專案所建立的 Script.hql 檔案,並貼入下列 HiveQL 陳述式中:

    set hive.execution.engine=tez;
    DROP TABLE log4jLogs;
    CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
    STORED AS TEXTFILE LOCATION '/example/data/';
    SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND  INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
    

    這些陳述式會執行下列動作:

    • DROP TABLE:刪除資料表 (若存在)。

    • CREATE EXTERNAL TABLE在 Hive 中建立新的「外部」資料表。 外部資料表只會將資料表定義儲存在 Hive 中。 (資料會保留在來源位置。)

      注意

      當您預期基礎資料應該由外部來源 (例如 MapReduce 作業或 Azure 服務) 更新時,應該使用外部資料表。

      捨棄外部資料表並 不會 刪除資料,只會刪除資料表定義。

    • ROW FORMAT:告訴 Hive 如何格式化資料。 在此情況下,每個記錄中的欄位會以空格隔開。

    • STORED AS TEXTFILE LOCATION:將資料的儲存位置告訴 Hive (example/data 目錄),且資料儲存為文字。

    • SELECT:選擇其資料行 t4 包含值 [ERROR] 的所有資料列計數。 此陳述式會傳回值 3,因為有三個資料列包含此值。

    • INPUT__FILE__NAME LIKE '%.log':告訴 Hive 只從以 .log 結尾的檔案中傳回資料。 這個子句會將搜尋限制為包含資料的 sample.log 檔案。

  6. 從查詢檔案工具列 (其具有類似臨機操作查詢工具列的外觀),選取您想要用於此查詢的 HDInsight 叢集。 然後視需要將 [互動式] 變更為 Batch,並選取 [提交] 以 Hive 作業形式執行陳述式。

    [Hive 工作摘要] 將會出現並顯示執行中工作的相關資訊。 使用 [重新整理] 連結來重新整理工作資訊,直到 [工作狀態] 變更為 [已完成] 為止。

    Completed Hive job summary, Hive application, Visual Studio.

  7. 選取 [工作輸出] 以檢視此工作的輸出。 它會顯示 [ERROR] 3,這是此查詢所傳回的值。

其他範例

下列範例依賴於log4jLogs上一個程序中建立的資料表建立 Hive 應用程式。

  1. 從 [伺服器總管] 中,以滑鼠右鍵按一下您的叢集,然後選取 [撰寫 Hive 查詢]

  2. 輸入下列 Hive 查詢:

    set hive.execution.engine=tez;
    CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) STORED AS ORC;
    INSERT OVERWRITE TABLE errorLogs SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log';
    

    這些陳述式會執行下列動作:

    • CREATE TABLE IF NOT EXISTS:建立資料表 (如果不存在)。 因為未使用 EXTERNAL 關鍵字,這個陳述式會建立內部資料表。 內部資料表儲存在 Hive 資料倉儲中,並受到 Hive 所管理。

      注意

      EXTERNAL 資料表不同之處在於,捨棄內部資料表也會刪除基礎資料。

    • STORED AS ORC:以最佳化資料列單欄式 (ORC) 格式儲存資料。 ORC 是高度最佳化且有效率的 Hive 資料儲存格式。

    • INSERT OVERWRITE ... SELECT︰從含有 [ERROR]log4jLogs 資料表選取資料列,然後將資料插入 errorLogs 資料表。

  3. 視需要將 [互動式] 變更為 Batch,然後選取 [提交]

  4. 若要驗證作業已建立資料表,請移至 [伺服器總管] 並展開 [Azure]> [HDInsight]。 展開您的 HDInsight 叢集,然後展開 [Hive 資料庫]> [預設]。 會列出 errorLogs 資料表和 log4jLogs 資料表。

下一步

如您所見,HDInsight tools for Visual Studio 提供簡單的方法,可在 HDInsight 上使用 Hive 查詢。