本文为您介绍数据集成的相关问题。

数据集成支持的数据源有哪些?

数据集成支持的数据源类型请参见支持的数据源与读写插件,您可以在此查看配置数据源、抽取(Reader)和导入(Writer)各类数据源的相关文档。

如何排查数据集成问题?

当通过数据集成进行某操作出现问题时,首先需要定位问题的相关信息。例如查看运行资源、数据源信息,确认配置任务的区域等。
  • 查看运行资源
    • 任务运行在默认的资源组上,日志中会出现如下信息。
      running in Pipeline[basecommon_ group_xxxxxxxxx]
    • 任务运行在数据集成自定义资源组上,日志中会出现如下信息。
      running in Pipeline[basecommon_xxxxxxxxx]
    • 任务运行在独享数据集成资源上,日志中会出现如下信息。
      running in Pipeline[basecommon_S_res_group_xxx]
  • 查看数据源信息

    当出现数据集成问题时,请参见添加数据源典型问题场景进行排查。

    您需要查看的数据源信息如下:
    1. 确认是什么数据源之间的同步。
    2. 确认数据源属于什么环境。

      阿里云数据库、连接串模式(数据集成网络可直接连通)、连接串模式(数据集成网络不可直接连通)、VPC网络环境的数据源(RDS或其它数据源)、金融云环境(VPC环境、经典网络)。

    3. 确认数据源测试连通性是否成功。
      请参见支持的数据源,确认数据源的相关信息是否正确。通常输入错误的情况如下:
      • 多个数据源库输入错误。
      • 输入的信息中加了空格或特殊字符。
      • 不支持测试连通性的问题,例如非RDS的VPC环境的数据源。
  • 确认配置任务的区域
    登录DataWorks控制台,查看相关的区域。例如,华东2、华南1、中国(香港)、亚太东南1、欧洲中部1、亚太东南2等,通常默认是华东2。
    说明 购买MaxCompute后,才可以查看相应的区域。
  • 界面模式报错,复制排查编码
    如果报错,请复制排查码,并提交工单进行咨询。排查码

如何配置数据集成任务?

您可以通过向导模式或脚本模式配置数据集成任务,详情请参见通过向导模式配置任务通过脚本模式配置任务

如何处理数据同步任务等待槽位的情况?

任务未正常运行,日志提示目前实例还没有产生日志信息,在等待槽位。

出现上述提示的原因是任务的配置调度使用的是自定义资源,但目前没有可用的自定义资源。解决方法如下:
  1. 登录DataWorks控制台
  2. 在左侧导航栏,单击工作空间列表
  3. 单击相应工作空间后的进入数据开发
  4. 单击左上角的图标图标,选择全部产品 > 运维中心
  5. 在左侧导航栏,单击周期任务运维 > 周期任务,右键单击没有按照预期进行调度的任务的DAG图,单击节点详情,查看任务使用的调度资源组。
  6. 返回DataWorks控制台,在左侧导航栏,单击资源组列表,进入自定义资源组页签。

    单击任务使用的调度资源后的服务器管理,查看服务器的状态是否停止,或是否被其它任务占用。

如果以上排查无法解决问题,请执行下述命令重启服务。
su - admin
/home/admin/alisatasknode/target/alisatasknode/bin/serverctl restart

如何处理编码格式设置问题?

