【发布时间】:2016-09-18 08:18:20
【问题描述】:
我只想在 PIG 中加载特定的分区,这相当于我想在 hive 中执行的操作:
hive>
select trim(column) from db.table where partition_code like 'CALL_DETAIL_1905%';
我在 PIG 中尝试过匹配
data= LOAD 'db.table' USING org.apache.hive.hcatalog.pig.HCatLoader();
onlyPartitions = FILTER data BY (partition_code matches '^CALL_DETAIL_1905.*');
我收到以下错误:
2016-09-18 01:07:18,098 [主要] 警告 org.apache.hadoop.hive.conf.HiveConf - 名称的 HiveConf hive.semantic.analyzer.factory.impl 不存在 java.io.IOException: MetaException(message:Error parsing partition 筛选;词法分析器错误:空;异常 NoViableAltException(11@[])) 在 org.apache.hive.hcatalog.mapreduce.HCatInputFormat.setInput(HCatInputFormat.java:97) 在 org.apache.hive.hcatalog.mapreduce.HCatInputFormat.setInput(HCatInputFormat.java:61) 在 org.apache.hive.hcatalog.pig.HCatLoader.setLocation(HCatLoader.java:127) 在 org.apache.pig.backend.hadoop.executionengine.tez.plan.optimizer.LoaderProcessor.processLoads(LoaderProcessor.java:105) 在 org.apache.pig.backend.hadoop.executionengine.tez.plan.optimizer.LoaderProcessor.visitTezOp(LoaderProcessor.java:183) 在 org.apache.pig.backend.hadoop.executionengine.tez.plan.TezOperator.visit(TezOperator.java:249) 在 org.apache.pig.backend.hadoop.executionengine.tez.plan.TezOperator.visit(TezOperator.java:55) 在 org.apache.pig.impl.plan.DependencyOrderWalker.walk(DependencyOrderWalker.java:87) 在 org.apache.pig.impl.plan.PlanVisitor.visit(PlanVisitor.java:46) 在 org.apache.pig.backend.hadoop.executionengine.tez.TezLauncher.processLoadAndParallelism(TezLauncher.java:472) 在 org.apache.pig.backend.hadoop.executionengine.tez.TezLauncher.launchPig(TezLauncher.java:182) 在 org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.launchPig(HExecutionEngine.java:304) 在 org.apache.pig.PigServer.launchPlan(PigServer.java:1431) 在 org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1416) 在 org.apache.pig.PigServer.execute(PigServer.java:1405) 在 org.apache.pig.PigServer.executeBatch(PigServer.java:456) 在 org.apache.pig.PigServer.executeBatch(PigServer.java:439) 在 org.apache.pig.tools.grunt.GruntParser.executeBatch(GruntParser.java:171) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:234) 在 org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205) 在 org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:81) 在 org.apache.pig.Main.run(Main.java:502) 在 org.apache.pig.Main.main(Main.java:177) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136) 引起:MetaException(消息:解析分区过滤器时出错;词法分析器错误: 空值;异常 NoViableAltException(11@[])) 在 org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$get_partitions_by_filter_result$get_partitions_by_filter_resultStandardScheme.read(ThriftHiveMetastore.java)
下面的工作,我可以填充所有分区并将它们作为参数发送,但是,如果我可以使用等价的 like 运算符,那将真的很有帮助。另请注意,这只是我尝试匹配的正则表达式。我犯了同样的错误。
data= LOAD 'db.table' USING org.apache.hive.hcatalog.pig.HCatLoader();
onlyPartitions = FILTER data BY partition_code in ('CALL_DETAIL_19050001500');
【问题讨论】:
标签: apache-pig