В Spark Sql, если у нас есть when(A

#apache-spark-sql

#apache-spark-sql

Вопрос:

В Spark Sql, если у нас есть when(A amp; B) и если A оценивается как false, то будет ли B по-прежнему оцениваться?

Ответ №1:

Ответ отрицательный, если A равно false, то B не будет оцениваться. Чтобы проверить это, вы можете выполнить следующие запросы:

 SELECT true and assert_true(false) is null
SELECT false and assert_true(false) is null
 

Запрос №1 завершится ошибкой, запрос №2 — нет.

Ответ №2:

Я предполагаю, что так и будет, как показано в следующем примере, где выполняется попытка оценить несуществующий столбец, но я не уверен на 100%:

 spark-sql> select false amp; none;
Error in query: cannot resolve '`none`' given input columns: []; line 1 pos 15;
'Project [unresolvedalias((false amp; 'none), None)]
 - OneRowRelation
 

Комментарии:

1. Та же проблема и со мной, оценивается несуществующий столбец. и это единственная причина, по которой я должен был задать этот вопрос, чтобы получить подтверждение. Спасибо за ваш ответ.

2. Наличие столбца оценивается на этапе планирования запроса, а конечное значение столбца — на этапе выполнения

3. Хорошая точка @falcon-le0, но я не уверен, как определить, оценивается ли значение столбца или нет…