You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by GitBox <gi...@apache.org> on 2019/07/15 07:34:07 UTC

[GitHub] [spark] wangyum opened a new pull request #25158: [SPARK-28395][SQL] Division operator support integral division

wangyum opened a new pull request #25158: [SPARK-28395][SQL] Division operator support integral division
URL: https://github.com/apache/spark/pull/25158
 
 
   ## What changes were proposed in this pull request?
   
   PostgreSQL, Teradata, SQL Server, DB2 and Presto perform integral division with the `/` operator.
   But Oracle, Vertica, Hive, MySQL and MariaDB perform fractional division with the `/` operator.
   
   This pr add a flag(`spark.sql.function.preferIntegralDivision`) to control whether to use integral division with the `/` operator.
   
   Examples:
   
   **PostgreSQL**:
   ```sql
   postgres=# select substr(version(), 0, 16), cast(10 as int) / cast(3 as int), cast(10.1 as float8) / cast(3 as int), cast(10 as int) / cast(3.1 as float8), cast(10.1 as float8)/cast(3.1 as float8);
        substr      | ?column? |     ?column?     |    ?column?     |     ?column?
   -----------------+----------+------------------+-----------------+------------------
    PostgreSQL 11.3 |        3 | 3.36666666666667 | 3.2258064516129 | 3.25806451612903
   (1 row)
   ```
   **SQL Server**:
   ```sql
   1> select cast(10 as int) / cast(3 as int), cast(10.1 as float) / cast(3 as int), cast(10 as int) / cast(3.1 as float), cast(10.1 as float)/cast(3.1 as float);
   2> go
   
   ----------- ------------------------ ------------------------ ------------------------
             3       3.3666666666666667        3.225806451612903        3.258064516129032
   
   (1 rows affected)
   ```
   **DB2**:
   ```sql
   [db2inst1@2f3c821d36b7 ~]$ db2 "select cast(10 as int) / cast(3 as int), cast(10.1 as double) / cast(3 as int), cast(10 as int) / cast(3.1 as double), cast(10.1 as double)/cast(3.1 as double) from table (sysproc.env_get_inst_info())"
   
   1           2                        3                        4
   ----------- ------------------------ ------------------------ ------------------------
             3   +3.36666666666667E+000   +3.22580645161290E+000   +3.25806451612903E+000
   
     1 record(s) selected.
   ```
   **Presto**:
   ```sql
   presto> select cast(10 as int) / cast(3 as int), cast(10.1 as double) / cast(3 as int), cast(10 as int) / cast(3.1 as double), cast(10.1 as double)/cast(3.1 as double);
    _col0 |       _col1        |       _col2       |       _col3
   -------+--------------------+-------------------+-------------------
        3 | 3.3666666666666667 | 3.225806451612903 | 3.258064516129032
   (1 row)
   ```
   **Teradata**:
   ![image](https://user-images.githubusercontent.com/5399861/61200701-e97d5380-a714-11e9-9a1d-57fd99d38c8d.png)
   
   
   **Oracle**:
   ```sql
   SQL> select 10 / 3 from dual;
   
         10/3
   ----------
   3.33333333
   ```
   **Vertica**
   ```sql
   dbadmin=> select version(), cast(10 as int) / cast(3 as int), cast(10.1 as float8) / cast(3 as int), cast(10 as int) / cast(3.1 as float8), cast(10.1 as float8)/cast(3.1 as float8);
                 version               |       ?column?       |     ?column?     |    ?column?     |     ?column?
   ------------------------------------+----------------------+------------------+-----------------+------------------
    Vertica Analytic Database v9.1.1-0 | 3.333333333333333333 | 3.36666666666667 | 3.2258064516129 | 3.25806451612903
   (1 row)
   ```
   **Hive**:
   ```sql
   hive> select cast(10 as int) / cast(3 as int), cast(10.1 as double) / cast(3 as int), cast(10 as int) / cast(3.1 as double), cast(10.1 as double)/cast(3.1 as double);
   OK
   3.3333333333333335	3.3666666666666667	3.225806451612903	3.258064516129032
   Time taken: 0.143 seconds, Fetched: 1 row(s)
   ```
   **MariaDB**:
   ```sql
   MariaDB [(none)]> select version(), cast(10 as int) / cast(3 as int), cast(10.1 as double) / cast(3 as int), cast(10 as int) / cast(3.1 as double), cast(10.1 as double)/cast(3.1 as double);
   +--------------------------------------+----------------------------------+---------------------------------------+---------------------------------------+------------------------------------------+
   | version()                            | cast(10 as int) / cast(3 as int) | cast(10.1 as double) / cast(3 as int) | cast(10 as int) / cast(3.1 as double) | cast(10.1 as double)/cast(3.1 as double) |
   +--------------------------------------+----------------------------------+---------------------------------------+---------------------------------------+------------------------------------------+
   | 10.4.6-MariaDB-1:10.4.6+maria~bionic |                           3.3333 |                    3.3666666666666667 |                     3.225806451612903 |                        3.258064516129032 |
   +--------------------------------------+----------------------------------+---------------------------------------+---------------------------------------+------------------------------------------+
   1 row in set (0.000 sec)
   ```
   **MySQL**:
   ```sql
   mysql>  select version(), 10 / 3, 10 / 3.1, 10.1 / 3, 10.1 / 3.1;
   +-----------+--------+----------+----------+------------+
   | version() | 10 / 3 | 10 / 3.1 | 10.1 / 3 | 10.1 / 3.1 |
   +-----------+--------+----------+----------+------------+
   | 8.0.16    | 3.3333 |   3.2258 |  3.36667 |    3.25806 |
   +-----------+--------+----------+----------+------------+
   1 row in set (0.00 sec)
   ```
   ## How was this patch tested?
   
   unit tests
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

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