【问题标题】:PIG - equivalent of likePIG - 相当于
【发布时间】: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


    【解决方案1】:

    这适用于我的文件。您可以根据需要使用以下匹配标准。这与 oracle 中的 LIKE 类似。

    A = LOAD 'san.gdata_impala' using org.apache.hive.hcatalog.pig.HCatLoader();
    B = FILTER A BY (UPPER($0) matches '.*(WINTERTON).*');
    

    【讨论】:

    • Sandesh,我正在尝试从配置单元表加载特定分区,“匹配”必须通过配置单元元存储,这就是问题出现的地方。在您的情况下,您正在过滤 CSV 文件。不过感谢您的帮助!
    • @Hi ,我想你的问题对我来说可能不是很清楚 :) 过滤也适用于 hive 元存储。更新了我上面的代码!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2019-02-06
    相关资源
    最近更新 更多