小编Ook*_*ami的帖子

在JDBC thrift服务器上启用Hql

我尝试构建一个使用Spark执行注入安全动态SQL查询的中间件,使用Cassandra作为存储引擎.执行查询的结果需要存储在新创建的Cassandra表中.

Spark SQL没有为安全参数绑定提供任何功能,所以我考虑使用JDBC thrift服务器和JDBC接口.

通过运行来执行从Hive将数据插入外部表

CREATE EXTERNAL TABLE <table_name>... STORED BY...
Run Code Online (Sandbox Code Playgroud)

但是,当尝试通过thrift服务器执行此语句时,我总是会收到以下错误:

java.sql.SQLException: org.apache.spark.sql.catalyst.parser.ParseException:
Operation not allowed: STORED BY(line 1, pos 31)
Run Code Online (Sandbox Code Playgroud)

经过一些网络挖掘后,我发现原因是thrift服务器正在使用Spark SQL,并且在Spark SQL上默认禁用了Hive支持.然后,通常的建议是手动创建SparkSession并使用enableHiveSupport().

问题是我不想这样做,因为我无法使用Spark SQL进行安全的参数绑定.我只想使用JDBC接口.你知道是否有办法在thrift服务器启动时启用Hive支持?

如果没有办法,有人可以推荐一种安全的参数绑定方式吗?

我正在使用Spark 2.1.0

编辑

实际上我也无法使用手动创建的SparkSession通过SparkSQL创建外部表,即使是使用enableHiveSupport().仍然得到相同的例外:

org.apache.spark.sql.catalyst.parser.ParseException: 
Operation not allowed: STORED BY(line 1, pos 42)
Run Code Online (Sandbox Code Playgroud)

hive cassandra hiveql apache-spark

5
推荐指数
0
解决办法
272
查看次数

标签 统计

apache-spark ×1

cassandra ×1

hive ×1

hiveql ×1