use*_*729 13 scala apache-spark apache-spark-sql apache-spark-2.0
如何在Apache Spark SQL中绑定变量?例如:
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.sql("SELECT * FROM src WHERE col1 = ${VAL1}").collect().foreach(println)
Run Code Online (Sandbox Code Playgroud)
Tag*_*gar 14
Spark SQL(从1.6发行版开始)不支持绑定变量.
PS.Ashrith建议的不是绑定变量..你每次都在构造一个字符串.Evey时间Spark将解析查询,创建执行计划等.绑定变量的目的(例如在RDBMS系统中)是为了减少创建执行计划的时间(在存在大量连接的情况下这可能是昂贵的).Spark必须有一个特殊的API来"解析"一个查询,然后"绑定"变量.Spark没有这个功能(截至今天,Spark 1.6发布).
更新8/2018:从Spark 2.3开始,Spark中仍然没有绑定变量.
mrs*_*vas 10
我在Spark shell 2.x shell和Thrift(beeline)中都验证了它.我能够使用set命令在Spark SQL查询中绑定变量.
查询没有绑定变量:
select count(1) from mytable;
Run Code Online (Sandbox Code Playgroud)
使用绑定变量查询(参数化):
1. Spark SQL shell
Run Code Online (Sandbox Code Playgroud)set key_tbl=mytable; -- setting mytable to key_tbl to use as ${key_tbl} select count(1) from ${key_tbl};2.火花壳
Run Code Online (Sandbox Code Playgroud)spark.sql("set key_tbl=mytable") spark.sql("select count(1) from ${key_tbl}").collect()
w/wo绑定params查询返回相同的结果.
注意: 请勿在此处为表名提供任何引号.
如果有任何问题,请告诉我.
| 归档时间: |
|
| 查看次数: |
25696 次 |
| 最近记录: |