Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SPARK-20915][SQL] Make lpad/rpad with empty pad string same as MySQL. #18138

Closed
wants to merge 2 commits into from
Closed

[SPARK-20915][SQL] Make lpad/rpad with empty pad string same as MySQL. #18138

wants to merge 2 commits into from

Conversation

wangyum
Copy link
Member

@wangyum wangyum commented May 29, 2017

What changes were proposed in this pull request?

Spark SQL rpad/lpad with empty pad string:

spark-sql> select rpad('hello', -2, ''), rpad('hello', -1, '') , rpad('hello', 0, ''), rpad('hello', 1, ''), rpad('hello', 3, ''), rpad('hello', 5, ''), rpad('hello', 6, '');
			h	hel	hello	hello
spark-sql> select lpad('hello', -2, ''), lpad('hello', -1, '') , lpad('hello', 0, ''), lpad('hello', 1, ''), lpad('hello', 3, ''), lpad('hello', 5, ''), lpad('hello', 6, '');
			h	hel	hello	hello
spark-sql>

but the MySQL result:

mysql> select rpad('hello', -2, ''), rpad('hello', -1, '') , rpad('hello', 0, ''), rpad('hello', 1, ''), rpad('hello', 3, ''), rpad('hello', 5, ''), rpad('hello', 6, '') from dual;
+-----------------------+-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
| rpad('hello', -2, '') | rpad('hello', -1, '') | rpad('hello', 0, '') | rpad('hello', 1, '') | rpad('hello', 3, '') | rpad('hello', 5, '') | rpad('hello', 6, '') |
+-----------------------+-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
| NULL                  | NULL                  |                      | h                    | hel                  | hello                | NULL                 |
+-----------------------+-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
1 row in set (0.00 sec)

mysql> select lpad('hello', -2, ''), lpad('hello', -1, '') , lpad('hello', 0, ''), lpad('hello', 1, ''), lpad('hello', 3, ''), lpad('hello', 5, ''), lpad('hello', 6, '')  from dual;
+-----------------------+-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
| lpad('hello', -2, '') | lpad('hello', -1, '') | lpad('hello', 0, '') | lpad('hello', 1, '') | lpad('hello', 3, '') | lpad('hello', 5, '') | lpad('hello', 6, '') |
+-----------------------+-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
| NULL                  | NULL                  |                      | h                    | hel                  | hello                | NULL                 |
+-----------------------+-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
1 row in set (0.01 sec)

This PR fix this issue, after this PR:

spark-sql> select rpad('hello', -2, ''), rpad('hello', -1, '') , rpad('hello', 0, ''), rpad('hello', 1, ''), rpad('hello', 3, ''), rpad('hello', 5, ''), rpad('hello', 6, '');
NULL	NULL		h	hel	hello	NULL
spark-sql> select lpad('hello', -2, ''), lpad('hello', -1, '') , lpad('hello', 0, ''), lpad('hello', 1, ''), lpad('hello', 3, ''), lpad('hello', 5, ''), lpad('hello', 6, '');
NULL	NULL		h	hel	hello	NULL
spark-sql> 

How was this patch tested?

unit tests

@SparkQA
Copy link

SparkQA commented May 29, 2017

Test build #77505 has finished for PR 18138 at commit 3ac9fb0.

  • This patch fails Spark unit tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@SparkQA
Copy link

SparkQA commented May 30, 2017

Test build #77512 has finished for PR 18138 at commit 895f414.

  • This patch passes all tests.
  • This patch merges cleanly.
  • This patch adds no public classes.

@jiangxb1987
Copy link
Contributor

Can you also examine the HIVE behavior under such cases?

@wangyum
Copy link
Member Author

wangyum commented Jan 17, 2018

Hive will throw ArrayIndexOutOfBoundsException at runtime: https://issues.apache.org/jira/browse/HIVE-17077

@jiangxb1987
Copy link
Contributor

Seems our current behavior doesn't follow each way :(

@wangyum wangyum closed this Jul 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants