когда я выполняю операцию запроса с «присоединением» в своем заявлении, я получаю информацию об ошибке. Ниже приведены сведения об ошибке, среде и версии.
- jdk-1.7.0_79
- Феникс-4.7.0
- Hbase-1.1.2 с 7 региональными серверами.
Причина: java.sql.SQLException: Обнаружено исключение при выполнении подплана [0]. at org.apache.phoenix.execute.HashJoinPlan.iterator(HashJoinPlan.java:193) at org.apache.phoenix.mapreduce.PhoenixInputFormat.getQueryPlan(PhoenixInputFormat.java:129) ... еще 11 Вызвано: java.sql. SQLException: java.lang.ArrayIndexOutOfBoundsException: 1 в org.apache.phoenix.cache.ServerCacheClient.addServerCache(ServerCacheClient.java:266) в org.apache.phoenix.join.HashCacheClient.addHashCache(HashCacheClient.java:84) в org. apache.phoenix.execute.HashJoinPlan$HashSubPlan.execute(HashJoinPlan.java:381) в org.apache.phoenix.execute.HashJoinPlan$1.call(HashJoinPlan.java:162) в org.apache.phoenix.execute.HashJoinPlan$1. call(HashJoinPlan.java:158) в java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) в java.util.concurrent.FutureTask.run(FutureTask.java:166) в org.apache.phoenix .job.JobManager$InstrumentedJobFutureTask.run(JobManager.java:183) ... еще 3 Вызывается: java.lang.ArrayIndexOutOfBound sException: 1 в org.apache.hadoop.io.FastByteComparisons$LexicographicalComparerHolder$UnsafeComparer.compareTo(FastByteComparisons.java:245) в org.apache.hadoop.io.FastByteComparisons$LexicographicalComparerHolder$UnsafeComparer.compareTo(FastByteComparisons.java) в 132 org.apache.hadoop.io.FastByteComparisons.compareTo(FastByteComparisons.java:46) в org.apache.hadoop.io.WritableComparator.compareBytes(WritableComparator.java:188) в org.apache.phoenix.util.ScanUtil$2.compare (ScanUtil.java:484) по адресу org.apache.phoenix.query.KeyRange.compareUpperToLowerBound(KeyRange.java:277) по адресу org.apache.phoenix.query.KeyRange.compareUpperToLowerBound(KeyRange.java:222) по адресу org.apache. Phoenix. 182) на орг. apache.phoenix.compile.ScanRanges.intersectScan(ScanRanges.java:331) в org.apache.phoenix.compile.ScanRanges.intersects(ScanRanges.java:421) в org.apache.phoenix.cache.ServerCacheClient.addServerCache(ServerCacheClient. java:175) ... еще 10
Ниже приведен sql.
select a.MINITORDATE as MINITORDATE ,TEMPVAL, HUMVAL,PM25VAL ,NCPM25VAL from (
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as PM25VAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '00' AND SUBSTR(ROW,1,6) = '099812' AND SUBSTR(ROW,10,2) = '00' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') a
INNER JOIN
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as TEMPVAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '00' AND SUBSTR(ROW,1,6) = '099812' AND SUBSTR(ROW,10,2) = '02' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') b on b.MINITORDATE = a.MINITORDATE
INNER JOIN
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as HUMVAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '00' AND SUBSTR(ROW,1,6) = '099812' AND SUBSTR(ROW,10,2) = '03' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') c on c.MINITORDATE = b.MINITORDATE
INNER JOIN
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as NCPM25VAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '02' AND SUBSTR(ROW,1,6) = '023120' AND SUBSTR(ROW,10,2) = '00' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') d on d.MINITORDATE = c.MINITORDATE
)
Таблица "AQM.AQMDATA_ALL" создана Phoenix, и SALT_BUCKETS = 28. Количество строк в "AQM.AQMDATA_ALL" составляет около 6 миллионов.
Без SALT_BUCKETS или использования приведенного ниже sql запрос в порядке !!!
select a.MINITORDATE as MINITORDATE ,TEMPVAL, HUMVAL,PM25VAL ,NCPM25VAL from (
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as PM25VAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '00' AND SUBSTR(ROW,1,6) = '099812' AND SUBSTR(ROW,10,2) = '00' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') a
INNER JOIN
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as TEMPVAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '00' AND SUBSTR(ROW,1,6) = '099812' AND SUBSTR(ROW,10,2) = '02' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') b on b.MINITORDATE = a.MINITORDATE
INNER JOIN
( select "Data_minitorDate" as MINITORDATE ,"Data_minitorVal" as HUMVAL from AQM.AQMDATA_ALL where 1=1 AND SUBSTR(ROW,8,2) = '00' AND SUBSTR(ROW,1,6) = '099812' AND SUBSTR(ROW,10,2) = '03' AND SUBSTR(ROW,12,2) = '00'
AND "Data_minitorDate" between '2016-08-22 00:00:00' and '2016-08-23 23:59:59') c on c.MINITORDATE = b.MINITORDATE )
Единственная разница между двумя вышеуказанными операторами заключается в отсутствии одного «внутреннего соединения».
Не только выполняя запрос с SQL-клиентом SQuirreL, но и выполняя задание MapReduce с phoenix-client, я сталкиваюсь с той же проблемой.
Пожалуйста помоги мне с этим.
С уважением!