@@ -290,7 +290,6 @@ pipeline:
290
290
291
291
# # 数据类型映射
292
292
293
-
294
293
<div class="wy-table-responsive">
295
294
<table class="colwidths-auto docutils">
296
295
<thead>
@@ -300,6 +299,17 @@ pipeline:
300
299
</tr>
301
300
</thead>
302
301
<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>
303
313
<tr>
304
314
<td>
305
315
SMALLINT<br>
@@ -317,79 +327,290 @@ pipeline:
317
327
<tr>
318
328
<td>
319
329
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>
329
333
<td>BIGINT</td>
330
334
</tr>
331
335
<tr>
332
336
<td>
333
337
REAL<br>
334
- FLOAT4</td>
338
+ FLOAT4
339
+ </td>
335
340
<td>FLOAT</td>
336
341
</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>
348
345
</tr>
349
346
<tr>
350
- <td>BOOLEAN</td>
351
- <td>BOOLEAN</td>
347
+ <td>DOUBLE PRECISION<br>
348
+ FLOAT8
349
+ </td>
350
+ <td>DOUBLE</td>
352
351
</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>
353
361
<tr>
354
- <td>DATE</td>
355
- <td>DATE</td>
362
+ <td>TIMESTAMPTZ<br>
363
+ TIMESTAMP WITH TIME ZONE</td>
364
+ <td>ZonedTimestampType</td>
356
365
</tr>
357
366
<tr>
358
- <td>TIME [(p)] [WITHOUT TIMEZONE ]</td>
359
- <td>TIME [(p)] [WITHOUT TIMEZONE] </td>
367
+ <td>INTERVAL [P ]</td>
368
+ <td>BIGINT </td>
360
369
</tr>
361
370
<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>
364
373
</tr>
365
374
<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>
372
377
</tr>
373
378
<tr>
374
379
<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>
376
395
<td>STRING</td>
377
396
</tr>
378
- <tr>
379
- <td>BYTEA</td>
380
- <td>BYTES</td>
381
- </tr>
382
397
</tbody>
383
398
</table>
384
399
</div>
385
400
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,后续将进行完善。
388
408
389
- GEOMETRY(POINT, xx):表示使用笛卡尔坐标系的点,EPSG:xxx定义其坐标系统,适用于局部平面计算。
390
- GEOGRAPHY(MULTILINESTRING):以经纬度存储多条线串,基于球面模型,适合全球范围的空间分析。
409
+ <u>debezium.time.precision.mode=adaptive</u>
391
410
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
+ 前者适用于小范围的平面数据,而后者适用于需要考虑地球曲率的大范围数据。
393
614
<div class="wy-table-responsive">
394
615
<table class="colwidths-auto docutils">
395
616
<thead>
@@ -401,11 +622,11 @@ PostgreSQL通过PostGIS扩展支持空间数据类型:
401
622
<tbody>
402
623
<tr>
403
624
<td>GEOMETRY(POINT, xx)</td>
404
- <td>{"hexewkb ":"0101000020730c00001c7c613255de6540787aa52c435c42c0 ","srid":3187}</td>
625
+ <td>{"coordinates ":"[[174.9479, -36.7208]] ","type":"Point"," srid":3187}" </td>
405
626
</tr>
406
627
<tr>
407
628
<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>
409
630
</tr>
410
631
</tbody>
411
632
</table>
0 commit comments