sql query中 NOT EXISTS 子句的 SQL Hive 错误。
Platform : cdh5.6.0
Hive version: Hive 1.1.0
以下不存在查询在配置单元提示符下运行正常:从不存在的interim_t中选择 A,B,C,D(从 ABC xyz_n中选择 A,其中 (A=A( 和 (B=B( 和 (C=C(
但是同一个程序在 Spark 执行中给出错误"查询中不支持的语言功能"。
from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
#sqlContext.sql("INSERT INTO abc_p PARTITION (SRVC_TYPE_CD='1') SELECT a,b,c,d FROM interim_t WHERE NOT EXISTS (SELECT a FROM xyz_n ABC where (a=a) AND (b=b) AND (c=c)")
执行:
spark-submit --verbose --deploy-mode client /data/abc.py
错误信息:
查询中不支持的语言功能:插入到abc_p分区 (SRVC_TYPE_CD='1'(从不存在的interim_t中选择 A,B,C,D (从 ABC 中选择 xyz_n其中 (a=a( 和 (b=b( 和 (c=c((
我认为sqlContext.sql不支持在hive查询中不存在。您能否提出一些解决方案/替代方案。
我在pyspark shell上尝试了下面,执行得很好,没有错误。
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
sqlContext.sql("SELECT a,b,c,d FROM table1 i WHERE NOT EXISTS (SELECT a FROM table2 x where i.a=x.a AND i.b=x.b AND i.c=x.c)");
我在 test.py 中有以下内容
from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
sqlContext.sql("SELECT a,b,c,d FROM table1 i WHERE NOT EXISTS (SELECT a FROM table2 x where i.a=x.a AND i.b=x.b AND i.c=x.c)");
已执行脚本
spark-submit --verbose --deploy-mode client test.py
执行成功。你能试一试吗?
我设置了 Hive 2.1.0 和 Spark 2.0.2
我怀疑你的蜂巢版本是问题所在
遇到了同样的问题,下面的解决方案对我有用。将这些行放入您的文件中并测试:-
from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
df = sqlContext.sql("SELECT a,b,c,d FROM interim_t WHERE NOT EXISTS (SELECT a FROM xyz_n ABC where (a=a) AND (b=b) AND (c=c)")
df.write.mode("overwrite").partitionBy("SRVC_TYPE_CD").saveAsTable("abc_p")
除此之外,您还可以尝试更多选项,例如 mode
可以append
.您也可以选择保存格式。喜欢mode("xxx").format("parquet")
.格式可以parquet, orc
等。