From cac633772226ebaf3acdc39329308175ed9ec4f3 Mon Sep 17 00:00:00 2001 From: Serge Rielau Date: Fri, 23 Jul 2021 22:10:48 +0800 Subject: [PATCH 1/5] init doc for type coercion --- docs/img/type-precedence-list.png | Bin 0 -> 133793 bytes docs/sql-ref-ansi-compliance.md | 75 ++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 docs/img/type-precedence-list.png diff --git a/docs/img/type-precedence-list.png b/docs/img/type-precedence-list.png new file mode 100644 index 0000000000000000000000000000000000000000..176d3ebbf9f5a79d6a52ea647f06710b35f588ab GIT binary patch literal 133793 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 literal 0 HcmV?d00001 diff --git a/docs/sql-ref-ansi-compliance.md b/docs/sql-ref-ansi-compliance.md index adaa94cab4da..becd1009a205 100644 --- a/docs/sql-ref-ansi-compliance.md +++ b/docs/sql-ref-ansi-compliance.md @@ -160,6 +160,81 @@ SELECT * FROM t; +---+ ``` +### Type coercion +#### Type Promotion and Precedence +Spark SQL uses several rules that govern how conflicts between data types are resolved. +At the heart of this conflict resolution is the Type Precedence List which defines whether values of a given data type can be promoted to another data type implicitly. + +| Data type | precedence list(from narrowest to widest) | +|-----------|------------------------------------------------------------------| +| Byte | Byte -> Short -> Int -> Long -> Decimal -> Float* -> Double | +| Short | Short -> Int -> Long -> Decimal-> Float* -> Double | +| Int | Int -> Long -> Decimal -> Float* -> Double | +| Long | Long -> Decimal -> Float* -> Double | +| Decimal | Decimal -> Float* -> Double | +| Float | Float -> Double | +| Double | Double | +| Date | Date-> Timestamp | +| Timestamp | Timestamp | +| String | String | +| Binary | Binary | +| Boolean | Boolean | +| Interval | Interval | +| Map | Map** | +| Array | Array** | +| Struct | Struct** | + +\* For least common type resolution float is skipped to avoid loss of precision. + +\*\* For a complex type, the precedence rule applies recursively to its component elements. + +Special rules apply for string literals and untyped NULL. +A NULL can be promoted to any other type, while a string literal can be promoted to any simple data type. + +This is a graphical depiction of the precedence list as a directed tree: +Type Precedence List + +#### Least Common Type Resolution +The least common type from a set of types is the narrowest type reachable from the precedence list by all elements of the set of types. + +The least common type resolution is used to: +- Decide whether a function expecting a parameter of a type can be invoked using an argument of a narrower type. +- Derive the argument type for functions which expect a shared argument type for multiple parameters, such as coalesce, least, or greatest. +- Derive the operand types for operators such as arithmetic operations or comparisons. +- Derive the result type for expressions such as the case expression. +- Derive the element, key, or value types for array and map constructors. +Special rules are applied if the least common type resolves to FLOAT. If any of the types is INT, BIGINT, or DECIMAL the least common type is pushed to DOUBLE to avoid potential loss of digits. + +#### Examples +The coalesce function accepts any set of argument types as long as they share a least common type. +The result type is the least common type of the arguments. +```sql +> SELECT typeof(coalesce(1Y, 1L, NULL)); +BIGINT +> SELECT typeof(coalesce(1, DATE’2020-01-01’)); +Error: Incompatible types [INT, DATE] + +> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L))) +ARRAY +> SELECT typeof(coalesce(1, 1F)) +DOUBLE +> SELECT typeof(coalesce(1L, 1F)) +DOUBLE +> SELECT (typeof(coalesce(1BD, 1F)) +DOUBLE + +-- The substring function expects arguments of type INT for the start and length parameters. +> SELECT substring(‘hello’, 1, 2); +He +> SELECT substring(‘hello’, ‘1’, 2); +he +> SELECT substring(‘hello’, 1L, 2); +Error: Argument 2 requires an INT type. +> SELECT substring(‘hello’, str, 2) +FROM VALUES(CAST(‘1’ AS TRING)) AS T(str); +Error: Argument 2 requires an INT type. +``` + ### SQL Functions The behavior of some SQL functions can be different under ANSI mode (`spark.sql.ansi.enabled=true`). From b06f41364bfa066ba41db5cc20f4f9afa1b97b9e Mon Sep 17 00:00:00 2001 From: Gengliang Wang Date: Mon, 26 Jul 2021 15:28:35 +0800 Subject: [PATCH 2/5] revise doc --- docs/sql-ref-ansi-compliance.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/sql-ref-ansi-compliance.md b/docs/sql-ref-ansi-compliance.md index becd1009a205..ad21b783482a 100644 --- a/docs/sql-ref-ansi-compliance.md +++ b/docs/sql-ref-ansi-compliance.md @@ -66,7 +66,7 @@ SELECT abs(-2147483648); +----------------+ ``` -### Type Conversion +### Cast Spark SQL has three kinds of type conversions: explicit casting, type coercion, and store assignment casting. When `spark.sql.ansi.enabled` is set to `true`, explicit casting by `CAST` syntax throws a runtime exception for illegal cast patterns defined in the standard, e.g. casts from a string to an integer. @@ -162,7 +162,7 @@ SELECT * FROM t; ### Type coercion #### Type Promotion and Precedence -Spark SQL uses several rules that govern how conflicts between data types are resolved. +When `spark.sql.ansi.enabled` is set to `true`, Spark SQL uses several rules that govern how conflicts between data types are resolved. At the heart of this conflict resolution is the Type Precedence List which defines whether values of a given data type can be promoted to another data type implicitly. | Data type | precedence list(from narrowest to widest) | @@ -209,29 +209,29 @@ Special rules are applied if the least common type resolves to FLOAT. If any of The coalesce function accepts any set of argument types as long as they share a least common type. The result type is the least common type of the arguments. ```sql +> SET spark.sql.ansi.enabled=true; > SELECT typeof(coalesce(1Y, 1L, NULL)); BIGINT -> SELECT typeof(coalesce(1, DATE’2020-01-01’)); +> SELECT typeof(coalesce(1, DATE'2020-01-01')); Error: Incompatible types [INT, DATE] -> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L))) +> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L))); ARRAY -> SELECT typeof(coalesce(1, 1F)) +> SELECT typeof(coalesce(1, 1F)); DOUBLE -> SELECT typeof(coalesce(1L, 1F)) +> SELECT typeof(coalesce(1L, 1F)); DOUBLE -> SELECT (typeof(coalesce(1BD, 1F)) +> SELECT (typeof(coalesce(1BD, 1F))); DOUBLE -- The substring function expects arguments of type INT for the start and length parameters. -> SELECT substring(‘hello’, 1, 2); -He -> SELECT substring(‘hello’, ‘1’, 2); +> SELECT substring('hello', 1, 2); he -> SELECT substring(‘hello’, 1L, 2); +> SELECT substring('hello', '1', 2); +he +> SELECT substring('hello', 1L, 2); Error: Argument 2 requires an INT type. -> SELECT substring(‘hello’, str, 2) -FROM VALUES(CAST(‘1’ AS TRING)) AS T(str); +> SELECT substring('hello', str, 2) FROM VALUES(CAST('1' AS STRING)) AS T(str); Error: Argument 2 requires an INT type. ``` From a2765cb0b0c3517da5d700a9af64f3ac6058eef6 Mon Sep 17 00:00:00 2001 From: Gengliang Wang Date: Tue, 27 Jul 2021 00:40:37 +0800 Subject: [PATCH 3/5] address comment --- docs/sql-ref-ansi-compliance.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sql-ref-ansi-compliance.md b/docs/sql-ref-ansi-compliance.md index ad21b783482a..12b7f0a39333 100644 --- a/docs/sql-ref-ansi-compliance.md +++ b/docs/sql-ref-ansi-compliance.md @@ -174,7 +174,7 @@ At the heart of this conflict resolution is the Type Precedence List which defin | Decimal | Decimal -> Float* -> Double | | Float | Float -> Double | | Double | Double | -| Date | Date-> Timestamp | +| Date | Date -> Timestamp | | Timestamp | Timestamp | | String | String | | Binary | Binary | @@ -199,7 +199,7 @@ The least common type from a set of types is the narrowest type reachable from t The least common type resolution is used to: - Decide whether a function expecting a parameter of a type can be invoked using an argument of a narrower type. -- Derive the argument type for functions which expect a shared argument type for multiple parameters, such as coalesce, least, or greatest. +- Derive the argument type for functions which expect a shared argument type for multiple parameters, such as coalesce, least, or greatest. - Derive the operand types for operators such as arithmetic operations or comparisons. - Derive the result type for expressions such as the case expression. - Derive the element, key, or value types for array and map constructors. From fd5ecce01d59781e47af3b80b49f787a0e9093cb Mon Sep 17 00:00:00 2001 From: Gengliang Wang Date: Tue, 27 Jul 2021 19:50:58 +0800 Subject: [PATCH 4/5] reorg --- docs/sql-ref-ansi-compliance.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/sql-ref-ansi-compliance.md b/docs/sql-ref-ansi-compliance.md index 12b7f0a39333..3b1b9d47037a 100644 --- a/docs/sql-ref-ansi-compliance.md +++ b/docs/sql-ref-ansi-compliance.md @@ -31,9 +31,9 @@ When `spark.sql.storeAssignmentPolicy` is set to `ANSI`, Spark SQL complies with |Property Name|Default|Meaning|Since Version| |-------------|-------|-------|-------------| |`spark.sql.ansi.enabled`|false|(Experimental) When true, Spark tries to conform to the ANSI SQL specification:
1. Spark will throw a runtime exception if an overflow occurs in any operation on integral/decimal field.
2. Spark will forbid using the reserved keywords of ANSI SQL as identifiers in the SQL parser.|3.0.0| -|`spark.sql.storeAssignmentPolicy`|ANSI|(Experimental) When inserting a value into a column with different data type, Spark will perform type coercion. Currently, we support 3 policies for the type coercion rules: ANSI, legacy and strict. With ANSI policy, Spark performs the type coercion as per ANSI SQL. In practice, the behavior is mostly the same as PostgreSQL. It disallows certain unreasonable type conversions such as converting string to int or double to boolean. With legacy policy, Spark allows the type coercion as long as it is a valid Cast, which is very loose. e.g. converting string to int or double to boolean is allowed. It is also the only behavior in Spark 2.x and it is compatible with Hive. With strict policy, Spark doesn't allow any possible precision loss or data truncation in type coercion, e.g. converting double to int or decimal to double is not allowed.|3.0.0| +|`spark.sql.storeAssignmentPolicy`|ANSI|(Experimental) When inserting a value into a column with different data type, Spark will perform type conversion. Currently, we support 3 policies for the type coercion rules: ANSI, legacy and strict. With ANSI policy, Spark performs the type coercion as per ANSI SQL. In practice, the behavior is mostly the same as PostgreSQL. It disallows certain unreasonable type conversions such as converting string to int or double to boolean. With legacy policy, Spark allows the type coercion as long as it is a valid Cast, which is very loose. e.g. converting string to int or double to boolean is allowed. It is also the only behavior in Spark 2.x and it is compatible with Hive. With strict policy, Spark doesn't allow any possible precision loss or data truncation in type coercion, e.g. converting double to int or decimal to double is not allowed.|3.0.0| -The following subsections present behaviour changes in arithmetic operations, type conversions, and SQL parsing when the ANSI mode enabled. +The following subsections present behaviour changes in arithmetic operations, type conversions, and SQL parsing when the ANSI mode enabled. For type conversions in Spark SQL, there are three kinds of them and this article will introduce them one by one: cast, store assignment and type coercion. ### Arithmetic Operations @@ -68,9 +68,7 @@ SELECT abs(-2147483648); ### Cast -Spark SQL has three kinds of type conversions: explicit casting, type coercion, and store assignment casting. When `spark.sql.ansi.enabled` is set to `true`, explicit casting by `CAST` syntax throws a runtime exception for illegal cast patterns defined in the standard, e.g. casts from a string to an integer. -On the other hand, `INSERT INTO` syntax throws an analysis exception when the ANSI mode enabled via `spark.sql.storeAssignmentPolicy=ANSI`. The type conversion of Spark ANSI mode follows the syntax rules of section 6.13 "cast specification" in [ISO/IEC 9075-2:2011 Information technology — Database languages - SQL — Part 2: Foundation (SQL/Foundation)](https://www.iso.org/standard/53682.html), except it specially allows the following straightforward type conversions which are disallowed as per the ANSI standard: @@ -160,6 +158,9 @@ SELECT * FROM t; +---+ ``` +### Store assignment +As mentioned at the beginning, when `spark.sql.storeAssignmentPolicy` is set to `ANSI`(which is the default value), Spark SQL complies with the ANSI store assignment rules. During table insertion, Spark will throw exception on numeric value overflow or the source value can't be stored as the target type. + ### Type coercion #### Type Promotion and Precedence When `spark.sql.ansi.enabled` is set to `true`, Spark SQL uses several rules that govern how conflicts between data types are resolved. @@ -204,11 +205,10 @@ The least common type resolution is used to: - Derive the result type for expressions such as the case expression. - Derive the element, key, or value types for array and map constructors. Special rules are applied if the least common type resolves to FLOAT. If any of the types is INT, BIGINT, or DECIMAL the least common type is pushed to DOUBLE to avoid potential loss of digits. - -#### Examples -The coalesce function accepts any set of argument types as long as they share a least common type. -The result type is the least common type of the arguments. + ```sql +-- The coalesce function accepts any set of argument types as long as they share a least common type. +-- The result type is the least common type of the arguments. > SET spark.sql.ansi.enabled=true; > SELECT typeof(coalesce(1Y, 1L, NULL)); BIGINT @@ -225,7 +225,7 @@ DOUBLE DOUBLE -- The substring function expects arguments of type INT for the start and length parameters. -> SELECT substring('hello', 1, 2); +> SELECT substring('hello', 1Y, 2); he > SELECT substring('hello', '1', 2); he From f75359a8187d38668a9f2cd37e91d7d11ee8223c Mon Sep 17 00:00:00 2001 From: Gengliang Wang Date: Tue, 27 Jul 2021 20:45:45 +0800 Subject: [PATCH 5/5] address comments --- docs/sql-ref-ansi-compliance.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/sql-ref-ansi-compliance.md b/docs/sql-ref-ansi-compliance.md index 3b1b9d47037a..2001c9fc0d4f 100644 --- a/docs/sql-ref-ansi-compliance.md +++ b/docs/sql-ref-ansi-compliance.md @@ -70,7 +70,7 @@ SELECT abs(-2147483648); When `spark.sql.ansi.enabled` is set to `true`, explicit casting by `CAST` syntax throws a runtime exception for illegal cast patterns defined in the standard, e.g. casts from a string to an integer. -The type conversion of Spark ANSI mode follows the syntax rules of section 6.13 "cast specification" in [ISO/IEC 9075-2:2011 Information technology — Database languages - SQL — Part 2: Foundation (SQL/Foundation)](https://www.iso.org/standard/53682.html), except it specially allows the following +The `CAST` clause of Spark ANSI mode follows the syntax rules of section 6.13 "cast specification" in [ISO/IEC 9075-2:2011 Information technology — Database languages - SQL — Part 2: Foundation (SQL/Foundation)](https://www.iso.org/standard/53682.html), except it specially allows the following straightforward type conversions which are disallowed as per the ANSI standard: * NumericType <=> BooleanType * StringType <=> BinaryType @@ -101,9 +101,6 @@ In the table above, all the `CAST`s that can cause runtime exceptions are marked * CAST(Map AS Map): raise an exception if there is any on the conversion of the keys and the values. * CAST(Struct AS Struct): raise an exception if there is any on the conversion of the struct fields. -Currently, the ANSI mode affects explicit casting and assignment casting only. -In future releases, the behaviour of type coercion might change along with the other two type conversion rules. - ```sql -- Examples of explicit casting @@ -204,7 +201,7 @@ The least common type resolution is used to: - Derive the operand types for operators such as arithmetic operations or comparisons. - Derive the result type for expressions such as the case expression. - Derive the element, key, or value types for array and map constructors. -Special rules are applied if the least common type resolves to FLOAT. If any of the types is INT, BIGINT, or DECIMAL the least common type is pushed to DOUBLE to avoid potential loss of digits. +Special rules are applied if the least common type resolves to FLOAT. With float type values, if any of the types is INT, BIGINT, or DECIMAL the least common type is pushed to DOUBLE to avoid potential loss of digits. ```sql -- The coalesce function accepts any set of argument types as long as they share a least common type.