数据集成的同步任务设置编码格式后,如果数据中包括表情符,在运行任务时可能出现同步失败且产生脏数据,或同步成功但数据乱码的问题。
  • 同步失败且产生脏数据
    数据集成任务运行失败,且因编码问题产生脏数据,报错日志如下所示。
    016-11-18 14:50:50.766 [13350975-0-0-writer] ERROR StdoutPluginCollector - 脏数据
    {"exception":"Incorrect string value: '\\xF0\\x9F\\x98\\x82\\xE8\\xA2...' for column 'introduction' at row 1","record":[{"byteSize":8,"index":0,"rawData":9642,"type":"LONG"},
    {"byteSize":33,"index":1,"rawData":"hello[1](http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/pic/56134/cn_zh/149872864****/%E5%9B%BE%E7%89%877.png)
    cry","type":"STRING"},
    {"byteSize":8,"index":4,"rawData":0,"type":"LONG"}],"type":"writer"}
    2016-11-18 14:50:51.265 [13350975-0-0-writer] WARN  CommonRdbmsWriter$Task - 回滚此次写入, 采用每次写入一行方式提交:java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x88\xB6\xEF\xB8...' for column 'introduction' at row 1

    对数据库进行编码格式设置或添加数据源时,编码未设置为utf8mb4。仅utf8mb4编码支持同步表情符,导致出现上述问题。

    解决方法如下:
    • JDBC格式添加的数据源修改utf8mb4jdbc:mysql://xxx.x.x.x:3306/database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45
    • 实例ID形式添加数据源:在数据库名后拼接,格式为database?com.mysql.jdbc.faultInjection.serverCharsetIndex=45
    • 修改数据源的编码格式为utf8mb4。例如,在RDS控制台修改RDS的数据库编码格式。
      说明 如果需要设置RDS数据源编码格式set names utf8mb4,在添加数据源时,必须使用无公网IP和连接串方式。
  • 同步成功但数据乱码
    出现数据同步任务虽然成功,但数据乱码情况的原因如下:
    • 源端的数据本身是乱码。
    • 数据库和客户端的编码不一样。
    • 浏览器编码不一样,导致预览失败或乱码。
    解决方法如下:
    • 如果您的原始数据乱码,请首先处理好原始数据,再进行同步任务。
    • 如果数据库和客户端编码格式不一致,请先修改编码格式。
    • 如果浏览器编码和数据库或客户端编码格式不一致,请先统一编码格式,然后进行数据预览。

如何处理RDS同步失败转换为JDBC格式的情况?

从RDS(MySQL、SQL Server或PostgreSQL)同步数据至自建的MySQL、SQL Server或PostgreSQL时,报错为DataX无法连接对应的数据库。

以 RDS(MySQL)的数据同步至自建SQL Server为例,操作如下:
  1. 新建一个MySQL数据源,选择数据源类型为连接串模式
    说明
    • 如果自建SQL Server有公网连接:数据源配置JDBC公网地址,可以使用公共资源组同步任务。
    • 如果自建SQL Server无公网连接:可以使用数据集成自定义资源组同步任务,DataWorks需要开通专业版及以上版本。
    • 如果已使用高速通道打通本地IDC和专有网络,可以使用独享数据集成资源同步任务。独享数据集成资源专有网络和打通的专有网络一致。
  2. 使用新建的数据源配置同步任务,重新执行即可。
    说明 如果是在RDS(MySQL)、RDS(SQL Server)等云产品之间同步,建议数据源类型选择为阿里云实例模式

如何处理表列名是关键字导致同步任务失败的情况?

进行同步任务时,需要同步的表的列名是关键字,导致同步任务失败。

以MySQL数据源为例,操作如下:
  1. 执行下述语句,新建一张表aliyun。
    create table aliyun (`table` int ,msg varchar(10));
  2. 执行下述语句,创建视图,为table列取别名。
    create view v_aliyun as  select `table` as col1,msg as col2 from aliyun;
    说明
    • table是MySQL的关键字,在数据同步时,拼接出来的代码会报错。因此需要通过创建视图,为table列起别名。
    • 不建议使用关键字作为表的列名。
  3. 通过执行上述语句,为有关键字的列取列名。在配置同步任务时,选择v_aliyun视图代替aliyun表即可。
说明
  • MySQL的转义符为`关键字`
  • Oracle和PostgreSQl的转义符为"关键字"
  • SQlServer的转义符为[关键字]

数据同步任务如何自定义表名?

每天产出一张表,例如orders_20170310orders_20170311orders_20170312,按天区分表名称,且表结构一致。

需要通过创建数据同步任务,导入表数据至MaxCompute中。可以自定义表名,实现每天凌晨自动从源数据库读取昨天的表数据。例如,今天是2017年3月15日,自动从源数据库中读取orders_20170314的表的数据导入,以此类推。

解决方法如下:
  1. 登录DataWorks控制台,单击相应工作空间后的进入数据开发
  2. 通过向导模式创建数据同步任务,选择数据来源,例如orders_20170310。详情请参见创建同步任务
  3. 单击转换脚本图标,将向导模式转换为脚本模式。脚本模式
  4. 在脚本模式中,修改来源表的表名为变量,例如orders_${tablename}

    由于按天区分表名称,且需要每天读取前一天的数据,所以在任务的参数配置中,为变量赋值为$[yyyymmdd-1]

    说明 您也可以修改来源表的表名为变量orders_${bdp.system.bizdate},则无需赋值。
  5. 配置完成后,依次单击保存提交,即可进行后续操作。

如何处理使用用户名root添加MongoDB数据源报错的情况?

使用用户名root添加MongoDB数据源时报错,是因为添加MongoDB数据源时,必须使用用户需要同步的表所在的数据库创建的用户名,不可以使用root。

例如需要导入name表,name表在test库,则此处数据库名称为test,需要使用test数据库中创建的用户名。

为什么添加RDS数据源时已添加白名单,仍报错提示user not exist ip white list reference?

出现上述情况通常是因为用户名输入错误,请确认输入的用户名是否正确。详情请参见创建账号和数据库

为什么不能在调度资源组上进行大数据计算?

调度资源组主要用于调度任务,资源有限,并不适合用来完成计算任务。MaxCompute具有海量数据处理能力,推荐您通过MaxCompute进行大数据计算。

通过JDBC连接串模式添加数据源时测试连通性失败,该如何处理?

请确认在JDBC连接串模式中配置的域名类型:
  • 如果您可以使用公网,请配置为通过公网连接。

    为保证数据库的安全稳定,在开始使用数据库实例前,您需要将访问数据库的IP地址或IP段添加至目标实例的白名单中。详情请参见添加白名单

  • 如果您需要使用内网进行数据同步,请在DataWorks中使用自定义资源组

通过本地自建的数据库添加数据源时测试连通性失败,该如何处理?

请确认该数据库是否具备访问公网的能力:
  • 如果可以访问公网,请添加对应区域的白名单,详情请参见添加白名单
  • 如果不可以访问公网,请使用自定义资源组连通网络,详情请参见自定义资源组

通过DataWorks同步PostgreSQL数据报错,该如何处理?

通过DataWorks同步PostgreSQL数据时,报错如下。
org.postgresql.util.PSQLException: FATAL: terminating connection due to conflict with recovery

出现该情况的原因是从数据库中拉取数据的时间较长,请增加 max_standby_archive_delay max_standby_streaming_delay的参数值,详情请参见Standby Server Events

同步MaxCompute数据至DRDS报错,该如何处理?

同步MaxCompute数据至DRDS,报错如下。
docs not support duplicate values in insert

出现该情况的原因是DRDS不支持全局二级索引,且不支持写入重复值。

使用Power BI连接MaxCompute报错,该如何处理?

目前MaxCompute不支持连接Power BI,建议您使用交互式分析(Hologres)进行连接,详情请参见访问域名

配置离线同步节点时,无法查看全部的表,该如何处理?

您在配置离线同步节点时,选择来源区域仅默认显示所选数据源中的前25张表。如果数量过大,您可以输入表名进行搜索或使用脚本模式开发。

VPC环境下自建的MongoDB数据源无法连接,该如何处理?

添加VPC环境下自建的MongoDB数据源,测试数据源连通性失败。解决方式如下:
  • 方式一:通过公网进行数据同步。
    1. 配置数据源时,选择数据源类型为连接串模式
    2. VPC环境下,您的MongoDB需要开通公网访问。
    3. 在MongoDB上放行相关白名单IP,详情请参见添加白名单
    4. 测试数据连通性,详情请参见数据源测试连通性
  • 方式二:配置自定义资源组,通过内网进行数据同步。
    注意 您需要购买DataWorks专业版及以上版本,才可以使用该方式。
    1. 准备一台和MongoDB同区域、同网络的ECS作为调度资源,详情请参见新增自定义数据集成资源组
    2. 将这台ECS的IP加入MongoDB的白名单或者安全组。
    3. 数据源测试连通时直接确定保存(不支持测试连通性)。
    4. 修改资源组为自定义调度资源,测试运行。

多线程执行DataWorks节点任务时数据乱序,该如何处理?

MaxCompute表是无序读取的,如果您未进行自定义设置,查询结果也是无序的。

MaxCompute同步数据是无序存储的。如果您对数据的顺序有要求,请在数据同步成功后,对数据进行排序。例如,在SQL语句中,需要添加order by xx limit n对数据进行排序。

导出MaxCompute数据至AnalyticDB for MySQL失败,该如何处理?

您需要添加AnalyticDB for MySQL账号至DataWorks工作空间,以获取数据同步的权限。

使用公共资源组运行AnalyticDB for MySQL任务失败,该如何处理?

您需要开通独享资源组并连通VPC网络,再运行AnalyticDB for MySQL任务。详情请参见数据源测试连通性

实时同步是否支持在界面运行?

实时同步不支持在界面直接运行,您需要提交并发布实时同步节点后,进入生产环境运行该节点。详情请参见创建、编辑、提交和运维实时同步节点

在VPC环境下使用独享资源组无法连通实时同步数据源,该如何处理?

  1. 确认数据源和独享资源在同VPC、同可用区和同交换机下。
  2. 确认添加独享资源组EIP地址、独享资源组绑定的专有网络(或交换机)网段至数据库的白名单和安全组内。详情请参见独享资源组

数据同步时连接MySQL报错,该如何处理?

数据同步时,出现报错Unknown system variable 'query_cache_size' - java.sql.SQLException: Unknown system variable 'query_cache_size'的原因是DataWorks数据集成不支持MySQL8.0版本。

如果您使用的是MySQL8.0版本,请新增自定义资源组,详情请参见新增自定义数据集成资源组