@@ -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,289 @@ 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 interval.handling.mode 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 binary.handling.mode 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 数据类型之外,其他时间类型如何映射取决于连接器配置属性 time.precision.mode 的值。以下各节将描述这些映射关系:
403
+ time.precision.mode=adaptive
404
+
405
+ time.precision.mode=adaptive_time_microseconds
406
+
407
+ time.precision.mode=connect
408
+
409
+
410
+ 当 time.precision.mode 属性设置为默认的 adaptive(自适应)时,连接器会根据列的数据类型定义来确定字面类型和语义类型。这可以确保事件能够精确地表示数据库中的值。
411
+ <div class="wy-table-responsive">
412
+ <table class="colwidths-auto docutils">
413
+ <thead>
414
+ <tr>
415
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
416
+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
417
+ </tr>
418
+ </thead>
419
+ <tbody>
420
+ <tr>
421
+ <td>
422
+ DATE
423
+ <td>DATE</td>
424
+ </tr>
425
+ <tr>
426
+ <td>
427
+ TIME([P])
428
+ </td>
429
+ <td>TIME([P])</td>
430
+ </tr>
431
+ <tr>
432
+ <td>
433
+ TIMESTAMP([P])
434
+ </td>
435
+ <td>TIMESTAMP([P])</td>
436
+ </tr>
437
+ </tbody>
438
+ </table>
439
+ </div>
440
+
441
+ # ## Decimal types Mapping
442
+ PostgreSQL 连接器配置属性 decimal.handling.mode 的设置决定了连接器如何映射十进制类型。
443
+
444
+ 当 decimal.handling.mode 属性设置为 precise(精确)时,连接器会对所有 DECIMAL、NUMERIC 和 MONEY 列使用 Kafka Connect 的 org.apache.kafka.connect.data.Decimal 逻辑类型。这是默认模式。
445
+ <div class="wy-table-responsive">
446
+ <table class="colwidths-auto docutils">
447
+ <thead>
448
+ <tr>
449
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
450
+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
451
+ </tr>
452
+ </thead>
453
+ <tbody>
454
+ <tr>
455
+ <td>
456
+ NUMERIC[(M[,D])]
457
+ <td>DECIMAL[(M[,D])]</td>
458
+ </tr>
459
+ <tr>
460
+ <td>
461
+ NUMERIC
462
+ <td>DECIMAL(38,0)</td>
463
+ </tr>
464
+ <tr>
465
+ <td>
466
+ DECIMAL[(M[,D])]
467
+ <td>DECIMAL[(M[,D])]</td>
468
+ </tr>
469
+ <tr>
470
+ <td>
471
+ DECIMAL
472
+ <td>DECIMAL(38,0)</td>
473
+ </tr>
474
+ <tr>
475
+ <td>
476
+ MONEY[(M[,D])]
477
+ <td>DECIMAL(38,digits)(schema 参数 scale 包含一个整数,表示小数点移动了多少位。scale schema 参数由 money.fraction.digits 连接器配置属性决定。)</td>
478
+ </tr>
479
+ </tbody>
480
+ </table>
481
+ </div>
482
+
483
+ 当 decimal.handling.mode 属性设置为 double 时,连接器将所有 DECIMAL、NUMERIC 和 MONEY 值表示为 Java 的 double 值,并按照下表所示进行编码。
484
+
485
+ <div class="wy-table-responsive">
486
+ <table class="colwidths-auto docutils">
487
+ <thead>
488
+ <tr>
489
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
490
+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
491
+ </tr>
492
+ </thead>
493
+ <tbody>
494
+ <tr>
495
+ <td>
496
+ NUMERIC[(M[,D])]
497
+ <td>DOUBLE</td>
498
+ </tr>
499
+ <tr>
500
+ <td>
501
+ DECIMAL[(M[,D])]
502
+ <td>DOUBLE</td>
503
+ </tr>
504
+ <tr>
505
+ <td>
506
+ MONEY[(M[,D])]
507
+ <td>DOUBLE</td>
508
+ </tr>
509
+ </tbody>
510
+ </table>
511
+ </div>
388
512
389
- GEOMETRY(POINT, xx):表示使用笛卡尔坐标系的点,EPSG:xxx定义其坐标系统,适用于局部平面计算。
390
- GEOGRAPHY(MULTILINESTRING):以经纬度存储多条线串,基于球面模型,适合全球范围的空间分析。
513
+ decimal.handling.mode 配置属性的最后一个可选设置是 string(字符串)。在这种情况下,连接器将 DECIMAL、NUMERIC 和 MONEY 值表示为其格式化的字符串形式,并按照下表所示进行编码。
514
+ <div class="wy-table-responsive">
515
+ <table class="colwidths-auto docutils">
516
+ <thead>
517
+ <tr>
518
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
519
+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
520
+ </tr>
521
+ </thead>
522
+ <tbody>
523
+ <tr>
524
+ <td>
525
+ NUMERIC[(M[,D])]
526
+ <td>STRING</td>
527
+ </tr>
528
+ <tr>
529
+ <td>
530
+ DECIMAL[(M[,D])]
531
+ <td>STRING</td>
532
+ </tr>
533
+ <tr>
534
+ <td>
535
+ MONEY[(M[,D])]
536
+ <td>STRING</td>
537
+ </tr>
538
+ </tbody>
539
+ </table>
540
+ </div>
391
541
392
- 前者用于小范围平面数据,后者用于大范围、需考虑地球曲率的地理数据。
542
+ 当 decimal.handling.mode 的设置为 string 或 double 时,PostgreSQL 支持将 NaN(非数字)作为一个特殊值存储在 DECIMAL/NUMERIC 值中。在这种情况下,连接器会将 NaN 编码为 Double.NaN 或字符串常量 NAN。
543
+
544
+ # ## HSTORE type Mapping
545
+ PostgreSQL 连接器配置属性 hstore.handling.mode 的设置决定了连接器如何映射 HSTORE 值。
546
+
547
+ 当 hstore.handling.mode 属性设置为 json(默认值)时,连接器将 HSTORE 值表示为 JSON 值的字符串形式,并按照下表所示进行编码。当 hstore.handling.mode 属性设置为 map 时,连接器对 HSTORE 值使用 MAP 模式类型。
548
+ <div class="wy-table-responsive">
549
+ <table class="colwidths-auto docutils">
550
+ <thead>
551
+ <tr>
552
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
553
+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
554
+ </tr>
555
+ </thead>
556
+ <tbody>
557
+ <tr>
558
+ <td>
559
+ HSTORE
560
+ <td>STRING(hstore.handling.mode=string)</td>
561
+ </tr>
562
+ <tr>
563
+ <td>
564
+ HSTORE
565
+ <td>MAP(hstore.handling.mode=map)</td>
566
+ </tr>
567
+ </tbody>
568
+ </table>
569
+ </div>
570
+
571
+ # ## Network address types Mapping
572
+ PostgreSQL 拥有可以存储 IPv4、IPv6 和 MAC 地址的数据类型。使用这些类型来存储网络地址比使用纯文本类型更为合适。网络地址类型提供了输入错误检查以及专用的操作符和函数。
573
+ <div class="wy-table-responsive">
574
+ <table class="colwidths-auto docutils">
575
+ <thead>
576
+ <tr>
577
+ <th class="text-left">PostgreSQL type<a href="https://www.postgresql.org/docs/12/datatype.html"></a></th>
578
+ <th class="text-left">CDC type<a href="{% link dev/table/types.md %}"></a></th>
579
+ </tr>
580
+ </thead>
581
+ <tbody>
582
+ <tr>
583
+ <td>
584
+ INET
585
+ <td>STRING</td>
586
+ </tr>
587
+ <tr>
588
+ <td>
589
+ CIDR
590
+ <td>STRING</td>
591
+ </tr>
592
+ <tr>
593
+ <td>
594
+ MACADDR
595
+ <td>STRING</td>
596
+ </tr>
597
+ <tr>
598
+ <td>
599
+ MACADDR8
600
+ <td>STRING</td>
601
+ </tr>
602
+ </tbody>
603
+ </table>
604
+ </div>
605
+
606
+ # ## PostGIS Types Mapping
607
+ PostgreSQL 通过 PostGIS 扩展支持空间数据类型:
608
+ ```
609
+ GEOMETRY(POINT, xx): 在笛卡尔坐标系中表示一个点,其中 EPSG:xx 定义了坐标系。它适用于局部平面计算。
610
+ GEOGRAPHY(MULTILINESTRING): 在基于球面模型的纬度和经度上存储多条线串。它适用于全球范围的空间分析。
611
+ ```
612
+ 前者适用于小范围的平面数据,而后者适用于需要考虑地球曲率的大范围数据。
393
613
<div class="wy-table-responsive">
394
614
<table class="colwidths-auto docutils">
395
615
<thead>
@@ -401,11 +621,11 @@ PostgreSQL通过PostGIS扩展支持空间数据类型:
401
621
<tbody>
402
622
<tr>
403
623
<td>GEOMETRY(POINT, xx)</td>
404
- <td>{"hexewkb":"0101000020730c00001c7c613255de6540787aa52c435c42c0"," srid":3187}</td>
624
+ <td>{"coordinates":[{"x":174.9479,"y":-36.7208,"z":"NaN","m":"NaN","valid":true}],"type":"Point"," srid":3187}" </td>
405
625
</tr>
406
626
<tr>
407
627
<td>GEOGRAPHY(MULTILINESTRING)</td>
408
- <td>{"hexewkb":"0105000020e610000001000000010200000002000000a779c7293a2465400b462575025a46c0c66d3480b7fc6440c3d32b65195246c0 ","srid":4326}</td>
628
+ <td>{"coordinates":[{"x":169.1321,"y":-44.7032,"z":"NaN","m":"NaN","valid":true},{"x":167.8974,"y":-44.6414,"z":"NaN","m":"NaN","valid":true}],"type":"MultiLineString ","srid":4326}</td>
409
629
</tr>
410
630
</tbody>
411
631
</table>
0 commit comments