You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by GitBox <gi...@apache.org> on 2022/04/17 11:45:31 UTC

[GitHub] [flink] ChengkaiYang2022 opened a new pull request, #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

ChengkaiYang2022 opened a new pull request, #19498:
URL: https://github.com/apache/flink/pull/19498

   <!--
   *Thank you very much for contributing to Apache Flink - we are happy that you want to help us improve Flink. To help the community review your contribution in the best possible way, please go through the checklist below, which will get the contribution into a shape in which it can be best reviewed.*
   
   *Please understand that we do not do this to make contributions to Flink a hassle. In order to uphold a high standard of quality for code contributions, while at the same time managing a large number of contributions, we need contributors to prepare the contributions well, and give reviewers enough contextual information for the review. Please also understand that contributions that do not follow this guide will take longer to review and thus typically be picked up with lower priority by the community.*
   
   ## Contribution Checklist
   
     - Make sure that the pull request corresponds to a [JIRA issue](https://issues.apache.org/jira/projects/FLINK/issues). Exceptions are made for typos in JavaDoc or documentation files, which need no JIRA issue.
     
     - Name the pull request in the form "[FLINK-XXXX] [component] Title of the pull request", where *FLINK-XXXX* should be replaced by the actual issue number. Skip *component* if you are unsure about which is the best component.
     Typo fixes that have no associated JIRA issue should be named following this pattern: `[hotfix] [docs] Fix typo in event time introduction` or `[hotfix] [javadocs] Expand JavaDoc for PuncuatedWatermarkGenerator`.
   
     - Fill out the template below to describe the changes contributed by the pull request. That will give reviewers the context they need to do the review.
     
     - Make sure that the change passes the automated tests, i.e., `mvn clean verify` passes. You can set up Azure Pipelines CI to do that following [this guide](https://cwiki.apache.org/confluence/display/FLINK/Azure+Pipelines#AzurePipelines-Tutorial:SettingupAzurePipelinesforaforkoftheFlinkrepository).
   
     - Each pull request should address only one issue, not mix up code from multiple issues.
     
     - Each commit in the pull request has a meaningful commit message (including the JIRA id)
   
     - Once all items of the checklist are addressed, remove the above text and this checklist, leaving only the filled out template below.
   
   
   **(The sections below can be removed for hotfixes of typos)**
   -->
   
   ## What is the purpose of the change
   
   Translate the new CAST documentation to Chinese
   
   ## Brief change log
   
   
     -  Adjust some lines in the docs/content.zh/docs/dev/table/types.md to ensure that this page is consistent with the English version.
     -  Translate the new CAST documentation to Chinese.
   
   
   
   ## Verifying this change
   
   Please make sure both new and modified tests in this PR follows the conventions defined in our code quality guide: https://flink.apache.org/contributing/code-style-and-quality-common.html#testing
   
   *(Please pick either of the following options)*
   
   This change is a trivial rework / code cleanup without any test coverage.
   
   *(or)*
   
   This change is already covered by existing tests, such as *(please describe tests)*.
   
   *(or)*
   
   This change added tests and can be verified as follows:
   
   *(example:)*
     - *Added integration tests for end-to-end deployment with large payloads (100MB)*
     - *Extended integration test for recovery after master (JobManager) failure*
     - *Added test that validates that TaskInfo is transferred only once across recoveries*
     - *Manually verified the change by running a 4 node cluster with 2 JobManagers and 4 TaskManagers, a stateful streaming program, and killing one JobManager and two TaskManagers during the execution, verifying that recovery happens correctly.*
   
   ## Does this pull request potentially affect one of the following parts:
   
     - Dependencies (does it add or upgrade a dependency): (yes / no) no
     - The public API, i.e., is any changed class annotated with `@Public(Evolving)`: (yes / no) no
     - The serializers: (yes / no / don't know) no
     - The runtime per-record code paths (performance sensitive): (yes / no / don't know) no
     - Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (yes / no / don't know) no
     - The S3 file system connector: (yes / no / don't know) no
   
   ## Documentation
   
     - Does this pull request introduce a new feature? (yes / no) no
     - If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)
   


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on a diff in pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on code in PR #19498:
URL: https://github.com/apache/flink/pull/19498#discussion_r866547558


##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换

Review Comment:
   Remove '从' ?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |

Review Comment:
   输出类型 -> 目标类型?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。

Review Comment:
   请注意:无论是 `CAST` 还是 `TRY_CAST`,当输入为 `NULL` ,输出也为 `NULL`。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,
+在 Flink 1.15 版本此参数默认为 disabled。
+
+如果设置为 enabled,请注意以下问题:
+
+* 转换为 `CHAR`/`VARCHAR`/`BINARY`/`VARBINARY` 数据类型时,不再自动修剪(trim)或填充(pad)。
+* 使用 `CAST` 时不再会因为转化失败而停止作业,只会返回 `NULL`,但不会像 `TRY_CAST` 那样推断正确的类型。
+* `CHAR`/`VARCHAR`/`STRING` 的转换结果会有一些细微的差别。
+
+{{< hint warning >}}
+我们 **不建议** 配置此参数,而是 **强烈建议** 在新项目中保持这个参数为默认禁用,以使用最新版本的 cast 方法。

Review Comment:
   以使用最新版本的 cast 方法 -> 以使用最新版本的 cast 行为



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。

Review Comment:
   > 而有些转换则会发生错误,在运行时失败
   而有些转换则会在运行时失败(例如,当无法为目标类型创建相应的值时)



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。

Review Comment:
   > 而有些转换则会发生错误,在运行时失败
   
   而有些转换则会在运行时失败



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。

Review Comment:
   ??



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。

Review Comment:
   > 但反过来从 `STRING` 数据类型转换为 `INT` 数据类型就不一定了。
   
   但无法保证将`STRING` 数据类型转换为 `INT` 数据类型。
   



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。

Review Comment:
   需要用户手动处理 -> 需要用户正确处理



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法

Review Comment:
   Upper case?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |

Review Comment:
   输出类型 -> 目标类型?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。

Review Comment:
   所有转化到具有固长或变长的类型时会根据类型的定义来裁剪或填充数据。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。

Review Comment:
   例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型 -> 例如从 `TIMESTAMP` 类型转化到 `INTERVAL` 类型。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。

Review Comment:
   需要用户手动处理 -> 需要用户正确处理



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。

Review Comment:
   > 但反过来从 `STRING` 数据类型转换为 `INT` 数据类型就不一定了。
   
   但无法保证将`STRING` 数据类型转换为 `INT` 数据类型。
   



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。

Review Comment:
   所有转化到具有固长或变长的类型时会根据类型的定义来裁剪或填充数据。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法

Review Comment:
   Upper case?
   
   或者 翻译称为 类型转换? 
   
   In the PG community, they use the `类型转换`[1].
   
   [1] http://www.postgres.cn/docs/12/typeconv.html
   



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,
+在 Flink 1.15 版本此参数默认为 disabled。
+
+如果设置为 enabled,请注意以下问题:
+
+* 转换为 `CHAR`/`VARCHAR`/`BINARY`/`VARBINARY` 数据类型时,不再自动修剪(trim)或填充(pad)。
+* 使用 `CAST` 时不再会因为转化失败而停止作业,只会返回 `NULL`,但不会像 `TRY_CAST` 那样推断正确的类型。
+* `CHAR`/`VARCHAR`/`STRING` 的转换结果会有一些细微的差别。
+
+{{< hint warning >}}
+我们 **不建议** 配置此参数,而是 **强烈建议** 在新项目中保持这个参数为默认禁用,以使用最新版本的 cast 方法。

Review Comment:
   以使用最新版本的 cast 方法 -> 以使用最新版本的 cast 行为



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,

Review Comment:
   用户可以通过将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled` 来启用 1.15 版本之前的 CAST 行为。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容

Review Comment:
   去掉 的兼容 吧



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,

Review Comment:
   用户可以通过将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled` 来启用 1.15 版本之前的 CAST 行为。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。

Review Comment:
   符合标准 SQL 的常规 cast 方法 -> 定义在 SQL 标准的 CAST 方法。
   
   当实际输入数据不是其 `输入` 数据类型时 -> 当实际输入数据不合法时。
   
   > The type inference will preserve the nullability of the input type. 
   
   类型推导会保留输入类型的可空性。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。

Review Comment:
   请注意:无论是 `CAST` 还是 `TRY_CAST`,当输入为 `NULL` ,输出也为 `NULL`。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。

Review Comment:
   符合标准 SQL 的常规 cast 方法 -> 定义在 SQL 标准的 CAST 方法。
   
   当实际输入数据不是其 `输入` 数据类型时 -> 当实际输入数据不合法时。
   
   > The type inference will preserve the nullability of the input type. 
   
   类型推导会保留输入类型的可空性。也就是说,该方法的返回类型和输入类型有相同的可空性。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容

Review Comment:
   去掉 的兼容 吧



-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120818878

   The CI test faild because of some 'Test - finegrained_resource_management'? Not sure what that means.
   Should I rebase from master again?
   
   ![Uploading 屏幕截图 2022-05-09 164352.png…]()
   


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1100870296

   Hi,@RocMarshal , could you help to review this PR?:-)


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120121765

   > The CI test fails. Could you rebase to the latest master and trigger the test again?
   
   Okay,I will try to rebase


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] leonardBang commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
leonardBang commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1121808405

   @ChengkaiYang2022 Could you also open a backport PR for branch `release-1.15` ?


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1122230307

   > @ChengkaiYang2022 Could you also open a backport PR for branch `release-1.15` ?
   
   Okay I will try to that.


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120116520

   The CI test fails. Could you rebase to the latest master and trigger the test again?


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on a diff in pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on code in PR #19498:
URL: https://github.com/apache/flink/pull/19498#discussion_r866611046


##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法

Review Comment:
   OK, maybe upper case 'CAST 方法' ? I think CAST will be just fine.



-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] leonardBang merged pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
leonardBang merged PR #19498:
URL: https://github.com/apache/flink/pull/19498


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1112900057

   Sorry for the late response. I will review it soon..


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120129625

   @flinkbot run azure


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1119409572

   <img width="677" alt="屏幕截图 2022-05-06 170553" src="https://user-images.githubusercontent.com/8577744/167102086-9015292e-d597-4440-be93-16075ce6c596.png">
   <img width="761" alt="屏幕截图 2022-05-06 170607" src="https://user-images.githubusercontent.com/8577744/167102100-8031945e-9ab5-4965-800a-156724d1cae2.png">
   


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1121710303

   CI test passed.[link](https://dev.azure.com/apache-flink/apache-flink/_build/results?buildId=35507&view=results)


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on a diff in pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on code in PR #19498:
URL: https://github.com/apache/flink/pull/19498#discussion_r851752063


##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -191,6 +155,36 @@ For the Python Table API, those types are available in `pyflink.table.types.Data
 {{< /tab >}}
 {{< /tabs >}}
 
+The default planner supports the following set of SQL types:
+
+| Data Type        | Remarks for Data Type                              |
+|:-----------------|:---------------------------------------------------|
+| `CHAR`           |                                                    |
+| `VARCHAR`        |                                                    |
+| `STRING`         |                                                    |
+| `BOOLEAN`        |                                                    |
+| `BINARY`         |                                                    |
+| `VARBINARY`      |                                                    |
+| `BYTES`          |                                                    |
+| `DECIMAL`        | Supports fixed precision and scale.                |
+| `TINYINT`        |                                                    |
+| `SMALLINT`       |                                                    |
+| `INTEGER`        |                                                    |
+| `BIGINT`         |                                                    |
+| `FLOAT`          |                                                    |

Review Comment:
   Adjust some lines in the docs/content.zh/docs/dev/table/types.md to ensure that this page is consistent with the English version. Please see [here](https://github.com/apache/flink/pull/18813/commits/da1c918a08dfcb50e27ffa0b54b36c4e711b460d)



-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1100865248

   Hi, @RocMarshal ,cound you help me to review this PR? :-)


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1113981445

   > Could you share the screen snapshot about the doc you modified?
   
   Sure,Thanks for  reply!
   
   The section I translate is the Casting part:
   
   Chinese Version:
   
   
   
   
   ![屏幕截图 2022-04-30 202719](https://user-images.githubusercontent.com/8577744/166105674-6d7fb7bb-ca72-4fd8-b169-c19478aa8694.png)
   ![屏幕截图 2022-04-30 202756](https://user-images.githubusercontent.com/8577744/166105682-1f384322-dcd4-4b84-ad21-0ea0efad8de8.png)
   
   And the English version is:
   ![屏幕截图 2022-04-30 202844](https://user-images.githubusercontent.com/8577744/166105712-bb567905-dd71-475f-8926-456e998ef97b.png)
   
   
   ![屏幕截图 2022-04-30 203023](https://user-images.githubusercontent.com/8577744/166105716-13cf835d-45ad-452f-a583-5e2f7d50981b.png)
   
   The url is http://localhost:1313/flink/flink-docs-master/zh/docs/dev/table/types/#cast-%E6%96%B9%E6%B3%95
    


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120610051

   > > > @flinkbot run azure
   > > 
   > > 
   > > https://dev.azure.com/apache-flink/apache-flink/_build/results?buildId=35475&view=results
   > 
   > @fsk119 hi,not sure why this failed?Is this because some azure resource problem?
   ![屏幕截图 2022-05-09 114948](https://user-images.githubusercontent.com/8577744/167337520-74a8b6c8-5813-4e2b-aee3-beb0599f9294.png)
   
   


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] flinkbot commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
flinkbot commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1100860351

   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "b3548a173ac0ea60af2cf28763f711ad035e46ba",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "b3548a173ac0ea60af2cf28763f711ad035e46ba",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * b3548a173ac0ea60af2cf28763f711ad035e46ba UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run azure` re-run the last Azure build
   </details>


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120942976

   
   ![1](https://user-images.githubusercontent.com/8577744/167395111-99839525-3eba-409f-809f-7f6ca35ab42c.png)
   
   


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120943147

   @flinkbot run azure


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1119408110

   Hi,@fsk119 ,thanks for your review and comments. I took all the suggestions and push a new [commit](https://github.com/apache/flink/pull/19498/commits/6750c63b53e14b1bc425942c065356187a85a40b), now the article reads much smoother now! Thanks, please take a look!


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120936375

   > @ChengkaiYang2022 I think we should make a try. Seems the CI is not stable..
   
   Okay I will rebase again ASAP


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120930024

   @ChengkaiYang2022 I think we should make a try. Seems the CI is not stable..


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1112900350

   Could you share the screen snapshot about the doc you modified?


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120609343

   > > @flinkbot run azure
   > 
   > https://dev.azure.com/apache-flink/apache-flink/_build/results?buildId=35475&view=results
   
   @fsk119 hi,not sure why this failed?Is this because some azure resource problem?


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120607570

   > @flinkbot run azure
   
   https://dev.azure.com/apache-flink/apache-flink/_build/results?buildId=35475&view=results


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1107839815

   Hi,@fsk119 would you mind help to review this?


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on a diff in pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on code in PR #19498:
URL: https://github.com/apache/flink/pull/19498#discussion_r851752063


##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -191,6 +155,36 @@ For the Python Table API, those types are available in `pyflink.table.types.Data
 {{< /tab >}}
 {{< /tabs >}}
 
+The default planner supports the following set of SQL types:
+
+| Data Type        | Remarks for Data Type                              |
+|:-----------------|:---------------------------------------------------|
+| `CHAR`           |                                                    |
+| `VARCHAR`        |                                                    |
+| `STRING`         |                                                    |
+| `BOOLEAN`        |                                                    |
+| `BINARY`         |                                                    |
+| `VARBINARY`      |                                                    |
+| `BYTES`          |                                                    |
+| `DECIMAL`        | Supports fixed precision and scale.                |
+| `TINYINT`        |                                                    |
+| `SMALLINT`       |                                                    |
+| `INTEGER`        |                                                    |
+| `BIGINT`         |                                                    |
+| `FLOAT`          |                                                    |

Review Comment:
   Adjust some lines in the docs/content.zh/docs/dev/table/types.md to ensure that this page is consistent with the English version. Please see [here](https://github.com/apache/flink/pull/18813/commits/da1c918a08dfcb50e27ffa0b54b36c4e711b460d), And this commit only modified the English version,not the Chinese one, so I made this change in this pr.



-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120128815

   @flinkbot  
   


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1120589931

   @flinkbot run azure


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] ChengkaiYang2022 commented on pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
ChengkaiYang2022 commented on PR #19498:
URL: https://github.com/apache/flink/pull/19498#issuecomment-1122371641

   > @ChengkaiYang2022 Could you also open a backport PR for branch `release-1.15` ?
   
   Backport PR link: https://github.com/apache/flink/pull/19689


-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [flink] fsk119 commented on a diff in pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

Posted by GitBox <gi...@apache.org>.
fsk119 commented on code in PR #19498:
URL: https://github.com/apache/flink/pull/19498#discussion_r866558853


##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。

Review Comment:
   所有转化到具有固长或变长的类型时会根据类型的定义来裁剪或填充数据。



-- 
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.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org