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 2021/01/17 10:23:36 UTC

[GitHub] [flink] JavaPentesters opened a new pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

JavaPentesters opened a new pull request #14675:
URL: https://github.com/apache/flink/pull/14675


   ## What is the purpose of the change
   
   + This pull request is to translate "JDBC SQL Connector" documentation into [Chinese](https://issues.apache.org/jira/browse/FLINK-18383?page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel&focusedCommentId=17264916#comment-17264916)
   + The markdown file is located in flink/docs/dev/table/connectors/jdbc.zh.md
   
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

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


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 519566b1079bfca772b00c6c905cbb177594b346 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] JavaPentesters commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
JavaPentesters commented on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-762574753


   @leonardBang Thanks for all your great suggestion! It's my first time to receive PR review.So, what should I do next? How to append commit? 


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] leonardBang commented on a change in pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
leonardBang commented on a change in pull request #14675:
URL: https://github.com/apache/flink/pull/14675#discussion_r560133922



##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,35 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在 DDL 中,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以appened 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
 {% include sql-connector-download-table.zh.html 
-    connector=connector
+​    connector=connector
 %}
 
 <br>
-A driver dependency is also required to connect to a specified database. Here are drivers currently supported:
+在连接到具体数据库时,也需要对应的驱动依赖,目前支持的驱动如下:
 
 | Driver      |      Group Id      |      Artifact Id       |      JAR         |
 | :-----------| :------------------| :----------------------| :----------------|
-| MySQL       |       `mysql`      | `mysql-connector-java` | [Download](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
-| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [Download](https://jdbc.postgresql.org/download.html) |
-| Derby       | `org.apache.derby` |        `derby`         | [Download](http://db.apache.org/derby/derby_downloads.html) |
+| MySQL       |       `mysql`      | `mysql-connector-java` | [下载](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
+| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [下载](https://jdbc.postgresql.org/download.html) |
+| Derby       | `org.apache.derby` |        `derby`         | [下载](http://db.apache.org/derby/derby_downloads.html) |
 
 <br>
-JDBC connector and drivers are not currently part of Flink's binary distribution. See how to link with them for cluster execution [here]({% link dev/project-configuration.zh.md %}).
-
+当前,JDBC 连接器和驱动在 Flink 二进制发布包中,请参阅 [这里]({% link dev/project-configuration.zh.md %}) 了解在集群上执行时何连接它们。

Review comment:
       ```suggestion
   当前,JDBC 连接器和驱动不在 Flink 二进制发布包中,请参阅 [这里]({% link dev/project-configuration.zh.md %}) 了解在集群上执行时何连接它们。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,35 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在 DDL 中,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以appened 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
 {% include sql-connector-download-table.zh.html 
-    connector=connector
+​    connector=connector
 %}
 
 <br>
-A driver dependency is also required to connect to a specified database. Here are drivers currently supported:
+在连接到具体数据库时,也需要对应的驱动依赖,目前支持的驱动如下:
 
 | Driver      |      Group Id      |      Artifact Id       |      JAR         |
 | :-----------| :------------------| :----------------------| :----------------|
-| MySQL       |       `mysql`      | `mysql-connector-java` | [Download](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
-| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [Download](https://jdbc.postgresql.org/download.html) |
-| Derby       | `org.apache.derby` |        `derby`         | [Download](http://db.apache.org/derby/derby_downloads.html) |
+| MySQL       |       `mysql`      | `mysql-connector-java` | [下载](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
+| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [下载](https://jdbc.postgresql.org/download.html) |
+| Derby       | `org.apache.derby` |        `derby`         | [下载](http://db.apache.org/derby/derby_downloads.html) |
 
 <br>
-JDBC connector and drivers are not currently part of Flink's binary distribution. See how to link with them for cluster execution [here]({% link dev/project-configuration.zh.md %}).
-
+当前,JDBC 连接器和驱动在 Flink 二进制发布包中,请参阅 [这里]({% link dev/project-configuration.zh.md %}) 了解在集群上执行时何连接它们。
 
-How to create a JDBC table
+如何创建JDBC table

Review comment:
       (1)英文单词前后是中文时,前后都需要有空格,建议全文检查下
   

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +92,206 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到 JDBC 表的名称。</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个 URL 的 JDBC 驱动类名,如果不设置它将自动从该 URL 中推导。</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时时间应该是以秒为单位,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>用于将输入进行分区的列名,请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分了解更多详情。</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则该配置项会被忽略。</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在 JDBC 驱动程序上设置 <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些 JDBC 驱动程序,特别是 <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a> ,可能需要将此设置为 false 以便流化结果。</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>Lookup Cache 的最大行数,若超过该值,则最老的行记录将会过期。默认情况下,Lookup Cache 是未开启的。请查阅如下 <a href="#lookup-cache">Lookup Cache</a> 章节了解更详细的信息。
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>flush 的间隔时间,超过该值后异步线程将刷新数据,可以将刷新的间隔时间设置为<code>'0'</code> 来禁用该配置。注意, 为了完全异步地处理缓存的 flush 事件,可以将<code>'sink.buffer-flush.max-rows'</code> 设置为'0'并配置适当的 flush 时间间隔。</td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义 JDBC sink 算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度。</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 

Review comment:
       本地编译下文档,先检查下,目前格式是乱掉的
   步骤为:(1)cd flink/docs   (2)./build_docs.sh -p (3)在本地4000 端口查看
   如果装了docker,也可以(1)cd flink/docs/docker (2) ./run.sh (3) 用docker build,(4) 在本地4000端口查看
   ![image](https://user-images.githubusercontent.com/5163645/105034138-0de98700-5a94-11eb-87e9-d988f22e390c.png)
   

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +92,206 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到 JDBC 表的名称。</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个 URL 的 JDBC 驱动类名,如果不设置它将自动从该 URL 中推导。</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时时间应该是以秒为单位,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>用于将输入进行分区的列名,请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分了解更多详情。</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>

Review comment:
       英文都有句号,翻译时全部都保留吧,后面的表格中长句都有句号,统一点。

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,35 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在 DDL 中,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以appened 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
 {% include sql-connector-download-table.zh.html 
-    connector=connector
+​    connector=connector

Review comment:
       revert the change, otherwise the doc build will fail




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     }, {
       "hash" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295",
       "triggerID" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * f5b73f302997a6f8e5f211efea381a513218145d Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289) 
   * 76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5 Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * cb14f11086c52f0e1b432181decc1f232599fa2b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     }, {
       "hash" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295",
       "triggerID" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5 Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 519566b1079bfca772b00c6c905cbb177594b346 Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154) 
   * b57985e871e0b703fcaaeb85a597a8ab1584c10b UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] JavaPentesters commented on a change in pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
JavaPentesters commented on a change in pull request #14675:
URL: https://github.com/apache/flink/pull/14675#discussion_r559918021



##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>

Review comment:
       <td>用于将输入进行分区的列名,请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分了解更多详情。</td>
   




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 7b8045005155c54e76d0e19687a1fe9309c04892 Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] leonardBang commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

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


   I'd like to take a look 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.

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



[GitHub] [flink] leonardBang commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

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


    @JavaPentesters  Looks like you're using `git merge command`, it's recommended to use `git rebase master`.   You can use IDE version control util to manage your commit easily


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     }, {
       "hash" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295",
       "triggerID" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5 Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     }, {
       "hash" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * cb14f11086c52f0e1b432181decc1f232599fa2b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283) 
   * f5b73f302997a6f8e5f211efea381a513218145d Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289) 
   * 76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 519566b1079bfca772b00c6c905cbb177594b346 Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * b57985e871e0b703fcaaeb85a597a8ab1584c10b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

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


   Thanks a lot for your contribution to the Apache Flink project. I'm the @flinkbot. I help the community
   to review your pull request. We will use this comment to track the progress of the review.
   
   
   ## Automated Checks
   Last check on commit 519566b1079bfca772b00c6c905cbb177594b346 (Sun Jan 17 10:26:10 UTC 2021)
   
    ✅no warnings
   
   <sub>Mention the bot in a comment to re-run the automated checks.</sub>
   ## Review Progress
   
   * ❓ 1. The [description] looks good.
   * ❓ 2. There is [consensus] that the contribution should go into to Flink.
   * ❓ 3. Needs [attention] from.
   * ❓ 4. The change fits into the overall [architecture].
   * ❓ 5. Overall code [quality] is good.
   
   Please see the [Pull Request Review Guide](https://flink.apache.org/contributing/reviewing-prs.html) for a full explanation of the review process.<details>
    The Bot is tracking the review progress through labels. Labels are applied according to the order of the review items. For consensus, approval by a Flink committer of PMC member is required <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot approve description` to approve one or more aspects (aspects: `description`, `consensus`, `architecture` and `quality`)
    - `@flinkbot approve all` to approve all aspects
    - `@flinkbot approve-until architecture` to approve everything until `architecture`
    - `@flinkbot attention @username1 [@username2 ..]` to require somebody's attention
    - `@flinkbot disapprove architecture` to remove an approval you gave earlier
   </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.

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



[GitHub] [flink] wuchong commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
wuchong commented on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761827845


   Hi @leonardBang , could you 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.

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



[GitHub] [flink] JavaPentesters commented on a change in pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
JavaPentesters commented on a change in pull request #14675:
URL: https://github.com/apache/flink/pull/14675#discussion_r560637320



##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,35 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在 DDL 中,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以appened 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
 {% include sql-connector-download-table.zh.html 
-    connector=connector
+​    connector=connector

Review comment:
       Thanks! Got it!




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] JavaPentesters commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
JavaPentesters commented on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-762620839


   > > @leonardBang Thanks for all your great suggestion! It's my first time to receive PR review.So, what should I do next? How to append commit?
   > 
   > You can append a commit to address the comments, you can directly push code to your remote branch(git push origin JavaPentesters) after appended commit in your local branch (`JavaPentesters:master`) , the PR will update automatically.
   
   Thanks for your directions! I have appended a commit to fix this issues.Looking forward to seeing you to help me to review this 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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * b57985e871e0b703fcaaeb85a597a8ab1584c10b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214) 
   * 7b8045005155c54e76d0e19687a1fe9309c04892 UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] JavaPentesters commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
JavaPentesters commented on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-763295166


   @leonardBang Thanks for your review! All the mentioned comments have been solved! And, The documentation can be translated to HTML!


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * 7b8045005155c54e76d0e19687a1fe9309c04892 Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259) 
   * cb14f11086c52f0e1b432181decc1f232599fa2b UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     }, {
       "hash" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295",
       "triggerID" : "76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * cb14f11086c52f0e1b432181decc1f232599fa2b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283) 
   * f5b73f302997a6f8e5f211efea381a513218145d Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289) 
   * 76e878bbb4c4e2d71523a5a2eb993d083a4eb0c5 Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12295) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] leonardBang commented on a change in pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
