[英]How to run Hive Sql query's containing “select count(*)” and “group by” clauses in Hive embedded mode?
如何在Hive嵌入式模式下運行此查詢(1)
select product,count(*) as cnt from hive_bigpetstore_etl group by product
在Maven控制台中,我收到一個InvocationTargetException
異常
在Hive日志文件中,我發現
java.lang.Exception: java.lang.NullPointerException
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)
Caused by: java.lang.NullPointerException
at org.apache.hadoop.hive.ql.exec.Utilities.setColumnTypeList(Utilities.java:2033)
at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushFilters(HiveInputFormat.java:351)
at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:432)
at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushProjectionsAndFilters(HiveInputFormat.java:374)
at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:540)
at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.<init>(MapTask.java:191)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:412)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:366)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:223)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
這是輸入數據中的典型行
BigPetStore,storeCode_AK,1 russell,baird,Sun Dec 21 11:57:31 PST 1969,20.1,antelope-caller
數據成功加載到表中,就好像我將(1)更改為(2)
`select* from hive_bigpetstore_etl`
它返回所有數據的正確ResultSet
我已經檢查了一切都在類路徑上,沒有異常,例如找不到類,設置了蜂巢和hadoop home env變量,並在我針對獨立的Hive / Thrift查詢(1)運行(1)的情況下使用printenv
進行了檢查沒有例外,我僅在嵌入式模式下獲得例外。
如何運行select count(*)
和group by
子句處於Hive嵌入式模式?
看從branch-0.11的蜂巢代碼:
2023 public static void setColumnTypeList(JobConf jobConf, Operator op) {
2024 RowSchema rowSchema = op.getSchema();
2025 : if (rowSchema == null) {
2026 return;
2027 }
2028 StringBuilder columnTypes = new StringBuilder();
2029 for (ColumnInfo colInfo : rowSchema.getSignature()) {
2030 if (columnTypes.length() > 0) {
2031 columnTypes.append(",");
2032 }
2033 ----------> columnTypes.append(colInfo.getType().getTypeName());
2034 }
2035 String columnTypesString = columnTypes.toString();
2036 jobConf.set(serdeConstants.LIST_COLUMN_TYPES, columnTypesString);
2037 }
可能的答案是由於某種原因,colInfo.getType()返回null。 然后問題變成“為什么”。 為問題添加更多顏色(即,您可以使用任何count(*)查詢重現此錯誤)可能對此有所啟發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.