簡體   English   中英

如何使用 Impala 對 hive 表中的列子集運行計算統計信息?

[英]How does one run compute stats on a subset of columns from a hive table using Impala?

我有一個很長很寬的 hive 表,它需要很長時間才能返回查詢結果。 因此,我嘗試在表格上“計算統計信息”,但由於表格的寬度,此操作經常超時。 因此,我想知道是否有辦法在 select 列上運行“計算統計信息”? Cloudera 網站上的文檔表明這是可能的,但語法不起作用。

這是我嘗試過但無濟於事的方法。 請告知,因為這些都會導致語法錯誤。

COMPUTE STATS database.table field1
COMPUTE STATS database.table field1, field2
COMPUTE STATS database.table (field1, field2)

經過進一步研究,確認語法實際上是正確的,但計算統計信息的列列表參數直到 CDH 5.15.x 才可用。 我把這個留在這里,以防有人遇到同樣的問題。

Hive 的工作原理是創建在不同引擎(最初是 MapReduce,可能相當慢)中運行的作業,並且可以更改底層引擎。 而不是 MapReduce,您也許可以使用 Apache Spark 或 Apache Tez,兩者都比 Apache 快,兩者都比 ZE9713AEB3BA8FE3117D 快。 較新版本的 Hive 還支持稱為 LLAP(Live Long And Process)的架構,該架構類似於 Impala 緩存元數據,從而減少查詢延遲。 您可能希望針對您自己的表測試一些典型查詢,以查看其中一個查詢是否比 Impala 更適合您進行交互式和即席查詢。

了解執行計划

要真正掌握導致查詢花費很長時間的原因,您需要了解 Hive 或 Impala 在執行查詢時將執行哪些操作。 要找出這一點,您可以查看查詢的執行計划。 執行計划是對查詢所需任務、執行順序以及每個任務的一些詳細信息的描述。

要查看查詢的執行計划,您可以執行以下操作:

使用關鍵字 EXPLAIN 為查詢添加前綴,然后運行它。

執行計划可能冗長而復雜。 完全理解它們需要對 MapReduce 有深入的了解。

Hive 和 Impala 提供的執行計划看起來略有不同,但在基本層面上,它們提供或多或少相同的信息。

Hive講解方案理解

表和列統計

您使用的 SQL 引擎會自行對查詢進行一定程度的優化——它們會盡可能尋找處理您的查詢的最佳方式。 當查詢使用連接時,優化器在有表統計和列統計時可以做得更好。 對於整個表而言,這些統計信息包括行數、用於存儲數據的文件數以及數據的總大小。 列統計信息包括不同值的大致數量以及值的最大和平均大小(不是最大值或平均值,而是存儲中使用的大小)。 優化器在決定如何執行連接任務時使用此信息。 統計信息還可以幫助您的系統防止由於 memory 使用情況和資源限制而導致的問題。

這些統計信息不會自動計算——您必須使用 SQL 命令手動觸發它。

計算統計信息后,Hive 和 Impala 都可以使用它們,但如果在 Hive 中計算它們,則需要刷新 Impala 的元數據緩存。 如果您對表格進行任何更改,例如添加或刪除數據,則需要重新計算統計信息。

Hive 和 Impala 都可以使用統計信息,即使是由另一台機器計算的。 但是,當您同時擁有 Impala 和 Hive 時,Cloudera 建議使用 Impala 的 COMPUTE STATS 命令來計算和查看統計信息。 Hive 的方法有點難用。 如果您確實使用 Hive,如果您希望 Impala 使用統計信息,則必須刷新 Impala 的表的元數據緩存。

Impala 中的統計數據

Impala 用於計算表的統計信息(包括所有列的統計信息)的語法是 COMPUTE STATS dbname.tablename; 如果表在活動數據庫中,則可以省略 dbname。 從命令。

要查看 Impala 中的統計信息,請運行 SHOW TABLE STATS dbname.tablename; 或 SHOW COLUMN STATS dbname.tablename;

注意:如果尚未計算統計信息,則表的#Rows 顯示 -1。 每列的#Nulls 統計信息將始終為 -1; 舊版本的 Impala 會計算這個統計數據,但它不用於優化,所以新版本跳過它。

Hive 中的統計信息

Hive 計算表統計信息的語法是 ANALYZE TABLE dbname.tablename COMPUTE STATISTICS; 如果表在活動數據庫中,則可以省略 dbname。 從命令。 要計算列統計信息,請在命令末尾添加 FOR COLUMNS。

要查看 Hive 中的表統計信息,請運行 DESCRIBE FORMATTED dbname.tablename; 表參數部分將包括 numFIles、numRows、rawDataSize 和 totalSize。 要查看列的統計信息,請在末尾包含列名: DESCRIBE FORMATTED dbname.tablename columnname; 您一次只能顯示一列的列統計信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM