Hive 错误:Spark 执行中查询中的语言功能不受支持



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等。

相关内容

  • 没有找到相关文章

最新更新