<p style="font-size:2.25em">常见问题
在建立、管理数据任务等过程中,您可能遇到各种问题,我们整理了较为常见的问题。您可以参考这些常见问题,深入了解并更好地使用我们的产品。
[TOC]
</br></br></br>
* * * * *
</br></br></br>
#### Q1:错误通知是什么?
A:当数据任务发生数据错误或系统错误,错误通知消息在[消息列表](yun-wei-guan-li/xiao-xi-lie-biao.md)和[通知中心](yun-wei-guan-li/shu-ju-ren-wu-lie-biao.md)中呈现。错误通知会显示:错误具体信息、时间、处理提示。
* 技术支持:点击「技术支持」会发送错误信息相关邮件到DataPipeline工程师团队,用户将在一个工作日内得到回复并会有工程师帮助解决问题。
* 查看详情:部分错误内容提供查看原始 error code 入口,点击「查看详情」将弹窗显示该错误的具体信息,用户可根据显示信息定位错误。
* 发生错误后,系统机器人将自动暂停该任务。
* 若该错误为连接失败等类型,系统机器人会自动尝试重启该任务。
* 重启后若任务十分钟内未发生同样的错误,消息列表中将记录“数据任务已恢复正常”的消息。

</br></br></br>
* * * * *
</br></br></br>
#### Q2:错误队列是什么?
A:在执行数据任务的过程中,为避免数据任务无法正常运行,数据工程师需要及时处理数据相关问题。错误队列功能,实时收集所有的数据相关错误,并展现给数据工程师。数据工程师针对每一个数据任务,可后置处理数据相关问题,由此规避了数据错误导致的数据任务执行效率问题,并减轻了数据工程师的工作压力。主要的功能有:
* 错误队列记录和处理
* 呈现详细的错误内容,并支持对错误内容进行重试、导出和忽略等功能。
* 错误队列的预警
* 任务采取预处理机制,保证错误率的平均度,同时保证低数据量的任务的正常运行。
* 更多信息请点击[错误队列](yun-wei-guan-li/cuo-wu-dui-lie.md)。
</br></br></br>
* * * * *
</br></br></br>
#### Q3:哪些数据错误会进入错误队列?
A:您可以根据数据的错误类型名称和具体的错误信息来了解导致进入错误队列的原因,例如:
* 「RULE_ERROR」,当您看到这个错误,就代表着数据内容因为无法匹配清洗规则而进入了错误队列。
* 例如,当您设置了「Column > 0」的过滤规则,而数据源「Column」字段值为NULL,平台无法进行过滤,导致了这些所有值为NULL的数据进入错误队列。
* 具体的清洗规则规范您可以点击查看[数据清洗](../sjqx.md)。
* 其他类型的错误您可以具体查看下方的错误信息详情来定位具体的错误来源,如果您对这些信息存在疑问,欢迎联系我们的技术团队帮您定位问题。
</br></br></br>
* * * * *
</br></br></br>
#### Q4:全量数据和增量数据是什么?
A:全量和增量数据时我们针对数据源关于任务激活前后的数据内容。
* 全量数据是指用户点击「立即激活」前,数据源已存在的数据。
* 增量数据是指用户点击「立即激活」后,数据源新增的数据。
* 当任务点击激活后会先开始进行全量数据的同步,随后会进行增量数据的同步(若不存在增量数据,会显示等待增量数据)。当您看到全量数据的进度为100%时,即表明任务激活前数据源已存在的数据已经全部同步到目的地。
</br></br></br>
* * * * *
</br></br></br>
#### Q5:定时任务应该注意哪些问题?
A:当数据任务的数据源的读取模式为定时模式时,将出现「增量识别」选项,用户可勾选是否把字段作为识别增量字段。
* 增量识别字段用于同步增量数据。
* 每次轮询以大于等于上一次轮询结果的最后一行此字段值作为查询条件,查询结果判断为增量数据。
* 选择的字段必须为可排序,例如数字或时间类型,推荐的字段类型一般为随数据更新而自增的字段,如:
* 更新序列号 (例:SequenceID)
* 更新时间戳 (例: UpdatedAt)
* 若所选字段不符合以上推荐条件,可能会造成数据源更新的数据无法被识别为增量数据或导致任务报错。
* 若不选择增量识别字段,则会定时完成全量替换工作。
* 若未对所有Schema选择增量识别字段,保存时将会提醒用户,请再次确认后点击保存。