leonardBang commented on a change in pull request #14675:
URL: https://github.com/apache/flink/pull/14675#discussion_r559553882



##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,36 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在DDL中,JDBC sink将以upsert模式(upsert模式是update和insert的合体:存在时更新不存在时插入)与外部系统交换UPDATE/DELETE消息;否则,它将以appened模式下与外部连接器交换插入(Insert)消息并且不支持消费UPDATE/DELETE消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
 {% include sql-connector-download-table.zh.html 
-    connector=connector
+​    connector=connector
 %}
 
 <br>
-A driver dependency is also required to connect to a specified database. Here are drivers currently supported:
+你的应用需要什么驱动依赖于连接到具体数据库,目前支持的驱动如下:

Review comment:
       ```suggestion
   在连接到具体数据库时,也需要对应的驱动依赖,目前支持的驱动如下:
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>

Review comment:
       ditto

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,36 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在DDL中,JDBC sink将以upsert模式(upsert模式是update和insert的合体:存在时更新不存在时插入)与外部系统交换UPDATE/DELETE消息;否则,它将以appened模式下与外部连接器交换插入(Insert)消息并且不支持消费UPDATE/DELETE消息。

Review comment:
       ```suggestion
   如果一个主键定义在 DDL 中,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以appened 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:
 
-To accelerate reading data in parallel `Source` task instances, Flink provides partitioned scan feature for JDBC table.
+- `scan.partition.column`: 输入用于进行分区的列名
+- `scan.partition.num`: 分区的数量
+- `scan.partition.lower-bound`: 第一个分区的最小值
+- `scan.partition.upper-bound`: 最后一个分区的最大值
 
-All the following scan partition options must all be specified if any of them is specified. They describe how to partition the table when reading in parallel from multiple tasks.
-The `scan.partition.column` must be a numeric, date, or timestamp column from the table in question. Notice that `scan.partition.lower-bound` and `scan.partition.upper-bound` are used to decide the partition stride and filter the rows in table. If it is a batch job, it also doable to get the max and min value first before submitting the flink job.
+### 查询缓存
 
-- `scan.partition.column`: The column name used for partitioning the input.
-- `scan.partition.num`: The number of partitions.
-- `scan.partition.lower-bound`: The smallest value of the first partition.
-- `scan.partition.upper-bound`: The largest value of the last partition.
+JDBC连接器可以在临时表连接中用作查找源(例如维度表),当前只支持同步的查找模式。默认情况下,查找缓存是未启用的,你可以通过设置`lookup.cache.max-rows` and `lookup.cache.ttl`等参数启用它。
 
-### Lookup Cache
+查找缓存的主要目的是用于提高JDBC连接器临时表连接的性能。默认情况下,因为没有启用查找缓存,所以所有请求都被发送到外部的数据库。当查找缓存被启用时,每个进程(如TaskManager)将保存一个缓存。Flink将优先查找缓存,只有当缓存未查找到时才向外部数据库发送请求,并使用返回的行更新缓存。
 
