Ответ 1
До Spark 1.2.0
Поддерживаемый синтаксис (который я только что пробовал на Spark 1.0.2), кажется,
SELECT IF(1=1, 1, 0) FROM table
Этот последний поток http://apache-spark-user-list.1001560.n3.nabble.com/Supported-SQL-syntax-in-Spark-SQL-td9538.html ссылки на источник синтаксиса SQL, который может или не может помочь в зависимости от вашего комфорта с помощью Scala. По крайней мере, список ключевых слов, начинающихся (в момент написания) в строке 70, должен помочь.
Здесь прямая ссылка на источник для удобства: https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala.
Обновление для Spark 1.2.0 и выше
По Spark 1.2.0 поддерживается более традиционный синтаксис в ответ на SPARK-3813: поиск "CASE WHEN" в источник . Например:
SELECT CASE WHEN key = 1 THEN 1 ELSE 2 END FROM testData
Обновить последнее место для определения синтаксиса SQL Parser
Теперь источник парсера можно найти здесь.
Обновление для более сложных примеров
В ответ на вопрос ниже современный синтаксис поддерживает сложные булевы условия.
SELECT
CASE WHEN id = 1 OR id = 2 THEN "OneOrTwo" ELSE "NotOneOrTwo" END AS IdRedux
FROM customer
В состоянии можно включить несколько столбцов.
SELECT
CASE WHEN id = 1 OR state = 'MA'
THEN "OneOrMA"
ELSE "NotOneOrMA" END AS IdRedux
FROM customer
Вы также можете вставить выражение CASE WHEN THEN.
SELECT
CASE WHEN id = 1
THEN "OneOrMA"
ELSE
CASE WHEN state = 'MA' THEN "OneOrMA" ELSE "NotOneOrMA" END
END AS IdRedux
FROM customer