惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Martin Fowler
Martin Fowler
雷峰网
雷峰网
Recent Announcements
Recent Announcements
博客园 - 叶小钗
F
Full Disclosure
C
Check Point Blog
A
About on SuperTechFans
L
LangChain Blog
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
博客园 - 司徒正美
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
MongoDB | Blog
MongoDB | Blog
Project Zero
Project Zero
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Know Your Adversary
Know Your Adversary
D
Docker
U
Unit 42
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
L
Lohrmann on Cybersecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Latest news
Latest news
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 最新话题
Google DeepMind News
Google DeepMind News
小众软件
小众软件
NISL@THU
NISL@THU
GbyAI
GbyAI
H
Heimdal Security Blog
Jina AI
Jina AI
I
InfoQ
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
P
Proofpoint News Feed
N
News and Events Feed by Topic
C
CERT Recently Published Vulnerability Notes
aimingoo的专栏
aimingoo的专栏
SecWiki News
SecWiki News
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志

博客园 - margiex

OGG的一些常用网址 ogg初始化抽取的快速配置方法一: 将存量数据落地为标准trail 利用GoldenGate 21实现mysql8远程DDL同步 GoldenGate 21c发布 OGG配置文件中参数化的运用 GoldenGate基于中间队列文件的初始化 一次linux中毒,挖矿病毒 goldengate新版本中查看日志读取点 ogg同步Oracle数据库用户验证 GoldenGate在MySQL 集群中的应用 Oracle GoldenGate现在支持从 PostgreSQL 捕获数据 GoldenGate 2020.7 发布新特性 - 19.1.0.0.200714 GoldenGate如何修改抽取进程的读取点? 使用AutoHotKey提升工作效率 InnoDB和NDB,MySQL群集和InnoDB群集之间有什么区别? windows 10 excel 打开超连接提示 组织策略阻止... 验证ogg同步数据库表无主键表且目标表包含隐藏字段 配置ogg从Oracle到PostgreSQL的同步复制json数据 pi
GoldenGate 19.1实时文本文件加载攻略
margiex · 2020-04-15 · via 博客园 - margiex

前言

    传统的数据仓库存储分析平台,常见的有Oracle, Teradata, Greenplum, Netezza, MySQL集群等;利用Oracle GoldenGate,可以实现从业务系统到这些数据仓库平台的实时加载,从而实现准实时的数据分析。除Oracle Exadata平台外,针对频繁的OLTP数据写入,其它平台对单条大批量的Update/Delete操作支持都较弱,在数据量特别大的情况下,往往会有较大的延迟。这些平台,如果用传统的ETL加载,一般会基于文本文件进行加载,从而发挥这些平台海量数据处理的优势,但这种处理,一般又是非实时的。现在,通过Oracle GoldenGate for Big Data (OGG4BD),我们可以将增量数据导出为文本,实现准实时加载,从而既满足海量数据的处理,又满足实时性的要求。当然,要实现准实时的数据加载和处理,也会面临一些限制,此类注意事项,我们也会在文中提及。

    另外,针对大数据平台的实时数据加载,在Oracle GoldenGate for Big Data中,产品已经内置了实时投递数据给HDFS, Hive, Hbase, Kafka, MongoDB, Cassandra, ElasticSearch, Flume等组件的功能,所以,只要具备相应的大数据环境,即可直接通过GoldenGate for Big Data开始实时数据投递。

本文测试环境:GoldenGate 19.1 for Big Data,如果是12c以前的版本,配置可能不同。

示例架构

利用GoldenGate实现传统数据仓库的文本加载,测试架构如下:

clip_image002

    从上面架构可以看到,源端数据抽取的配置与传统的数据库抽取是一致的,不在此赘述。针对目标端平台,我们主要利用OGG4BD软件,将增量数据导出为文本,需要配置以下几个参数。

  • 目标端文本字段的定义文件:由于OGG源端抽取一般采用全表字段(也可以指定抽取的字段),而且表结构定义默认已经保存到队列文件中(OGG 12.2及以后的版本),目标端的文本可能只要部分字段,比如源端有clob/blob字段,而目标端不需要这些字段,所以需要额外配置一个目标文本的字段定义文件。
  • 目标端OGG参数文件:用于数据投递的参数文件,即replicat进程参数。
  • 目标端大数据平台属性文件:用于定义文本写入的属性文件,如生成的文件名、文件切换的大小、文本分隔符等。

    文本如何加载到数据仓库,与对应的目标平台有关,如Greenplum使用gpfdist或copy方式加载文本,而Teradata使用fastload加载文本,不同数据库语法不同。本文只是就如何生成文本进行说明,如何加载到数据仓库,可参考对应数据库的命令手册。针对准实时加载处理,可通过定时脚本的形式进行加载。

配置说明

本示例中,以OGG4BD自带的队列文件为增量数据,路径如下:

OGG4BD安装目录\AdapterExamples\trail\tr000000000

源表定义

此队列文件中包含有两张表的变更数据,分别是TCUSTMER, TCUSTORD, 本文以TCUSTMER为源表进行配置,该表的字段定义如下:

字段名

字段类型

其它说明

CUST_CODE

Varchar2(4)

PK

NAME

Varchar2(30)

CITY

Varchar2(20)

STATE

Char(2)

目标表定义

在输出的文本中,我们只需要cust_code, name两列,所以对应的文本字段定义文件 (dirdef/dbo.tcust.mdp.avsc) 内容如下:

