VariableSubstitution¶
VariableSubstitution allows for variable substitution in SQL commands (in SparkSqlParser and Spark Thrift Server).
Note
VariableSubstitution is meant for SQL commands since in programming languages there are other means like String Interpolation in Scala.
Demo¶
SET values = VALUES 1,2,3;
SELECT * FROM ${values};
import org.apache.spark.sql.internal.VariableSubstitution
val substitutor = new VariableSubstitution()
substitutor.substitute(...)
Creating Instance¶
VariableSubstitution takes no arguments to be created.
VariableSubstitution is created when:
SparkSqlParseris createdSparkExecuteStatementOperation(Spark Thrift Server) is createdSparkSQLDriver(Spark Thrift Server) is executed
ConfigReader¶
VariableSubstitution creates a ConfigReader (Spark Core) when created (for Variable Substitution).
This ConfigReader uses the active SQLConf to look up keys (variables) first. It then binds the same variable provider to handle the following prefixes:
sparksparkconfhivevarhiveconf
Note
By default, the ConfigReader handles the other two prefixes:
env(for environment variables)system(for Java system properties)
If a reference cannot be resolved, the original string will be retained.
Variable Substitution¶
substitute(
input: String): String
With spark.sql.variable.substitute enabled, substitute requests the ConfigReader to substitute variables. Otherwise, substitute does nothing and simply returns the given input.
substitute is used when:
SparkSqlParseris requested to parse a commandSparkExecuteStatementOperation(Spark Thrift Server) is createdSparkSQLDriver(Spark Thrift Server) is executed