-JDBC connector can be used in temporal join as a lookup source (aka. dimension table). Currently, only sync lookup mode is supported.
+当缓存命中最大缓存行时`lookup.cache.max-rows`或者当行超过最大存活时间`lookup.cache.ttl`,缓存中最老的行将被设置为已过期。
 
-By default, lookup cache is not enabled. You can enable it by setting both `lookup.cache.max-rows` and `lookup.cache.ttl`.
+缓存中的记录可能不是最新的,用户可以将`lookup.cache.ttl`设置为一个更小的值以获得更好的刷新数据,但这可能会增加发送到数据库的请求数,所以要做好吞吐量和正确性之间的平衡。
 
-The lookup cache is used to improve performance of temporal join the JDBC connector. By default, lookup cache is not enabled, so all the requests are sent to external database.
-When lookup cache is enabled, each process (i.e. TaskManager) will hold a cache. Flink will lookup the cache first, and only send requests to external database when cache missing, and update cache with the rows returned.
-The oldest rows in cache will be expired when the cache hit to the max cached rows `lookup.cache.max-rows` or when the row exceeds the max time to live `lookup.cache.ttl`.
-The cached rows might not be the latest, users can tune `lookup.cache.ttl` to a smaller value to have a better fresh data, but this may increase the number of requests send to database. So this is a balance between throughput and correctness.
 
-### Idempotent Writes
+### 幂等写入
 
-JDBC sink will use upsert semantics rather than plain INSERT statements if primary key is defined in DDL. Upsert semantics refer to atomically adding a new row or updating the existing row if there is a unique constraint violation in the underlying database, which provides idempotence.
+如果在DDL中定义了主键,JDBC sink将使用upsert语义而不是普通的INSERT语句。Upsert语义指的是如果底层数据库中存在违反唯一性约束,则原子地添加新行或更新现有行,这种方式了提供了幂等性。
 
-If there are failures, the Flink job will recover and re-process from last successful checkpoint, which can lead to re-processing messages during recovery. The upsert mode is highly recommended as it helps avoid constraint violations or duplicate data if records need to be re-processed.
+如果出现故障,Flink任务将从上次成功的检查点(checkpoint)恢复并重新处理,这可能导致在恢复期间重新处理消息。我们强烈推荐使用upsert模式,因为如果需要重新处理记录,它有助于避免违反约束或产生重复数据。
 
-Aside from failure recovery, the source topic may also naturally contain multiple records over time with the same primary key, making upserts desirable.
+除了故障恢复之外,源主题(the source topic)还可能随着时间的推移自然地包含多个具有相同主键的记录,因此需要使用upsert。
 

Review comment:
       除了故障恢复场景外,数据源(kafka topic)也可能随着时间的推移自然地包含多个具有相同主键的记录,这使得 upsert 模式是用户期待的。
   

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>

Review comment:
       ```suggestion
         <td>用于连接到 JDBC 表的名称。</td>
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>

Review comment:
       ```suggestion
         <td>用于将输入进行分区的列名,请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>了解更多详情。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>

Review comment:
       以秒为单位

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,36 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在DDL中,JDBC sink将以upsert模式(upsert模式是update和insert的合体:存在时更新不存在时插入)与外部系统交换UPDATE/DELETE消息;否则,它将以appened模式下与外部连接器交换插入(Insert)消息并且不支持消费UPDATE/DELETE消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
 {% include sql-connector-download-table.zh.html 
-    connector=connector
+​    connector=connector
 %}
 
 <br>
-A driver dependency is also required to connect to a specified database. Here are drivers currently supported:
+你的应用需要什么驱动依赖于连接到具体数据库,目前支持的驱动如下:
 
 | Driver      |      Group Id      |      Artifact Id       |      JAR         |
 | :-----------| :------------------| :----------------------| :----------------|