{

"type" : "record",

"name" : "tcust",

"namespace" : "dbo",

"fields" :

[

{

"name" : "ID",

"type" : [ "null", "string" ],

"default" : null,

"primary_key" : true

},

{

"name" : "status",

"type" : [ "null", {"type": "bytes", "logicalType": "decimal", "precision": 38, "scale": 0} ],

"default" : null

},

{

"name" : "name2",

"type" : [ "null", "string"],

"default" : null

}

]

}

以上示例中的字段名与源端不同,目的在于演示可以在不同字段名之间进行映射。

OGG投递参数文件dirprm/test.prm:

REPLICAT test

MAP QASOURCE.TCUSTMER, TARGET dbo.tcust, COLMAP (

ID = CUST_CODE,

status = 2,

name2 = name

);

将源表的cust_code映射到目标端的ID列,目标端新增一列status,默认为2,name字段映射到name2。 需要注意的是,目标表名必须要与提供的avsc文件名一致。

添加进程:

GGSCI>add replicat test, exttrail AdapterExamples/trail/tr

输出文本的属性文件dirprm/test.properties

gg.handlerlist=fw

gg.mdp.type=avro

gg.mdp.schemaFilesPath=./dirdef

gg.format.timestamp=yyyy-MM-dd:HH:mm:ss.SSSSSS z

gg.format.timestamp.zoneId=America/Chicago

gg.handler.fw.type=filewriter

gg.handler.fw.mode=op

gg.handler.fw.pathMappingTemplate=./dirout

gg.handler.fw.stateFileDirectory=./dirout

gg.handler.fw.fileNameMappingTemplate=${fullyQualifiedTableName}_${currentTimestamp}.txt

gg.handler.fw.fileRollInterval=0

gg.handler.fw.inactivityRollInterval=0

gg.handler.fw.finalizeAction=none

gg.handler.fw.partitionByTable=true

gg.handler.fw.sync=false

gg.handler.fw.bufferSize=10485760

gg.handler.fw.format=delimitedtext

gg.handler.fw.format.fieldDelimiter=|

gg.handler.fw.format.multiCharacterDelimiter=true

gg.handler.fw.format.metaColumnsTemplate=${optype}

gg.log=log4j

gg.log.level=INFO

详细的参数定义可参考OGG4BD的部署文档。

测试及结果分析

配置完成之后,启动test进程,并查看统计信息

GGSCI>start test

GGSCI > stats test, total

Sending STATS request to REPLICAT TEST ...

Start of Statistics at 2020-02-17 22:32:57.

Replicating from QASOURCE.TCUSTMER to dbo.tcust:

*** Total statistics since 2020-02-17 22:32:44 ***

Total inserts 5.00

Total updates 1.00

Total deletes 0.00

Total upserts 0.00

Total discards 0.00

Total operations 6.00

End of Statistics.

可以看到,有正常投递增量数据。

查看test进程的日志信息

2020-02-17 22:32:44 INFO OGG-02243 Opened trail file U:\soft\oracle\OGG\big-data\19.1\Winx64_19.1.0.0.1\AdapterExamples/trail/tr000000000 at 2020-02-17 22:32:44.157000.

2020-02-17 22:32:44 INFO OGG-03506 The source database character set, as determined from the trail file, is UTF-8.

2020-02-17 22:32:44 INFO OGG-06505 MAP resolved (entry QASOURCE.TCUSTMER): MAP "QASOURCE"."TCUSTMER", TARGET dbo.tcust, COLMAP ( ID = CUST_CODE, state = 12345, name2 = name ).

2020-02-17 22:32:44 INFO OGG-15057 The definition for table dbo.tcust is obtained from the metadata provider.

2020-02-17 22:32:44 INFO OGG-02756 The definition for table QASOURCE.TCUSTMER is obtained from the trail file.

2020-02-17 22:32:44 INFO OGG-06510 Using the following key columns for target table dbo.tcust: ID.

2020-02-17 22:32:53 INFO OGG-01021 Command received from GGSCI: STATS.

可以看到,目标端字段定义是从metadata provider(即我们提供的avsc文件)中得到,源端的表结构定义是从trail文件中得到。

最终的输出结果:

dbo.tcust_2020-02-17_22-32-44.236.txt

文件内容:

OP_TYPE|ID|Status|Name

I|WILL|2|BG SOFTWARE CO.

I|JANE|2|ROCKY FLYER INC.

I|DAVE|2|DAVE'S PLANES INC.

I|BILL|2|BILL'S USED CARS

I|ANN|2|ANN'S BOATS

U|ANN|2|

由于在属性文件中metaColumnsTemplate设置的是{optype},所以在每一行的第一列包含了每条记录对应的操作类型。因此,创建的目标表需要增加这额外的一列才能顺利加载。另外,最后一行的U代表源表上进行了update操作,Name字段为空,表示源端更新没有变更此字段的内容。

在文本的批量加载时,不同的操作类型(I/U/D)是不能进行一次性处理的,根据业务情况,有可能要考虑每条记录变更的先后顺序,同一主键可能有不同的操作,如果一次性加载替换目标表,一方面数据可能有重复,另一方面可能会打乱源端数据更新的先后顺序。更好的解决办法是实时加载只有insert操作的增量数据,比如事件表或流水表等。

小结

经过本文的测试,我们看到GoldenGate除了可以支持在不同数据库之间实时同步,也可以根据目标端的需求定制输出结果,包括以json, xml, avro, csv等形式将增量数据实时输出到目标端,从而为后续的数据处理提供支持。

参考文档

l https://docs.oracle.com/en/middleware/goldengate/big-data/19.1/index.html

l https://docs.oracle.com/en/middleware/goldengate/core/19.1/index.html