2015-02-09 22 views
0

根據我對spark sql的調查,知道超過2個表不能直接連接,我們必須使用sub查詢以使其工作。所以我使用子查詢,並能加入3個表:Apache Spark SQL問題:java.lang.RuntimeException:[1.517] failure:標識符預計

與下面的查詢:

「SELECT姓名,年齡,性別,dpi.msisdn,subscriptionType, maritalStatus,isHighARPU,ip地址,開始時間, endTime,isRoaming, dpi.totalCount,dpi.website FROM(SELECT subsc.name,subsc.age, subsc.gender,subsc.msisdn,subsc.subscriptionType, subsc.maritalStatus,subsc.isHighARPU,cdr.ipAddress,cdr .startTime, cdr.endTime,cdr.isRoaming FROM SUBSCRIBER_META subsc,CDR_FACT cdr WHERE subsc.msisdn = cdr.msisdn AND cdr.isRoaming =' Y')temp, DPI_FACT dpi WHERE temp.msisdn = dpi.msisdn「;

但是當同樣的模式,我想加入4桌,它扔我下面的異常

了java.lang.RuntimeException:[1.517]失敗:標識符預期

查詢加入4個表:

SELECT名字,dueAmount FROM(SELECT姓名,年齡,性別,dpi.msisdn, subscriptionType,maritalStatus,isHighARPU,ip地址,開始時間,結束時間 ,我sRoaming,dpi.totalCount,dpi.website FROM(SELECT subsc.name,subsc.age,subsc.gender,subsc.msisdn, subsc.subscriptionType,subsc.maritalStatus,subsc.isHighARPU, cdr.ipAddress,cdr.startTime ,cdr.endTime,cdr.isRoaming FROM SUBSCRIBER_META subsc,CDR_FACT cdr WHERE subsc.msisdn = cdr.msisdn AND cdr.isRoaming ='Y')temp,DPI_FACT dpi WHERE temp.msisdn = dpi.msisdn)inner,BILLING_META計費where inner.msisdn = billing.msisdn

任何人都可以請幫助我使這個查詢工作?

在此先感謝。錯誤如下:

09/02/2015 02:55:24 [ERROR] org.apache.spark.Logging$class: Error running job streaming job 1423479307000 ms.0 
java.lang.RuntimeException: [1.517] failure: identifier expected 

SELECT name, dueAmount FROM (SELECT name, age, gender, dpi.msisdn, subscriptionType, maritalStatus, isHighARPU, ipAddress, startTime, endTime, isRoaming, dpi.totalCount, dpi.website FROM (SELECT subsc.name, subsc.age, subsc.gender, subsc.msisdn, subsc.subscriptionType, subsc.maritalStatus, subsc.isHighARPU, cdr.ipAddress, cdr.startTime, cdr.endTime, cdr.isRoaming FROM SUBSCRIBER_META subsc, CDR_FACT cdr WHERE subsc.msisdn = cdr.msisdn AND cdr.isRoaming = 'Y') temp, DPI_FACT dpi WHERE temp.msisdn = dpi.msisdn) inner, BILLING_META billing where inner.msisdn = billing.msisdn 
                                                                                                                                    ^
     at scala.sys.package$.error(package.scala:27) 
     at org.apache.spark.sql.catalyst.SqlParser.apply(SqlParser.scala:60) 
     at org.apache.spark.sql.SQLContext.parseSql(SQLContext.scala:73) 
     at org.apache.spark.sql.api.java.JavaSQLContext.sql(JavaSQLContext.scala:49) 
     at com.hp.tbda.rta.examples.JdbcRDDStreaming5$7.call(JdbcRDDStreaming5.java:596) 
     at com.hp.tbda.rta.examples.JdbcRDDStreaming5$7.call(JdbcRDDStreaming5.java:546) 
     at org.apache.spark.streaming.api.java.JavaDStreamLike$$anonfun$foreachRDD$1.apply(JavaDStreamLike.scala:274) 
     at org.apache.spark.streaming.api.java.JavaDStreamLike$$anonfun$foreachRDD$1.apply(JavaDStreamLike.scala:274) 
     at org.apache.spark.streaming.dstream.DStream$$anonfun$foreachRDD$1.apply(DStream.scala:527) 
     at org.apache.spark.streaming.dstream.DStream$$anonfun$foreachRDD$1.apply(DStream.scala:527) 
     at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply$mcV$sp(ForEachDStream.scala:41) 
     at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply(ForEachDStream.scala:40) 
     at org.apache.spark.streaming.dstream.ForEachDStream$$anonfun$1.apply(ForEachDStream.scala:40) 
     at scala.util.Try$.apply(Try.scala:161) 
     at org.apache.spark.streaming.scheduler.Job.run(Job.scala:32) 
     at org.apache.spark.streaming.scheduler.JobScheduler$JobHandler.run(JobScheduler.scala:172) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
+0

您可以嘗試將別名的名稱從內部更改爲其他內容 – 2015-02-09 14:06:43

回答

0

由於您在sql中使用了保留關鍵字「內部」的Spark,所以發生異常。避免使用Keywords in Spark SQL作爲自定義標識符。