</br></br></br>
* * * * *
</br></br></br>
#### Q6:Schema Mapping逻辑具体是什么?
A:在选择同步Schema前,需要确认平台的Schema Mapping规则,[点击查看Schema Mapping规则](https://yiqixie.com/s/home/fcABJA94KrcR8gHmw8fkl0jAj)。
* 在同类型数据库进行传输时,尽可能保证目的地和数据源的数据类型保持一致。
* 在不同类型数据库进行传输时,将按照表中逻辑进行数据类型转换处理。
</br></br></br>
* * * * *
</br></br></br>
#### Q7:数据源或目的地可以重复使用吗?
A:答案是肯定的,用户可以重复使用数据源或目的地来完成不同需求的数据任务。但有几个点需要注意:
* 数据源或目的地新建成功后,其配置信息将无法修改。
* 如需使用同一服务器地址但访问用户或读取模式等具体配置信息不同的数据源或目的地,可以新建一个新的数据源或目的地并填写新的配置信息。
* 需要重复使用数据源或目的地时,用户只需要新建一个任务,选取已经存在的数据源或目的地即可再次使用。
</br></br></br>
* * * * *
</br></br></br>
#### Q8:关于字段名称修改需要注意什么?
A:Oracle中数据表的字段名称可能同时含有大小写,当选择的目的地为其他不支持同时含大小写字段名数据表的数据库(例如 Mysql )时,若您使用默认的映射关系,不修改目的地表字段名称,数据目的地将把表字段名称中的大小写视作一致;
* 例如:当您选择了 Oracle 中的一个含字段 Aa 、 aA 的数据表作为需要同步的表,数据目的地选择了 Mysql ,如果未修改对应的目的地字段名称,则 Mysql 目的地将把这两个字段视作同名字段进行传输,可能会导致问题。
</br></br></br>
* * * * *
</br></br></br>
#### Q9:部分表已读取已写入等都为0,但完成进度为100%?
A:这是由于这部分表为空表,已读取和已写入等数据反应了数据表真实情况。我们默认把空表视作已完成全量,若您的任务选择了同步增量数据,则后续有新增数据时,这些数据将会实时更新。

</br></br></br>
* * * * *
</br></br></br>
#### Q10:有哪些常见的错误我能够快速了解并进行对应操作?
A:我们的技术团队正在不断完善错误信息,尽可能将难以理解的程序语言翻译为较为友好的错误通知。
* 大部分情况下,您可以根据错误通知的内容进行相应处理,或点击详情查看具体错误信息。
* 若您遇到了“发现任务异常,建议重启任务或申请技术支持”这样的错误,说明我们还未处理过类似的信息,您可以点击技术支持发送该错误的详细信息给我们的技术团队,对您的错误进行分析。
| 错误内容 | 错误原因 | 您可以尝试进行的操作 |
| --- | --- | --- |
| 目的地加载失败 | 数据内容无法写入目的地 | 请检查目的地表是否被更改删除;检查目的地是否存在表结构不一致的同名表。 |
</br></br></br>
* * * * *
</br></br></br>
#### Q11:任务详情页中的数据读写量具体含义是?为什么有时候还会减少?
* 已读取数据量是指数据任务被激活后系统从数据源读取的数据量:
* 当数据任务由于断点续传机制重新读取已读取的数据时不会重新记录到已读取数据量中,只有该数据被更新时会算作新的数据来记录到已读取数据量中。
* 已写入数据量是指系统读取数据后已经被处理的数据量:
* 所以已写入数据量不仅仅包括已同步到目的地的数据,还包括错误队列的数据和用户要求过滤的数据。已写入数据量也遵循当数据任务断点续传发生的重复写入数据不会记录到已写入数据量中。
* 读写数据量在某一段时间内会突然减少的原因是:
* DataPipeline为了在传输过程中不丢失任何数据,若需要同步的表存在主键时可以支持断点续传。当数据任务由于突发情况导致重启时,数据任务会从上一个记录的读取数据点开始重新同步数据,此时已读写的数据统计值会回到上一个记录的读写点上,由此用户会看到统计值会减少的现象。
* 注意:当数据任务已读写统计值频发出现减少是DataPipeline同时进行读写的数据任务过多的信号,需要增加节点的方式解决。您如果经常遇到该情况,请联系DataPipeline专业工程师帮助您解决问题。
</br></br></br>
* * * * *
</br></br></br>
#### Q12:如何设置数据读取条件where语句?有哪些注意事项?
* 若用户设置了where语句,DataPipeline向数据源读取数据时会执行数据读取条件,在读取端直接过滤部分数据;
* 请根据数据源类型输入相对应的 SQL 语句作为数据读取条件。
* 一个数据源内的每一张表只能设置一个where语句。
* 创建新任务时,若需修改数据源表读取条件,请创建一个新的数据源,再进行设置,否则可能影响前序任务的全量读取情况;
* 即:用户已对 A任务 A数据源 A表 设置了读取条件,若修改 B任务 A数据源 A表 的读取条件,需新建一个与A配置一致的 B数据源,再选择 A表 进行读取条件设置。
* 数据读取条件只针对全量数据(历史数据)有效,数据任务激活后新增的数据源数据不会执行数据读取条件语句。
</br></br></br>
* * * * *
</br></br></br>
#### Q13:无主键的表的同步逻辑是怎样的?
* 不管用户设定为CDC同步还是根据增量识别字段同步,同步无主键表时,目的地会先生成临时表,当全量完成后替代原先的主表;
* DataPipeline会默认给该表新增一个从1开始自增的数字字段主键来实现断点续传(保证不丢失、不重复同步数据)功能;
* 无主键的表在同步过程中,DataPipeline会有去重功能且保障数据不会缺漏,但无法确保完全去重,且数据更新无法被识别。
</br></br></br>
* * * * *
</br></br></br>
#### Q14:当数据源表结构更新时DataPipeline时如何处理的?
* 当正在同步的表发现新增字段时:
* 目的地为SQL类型的数据库,会把新增字段添加到目的地表;
* 目的地为文件系统,会根据新的表结构同步数据。
* 当正在同步的表发现字段被删除,
* 目的地为SQL类型的数据库,会同步删除目的地字段。
* 目的地为文件系统,会根据新的表结构同步数据。
* 当正在同步的表删除了已同步数据时,DataPipeline将不会在目的地同步删除该数据。
</br></br></br>
* * * * *
</br></br></br>
#### Q15:什么时候目的地会产生临时表?
* Oracle数据目的地会生成临时表,用于Merge;
* 当同步无主键表时,SQL类型的数据目的地会生成临时表,当全量数据同步完毕后会替代原先的主表。
</br></br></br>
* * * * *
</br></br></br>
#### Q16:多个任务可以往一个数据目的地同步数据吗?
* DataPipeline允许多个任务或多个表往一个数据目的地表同步数据,但要求同步的表与目的地表结构一致。
* 如果两个任务表结构不一致,互相冲突的话,那么第二个任务就无法正常运行,在向目的地写入时会报错。例如从mysql和oracle源分别将一张同名表同步到一个目的地,因为表名一致,所以会往一张目的地表里面写入,如果源表结构不兼容,就会出现这种情况;
* Oracle为目的地,有两个任务同时写一张目的地表。因为Oracle写目的地用的是merge机制,会存在并发写入问题,这种情况会出现主键冲突的。
* 目前DP只负责根据用户要求去同步数据源的数据,用户需要自己确定与目的地Schema一致。DP重点还是放到数据的同步工作上,不管有没有权限都不会去主动修改数据目的地的表结构。
</br></br></br>
* * * * *
</br></br></br>
#### Q17:数据任务激活后是不允许修改任何设置吗?
* DataPipeline目前支持修改任务设置(除读取方式),以及清洗规则。
* 激活后用户无法修改数据源和数据目的地类型,当用户需要变更源或目的地时建议新建数据任务。
* 激活后DataPipeline暂时不允许添加或减少数据源中需要同步的表,也无法修改同步的表和字段的名称。在未来的版本中将会支持此功能。
</br></br></br>
* * * * *
</br></br></br>
#### Q18:如何设置清洗规则?
* DataPipeline提供可视化操作界面,帮助用户零开发完成自定义表名、字段名称,过滤、替换数据等「数据清洗」功能。
* 勾选了字段忽略后,该列的数据会传为空值;
* 过滤规则支持对数值的比较,
* 输入规则为「 字段名 > 值, 字段名 < 值, 字段名 == 值 」 ,符合规则的数据将会同步的数据目的地。
* 目前可以用逗号分隔输入多个过滤规则,属于“并(and)”逻辑。
* 目前暂不支持“或(or)”逻辑。
* 替换规则支持四则运算的数值替换或者对字符串的替换;
* 数值替换的输入规则为「 字段名 +/-/×/÷ 值 」,
* 字符串替换的输入规则为「 s|需要替换的字符|替换后的字符|, s|需要替换的字符|替换后的字符| 」, 若有多条替换规则请用逗号分隔。
* 替换规则支持输入正则表达式。
</br></br></br>
* * * * *
</br></br></br>
#### Q19:SQL Server数据源读取方式选择Change Tracking时需要注意什么?
* 您需要启动Change Tracking, [查看官方参考文档](https://docs.microsoft.com/zh-cn/sql/relational-databases/track-changes/about-change-tracking-sql-server) 。
* 请在同步前开启同步表的Change Columns Updates,若您未主动开启,系统会自动开启。
* 请确保在选择同步表时选择存在主键的表,Change Tracking的读取方式需要基于主键捕获数据更新,若不存在主键,将无法被选择。

</br></br></br>
* * * * *
</br></br></br>
#### Q20:自动重启逻辑是怎样的?
* 当数据任务发生错误时,系统机器人将自动暂停该任务,并在消息记录中记录错误信息。若该错误为连接失败等类型,系统机器人会自动尝试重启该任务。
* 系统将不断尝试对该任务进行重启;
* 若重启后十分钟内不再出现连接问题,您将受到反馈任务恢复正常的邮件,同时能在任务的消息记录里查看到对应信息;
* 若重启6次后仍失败,将会发送错误邮件通知您该任务连接失败,并继续进行自动重启操作。
</br></br></br>
* * * * *
</br></br></br>
#### Q21:激活后数据源没有新增数据,为什么任务能看到有增量数据?
* 若数据任务的读取模式选择了增量识别字段,但在规则配置时,未对数据表勾选增量字段,当任务激活后,这些表会不断进行全量数据的覆盖读写。
* 在第一次全量数据的写入后的数据内容都会被视作增量数据。
</br></br></br>
* * * * *
</br></br></br>
#### Q22:表存在主键与表不存在主键的区别?
* 实时任务:
* 表存在主键时,全量数据(历史数据)会根据主键完成断点续传。增量数据根据CDC日志完成增量工作;
* 表不存在主键时,全量数据和增量数据会全量替换。每次重起会重新开始执行全量替换工作。
* 定时任务:
* 表存在主键时,全量数据(历史数据)根据主键完成断点续传。增量数据要求勾选增量识别字段,会根据增量识别字段定时检查,若没有增量识别字段则会定时完成全部替换工作;
* 表不存在主键时,全量数据会全量替换,每次重启会重新开始执行全量替换工作。若用户勾选增量识别字段,则会根据增量识别字段完成全量数据的断点续传和增量数据同步工作。
</br></br></br>
* * * * *
</br></br></br>
#### Q23:文件系统数据源静态表结构和动态表结构的区别是什么?
* 静态表结构:指每个文件的表结构是一致的,支持同步到所有目的地类型。
* 动态表结构:指允许同步表结构不一致的文件到目的地,目前DataPipeline支持同步到Kafka、HDFS、文件系统三种类型目的地,其他类型目的地会在其他版本中实现。
</br></br></br>
* * * * *
</br></br></br>
#### Q24:文件系统数据源CSV静态表结构时,用户为什么需要确认首行是否为字段名称?
* 文件系统CSV类型是以纯文本的形式存储表格数据(数字和文本),通常所有的记录都有完全相同的字段序列,因此用户可以设置是否读取字段名称这一列。
* 当首行为字段名称时,系统读取文件会忽略第一行字段名称,从下一行开始读取,用户可采用填写表头的方式进行数据同步(2.0版本);当首行不为字段名称时,系统会从第一行数据开始同步。
</br></br></br>
* * * * *
</br></br></br>
#### Q25:数据源mysql的实时处理模式下,暂时无法读取哪些字段类型?
* Mysql 的实时处理模式下,暂时无法读取字段类型为 GEOMETRY 的数据,具体请参照下表,如果存在对应类型的数据,请选择定时模式进行同步。
<table><thead><tr><th style="text-align: center;">GEOMETRY字段</th></tr></thead> <tbody><tr><td style="text-align: center;">POINT</td></tr><tr><td style="text-align: center;">LINESTRING</td></tr><tr><td style="text-align: center;">POLYGON</td></tr><tr><td style="text-align: center;">GEOMETRY</td></tr><tr><td style="text-align: center;">MULTIPOINT</td></tr><tr><td style="text-align: center;">MULTILINESTRING</td></tr><tr><td style="text-align: center;">MULTIPOLYGON</td></tr><tr><td style="text-align: center;">GEOMETRYCOLLECTION</td></tr></tbody></table>
</br></br></br>
* * * * *
</br></br></br>
#### Q26:用户选择实时模式时,选表时发现有一些表置灰不能同步要想同步这些表该怎么办?
* Datapipeline会依次鉴定数据库、schema以及表是否有实时权限,所以,若在同步时发现有些表置灰未开启实时权限,则无法实时同步这些表;若想继续同步无权限的表则需求去数据源修改配置。
</br></br></br>
* * * * *
</br></br></br>
### Q27:用户选择实时模式时,对不同的数据源有什么不同的要求吗?
* mysql:BINLOG
版本要求:MySQL 5.5 或以上版本
用户权限:SELECT, REPLICATION SLAVE, REPLICATION CLIENT 权限
其他要求:要求 BINLOG 修改为 ROW 模式,MYSQL BINLOG MODE = ROW
注意事项:不支持同步视图
* oracle:Oracle LogMiner
版本要求:Logminer模式下支持 Oracle 11.2.0.4以上版本的 Non CDB数据库;增量识别字段支持10g以上。
用户权限:select any transaction,
logmining,
execute on dbms_logmnr_d,
execute on dbms_logmnr,
execute on
dbms_flashback,
create session,
resource,
select any dictionary,
flashck any table,
execute_catalog_role,
以及相关视图和表的select权限
其他要求:提供Oracle Logminer,12c以下版本不需要logmining权限,日志补全至少需要开启primary key、all级别的
注意事项:不支持同步视图
* SQL Server:Change Tracking
版本要求:SQL-Server 2008 或以上版本
用户权限:Select on table;View change tracking on table;
其他要求:
如果default schema为dbo,可以直接授权select和view change tracking权限:grant select on schema::dbo to user;grant view change tracking on schema::dbo to user;
如果主体模式不是dbo就需要按照表为单位进行view change tracking的授权,比如grant view change tracking on object::rpt.表名 to user;
要求同步表存在主键
注意事项:不支持同步视图
* Postgres:
wal2json
版本要求:PostgreSQL 9.4 或以上版本
用户权限:replication角色、login角色,需要同步的表的select\update权限
其他要求:
wal2json 在 PostgreSQL 9.6.8 上不可用
要求同步表存在主键
注意事项:不支持同步视图
decoderbufs
版本要求:PostgreSQL 9.6 或以上版本
用户权限:replication角色、login角色,需要同步的表的select\update权限
注意事项:不支持同步视图
</br></br></br>
* * * * *
</br></br></br>
### Q28:目的地TIDB同步表时,需要注意什么?
* 首先,系统验证TIDB不同级别的权限,因此需要验证mysql.db/mysql.user/mysql.table_privs三张表的SELECT权限。
其次,用户需要确认TIDB的同步表是否有SELECT权限,如果TIDB里表没有SELECT权限的话,同步表时,系统无法检测到重名的表,无权限的表同步到目的地会导致任务报错,因此用户在使用TIDB目的地同步表时要保证目的地的表具有SELECT权限才可以。
</br></br></br>
* * * * *
</br></br></br>
### Q29: 同步数据到异构数据库,字段类型会有变化吗?
* 系统会根据数据源和目的地类型做出Schema Mapping(请看下方表格),暂时不支持用户手动修改目的地字段类型。从v2.0版本开始,将会支持用户自定义目的地字段类型。
| 数据源<p style="width:50px" ></p> | 数据源字段类型<p style="width:60px"></p> | 目的地ORACLE时字段类型变化 | 目的地REDSHIFT时字段类型变化 | 目的地GreenPlum时字段类型变化 | 目的地RDS/TIDB时字段类型变化 |
| --- | --- | --- | --- | --- | --- |
| MYSQL| TINYINT | INTEGER | INTEGER | INTEGER | INTEGER |
| MYSQL| SMALLINT | INTEGER | INTEGER | INTEGER | INTEGER |
| MYSQL| INTEGER | NTEGER | NTEGER | NTEGER | NTEGER |
| MYSQL| BIGINT | NUMBER(38) | BIGINT | BIGINT | BIGINT |
| MYSQL| REAL | BINARY_FLOAT | DECIMAL(p,s) | FLOAT | FLOAT |
| MYSQL| FLOAT | BINARY_FLOAT | DECIMAL(p,s) | FLOAT | FLOAT |
| MYSQL| DOUBLE | BINARY_DOUBLE | DECIMAL(p,s) | FLOAT | DOUBLE |
| MYSQL| DECIMAL | BINARY_DOUBLE | DECIMAL(p,s) | FLOAT | DOUBLE |
| MYSQL| NUMERIC | BINARY_DOUBLE | DECIMAL(p,s) | FLOAT | DOUBLE |
| MYSQL| BIT | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | BIGINT(暂时是Bytes 地址) |
| MYSQL| BIT | NUMBER(1) | BOOLEAN | BOOLEAN | BOOLEAN |
| MYSQL| BOOLEAN | NUMBER(1) | BOOLEAN | BOOLEAN | BOOLEAN |
| MYSQL| DATE | DATE | DATE | DATE | DATE |
| MYSQL| TIMESTAMP |DATE | DATE | DATE | DATE |
| MYSQL| BLOB | BLOB | VARCHAR(65535) | TEXT | TEXT |
| MYSQL| BINARY | BLOB | VARCHAR(65535) | TEXT | TEXT |
| MYSQL| VARBINARY | BLOB | VARCHAR(65535) |TEXT | TEXT |
| MYSQL| LONGVARBINARY | BLOB | VARCHAR(65535) | TEXT |
| MYSQL| Anothers | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | BINARY_FLOAT | BINARY_FLOAT | DECIMAL(p,s) | FLOAT | FLOAT |
| ORACLE | BINARY_DOUBLE | BINARY_DOUBLE | DECIMAL(p,s) | FLOAT | DOUBLE |
| ORACLE | CLOB | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| ORACLE | NCLOB | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| ORACLE | BLOB | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| ORACLE | BFILE | BLOB |VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| ORACLE | CHAR | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | VARCHAR | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | VARCHAR2 | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | SYS.XMLTYPE | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | SYS.XDBURITYPE | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | SYS.URITYPE | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | SYS.DBURITYPE | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| ORACLE | SYS.HTTPURITYPE | VARCHAR2 / NCLOB | VARCHAR(n) |TEXT | TEXT |
| ORACLE | NVARCHAR2 | VARCHAR2 / NCLOB | VARCHAR(n) |TEXT | TEXT |
| ORACLE | DATE | DATE | DATE | DATE | DATE |
| ORACLE | TIMESTAMP | DATE | DATE | DATE | DATE |
| ORACLE | TIMESTAMP WITH TIME ZONE | DATE | DATE | DATE | DATE |
| ORACLE | TIMESTAMP WITH LOCAL TIME ZONE | DATE | DATE | DATE | DATE |
| ORACLE | INTERVALYM | VARCHAR2 | VARCHAR(n) | TEXT | TEXT |
| ORACLE | INTERVALDS | VARCHAR2 | VARCHAR(n) | TEXT | TEXT |
| ORACLE | NUMBER | NUMBER | DECIMAL(p,s) | DECIMAL(p,s) | DECIMAL(p,s) |
| SQLSERVER | BINARY | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| SQLSERVER | VARBINARY | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| SQLSERVER | IMAGE | BLOB | VARCHAR(65535)(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) | TEXT(暂时是Bytes 地址) |
| SQLSERVER | CHAR |VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| SQLSERVER | VARCHAR |VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| SQLSERVER | TEXT | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| SQLSERVER | NCHAR | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| SQLSERVER | NTEXT | VARCHAR2 / NCLOB | VARCHAR(n) | TEXT | TEXT |
| SQLSERVER | INT | INTEGER | INTEGER | INTEGER | INTEGER |
| SQLSERVER | BIGINT | NUMBER(38) | BIGINT | BIGINT | BIGINT |
| SQLSERVER | SMALLINT | INTEGER | INTEGER | INTEGER | INTEGER |
| SQLSERVER | TINYINT | INTEGER | INTEGER | INTEGER | INTEGER |
| SQLSERVER | BIT | NUMBER(1) | BOOLEAN | BOOLEAN | BOOLEAN |
| SQLSERVER | NUMERIC | NUMBER | DECIMAL(p,s) | DECIMAL(p,s) | DECIMAL(p,s) |
| SQLSERVER | MONEY | NUMBER | DECIMAL(p,s) | DECIMAL(p,s) | DECIMAL(p,s) |
| SQLSERVER | SMALLMONEY | NUMBER | DECIMAL(p,s) | DECIMAL(p,s) | DECIMAL(p,s) |
| SQLSERVER | FLOAT | BINARY_DOUBLE | DECIMAL(p,s) | FLOAT | DOUBLE |
| SQLSERVER | REAL | BINARY_FLOAT | DECIMAL(p,s) | FLOAT | FLOAT |
| SQLSERVER | TIMESTAMP | INTEGER | INTEGER | INTEGER | INTEGER |
</br></br></br>
* * * * *
</br></br></br>
### Q30:产品使用期限到期所有任务都会被暂停任务,那么如何提前获知产品使用期限是否到期以避免任务被暂停?
* Datapipeline提供提前通知服务,当产品距离到期10天/7天/3天时,datapipeline会向用户发送三次邮件,通知用户及时申请新的激活码,工作人员会及时为用户提供新的激活码。
### Q31 目的地表名称和字段名称最长字符长度有什么特定限制吗?以及表名称和字段名称的输入规则要求是什么?
| 数据库<p style="width:50px" ></p> | 表名长度限制<p style="width:60px"></p> | 字段名称长度限制<p style="width:60px"></p> |
| --- | --- | --- | --- | --- | --- |
| oracle | 30 | 30 |
| mysql | 64 | 64 |
| sql server | 128 | 128 |
| redshift | 127 | 127 |
| tidb | 64 | 64 |
| greenplum | 62 | 62 |
规则要求
| 数据目的地类型<p style="width:50px" ></p> | 自定义表名称限制<p style="width:60px"></p> | 自定义字段名称限制<p style="width:60px"></p> |
| --- | --- | --- | --- | --- | --- |
| Mysql、Oracle、Sql server、Redshift | 只允许英文、下划线和数字 | 只允许英文、下划线和数字;不支持同名字段 |
| CSV、Kafka、HDFS | 只允许英文、下划线、数字、点和横杠 | 只允许英文、下划线和数字;不支持同名字段 |
### Q32:任务激活前后,数据源变化表结构变化有什么不同?
* 数据任务激活前:数据源表结构发生变化时不会自动更新表结构,只当用户重新选择该表,或者通过数据字典点击查看该表时会被更新。后续会有手动更新或新的表结构更新策略。
数据任务激活后:在同步数据过程中若发现表结构变化,数据任务中该表的数据源表结构里可查看该变化,但不保证是激活后发生的表结构变化,只能说明DataPipeline是在任务激活后获取到该变化。
### Q33: 实际场景中,目的地服务器每周可能会有aws升级,需要暂停服务器,dp有没有对应的方案能够满足?
* 如果目的端发生连接故障,且定义为可重启异常,DP会进行延迟重试,连续六次重试失败会发出告警,并继续重试。如果想避免人工重启,请和我们一起测试确定aws升级可能导致的异常类型,如果不在可重启异常列表里面,我们可以在后继版本中加入。
### Q34:假设job设置成频率的方式,每5分钟一次,每次需要3分钟的同步时间,若在0点整开始。有没有可能设置为0点整跑第一次,在0点3分跑完第一次,下一次的执行时间是在0点8分?
* DP频率方式的定时任务目前采用的就是fixdelay模式,也就是从上一个次执行完成后开始计时。另外一种选择是用cron表达式,这种情况下就不是fixdelay模式了。
### Q35:Redshift 并发数设置是50,DP对100个表并发插入的方案是什么?对Redshift 性能的是否有影响?DP对大数据量并发插入Redshift 的处理方式是什么?
* DP会根据Redshift的最优的性能来设置Redshift的并发数,没有一个固定值,50个并发同时写就是最优的写入方案,这个需要跟POC测试中Redshift写入性能情况进行一个合适值的设定。
### Q36:SQL Server 历史数据有主键直接更新,Redshift 怎么处理去重复问题?
* DP是根据源端的主键,在redshift里根据这个字段去做insert、update的等操作做数据去重。
### Q37: 采用实时同步的情况,新建同步任务时,源端的数据表有大量的存量数据,如何通过产品实现数据同步的一致性的?
* DataPipeline实时任务会在全量开始的时候记录binlog position取一个consistant snapshot的全量,全量完成后从记录的点开始继续。所以假如任务没有重启是不会有重复数据的。 假如任务有过重启,那么重启后会取一个新的consistant snapshot,从中断的主键处继续读取,但是仍然用第一个记录的binlog position,所以可能会产生额外的数据。额外的数据量就是中断的主键之后所有在第一个记录的binlog positiion之后产生的数据。
- DataPipeline产品手册
- 产品主要界面介绍
- 创建-数据任务
- 数据源
- 配置MySQL数据源
- BINLOG配置手册
- 配置Oracle数据源
- LOGMINER配置手册
- 配置SQL Server数据源
- Change Tracking配置手册
- 配置FTP数据源
- 配置Couchbase数据源
- 配置PostgreSQL数据源
- 配置S3数据源
- 配置API数据源
- 配置Kafka数据源
- 数据目的地
- 配置Redshift数据目的地
- 配置Oracle数据目的地
- 配置MySQL数据目的地
- 配置Kafka数据目的地
- 配置SQL Server数据目的地
- 配置FTP数据目的地
- 配置TIDB数据目的地
- 配置Greenplum数据目的地
- 配置Hive数据目的地
- Hive技术实现
- Hive目前支持情况
- 配置HybridDB for PostgreSQL
- 任务设置
- 选择同步内容
- 数据清洗
- 激活数据任务
- 管理-数据任务
- 数据任务列表
- 数据任务详情页
- 基本信息
- 概览信息
- 任务设置
- 错误队列
- 配置规则
- 消息列表
- 文件同步
- 文件源
- 配置S3文件源
- 配置FTP文件源
- 文件目的地
- 配置hdfs文件目的地
- 任务设置
- 激活文件任务
- 管理-文件任务
- 文件任务详情页
- 基本信息
- 概览信息
- 任务设置
- 消息列表
- 元数据管理
- 用户权限管理
- 系统设置
- 产品更新日志
- 常见问题
