@@ -290,7 +290,6 @@ pipeline:
290290
291291# # 数据类型映射
292292
293-
294293<div class="wy-table-responsive">
295294<table class="colwidths-auto docutils">
296295 <thead>
@@ -300,6 +299,17 @@ pipeline:
300299 </tr>
301300 </thead>
302301 <tbody>
302+ <tr>
303+ <td>
304+ BOOLEAN <br>
305+ BIT(1) <br>
306+ <td>BOOLEAN</td>
307+ </tr>
308+ <tr>
309+ <td>
310+ BIT( > 1)
311+ <td>BYTES</td>
312+ </tr>
303313 <tr>
304314 <td>
305315 SMALLINT<br>
@@ -317,79 +327,290 @@ pipeline:
317327 <tr>
318328 <td>
319329 BIGINT<br>
320- BIGSERIAL</td>
321- <td>BIGINT</td>
322- </tr>
323- <tr>
324- <td>NUMERIC</td>
325- <td>DECIMAL(20, 0)</td>
326- </tr>
327- <tr>
328- <td>BIGINT</td>
330+ BIGSERIAL<br>
331+ OID<br>
332+ </td>
329333 <td>BIGINT</td>
330334 </tr>
331335 <tr>
332336 <td>
333337 REAL<br>
334- FLOAT4</td>
338+ FLOAT4
339+ </td>
335340 <td>FLOAT</td>
336341 </tr>
337- <tr>
338- <td>
339- FLOAT8<br>
340- DOUBLE PRECISION</td>
341- <td>DOUBLE</td>
342- </tr>
343- <tr>
344- <td>
345- NUMERIC(p, s)<br>
346- DECIMAL(p, s)</td>
347- <td>DECIMAL(p, s)</td>
342+ <tr>
343+ <td>NUMERIC</td>
344+ <td>DECIMAL(38, 0)</td>
348345 </tr>
349346 <tr>
350- <td>BOOLEAN</td>
351- <td>BOOLEAN</td>
347+ <td>DOUBLE PRECISION<br>
348+ FLOAT8
349+ </td>
350+ <td>DOUBLE</td>
352351 </tr>
352+ <tr>
353+ <td> CHAR[(M)]<br>
354+ VARCHAR[(M)]<br>
355+ CHARACTER[(M)]<br>
356+ BPCHAR[(M)]<br>
357+ CHARACTER VARYING[(M)]
358+ </td>
359+ <td>STRING</td>
360+ </tr>
353361 <tr>
354- <td>DATE</td>
355- <td>DATE</td>
362+ <td>TIMESTAMPTZ<br>
363+ TIMESTAMP WITH TIME ZONE</td>
364+ <td>ZonedTimestampType</td>
356365 </tr>
357366 <tr>
358- <td>TIME [(p)] [WITHOUT TIMEZONE ]</td>
359- <td>TIME [(p)] [WITHOUT TIMEZONE] </td>
367+ <td>INTERVAL [P ]</td>
368+ <td>BIGINT </td>
360369 </tr>
361370 <tr>
362- <td>TIMESTAMP [(p)] [WITHOUT TIMEZONE ]</td>
363- <td>TIMESTAMP [(p)] [WITHOUT TIMEZONE] </td>
371+ <td>INTERVAL [P ]</td>
372+ <td>STRING(when <code>debezium.interval.handling.mode</code> is set to string) </td>
364373 </tr>
365374 <tr>
366- <td>
367- CHAR(n)<br>
368- CHARACTER(n)<br>
369- VARCHAR(n)<br>
370- CHARACTER VARYING(n)</td>
371- <td>CHAR(n)</td>
375+ <td>BYTEA</td>
376+ <td>BYTES or STRING (when <code>debezium.binary.handling.mode</code> is set to base64 or base64-url-safe or hex)</td>
372377 </tr>
373378 <tr>
374379 <td>
375- TEXT</td>
380+ JSON<br>
381+ JSONB<br>
382+ XML<br>
383+ UUID<br>
384+ POINT<br>
385+ LTREE<br>
386+ CITEXT<br>
387+ INET<br>
388+ INT4RANGE<br>
389+ INT8RANGE<br>
390+ NUMRANGE<br>
391+ TSRANGE<br>
392+ DATERANGE<br>
393+ ENUM
394+ </td>
376395 <td>STRING</td>
377396 </tr>
378- <tr>
379- <td>BYTEA</td>
380- <td>BYTES</td>
381- </tr>
382397 </tbody>
383398</table>
384399</div>
385400
386- # ## 空间数据类型映射
387- PostgreSQL通过PostGIS扩展支持空间数据类型:
401+ # ## Temporal types Mapping
402+ 除了包含时区信息的 PostgreSQL 的 TIMESTAMPTZ 数据类型之外,其他时间类型如何映射取决于连接器配置属性 <code>debezium.time.precision.mode</code> 的值。以下各节将描述这些映射关系:
403+ - debezium.time.precision.mode=adaptive
404+ - debezium.time.precision.mode=adaptive_time_microseconds
405+ - debezium.time.precision.mode=connect
406+
407+ 注意: 受限当前CDC对时间类型的支持,<code>debezium.time.precision.mode</code>为adaptive或adaptive_time_microseconds或connect Time类型都转化为Integer类型,并精度为3,后续将进行完善。
388408
389- GEOMETRY(POINT, xx):表示使用笛卡尔坐标系的点,EPSG:xxx定义其坐标系统,适用于局部平面计算。
390- GEOGRAPHY(MULTILINESTRING):以经纬度存储多条线串,基于球面模型,适合全球范围的空间分析。
409+ <u>debezium.time.precision.mode=adaptive</u>
391410
392- 前者用于小范围平面数据,后者用于大范围、需考虑地球曲率的地理数据。
411+ 当<code>debezium.time.precision.mode</code>属性设置为默认的 adaptive(自适应)时,连接器会根据列的数据类型定义来确定字面类型和语义类型。这可以确保事件能够精确地表示数据库中的值。
412+ <div class="wy-table-responsive">
413+ <table class="colwidths-auto docutils">
414+ <thead>
415+ <tr>
416+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
417+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
418+ </tr>
419+ </thead>
420+ <tbody>
421+ <tr>
422+ <td>
423+ DATE
424+ <td>DATE</td>
425+ </tr>
426+ <tr>
427+ <td>
428+ TIME([P])
429+ </td>
430+ <td>INTEGER</td>
431+ </tr>
432+ <tr>
433+ <td>
434+ TIMESTAMP([P])
435+ </td>
436+ <td>TIMESTAMP([P])</td>
437+ </tr>
438+ </tbody>
439+ </table>
440+ </div>
441+
442+ # ## Decimal types Mapping
443+ PostgreSQL 连接器配置属性 <code>debezium.decimal.handling.mode</code> 的设置决定了连接器如何映射十进制类型。
444+
445+ 当 <code>debezium.decimal.handling.mode</code> 属性设置为 precise(精确)时,连接器会对所有 DECIMAL、NUMERIC 和 MONEY 列使用 Kafka Connect 的 org.apache.kafka.connect.data.Decimal 逻辑类型。这是默认模式。
446+ <div class="wy-table-responsive">
447+ <table class="colwidths-auto docutils">
448+ <thead>
449+ <tr>
450+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
451+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
452+ </tr>
453+ </thead>
454+ <tbody>
455+ <tr>
456+ <td>
457+ NUMERIC[(M[,D])]
458+ <td>DECIMAL[(M[,D])]</td>
459+ </tr>
460+ <tr>
461+ <td>
462+ NUMERIC
463+ <td>DECIMAL(38,0)</td>
464+ </tr>
465+ <tr>
466+ <td>
467+ DECIMAL[(M[,D])]
468+ <td>DECIMAL[(M[,D])]</td>
469+ </tr>
470+ <tr>
471+ <td>
472+ DECIMAL
473+ <td>DECIMAL(38,0)</td>
474+ </tr>
475+ <tr>
476+ <td>
477+ MONEY[(M[,D])]
478+ <td>DECIMAL(38,digits)(schema 参数 scale 包含一个整数,表示小数点移动了多少位。scale schema 参数由 money.fraction.digits 连接器配置属性决定。)</td>
479+ </tr>
480+ </tbody>
481+ </table>
482+ </div>
483+
484+ 当 <code>debezium.decimal.handling.mode</code> 属性设置为 double 时,连接器将所有 DECIMAL、NUMERIC 和 MONEY 值表示为 Java 的 double 值,并按照下表所示进行编码。
485+
486+ <div class="wy-table-responsive">
487+ <table class="colwidths-auto docutils">
488+ <thead>
489+ <tr>
490+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
491+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
492+ </tr>
493+ </thead>
494+ <tbody>
495+ <tr>
496+ <td>
497+ NUMERIC[(M[,D])]
498+ <td>DOUBLE</td>
499+ </tr>
500+ <tr>
501+ <td>
502+ DECIMAL[(M[,D])]
503+ <td>DOUBLE</td>
504+ </tr>
505+ <tr>
506+ <td>
507+ MONEY[(M[,D])]
508+ <td>DOUBLE</td>
509+ </tr>
510+ </tbody>
511+ </table>
512+ </div>
513+
514+ <code>debezium.decimal.handling.mode</code> 配置属性的最后一个可选设置是 string(字符串)。在这种情况下,连接器将 DECIMAL、NUMERIC 和 MONEY 值表示为其格式化的字符串形式,并按照下表所示进行编码。
515+ <div class="wy-table-responsive">
516+ <table class="colwidths-auto docutils">
517+ <thead>
518+ <tr>
519+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
520+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
521+ </tr>
522+ </thead>
523+ <tbody>
524+ <tr>
525+ <td>
526+ NUMERIC[(M[,D])]
527+ <td>STRING</td>
528+ </tr>
529+ <tr>
530+ <td>
531+ DECIMAL[(M[,D])]
532+ <td>STRING</td>
533+ </tr>
534+ <tr>
535+ <td>
536+ MONEY[(M[,D])]
537+ <td>STRING</td>
538+ </tr>
539+ </tbody>
540+ </table>
541+ </div>
542+
543+ 当 <code>debezium.decimal.handling.mode</code> 的设置为 string 或 double 时,PostgreSQL 支持将 NaN(非数字)作为一个特殊值存储在 DECIMAL/NUMERIC 值中。在这种情况下,连接器会将 NaN 编码为 Double.NaN 或字符串常量 NAN。
544+
545+ # ## HSTORE type Mapping
546+ PostgreSQL 连接器配置属性 <code>debezium.hstore.handling.mode</code> 的设置决定了连接器如何映射 HSTORE 值。
547+
548+ 当 <code>debezium.hstore.handling.mode</code> 属性设置为 json(默认值)时,连接器将 HSTORE 值表示为 JSON 值的字符串形式,并按照下表所示进行编码。当 <code>debezium.hstore.handling.mode</code> 属性设置为 map 时,连接器对 HSTORE 值使用 MAP 模式类型。
549+ <div class="wy-table-responsive">
550+ <table class="colwidths-auto docutils">
551+ <thead>
552+ <tr>
553+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
554+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
555+ </tr>
556+ </thead>
557+ <tbody>
558+ <tr>
559+ <td>
560+ HSTORE
561+ <td>STRING(<code>`debezium.hstore.handling.mode`=`string`</code>)</td>
562+ </tr>
563+ <tr>
564+ <td>
565+ HSTORE
566+ <td>MAP(<code>`debezium.hstore.handling.mode`=`map`</code>)</td>
567+ </tr>
568+ </tbody>
569+ </table>
570+ </div>
571+
572+ # ## Network address types Mapping
573+ PostgreSQL 拥有可以存储 IPv4、IPv6 和 MAC 地址的数据类型。使用这些类型来存储网络地址比使用纯文本类型更为合适。网络地址类型提供了输入错误检查以及专用的操作符和函数。
574+ <div class="wy-table-responsive">
575+ <table class="colwidths-auto docutils">
576+ <thead>
577+ <tr>
578+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
579+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
580+ </tr>
581+ </thead>
582+ <tbody>
583+ <tr>
584+ <td>
585+ INET
586+ <td>STRING</td>
587+ </tr>
588+ <tr>
589+ <td>
590+ CIDR
591+ <td>STRING</td>
592+ </tr>
593+ <tr>
594+ <td>
595+ MACADDR
596+ <td>STRING</td>
597+ </tr>
598+ <tr>
599+ <td>
600+ MACADDR8
601+ <td>STRING</td>
602+ </tr>
603+ </tbody>
604+ </table>
605+ </div>
606+
607+ # ## PostGIS Types Mapping
608+ PostgreSQL 通过 PostGIS 扩展支持空间数据类型:
609+ ```
610+ GEOMETRY(POINT, xx): 在笛卡尔坐标系中表示一个点,其中 EPSG:xx 定义了坐标系。它适用于局部平面计算。
611+ GEOGRAPHY(MULTILINESTRING): 在基于球面模型的纬度和经度上存储多条线串。它适用于全球范围的空间分析。
612+ ```
613+ 前者适用于小范围的平面数据,而后者适用于需要考虑地球曲率的大范围数据。
393614<div class="wy-table-responsive">
394615<table class="colwidths-auto docutils">
395616 <thead>
@@ -401,11 +622,11 @@ PostgreSQL通过PostGIS扩展支持空间数据类型:
401622 <tbody>
402623 <tr>
403624 <td>GEOMETRY(POINT, xx)</td>
404- <td>{"hexewkb ":"0101000020730c00001c7c613255de6540787aa52c435c42c0 ","srid":3187}</td>
625+ <td>{"coordinates ":"[[174.9479, -36.7208]] ","type":"Point"," srid":3187}" </td>
405626 </tr>
406627 <tr>
407628 <td>GEOGRAPHY(MULTILINESTRING)</td>
408- <td>{"hexewkb ":"0105000020e610000001000000010200000002000000a779c7293a2465400b462575025a46c0c66d3480b7fc6440c3d32b65195246c0 ","srid":4326}</td>
629+ <td>{"coordinates ":"[[169.1321, -44.7032],[167.8974, -44.6414]]","type":"MultiLineString ","srid":4326}</td>
409630 </tr>
410631 </tbody>
411632</table>
0 commit comments