-| MySQL       |       `mysql`      | `mysql-connector-java` | [Download](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
-| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [Download](https://jdbc.postgresql.org/download.html) |
-| Derby       | `org.apache.derby` |        `derby`         | [Download](http://db.apache.org/derby/derby_downloads.html) |
+| MySQL       |       `mysql`      | `mysql-connector-java` | [下载](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
+| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [下载](https://jdbc.postgresql.org/download.html) |
+| Derby       | `org.apache.derby` |        `derby`         | [下载](http://db.apache.org/derby/derby_downloads.html) |
 
 <br>
-JDBC connector and drivers are not currently part of Flink's binary distribution. See how to link with them for cluster execution [here]({% link dev/project-configuration.zh.md %}).
+JDBC连接器以及驱动不是当前Flink二进制发布包的一部分,请参阅为了执行集群该如何连接到 [他们]({% link dev/project-configuration.zh.md %})。

Review comment:
       ```suggestion
   当前,JDBC 连接器和驱动在 Flink 二进制发布包中,请参阅 [这里]({% link dev/project-configuration.zh.md %}) 了解在集群上执行时何连接它们。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息

Review comment:
       ```suggestion
         <td>Lookup Cache 的最大行数,若超过该值,则最老的行记录将会过期。默认情况下,Lookup Cache 是未开启的。请查阅如下 <a href="#lookup-cache">Lookup Cache</a> 章节了解更详细的信息。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>

Review comment:
       ```suggestion
         <td>用于连接到这个 URL 的 JDBC 驱动类名,如果不设置它将自动从该 URL 中推导。</td>
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>

Review comment:
       The  English word should be around with one space when use it in Chinese, e.g. (在 JDBC 驱动程序上),  please check all English word usages.

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>

Review comment:
       则该配置项会被忽略。

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>

Review comment:
       ```suggestion
         <td>flush 前缓存记录的最大数量,可以设置为<code>0</code> 来禁用它。</td>
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。

Review comment:
       ```suggestion
   在写入数据到外部数据库时 Flink 会使用定义在 DDL 中的主键,如果定义了主键,则连接器工作在 upsert 模式,否则连接器工作在 append 模式。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>

Review comment:
       ```suggestion
         <td>flush 的间隔时间,超过该值后异步线程将刷新数据,可以将刷新的间隔时间设置为<code>'0'</code> 来禁用该配置。注意, 为了完全异步地处理缓存的 flush 事件,可以将<code>'sink.buffer-flush.max-rows'</code> 设置为'0'并配置适当的 flush 时间间隔。</td>
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。

Review comment:
       ```suggestion
   在 upsert 模式下,Flink 根据主键插入新加的一行记录或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出结果是符合预期的,推荐为表定义主键并且确保主键是底层数据库中表的主键集或唯一建。在 append 模式下,Flink 会把所有记录解释为插入消息,如果违反了底层数据库中主键或者唯一约束,INSERT 插入可能会失败。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -332,18 +328,18 @@ PostgresCatalog.getTable(ObjectPath tablePath)
 PostgresCatalog.tableExists(ObjectPath tablePath)
 {% endhighlight %}
 
-Other `Catalog` methods is unsupported now.
+其他的 `Catalog` 方式现在还是不支持的。
 
-#### Usage of PostgresCatalog
+#### 使用PostgresCatalog

Review comment:
       #### PostgresCatalog 的使用
   

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:
 
-To accelerate reading data in parallel `Source` task instances, Flink provides partitioned scan feature for JDBC table.
+- `scan.partition.column`: 输入用于进行分区的列名
+- `scan.partition.num`: 分区的数量
+- `scan.partition.lower-bound`: 第一个分区的最小值
+- `scan.partition.upper-bound`: 最后一个分区的最大值
 
-All the following scan partition options must all be specified if any of them is specified. They describe how to partition the table when reading in parallel from multiple tasks.
-The `scan.partition.column` must be a numeric, date, or timestamp column from the table in question. Notice that `scan.partition.lower-bound` and `scan.partition.upper-bound` are used to decide the partition stride and filter the rows in table. If it is a batch job, it also doable to get the max and min value first before submitting the flink job.
+### 查询缓存
 
-- `scan.partition.column`: The column name used for partitioning the input.
-- `scan.partition.num`: The number of partitions.
-- `scan.partition.lower-bound`: The smallest value of the first partition.
-- `scan.partition.upper-bound`: The largest value of the last partition.
+JDBC连接器可以在临时表连接中用作查找源(例如维度表),当前只支持同步的查找模式。默认情况下,查找缓存是未启用的,你可以通过设置`lookup.cache.max-rows` and `lookup.cache.ttl`等参数启用它。
 
-### Lookup Cache
+查找缓存的主要目的是用于提高JDBC连接器临时表连接的性能。默认情况下,因为没有启用查找缓存,所以所有请求都被发送到外部的数据库。当查找缓存被启用时,每个进程(如TaskManager)将保存一个缓存。Flink将优先查找缓存,只有当缓存未查找到时才向外部数据库发送请求,并使用返回的行更新缓存。

Review comment:
       lookup cache 的主要目的是用于提高时态表关联 JDBC 连接器的性能。默认情况,lookup cache 不开启,所以所有请求都会发送到外部的数据库。当 lookup cache 被启用时,每个进程(即 TaskManager )将维护一个缓存。Flink 将优先查找缓存,只有当缓存未查找到时才向外部数据库发送请求,并使用返回的数据更新缓存。
   

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:
 
-To accelerate reading data in parallel `Source` task instances, Flink provides partitioned scan feature for JDBC table.
+- `scan.partition.column`: 输入用于进行分区的列名
+- `scan.partition.num`: 分区的数量
+- `scan.partition.lower-bound`: 第一个分区的最小值
+- `scan.partition.upper-bound`: 最后一个分区的最大值
 
-All the following scan partition options must all be specified if any of them is specified. They describe how to partition the table when reading in parallel from multiple tasks.
-The `scan.partition.column` must be a numeric, date, or timestamp column from the table in question. Notice that `scan.partition.lower-bound` and `scan.partition.upper-bound` are used to decide the partition stride and filter the rows in table. If it is a batch job, it also doable to get the max and min value first before submitting the flink job.
+### 查询缓存

Review comment:
       lookup cache

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。

Review comment:
       为了在 并行的 `Source` task 实例中加速读取数据,Flink 为 JDBC 表提供了分区扫描的特性。
   

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -393,10 +390,11 @@ val baseUrl         = "..."
 val catalog = new JdbcCatalog(name, defaultDatabase, username, password, baseUrl)
 tableEnv.registerCatalog("mypg", catalog)
 
-// set the JdbcCatalog as the current catalog of the session
+// 设置JdbcCatalog为会话的当前目录

Review comment:
       ```suggestion
   // 设置 JdbcCatalog 为会话的当前 catalog
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:

Review comment:
       ```suggestion
   下述所有的分区扫描选项必须要指定当其中任一参数被指定时,这些参数描述了在多个 task 并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区的起始位置和过滤表中的数据。如果是批处理作业,也可以在提交 flink 作业之前获取最大值和最小值。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:
 
-To accelerate reading data in parallel `Source` task instances, Flink provides partitioned scan feature for JDBC table.
+- `scan.partition.column`: 输入用于进行分区的列名
+- `scan.partition.num`: 分区的数量
+- `scan.partition.lower-bound`: 第一个分区的最小值
+- `scan.partition.upper-bound`: 最后一个分区的最大值
 
-All the following scan partition options must all be specified if any of them is specified. They describe how to partition the table when reading in parallel from multiple tasks.
-The `scan.partition.column` must be a numeric, date, or timestamp column from the table in question. Notice that `scan.partition.lower-bound` and `scan.partition.upper-bound` are used to decide the partition stride and filter the rows in table. If it is a batch job, it also doable to get the max and min value first before submitting the flink job.
+### 查询缓存
 
-- `scan.partition.column`: The column name used for partitioning the input.
-- `scan.partition.num`: The number of partitions.
-- `scan.partition.lower-bound`: The smallest value of the first partition.
-- `scan.partition.upper-bound`: The largest value of the last partition.
+JDBC连接器可以在临时表连接中用作查找源(例如维度表),当前只支持同步的查找模式。默认情况下,查找缓存是未启用的,你可以通过设置`lookup.cache.max-rows` and `lookup.cache.ttl`等参数启用它。

Review comment:
       ```suggestion
   JDBC 连接器可以用在时态表关联中作为一个可 lookup 的 Source (又称为维表),当前只支持同步的查找模式。
   默认情况下,lookup cache 是未启用的,你可以设置 `lookup.cache.max-rows` and `lookup.cache.ttl` 参数来启用。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -332,18 +328,18 @@ PostgresCatalog.getTable(ObjectPath tablePath)
 PostgresCatalog.tableExists(ObjectPath tablePath)
 {% endhighlight %}
 
-Other `Catalog` methods is unsupported now.
+其他的 `Catalog` 方式现在还是不支持的。
 
-#### Usage of PostgresCatalog
+#### 使用PostgresCatalog
 
-Please refer to [Dependencies](#dependencies) section for how to setup a JDBC connector and Postgres driver.
+你可以查阅[Dependencies](#dependencies) 部分了解如何建立JDBC连接器和Postgres驱动。

Review comment:
       ```suggestion
   请参考[依赖](#依赖) 章节了解如何配置 JDBC 连接器和 Postgres 驱动。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -332,18 +328,18 @@ PostgresCatalog.getTable(ObjectPath tablePath)
 PostgresCatalog.tableExists(ObjectPath tablePath)
 {% endhighlight %}
 
-Other `Catalog` methods is unsupported now.
+其他的 `Catalog` 方式现在还是不支持的。

Review comment:
       方式 -> 方法

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:
 
-To accelerate reading data in parallel `Source` task instances, Flink provides partitioned scan feature for JDBC table.
+- `scan.partition.column`: 输入用于进行分区的列名
+- `scan.partition.num`: 分区的数量
+- `scan.partition.lower-bound`: 第一个分区的最小值
+- `scan.partition.upper-bound`: 最后一个分区的最大值
 
-All the following scan partition options must all be specified if any of them is specified. They describe how to partition the table when reading in parallel from multiple tasks.
-The `scan.partition.column` must be a numeric, date, or timestamp column from the table in question. Notice that `scan.partition.lower-bound` and `scan.partition.upper-bound` are used to decide the partition stride and filter the rows in table. If it is a batch job, it also doable to get the max and min value first before submitting the flink job.
+### 查询缓存
 
-- `scan.partition.column`: The column name used for partitioning the input.
-- `scan.partition.num`: The number of partitions.
-- `scan.partition.lower-bound`: The smallest value of the first partition.
-- `scan.partition.upper-bound`: The largest value of the last partition.
+JDBC连接器可以在临时表连接中用作查找源(例如维度表),当前只支持同步的查找模式。默认情况下,查找缓存是未启用的,你可以通过设置`lookup.cache.max-rows` and `lookup.cache.ttl`等参数启用它。
 
-### Lookup Cache
+查找缓存的主要目的是用于提高JDBC连接器临时表连接的性能。默认情况下,因为没有启用查找缓存,所以所有请求都被发送到外部的数据库。当查找缓存被启用时,每个进程(如TaskManager)将保存一个缓存。Flink将优先查找缓存,只有当缓存未查找到时才向外部数据库发送请求,并使用返回的行更新缓存。
 
-JDBC connector can be used in temporal join as a lookup source (aka. dimension table). Currently, only sync lookup mode is supported.
+当缓存命中最大缓存行时`lookup.cache.max-rows`或者当行超过最大存活时间`lookup.cache.ttl`,缓存中最老的行将被设置为已过期。
 
-By default, lookup cache is not enabled. You can enable it by setting both `lookup.cache.max-rows` and `lookup.cache.ttl`.
+缓存中的记录可能不是最新的,用户可以将`lookup.cache.ttl`设置为一个更小的值以获得更好的刷新数据,但这可能会增加发送到数据库的请求数,所以要做好吞吐量和正确性之间的平衡。
 
-The lookup cache is used to improve performance of temporal join the JDBC connector. By default, lookup cache is not enabled, so all the requests are sent to external database.
-When lookup cache is enabled, each process (i.e. TaskManager) will hold a cache. Flink will lookup the cache first, and only send requests to external database when cache missing, and update cache with the rows returned.
-The oldest rows in cache will be expired when the cache hit to the max cached rows `lookup.cache.max-rows` or when the row exceeds the max time to live `lookup.cache.ttl`.
-The cached rows might not be the latest, users can tune `lookup.cache.ttl` to a smaller value to have a better fresh data, but this may increase the number of requests send to database. So this is a balance between throughput and correctness.
 
-### Idempotent Writes
+### 幂等写入
 
-JDBC sink will use upsert semantics rather than plain INSERT statements if primary key is defined in DDL. Upsert semantics refer to atomically adding a new row or updating the existing row if there is a unique constraint violation in the underlying database, which provides idempotence.
+如果在DDL中定义了主键,JDBC sink将使用upsert语义而不是普通的INSERT语句。Upsert语义指的是如果底层数据库中存在违反唯一性约束,则原子地添加新行或更新现有行,这种方式了提供了幂等性。
 
-If there are failures, the Flink job will recover and re-process from last successful checkpoint, which can lead to re-processing messages during recovery. The upsert mode is highly recommended as it helps avoid constraint violations or duplicate data if records need to be re-processed.
+如果出现故障,Flink任务将从上次成功的检查点(checkpoint)恢复并重新处理,这可能导致在恢复期间重新处理消息。我们强烈推荐使用upsert模式,因为如果需要重新处理记录,它有助于避免违反约束或产生重复数据。

Review comment:
       如果出现故障,Flink 作业会从上次成功的 checkpoint 恢复并重新处理,这可能导致在恢复过程中重复处理消息。强烈推荐使用 upsert 模式,因为如果需要重复处理记录,它有助于避免违反数据库主键约束和产生重复数据。

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -332,18 +328,18 @@ PostgresCatalog.getTable(ObjectPath tablePath)
 PostgresCatalog.tableExists(ObjectPath tablePath)
 {% endhighlight %}
 
-Other `Catalog` methods is unsupported now.
+其他的 `Catalog` 方式现在还是不支持的。
 
-#### Usage of PostgresCatalog
+#### 使用PostgresCatalog
 
-Please refer to [Dependencies](#dependencies) section for how to setup a JDBC connector and Postgres driver.
+你可以查阅[Dependencies](#dependencies) 部分了解如何建立JDBC连接器和Postgres驱动。
 
-Postgres catalog supports the following options:
-- `name`: required, name of the catalog.
-- `default-database`: required, default database to connect to.
-- `username`: required, username of Postgres account.
-- `password`: required, password of the account.
-- `base-url`: required, should be of format `"jdbc:postgresql://<ip>:<port>"`, and should not contain database name here.
+Postgres catalog支持以下参数:
+- `name`: 必填, catalog的名称
+- `default-database`:  必填, 默认要连接的数据库
+- `username`: 必填, Postgres 账户的用户名
+- `password`: 必填, 账户的密码
+- `base-url`: 必填, 应该符合格式 `"jdbc:postgresql://<ip>:<port>"`, 并且这里应该不包含数据库名称

Review comment:
       ```suggestion
   - `base-url`: 必填, 应该符合`"jdbc:postgresql://<ip>:<port>"`的格式, 同时这里不应该包含数据库名。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -316,11 +314,9 @@ As there is no standard syntax for upsert, the following table describes the dat
     </tbody>
 </table>
 
-### Postgres Database as a Catalog
+### Postgres数据库作为目录

Review comment:
       ```suggestion
   ### Postgres 数据库作为 Catalog
   ```
   Catalog 作为术语翻译

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息
+      </td>
     </tr>
     <tr>
       <td><h5>lookup.cache.ttl</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Duration</td>
-      <td>The max time to live for each rows in lookup cache, over this time, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details. </td>
+      <td>查找缓存中每一行记录的最大存活时间,若超过该时间,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息 </td>
     </tr>
     <tr>
       <td><h5>lookup.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if lookup database failed.</td>
+      <td>查询数据库失败的最大重试时间</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">100</td>
       <td>Integer</td>
-      <td>The max size of buffered records before flush. Can be set to zero to disable it.</td>
+      <td>flush前缓存记录的最大大小,可以设置为<code>0</code> 来禁用它</td>
     </tr>
     <tr>
       <td><h5>sink.buffer-flush.interval</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">1s</td>
       <td>Duration</td>
-      <td>The flush interval mills, over this time, asynchronous threads will flush data. Can be set to <code>'0'</code> to disable it. Note, <code>'sink.buffer-flush.max-rows'</code> can be set to <code>'0'</code> with the flush interval set allowing for complete async processing of buffered actions.</td>
-    </tr>
-    <tr>
+      <td>刷新(flush)的时间间隔(mills),超过该值一步线程将刷新数据,可以将刷新的时间间隔设置为<code>'0'</code> 来禁用它。注意<code>'sink.buffer-flush.max-rows'</code> 可以设置为'0'并刷新间隔,以允许异步线程完成处理缓冲的动作 </td>
+ </tr>
+<tr>
       <td><h5>sink.max-retries</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">3</td>
       <td>Integer</td>
-      <td>The max retry times if writing records to database failed.</td>
+      <td>写入记录到数据库失败后的最大重试次数</td>
     </tr>
     <tr>
       <td><h5>sink.parallelism</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>Defines the parallelism of the JDBC sink operator. By default, the parallelism is determined by the framework using the same parallelism of the upstream chained operator.</td>
+      <td>用于定义JDBC sink算子的并行度。默认情况下,并行度是由框架决定的:使用与上游链式算子相同的并行度</td>
     </tr>
     </tbody>
 </table>
 
-Features
+
+特性
 --------
 
-### Key handling
+### 键处理
+
+Flink使用定义在DDL的主键写入数据到外部数据库。如果定义了主键,则连接器使用upsert 模式,否则连接器将使用append模式。
+
+在upsert模式下,Flink将根据主键插入一行或者更新已存在的记录,这种方式可以确保幂等性。为了确保输出预期的结果,我们推荐表要定义主键并且要确保主键是基础数据库表的唯一主键集或主键之一。在append模式下,Flink将把所有记录解释为插入消息,如果底层数据库发生了主键或者唯一约束的错误,INSERT插入可以失败。
 
-Flink uses the primary key that defined in DDL when writing data to external databases. The connector operate in upsert mode if the primary key was defined, otherwise, the connector operate in append mode.
+可以查看[CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) 更多关于PRIMARY KEY语法。
 
-In upsert mode, Flink will insert a new row or update the existing row according to the primary key, Flink can ensure the idempotence in this way. To guarantee the output result is as expected, it's recommended to define primary key for the table and make sure the primary key is one of the unique key sets or primary key of the underlying database table. In append mode, Flink will interpret all records as INSERT messages, the INSERT operation may fail if a primary key or unique constraint violation happens in the underlying database.
+### 分区扫描
 
-See [CREATE TABLE DDL]({% link dev/table/sql/create.zh.md %}#create-table) for more details about PRIMARY KEY syntax.
+为了在 并行`Source` 任务实例下加速读取数据,Flink为JDBC table提供了分区扫描的特性。
 
-### Partitioned Scan
+如果其中任一参数被指定的话,所有如下的扫描分区选项必须要指定,这些参数描述了在多个任务并行读取数据时如何对表进行分区。 `scan.partition.column` 必须是相关表中的数字、日期或时间戳列。注意 ,`scan.partition.lower-bound` 和 `scan.partition.upper-bound` 用于决定分区跨距和过滤表中的行。如果是批处理任务,也可以在提交flink任务之前先获取最大值和最小值:
 
-To accelerate reading data in parallel `Source` task instances, Flink provides partitioned scan feature for JDBC table.
+- `scan.partition.column`: 输入用于进行分区的列名
+- `scan.partition.num`: 分区的数量
+- `scan.partition.lower-bound`: 第一个分区的最小值
+- `scan.partition.upper-bound`: 最后一个分区的最大值
 
-All the following scan partition options must all be specified if any of them is specified. They describe how to partition the table when reading in parallel from multiple tasks.
-The `scan.partition.column` must be a numeric, date, or timestamp column from the table in question. Notice that `scan.partition.lower-bound` and `scan.partition.upper-bound` are used to decide the partition stride and filter the rows in table. If it is a batch job, it also doable to get the max and min value first before submitting the flink job.
+### 查询缓存
 
-- `scan.partition.column`: The column name used for partitioning the input.
-- `scan.partition.num`: The number of partitions.
-- `scan.partition.lower-bound`: The smallest value of the first partition.
-- `scan.partition.upper-bound`: The largest value of the last partition.
+JDBC连接器可以在临时表连接中用作查找源(例如维度表),当前只支持同步的查找模式。默认情况下,查找缓存是未启用的,你可以通过设置`lookup.cache.max-rows` and `lookup.cache.ttl`等参数启用它。
 
-### Lookup Cache
+查找缓存的主要目的是用于提高JDBC连接器临时表连接的性能。默认情况下,因为没有启用查找缓存,所以所有请求都被发送到外部的数据库。当查找缓存被启用时,每个进程(如TaskManager)将保存一个缓存。Flink将优先查找缓存,只有当缓存未查找到时才向外部数据库发送请求,并使用返回的行更新缓存。
 
-JDBC connector can be used in temporal join as a lookup source (aka. dimension table). Currently, only sync lookup mode is supported.
+当缓存命中最大缓存行时`lookup.cache.max-rows`或者当行超过最大存活时间`lookup.cache.ttl`,缓存中最老的行将被设置为已过期。
 
-By default, lookup cache is not enabled. You can enable it by setting both `lookup.cache.max-rows` and `lookup.cache.ttl`.
+缓存中的记录可能不是最新的,用户可以将`lookup.cache.ttl`设置为一个更小的值以获得更好的刷新数据,但这可能会增加发送到数据库的请求数,所以要做好吞吐量和正确性之间的平衡。
 
-The lookup cache is used to improve performance of temporal join the JDBC connector. By default, lookup cache is not enabled, so all the requests are sent to external database.
-When lookup cache is enabled, each process (i.e. TaskManager) will hold a cache. Flink will lookup the cache first, and only send requests to external database when cache missing, and update cache with the rows returned.
-The oldest rows in cache will be expired when the cache hit to the max cached rows `lookup.cache.max-rows` or when the row exceeds the max time to live `lookup.cache.ttl`.
-The cached rows might not be the latest, users can tune `lookup.cache.ttl` to a smaller value to have a better fresh data, but this may increase the number of requests send to database. So this is a balance between throughput and correctness.
 
-### Idempotent Writes
+### 幂等写入
 
-JDBC sink will use upsert semantics rather than plain INSERT statements if primary key is defined in DDL. Upsert semantics refer to atomically adding a new row or updating the existing row if there is a unique constraint violation in the underlying database, which provides idempotence.
+如果在DDL中定义了主键,JDBC sink将使用upsert语义而不是普通的INSERT语句。Upsert语义指的是如果底层数据库中存在违反唯一性约束,则原子地添加新行或更新现有行,这种方式了提供了幂等性。
 
-If there are failures, the Flink job will recover and re-process from last successful checkpoint, which can lead to re-processing messages during recovery. The upsert mode is highly recommended as it helps avoid constraint violations or duplicate data if records need to be re-processed.
+如果出现故障,Flink任务将从上次成功的检查点(checkpoint)恢复并重新处理,这可能导致在恢复期间重新处理消息。我们强烈推荐使用upsert模式,因为如果需要重新处理记录,它有助于避免违反约束或产生重复数据。
 
-Aside from failure recovery, the source topic may also naturally contain multiple records over time with the same primary key, making upserts desirable.
+除了故障恢复之外,源主题(the source topic)还可能随着时间的推移自然地包含多个具有相同主键的记录,因此需要使用upsert。
 
-As there is no standard syntax for upsert, the following table describes the database-specific DML that is used.
+由于upsert没有标准语法,因此下表描述了所使用的特定于数据库的DML:

Review comment:
       ```suggestion
   由于 upsert 没有标准的语法,因此下表描述了不同数据库的 DML 语法:
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>
     </tr>
     <tr>
       <td><h5>username</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC user name. <code>'username'</code> and <code>'password'</code> must both be specified if any of them is specified.</td>
+      <td> JDBC 用户名: <code>'username'</code> 和 <code>'password'</code> 必须都被指定,如果指定了两者中任一参数</td>
     </tr>
     <tr>
       <td><h5>password</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC password.</td>
+      <td> JDBC 密码</td>
     </tr>
     <tr>
       <td><h5>connection.max-retry-timeout</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">60s</td>
       <td>Duration</td>
-      <td>Maximum timeout between retries. The timeout should be in second granularity and shouldn't be smaller than 1 second.</td>
+      <td>最大重试超时时间,超时应该是以秒为粒度的,并且不应该小于1秒</td>
     </tr>
     <tr>
       <td><h5>scan.partition.column</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The column name used for partitioning the input. See the following <a href="#partitioned-scan">Partitioned Scan</a> section for more details.</td>
+      <td>输入用于进行分区的列名,有关更多细节请参阅下面的 <a href="#partitioned-scan">分区扫描</a>部分</td>
     </tr>
     <tr>
       <td><h5>scan.partition.num</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The number of partitions.</td>
+      <td>分区的数量</td>
     </tr>
     <tr>
       <td><h5>scan.partition.lower-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The smallest value of the first partition.</td>
+      <td>第一个分区的最小值</td>
     </tr>
     <tr>
       <td><h5>scan.partition.upper-bound</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The largest value of the last partition.</td>
+      <td>最后一个分区的最大值</td>
     </tr>
     <tr>
       <td><h5>scan.fetch-size</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">0</td>
       <td>Integer</td>
-      <td>The number of rows that should be fetched from the database when reading per round trip. If the value specified is zero, then the hint is ignored.</td>
+      <td>每次循环读取时应该从数据库中获取的行数;如果指定的值为0,则提示会被忽略</td>
     </tr>
     <tr>
       <td><h5>scan.auto-commit</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">true</td>
       <td>Boolean</td>
-      <td>Sets the <a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> flag on the JDBC driver,
-      which determines whether each statement is committed in a transaction automatically. Some JDBC drivers, specifically
-      <a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>, may require this to be set to false in order to stream results.</td>
+      <td>在JDBC驱动程序上设置<a href="https://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html#commit_transactions">auto-commit</a> 标志,它决定了每个语句是否在事务中自动提交。有一些JDBC驱动程序,特别是<a href="https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor">Postgres</a>,可能需要将此设置为false以便流化结果</td>
     </tr>
     <tr>
       <td><h5>lookup.cache.max-rows</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>Integer</td>
-      <td>The max number of rows of lookup cache, over this value, the oldest rows will be expired.
-      Lookup cache is disabled by default. See the following <a href="#lookup-cache">Lookup Cache</a> section for more details.</td>
+      <td>查找缓存的最大行数,若超过该值,则最老的行记录将被设置成已过期。默认情况下,查找缓存是未开启的。查看如下 <a href="#lookup-cache">Lookup Cache</a> 部分可以了解到更详细的信息

Review comment:
       `查找缓存` is not intuitive,we can directly use `Lookup Cache`

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -467,9 +467,9 @@ SELECT * FROM mydb.`custom_schema.test_table2`;
 SELECT * FROM `custom_schema.test_table2`;
 {% endhighlight %}
 
-Data Type Mapping
+数据类型映射
 ----------------
-Flink supports connect to several databases which uses dialect like MySQL, PostgresSQL, Derby. The Derby dialect usually used for testing purpose. The field data type mappings from relational databases data types to Flink SQL data types are listed in the following table, the mapping table can help define JDBC table in Flink easily.
+Flink支持连接到多个使用方言(dialect)的数据库,如MySQL、PostgresSQL、Derby等。其中,Derby方言通常是用于测试目的。下表列出了从关系数据库数据类型到Flink SQL数据类型的字段数据类型映射,映射表可以帮助您轻松地在Flink中定义JDBC表。

Review comment:
       ```suggestion
   Flink支持连接到多个使用方言(dialect)的数据库,如 MySQL、PostgresSQL、Derby 等。其中,Derby 通常是用于测试目的。下表列出了从关系数据库数据类型到 Flink SQL 数据类型的类型映射,映射表可以使得在 Flink 中定义 JDBC 表更加简单。
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +93,207 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>
+        <th class="text-left" style="width: 8%">是否必填</th>
+        <th class="text-left" style="width: 7%">默认值</th>
+        <th class="text-left" style="width: 10%">类型</th>
+        <th class="text-left" style="width: 50%">描述</th>
       </tr>
     </thead>
     <tbody>
     <tr>
       <td><h5>connector</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>Specify what connector to use, here should be <code>'jdbc'</code>.</td>
+      <td>指定使用什么类型的 connector, 这里应该是 <code>'jdbc'</code></td>
     </tr>
     <tr>
       <td><h5>url</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The JDBC database url.</td>
+      <td>JDBC 数据库 url</td>
     </tr>
     <tr>
       <td><h5>table-name</h5></td>
-      <td>required</td>
+      <td>必填</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The name of JDBC table to connect.</td>
+      <td>用于连接到JDBC表的名称</td>
     </tr>
     <tr>
       <td><h5>driver</h5></td>
-      <td>optional</td>
+      <td>可选</td>
       <td style="word-wrap: break-word;">(none)</td>
       <td>String</td>
-      <td>The class name of the JDBC driver to use to connect to this URL, if not set, it will automatically be derived from the URL.</td>
+      <td>用于连接到这个URL的JDBC驱动程序类名,如果未设置它将自动从该URL推导出来</td>

Review comment:
       All sentences in the table contain period, let us keep it when translate to Chinese.

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -437,22 +436,23 @@ catalogs:
 </div>
 </div>
 
-#### PostgresSQL Metaspace Mapping
+#### PostgresSQL 元空间映射
+
+除了database之外,postgresSQL还有一个额外的命名空间`schema`。一个Postgres实例可以拥有多个数据库;每个数据库可以拥有多个模式,其中一个模式默认名为“public”;每个模式可以包含多个表。

Review comment:
       除了数据库之外,postgresSQL 还有一个额外的命名空间 `模式`。一个 Postgres 实例可以拥有多个数据库, 每个数据库可以拥有多个模式,其中一个模式默认名为“public”,每个模式可以包含多张表。

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -393,10 +390,11 @@ val baseUrl         = "..."
 val catalog = new JdbcCatalog(name, defaultDatabase, username, password, baseUrl)
 tableEnv.registerCatalog("mypg", catalog)
 
-// set the JdbcCatalog as the current catalog of the session
+// 设置JdbcCatalog为会话的当前目录
 tableEnv.useCatalog("mypg")
 {% endhighlight %}
 </div>
+

Review comment:
       useless blank line, the html tag `div` can format this section well.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] leonardBang commented on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

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


   > @leonardBang Thanks for all your great suggestion! It's my first time to receive PR review.So, what should I do next? How to append commit?
   
   You can append a commit to address the comments, you can directly push code to your remote branch(git push origin JavaPentesters) after appended commit in your local branch (`JavaPentesters:master`) , the PR will update automatically. 
    


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] wuchong closed pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
wuchong closed pull request #14675:
URL: https://github.com/apache/flink/pull/14675


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "UNKNOWN",
       "url" : "TBD",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * cb14f11086c52f0e1b432181decc1f232599fa2b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283) 
   * f5b73f302997a6f8e5f211efea381a513218145d UNKNOWN
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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



[GitHub] [flink] leonardBang commented on a change in pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
leonardBang commented on a change in pull request #14675:
URL: https://github.com/apache/flink/pull/14675#discussion_r560663060



##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -31,35 +31,33 @@ under the License.
 * This will be replaced by the TOC
 {:toc}
 
-The JDBC connector allows for reading data from and writing data into any relational databases with a JDBC driver. This document describes how to setup the JDBC connector to run SQL queries against relational databases.
+JDBC连接器允许使用JDBC驱动向任意类型的关系型数据库读取或者写入数据。本文档描述了针对关系型数据库如何通过建立JDBC连接器来执行SQL查询。
 
-The JDBC sink operate in upsert mode for exchange UPDATE/DELETE messages with the external system if a primary key is defined on the DDL, otherwise, it operates in append mode and doesn't support to consume UPDATE/DELETE messages.
+如果一个主键定义在 DDL 中,JDBC sink 将以 upsert 模式与外部系统交换 UPDATE/DELETE 消息;否则,它将以appened 模式与外部系统交换消息且不支持消费 UPDATE/DELETE 消息。
 
-Dependencies
+
+依赖
 ------------
 
 {% assign connector = site.data.sql-connectors['jdbc'] %} 
-{% include sql-connector-download-table.zh.html 
-    connector=connector
-%}
+{% include sql-connector-download-table.zh.html connector='connector' %}
 
 <br>
-A driver dependency is also required to connect to a specified database. Here are drivers currently supported:
+在连接到具体数据库时,也需要对应的驱动依赖,目前支持的驱动如下:
 
 | Driver      |      Group Id      |      Artifact Id       |      JAR         |
 | :-----------| :------------------| :----------------------| :----------------|
-| MySQL       |       `mysql`      | `mysql-connector-java` | [Download](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
-| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [Download](https://jdbc.postgresql.org/download.html) |
-| Derby       | `org.apache.derby` |        `derby`         | [Download](http://db.apache.org/derby/derby_downloads.html) |
+| MySQL       |       `mysql`      | `mysql-connector-java` | [下载](https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/) |
+| PostgreSQL  |  `org.postgresql`  |      `postgresql`      | [下载](https://jdbc.postgresql.org/download.html) |
+| Derby       | `org.apache.derby` |        `derby`         | [下载](http://db.apache.org/derby/derby_downloads.html) |
 
 <br>
-JDBC connector and drivers are not currently part of Flink's binary distribution. See how to link with them for cluster execution [here]({% link dev/project-configuration.zh.md %}).
-
+当前,JDBC 连接器和驱动不在 Flink 二进制发布包中,请参阅 [这里]({% link dev/project-configuration.zh.md %}) 了解在集群上执行时何连接它们。
 
-How to create a JDBC table
+如何创建 JDBC table

Review comment:
       ```suggestion
   如何创建 JDBC 表
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +90,206 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项

Review comment:
       ```suggestion
   连接器参数
   ```

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +90,206 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>

Review comment:
       和其他中文文档保持一致吧

##########
File path: docs/dev/table/connectors/jdbc.zh.md
##########
@@ -92,210 +90,206 @@ ON myTopic.key = MyUserTable.id;
 </div>
 </div>
 
-Connector Options
+连接器参数选项
 ----------------
 
 <table class="table table-bordered">
     <thead>
       <tr>
-        <th class="text-left" style="width: 25%">Option</th>
-        <th class="text-left" style="width: 8%">Required</th>
-        <th class="text-left" style="width: 7%">Default</th>
-        <th class="text-left" style="width: 10%">Type</th>
-        <th class="text-left" style="width: 50%">Description</th>
+        <th class="text-left" style="width: 25%">选项</th>

Review comment:
       ```suggestion
           <th class="text-left" style="width: 25%">参数</th>
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

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



[GitHub] [flink] flinkbot edited a comment on pull request #14675: [FLINK-18383][docs]translate "JDBC SQL Connector" documentation into …

Posted by GitBox <gi...@apache.org>.
flinkbot edited a comment on pull request #14675:
URL: https://github.com/apache/flink/pull/14675#issuecomment-761769906


   <!--
   Meta data
   {
     "version" : 1,
     "metaDataEntries" : [ {
       "hash" : "519566b1079bfca772b00c6c905cbb177594b346",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12154",
       "triggerID" : "519566b1079bfca772b00c6c905cbb177594b346",
       "triggerType" : "PUSH"
     }, {
       "hash" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12214",
       "triggerID" : "b57985e871e0b703fcaaeb85a597a8ab1584c10b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "status" : "DELETED",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12259",
       "triggerID" : "7b8045005155c54e76d0e19687a1fe9309c04892",
       "triggerType" : "PUSH"
     }, {
       "hash" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "status" : "SUCCESS",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283",
       "triggerID" : "cb14f11086c52f0e1b432181decc1f232599fa2b",
       "triggerType" : "PUSH"
     }, {
       "hash" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "status" : "PENDING",
       "url" : "https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289",
       "triggerID" : "f5b73f302997a6f8e5f211efea381a513218145d",
       "triggerType" : "PUSH"
     } ]
   }-->
   ## CI report:
   
   * cb14f11086c52f0e1b432181decc1f232599fa2b Azure: [SUCCESS](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12283) 
   * f5b73f302997a6f8e5f211efea381a513218145d Azure: [PENDING](https://dev.azure.com/apache-flink/98463496-1af2-4620-8eab-a2ecc1a2e6fe/_build/results?buildId=12289) 
   
   <details>
   <summary>Bot commands</summary>
     The @flinkbot bot supports the following commands:
   
    - `@flinkbot run travis` re-run the last Travis build
    - `@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.

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