You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@spark.apache.org by "U Shaw (JIRA)" <ji...@apache.org> on 2019/07/02 09:16:00 UTC

[jira] [Created] (SPARK-28229) How to implement the same functionality as presto's TRY(expr) ?

U Shaw created SPARK-28229:
------------------------------

             Summary: How to implement the same functionality as presto's TRY(expr) ?
                 Key: SPARK-28229
                 URL: https://issues.apache.org/jira/browse/SPARK-28229
             Project: Spark
          Issue Type: Question
          Components: SQL
    Affects Versions: 2.4.3
            Reporter: U Shaw



How to implement the same functionality as presto's TRY(expr) ? 
Is there already a similar function?

----------------------------------------------------------------------------------------------
TRY
try(expression)
Evaluate an expression and handle certain types of errors by returning NULL.

In cases where it is preferable that queries produce NULL or default values instead of failing when corrupt or invalid data is encountered, the TRY function may be useful. To specify default values, the TRY function can be used in conjunction with the COALESCE function.

The following errors are handled by TRY:

Division by zero
Invalid cast or function argument
Numeric value out of range
Examples
Source table with some invalid data:

SELECT * FROM shipping;
 origin_state | origin_zip | packages | total_cost
--------------+------------+----------+------------
 California   |      94131 |       25 |        100
 California   |      P332a |        5 |         72
 California   |      94025 |        0 |        155
 New Jersey   |      08544 |      225 |        490
(4 rows)
Query failure without TRY:

SELECT CAST(origin_zip AS BIGINT) FROM shipping;
Query failed: Can not cast 'P332a' to BIGINT
NULL values with TRY:

SELECT TRY(CAST(origin_zip AS BIGINT)) FROM shipping;
 origin_zip
------------
      94131
 NULL
      94025
      08544
(4 rows)
Query failure without TRY:

SELECT total_cost / packages AS per_package FROM shipping;
Query failed: / by zero
Default values with TRY and COALESCE:

SELECT COALESCE(TRY(total_cost / packages), 0) AS per_package FROM shipping;
 per_package
-------------
          4
         14
          0
         19
(4 rows)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@spark.apache.org
For additional commands, e-mail: issues-help@spark.apache.org