如何在 Spark SQL 查询中的 Interval 中使用动态值

dev*_*v ツ 6 apache-spark apache-spark-sql pyspark

一个有效的 Spark SQL:

SELECT current_timestamp() - INTERVAL 10 DAYS as diff from sample_table
Run Code Online (Sandbox Code Playgroud)

我尝试过的 Spark SQL(不起作用):

SELECT current_timestamp() - INTERVAL col1 DAYS as diff from sample_table
Run Code Online (Sandbox Code Playgroud)

从上面的查询得到的错误:

mismatched input 'DAYS' expecting 

== SQL ==
SELECT current_timestamp() - INTERVAL col1 DAYS as diff from sample_table
------------------------------------------^^^
" Traceback (most recent call last):
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/session.py", line 767, in sql return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
    File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in call answer, self.gateway_client, self.target_id, self.name)
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 73, in deco raise ParseException(s.split(': ', 1)[1], stackTrace) pyspark.sql.utils.ParseException: "
mismatched input 'DAYS' expecting 

== SQL ==
SELECT current_timestamp() - INTERVAL col1 DAYS as diff from sample_table
------------------------------------------^^^
Run Code Online (Sandbox Code Playgroud)

我想用作col1动态间隔值。我怎样才能实现这个目标?

小智 4

SparkSQL 函数make_interval实现了这一点:

SELECT current_timestamp() - make_interval(0, 0, 0, col1, 0, 0, 0) as diff from sample_table
Run Code Online (Sandbox Code Playgroud)