运行 如何使用 Impala 计算来自配置单元 table 的列子集的统计信息?
How does one run compute stats on a subset of columns from a hive table using Impala?
我有一个又长又宽的配置单元 table,它花费了大量时间来 return 查询结果。因此,我尝试在 table 上使用 'compute stats',但由于 table 的宽度,此操作经常超时。因此,我想知道是否有办法在 select 列上 运行 'compute stats'? 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,它们都比 MapReduce 更快。
较新版本的 Hive 还支持称为 LLAP(Live Long And Process)的体系结构,该体系结构类似于 Impala 缓存元数据,从而减少查询延迟。
您可能想针对您自己的 table 测试一些典型的查询,看看其中一个是否比 Impala 更适合您进行交互式和临时查询。
了解执行计划
要真正了解导致查询花费很长时间的原因,您需要了解 Hive 或 Impala 在执行查询时将执行哪些操作。
要找出这一点,您可以查看查询的执行计划。
执行计划是对查询所需任务的描述、任务的执行顺序以及每个任务的一些详细信息。
要查看查询的执行计划,您可以这样做:
在查询前加上关键字 EXPLAIN,然后 运行 它。
执行计划可能很长很复杂。
完全理解它们需要对 MapReduce 有深入的了解。
Hive 和 Impala 提供的执行计划看起来略有不同,但在基本层面上,它们提供的信息大致相同。
Hive explain plan understanding
TABLE 和列统计
您使用的 SQL 引擎会自行对查询进行一定程度的优化 — 如果可能,它们会寻找继续查询的最佳方式。
当查询使用连接时,优化器在具有 table 统计信息和列统计信息时可以做得更好。
对于整个 table,这些统计信息包括行数、用于存储数据的文件数以及数据的总大小。
列统计信息包括不同值的近似数量以及值的最大和平均大小(不是最大值或平均值,而是存储中使用的大小)。
优化器在决定如何执行连接任务时使用此信息。
统计信息还可以帮助您的系统防止由于内存使用和资源限制而导致的问题。
这些统计数据不会自动计算——您必须使用 SQL 命令手动触发它。
计算统计信息后,Hive 和 Impala 都可以使用它们,但如果您在 Hive 中计算它们,则需要刷新 Impala 的元数据缓存。
如果您对 table 进行任何更改,例如添加或删除数据,您将需要重新计算统计信息。
Hive 和 Impala 都可以使用统计信息,即使是在另一台机器上计算的。
但是,当您同时拥有 Impala 和 Hive 时,Cloudera 建议使用 Impala 的 COMPUTE STATS 命令来计算和查看统计信息。
Hive 的方法有点难用。
如果您确实使用 Hive,如果您希望 Impala 使用统计信息,则必须刷新 Impala 的 table 的元数据缓存。
Impala
中的统计数据
Impala 用于计算 table 统计信息(包括所有列的统计信息)的语法是 COMPUTE STATS dbname.tablename;
如果 table 在活动数据库中,则可以省略 dbname。来自命令。
要查看 Impala 中的统计信息,运行 SHOW TABLE STATS dbname.tablename;要么
显示列统计 dbname.tablename;
注意:如果尚未计算统计信息,table 的#Rows 显示 -1。
每列的#Nulls 统计信息将始终为-1;
Impala 的旧版本会计算此统计数据,但它不用于优化,因此较新版本会跳过它。
Hive 中的统计信息
Hive 用于计算 table 统计信息的语法是 ANALYZE TABLE dbname.tablename COMPUTE STATISTICS;
如果 table 在活动数据库中,则可以省略 dbname。从命令。
要计算列统计信息,请在命令末尾添加 FOR COLUMNS。
要在 Hive 中查看 table 统计信息,运行 描述格式 dbname.tablename;
Table 参数部分将包括 numFIles、numRows、rawDataSize 和 totalSize。
要查看列的统计信息,请在末尾包含列名:
描述格式化 dbname.tablename 列名;
您一次只能显示一列的列统计信息。
我有一个又长又宽的配置单元 table,它花费了大量时间来 return 查询结果。因此,我尝试在 table 上使用 'compute stats',但由于 table 的宽度,此操作经常超时。因此,我想知道是否有办法在 select 列上 运行 'compute stats'? 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,它们都比 MapReduce 更快。 较新版本的 Hive 还支持称为 LLAP(Live Long And Process)的体系结构,该体系结构类似于 Impala 缓存元数据,从而减少查询延迟。 您可能想针对您自己的 table 测试一些典型的查询,看看其中一个是否比 Impala 更适合您进行交互式和临时查询。
了解执行计划
要真正了解导致查询花费很长时间的原因,您需要了解 Hive 或 Impala 在执行查询时将执行哪些操作。 要找出这一点,您可以查看查询的执行计划。 执行计划是对查询所需任务的描述、任务的执行顺序以及每个任务的一些详细信息。
要查看查询的执行计划,您可以这样做:
在查询前加上关键字 EXPLAIN,然后 运行 它。
执行计划可能很长很复杂。 完全理解它们需要对 MapReduce 有深入的了解。
Hive 和 Impala 提供的执行计划看起来略有不同,但在基本层面上,它们提供的信息大致相同。
Hive explain plan understanding
TABLE 和列统计
您使用的 SQL 引擎会自行对查询进行一定程度的优化 — 如果可能,它们会寻找继续查询的最佳方式。 当查询使用连接时,优化器在具有 table 统计信息和列统计信息时可以做得更好。 对于整个 table,这些统计信息包括行数、用于存储数据的文件数以及数据的总大小。 列统计信息包括不同值的近似数量以及值的最大和平均大小(不是最大值或平均值,而是存储中使用的大小)。 优化器在决定如何执行连接任务时使用此信息。 统计信息还可以帮助您的系统防止由于内存使用和资源限制而导致的问题。
这些统计数据不会自动计算——您必须使用 SQL 命令手动触发它。
计算统计信息后,Hive 和 Impala 都可以使用它们,但如果您在 Hive 中计算它们,则需要刷新 Impala 的元数据缓存。 如果您对 table 进行任何更改,例如添加或删除数据,您将需要重新计算统计信息。
Hive 和 Impala 都可以使用统计信息,即使是在另一台机器上计算的。 但是,当您同时拥有 Impala 和 Hive 时,Cloudera 建议使用 Impala 的 COMPUTE STATS 命令来计算和查看统计信息。 Hive 的方法有点难用。 如果您确实使用 Hive,如果您希望 Impala 使用统计信息,则必须刷新 Impala 的 table 的元数据缓存。
Impala
中的统计数据Impala 用于计算 table 统计信息(包括所有列的统计信息)的语法是 COMPUTE STATS dbname.tablename; 如果 table 在活动数据库中,则可以省略 dbname。来自命令。
要查看 Impala 中的统计信息,运行 SHOW TABLE STATS dbname.tablename;要么 显示列统计 dbname.tablename;
注意:如果尚未计算统计信息,table 的#Rows 显示 -1。 每列的#Nulls 统计信息将始终为-1; Impala 的旧版本会计算此统计数据,但它不用于优化,因此较新版本会跳过它。
Hive 中的统计信息
Hive 用于计算 table 统计信息的语法是 ANALYZE TABLE dbname.tablename COMPUTE STATISTICS; 如果 table 在活动数据库中,则可以省略 dbname。从命令。 要计算列统计信息,请在命令末尾添加 FOR COLUMNS。
要在 Hive 中查看 table 统计信息,运行 描述格式 dbname.tablename; Table 参数部分将包括 numFIles、numRows、rawDataSize 和 totalSize。 要查看列的统计信息,请在末尾包含列名: 描述格式化 dbname.tablename 列名; 您一次只能显示一列的列统计信息。