Hive - 创建Index失败,原因暂未知

运行环境Cloudera Hive 0.10-CDH4

在我机器上安装的Hive里有如下的表:

hive (human_resources)> describe formatted employees;

OK

col_name data_type comment

# col_name             data_type           comment             

 

name                       string                                            None                

salary                       float                                              None                

subordinates          array<string>                             None                

deductions              map<string,float>                    None                

address                    struct<country:string,city:string,zip:int>   None                

 

# Partition Information  

# col_name             data_type           comment             

 

country                  string               None                

state                       string               None                

 

# Detailed Table Information  

Database:           human_resources      

Owner:               root                  

CreateTime:         Mon Jul 22 23:05:47 CST 2013  

LastAccessTime:     UNKNOWN              

Protect Mode:       None                  

Retention:           0                    

Location:           hdfs://n8.example.com:8020/user/hive/warehouse/human_resources.db/employees  

Table Type:         MANAGED_TABLE        

Table Parameters:  

numFiles             1                   

numPartitions       1                   

numRows             0                   

rawDataSize         0                   

totalSize           784                 

transient_lastDdlTime 1375942564          

 

# Storage Information  

SerDe Library:       org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe  

InputFormat:         org.apache.hadoop.mapred.TextInputFormat  

OutputFormat:       org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat  

Compressed:         No                    

Num Buckets:         -1                    

Bucket Columns:     []                    

Sort Columns:       []                    

Storage Desc Params:  

serialization.format 1                   

Time taken: 0.132 seconds

该Employees表中有如下数据(Hive会自动把select * 操作转换成文件系统读操作,所以这里并没有MR Job):

hive (human_resources)> select * from employees;

OK

name     salary     subordinates     deductions     address     country     state

John Doe 100000.0 ["Mary Smith","Todd Jones"] {"Federal Taxes":0.2,"State Taxes":0.05,"Insurance":0.1} {"country":"1 Michigan Ave.","city":"Chicago","zip":null}  US CA

Mary Smith 80000.0 ["Bill King"] {"Federal Taxes":0.2,"State Taxes":0.05,"Insurance":0.1} {"country":"100 Ontario St.","city":"Chicago","zip":null}  US CA

Todd Jones 70000.0 [] {"Federal Taxes":0.15,"State Taxes":0.03,"Insurance":0.1} {"country":"200 Chicago Ave.","city":"Oak Park","zip":null} US CA

Bill King 60000.0 [] {"Federal Taxes":0.15,"State Taxes":0.03,"Insurance":0.1} {"country":"300 Obscure Dr.","city":"Obscuria","zip":null} US CA

Boss Man 200000.0 ["John Doe","Fred Finance"] {"Federal Taxes":0.3,"State Taxes":0.07,"Insurance":0.05} {"country":"1 Pretentious Drive.","city":"Chicago","zip":null} US CA

Fred Finance 150000.0 ["Stacy Accountant"] {"Federal Taxes":0.3,"State Taxes":0.07,"Insurance":0.05} {"country":"2 Pretentious Drive.","city":"Chicago","zip":null} US CA

Stacy Accountant 60000.0 [] {"Federal Taxes":0.15,"State Taxes":0.03,"Insurance":0.1} {"country":"300 Main St.","city":"Naperville","zip":null} US CA

Time taken: 0.164 seconds

现在我想用如下语句给Employees表创建索引,操作失败并有如下提示:

hive (human_resources)> CREATE INDEX employees_index

                      > ON TABLE employees (country, name)

                      > AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD

                      > IDXPROPERTIES ('creator' = 'me', 'created_at' = 'some_time')

                      > IN TABLE employees_index_table

                      > PARTITIONED BY (country)

                      > COMMENT 'Employees indexed by country and name.';

FAILED: ParseException line 6:0 missing EOF at 'PARTITIONED' near 'employees_index_table'

假如我去掉partitioned by子句会出现如下错误提示:

hive (human_resources)> CREATE INDEX employees_index

                      > ON TABLE employees (country, name)

                      > AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' WITH DEFERRED REBUILD

                      > IDXPROPERTIES ('creator' = 'me', 'created_at' = 'some_time')

                      > IN TABLE employees_index_table

                      > COMMENT 'Employees indexed by country and name.';

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

这是Programming Hive中的一个例子,O'Reilly官网的Errata链接是:

http://oreilly.com/catalog/errata.csp?isbn=0636920023555

但是Errata中并没有人提及这个示例运行错误。错误原因未知,希望有知道的大神提示一下,是不是Hive版本问题或是其他原因?

相关推荐