我有一个具有数据分布的表格:
sqlContext.sql( """ SELECT
count(to_Date(PERIOD_DT)), to_date(PERIOD_DT)
from dbname.tablename group by to_date(PERIOD_DT) """).show
+-------+----------+
| _c0| _c1|
+-------+----------+
|1067177|2016-09-30|
|1042566|2017-07-07|
|1034333|2017-07-31|
+-------+----------+
但是,当我运行以下查询时:
sqlContext.sql(""" SELECT COUNT(*)
from dbname.tablename
where PERIOD_DT = '2017-07-07' """).show
令人惊讶的是,它返回:
+-------+
| _c0|
+-------+
|3144076|
+-------+
但是,如果我将PERIOD_DT
更改为小写,即period_dt
,它将返回正确的结果
sqlContext.sql("""
SELECT COUNT(*)
from dbname.table
where period_dt='2017-07-07' """).show
+-------+
| _c0|
+-------+
|1042566|
+-------+
period_dt
是表所分区的列,其类型为 char(10)
表数据存储为parquet:
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'
可能导致这种不一致的是什么?
这是一个案例敏感问题。由于Hive Meta商店模式的局限性,表总是小写。Parquet应该解决问题