蜂巢中必须 运行 "analyze table" 否则 count(*) 显示 0
Must run "analyze table" in hive else count(*) shows 0
我正在 S3 上的镶木地板文件上创建外部 Hive table。命令看起来像
CREATE EXTERNAL TABLE userinfo(
user_id string,
last_name string,
first_name string
)
PARTITIONED BY (
yr string,
mo string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://mybucket/basedir/'
TBLPROPERTIES (
'serialization.null.format'='');
alter table userinfo add IF NOT EXISTS partition (yr='2021', mo='07');
此时,如果我 运行 “select count(*) from userinfo”,我得到 0 作为结果。但是如果我然后 运行
ANALYZE TABLE userinfo PARTITION(yr='2021', mo='07') COMPUTE STATISTICS;
然后重新运行“select count(*)...”我得到了预期的行数。
这不是一个表演障碍,但它让我觉得我正在做 something/failing 做一些导致这种奇怪行为的事情。欢迎任何见解。
您没有告诉优化器 table 的统计信息,因此它显示 0,因为它对其中的数据一无所知。
理想情况下,只要将数据加载到 table/partition,就应该收集统计信息。过时的统计数据或没有统计数据将保留优化器 thinking/guessing,从而使查询 运行 longer/consume 更多内存,有时 return 错误值。
现在,您可以在配置单元中设置此 属性 以进行自动统计收集 -
hive.stats.autogather=true
或者您可以在加载数据后立即手动收集它们。
ANALYZE TABLE tab COMPUTE STATISTICS;
我正在 S3 上的镶木地板文件上创建外部 Hive table。命令看起来像
CREATE EXTERNAL TABLE userinfo(
user_id string,
last_name string,
first_name string
)
PARTITIONED BY (
yr string,
mo string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3://mybucket/basedir/'
TBLPROPERTIES (
'serialization.null.format'='');
alter table userinfo add IF NOT EXISTS partition (yr='2021', mo='07');
此时,如果我 运行 “select count(*) from userinfo”,我得到 0 作为结果。但是如果我然后 运行
ANALYZE TABLE userinfo PARTITION(yr='2021', mo='07') COMPUTE STATISTICS;
然后重新运行“select count(*)...”我得到了预期的行数。
这不是一个表演障碍,但它让我觉得我正在做 something/failing 做一些导致这种奇怪行为的事情。欢迎任何见解。
您没有告诉优化器 table 的统计信息,因此它显示 0,因为它对其中的数据一无所知。
理想情况下,只要将数据加载到 table/partition,就应该收集统计信息。过时的统计数据或没有统计数据将保留优化器 thinking/guessing,从而使查询 运行 longer/consume 更多内存,有时 return 错误值。
现在,您可以在配置单元中设置此 属性 以进行自动统计收集 -
hive.stats.autogather=true
或者您可以在加载数据后立即手动收集它们。
ANALYZE TABLE tab COMPUTE STATISTICS;