我在Hive(0.9.0)表中的多个列上构建索引时遇到问题。
describe nas_comps;
OK
leg_id int
ds_name string
dep_date string
crr_code string
flight_no string
orgn string
dstn string
physical_cap int
adjusted_cap int
closed_cap int
comp_code string
这有效:
CREATE INDEX nas_comps_legid ON TABLE nas_comps (leg_id) AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD;
但这并不是:
CREATE INDEX nas_comps_legid_compcode ON TABLE nas_comps (leg_id,comp_code) AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD;
FAILED: Error in metadata: java.lang.RuntimeException: Check the index columns, they should appear in the table being indexed.
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
我猜索引只能识别第一列,因为即使失败了:
CREATE INDEX nas_comps_compcode ON TABLE nas_comps (comp_code) AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD;
FAILED: Error in metadata: java.lang.RuntimeException: Check the index columns, they should appear in the table being indexed.
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
我检查了this问题,但我不认为这是原因。
答案 0 :(得分:1)
Think Hive不支持对分区列进行索引..请检查comp代码是否为分区列。
就多列索引而言,它应该有效..
答案 1 :(得分:0)
CREATE INDEX nas_comps_legid ON TABLE nas_comps(leg_id)AS'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'with DEFERRED REBUILD;
或
CREATE INDEX nas_comps_legid ON TABLE nas_comps(leg_id)AS'compact'with DEFERRED REBUILD;
是的,这是有效的