前提条件
已拥有数据集成角色权限
完成来源数据源以及目标源源数据源的接入工作。
完成对来源数据源以及目标数据源的元数据采集。
使用限制
来源数据源以及目标数据源完成授权。
来源数据表以及目标数据表完成授权。
来源数据表以及目标数据表完成模型创建。
使用说明
离线数据集成任务采用引导式配置方式,一共分为以下6个步骤:
新建离线数据集成任务
定义来源端与目标端
配置资源队列
字段映射
数据预处理与数据过滤
调度信息配置
配置过程
第一步:新建离线数据集成任务
进入到离线数据集成-结构化数据集成目录,选择架构目录,进行“新建任务”的操作,填写任务的中文名、英文名信息,点击“确定”。
第二步:定义来源端与目标端
在新增任务页面中,源与目标配置中,来源配置中左侧为source端,右侧为sink端。左侧source端选择Mysql,选择相应数据源、数据库、数据表信息;右侧sink端选择Hive,选择相应的目标数据源、目标模型,压缩格式。
第三步:配置资源队列
资源配置中选择对应的yarn资源、生产队列、测试队列信息,点击“下一步”,进入到字段映射配置中。
资源队列详情介绍详见运维中心章节。
第四步:字段映射
在字段映射配置中,数据源会获取到相应所填写的表的字段信息,你可以通过3种方式进行对应字段关系的设置:
a.手动选择下拉框将对应字段进行匹配;
b.同名映射:当数据源中的字段与目标数据源字段有相同名称时,可以通过该方式直接进行映射;
c.同行映射:当数据源中的字段数量大于目标数据源中字段的数量时,可以通过该种方式直接进行映射关系对应。
确认数据源与目标数据源字段映射关系无误后,点击“下一步”进入到数据处理中。
第五步:数据预处理与数据过滤
在数据处理中,可以对数据进行以下的操作:
a.若对数据进行直接传输,从source端复制传输到sink端,不进行任何数据的加工,则可以直接点击“保存”即可;
b.若要对数据进行传输的数据进行处理,则可以在字段处理中选择相应的函数,对传输中的数据进行处理;(如:source端的字段类型为int,目标端为string,则可以使用CHAR()函数,将source端的字段类型转换为string类型再传入到sink端中)
c.若要对数据进行筛选的操作,则可以添加过滤规则来对数据传输过程中进行筛选。(如:将source端中的id大于5的数据全部传输到sink端中,则可以设置源字段id,类型为数字,过滤类型为小于,阈值为5,设置完成后,点“保存”)
第六步:调度信息配置
在任务页面右侧悬浮球中,可以进行调度配置。
调度配置分为以下几个部分:
基本信息
任务名称:默认与任务英文名保持一致,不可更改。
优先级:分为极高、高、中、极低等5个优先级,可根据实际情况配置,默认为中。
运维负责人:可指定该任务的运维负责人。
调度信息
实例化规则:分为1:1及1:N两种情况:
1:1:指一个任务生成1个运行实例。
1:N:指一个任务生成N个运行实例。
生效时间:指当前任务开始生效的时间,默认时间为当天00:00。
失效时间:指该周期任务执行到什么时间失效,默认为2999-12-31.
执行周期:指该周期任务的周期类型,分为月、日、小时、分钟,本案例中配置为日周期任务。
执行时间:指任务实例开始运行的具体时间。根据不同的执行周期,具有不同的含义及填写内容:
若执行周期为月:执行时间配置项为每月X号X时X分,如每月1日12时00分运行实例。
若执行周期为日:执行时间配置项为每日X时X分,如每日00时00分运行实例。
若执行周期为小时:执行时间配置项为每小时X分起,如每小时5分起运行实例,注意此处的范围为0~59.
若执行周期为分钟:执行时间配置项为每分钟X秒起,如每分钟5秒起运行实例,注意此处的范围为0~59.
crontab表达式:由上述执行周期与执行时间配置组合出的表达式,不可编辑。
最近执行时间:指预计该任务上线后,各实例运行的时间,不可编辑。
任务信息
标识该任务属于何种业务,每个业务模块默认,不可编辑,用户无需关心此项配置。
运行信息
运行约束:用于定义同一任务中不同实例的依赖情况,默认为并行启动。
自依赖:当前的周期实例的执行,必须要等到上个周期实例执行成功后才能开始执行。
并行启动:任务的多个周期实例,可以一起运行,相互之间没有依赖关系。
串行启动:当前的周期实例的执行,只需要上一个周期实例是运行结束状态即可(不管成功与否)。
实例生成:用于定义任务实例的生成时间,默认为次日生成。
当天生成:任务上线后,实例当天就开始生成。
次日生成:任务上线后,实例第二天才开始生成。
调度集群组:需选择用于调度的调度集群组,默认为default集群组。若有其他集群组也可选择。
业务时间偏移:对于数据的账期偏移量。偏移量的值为0至负数。如当前日期为2025年1月15日,以下对一些数值进行说明:
业务时间偏移填写0:表示该任务采集的是数据日期为当日的数据,即任务实例运行时,采集数据时间为2025年1月15日的数据。
业务时间偏移填写-1:表示该任务采集的是数据日期为前一日的数据,即任务实例运行时,采集数据时间为2025年1月14日的数据。
业务时间偏移填写-2:表示该任务采集的是数据日期为前两日的数据,即任务实例运行时,采集数据时间为2025年1月13日的数据。
依此类推。
此处需注意,增量同步中,若增量条件也配置了时间相关的变量,此时增量条件中的时间变量受到业务偏移量的影响。
以本案例为例,增量条件中配置了时间变量${batchNo?calDate(0,'D')},若业务偏移填写为-1,则增量条件中表示为采集前一天的数据。若业务偏移填写为0,则增量条件中表示为采集当天的数据。
重试次数:指当任务实例失败后,需要自动重试的次数。
重试时间间隔:指当任务实例失败后,每次自动重试的时间间隔。
任务超时时长:可设置定义任务超时的时长。默认为7200秒。
任务依赖信息
依赖列表:指不同任务间的依赖关系配置列表。
调度参数信息
程序参数:用于扩展额外的配置项,以k-v的形式进行录入,如有特殊情况需要可以添加配置项,无额外需求可不配置此项。
附录:支持的内置函数
函数名 | 中文名 | 函数规范 | 函数说明 |
| ASCII | 获取ASCII编码 | ASCII('Hi') | 返回字符串中第一个字符的ASCII值。此方法返回一个整数。 |
| BIT_LENGTH | 位长度 | BIT_LENGTH(NAME) | 返回二进制字符串中的位数。该方法返回一个长整型 |
| CHAR_LENGTH | 字符长度 | CHAR_LENGTH(NAME) | 这个方法返回一个字符串中字符的数量,返回类型为 long。 |
| LENGTH | 文本长度 | LENGTH(NAME) | 这个方法返回一个字符串中字符的数量,返回类型为 long。 |
| OCTET_LENGTH | 二进制字符长度 | OCTET_LENGTH(NAME) | 返回二进制字符串中字节的数量。此方法返回一个 long 类型的值。 |
| CHAR | ASCII转字符 | CHAR(65) | 返回表示ASCII值的字符。该方法返回一个字符串。 |
| CHR | ASCII编码转字符 | CHR(65) | 返回表示ASCII值的字符。该方法返回一个字符串。 |
| CONCAT | 连接字符串 | CONCAT(NAME, '_') | 组合字符串。与运算符 || 不同,NULL 参数会被忽略,不会导致结果变为 NULL。如果所有参数都是 NULL,则结果是一个空字符串。该方法返回一个字符串。 |
| CONCAT_WS | 拼接字符串 | CONCAT_WS(',', NAME, '') | 使用分隔符组合字符串。如果分隔符为 NULL,则会被视为空字符串。其他 NULL 参数会被忽略。剩余的 非NULL 参数(如果有)将用指定的分隔符连接起来。如果没有剩余参数,则结果是一个空字符串。该方法返回一个字符串。 |
| HEXTORAW | 十六进制转原始字符串 | HEXTORAW(DATA) | 将字符串的十六进制表示转换为字符串。每个字符串字符使用4个十六进制字符。 |
| RAWTOHEX | 原始字符串转十六进制 | RAWTOHEX(DATA) | 将字符串或字节转换为十六进制表示。每个字符串字符使用4个十六进制字符。该方法返回一个字符串。 |
| INSERT | 指定位置插入字符串 | INSERT(NAME, 1, 1, ' ') | 在原始字符串的指定起始位置插入额外的字符串。长度参数指定在原始字符串的起始位置删除的字符数。该方法返回一个字符串。 |
| LOWER | 转小写 | LOWER(NAME) | 将字符串转换为小写形式。 |
| LCASE | 转小写(同LOWER) | LCASE(NAME) | 将字符串转换为小写形式。 |
| UPPER | 转大写 | UPPER(NAME) | 将字符串转换为大写形式。 |
| UCASE | 转大写(同UPPER) | UCASE(NAME) | 将字符串转换为大写形式。 |
| LEFT | 左截取 | LEFT(NAME, 3) | 返回最左边的一定数量的字符。 |
| RIGHT | 右截取 | RIGHT(NAME, 3) | 返回最右边的一定数量的字符。 |
| LOCATE | 查找字符位置 | LOCATE('.', NAME) | 返回字符串中搜索字符串的位置。如果使用了起始位置参数,则忽略它之前的字符。如果位置参数是负数,则返回最右边的位置。如果未找到搜索字符串,则返回 0。请注意,即使参数不区分大小写,此函数也区分大小写。 |
| INSTR | 查询字符位置 | INSTR(NAME,'.') | 返回字符串中搜索字符串的位置。如果使用了起始位置参数,则忽略它之前的字符。如果位置参数是负数,则返回最右边的位置。如果未找到搜索字符串,则返回 0。请注意,即使参数不区分大小写,此函数也区分大小写。 |
| POSITION | 寻找字符位置 | POSITION(NAME,'.') | 返回字符串中搜索字符串的位置。如果使用了起始位置参数,则忽略它之前的字符。如果位置参数是负数,则返回最右边的位置。如果未找到搜索字符串,则返回 0。请注意,即使参数不区分大小写,此函数也区分大小写。 |
| LPAD | 左限制填充 | LPAD(AMOUNT, 10, '*') | 将字符串左侧填充到指定的长度。如果长度比字符串短,则字符串将在末尾被截断。如果未设置填充字符串,则使用空格填充。 |
| RPAD | 右限制填充 | RPAD(TEXT, 10, '-') | 将字符串右侧填充到指定的长度。如果长度比字符串短,则字符串将被截断。如果未设置填充字符串,则使用空格填充。 |
| LTRIM | 去除左空格 | LTRIM(NAME) | 移除字符串中所有前导空格或其他指定的字符。此函数已被弃用,请使用 TRIM 替代。 |
| RTRIM | 去除右空格 | RTRIM(NAME) | 移除字符串中所有尾随空格或其他指定的字符。此函数已被弃用,请使用 TRIM 替代。 |
| TRIM | 去除空格 | TRIM(NAME) | 移除字符串中所有前后导空格或其他指定的字符。 |
| REGEXP_REPLACE | 正则替换字符串 | REGEXP_REPLACE('Hello World', ' +', ' ') | 替换与正则表达式匹配的每个子字符串。详情请参阅 Java String.replaceAll() 方法。如果任何参数为 null(除了可选的 flagsString 参数),则结果为 null。 |
| REGEXP_LIKE | 正则匹配字符串 | REGEXP_LIKE('Hello World', '[A-Z ]*', 'i') | 将字符串与正则表达式匹配。详情请参阅 Java Matcher.find() 方法。如果任何参数为 null(除了可选的 flagsString 参数),则结果为 null。 |
| REGEXP_SUBSTR | 正则子串 | REGEXP_SUBSTR('2020-10-01', '\d{4}') | 将字符串与正则表达式匹配,并返回匹配的子字符串。 |
| REPEAT | 重复字符串 | REPEAT(NAME, 10) | 返回重复字符串 |
| REPLACE | 替换字符串 | REPLACE(NAME, ' ') | 在文本中替换所有出现的搜索字符串为另一个字符串。如果没有指定替换字符串,则从原始字符串中移除搜索字符串。如果任何参数为 null,则结果为 null。 |
| SOUNDEX | 声音编码转换 | SOUNDEX(NAME) | 表示字符串发音。此方法返回一个字符串,如果参数为 null,则返回 null。 |
| SPACE | 空格字符串 | SPACE(80) | 返回由一定数量的空格组成的字符串。 |
| SUBSTRING | 截取子串 | SUBSTRING('[Hello]', 2) | 返回从指定位置开始的字符串的子串。 |
| SUBSTR | 截取字符串 | SUBSTR('[Hello]', 2) | 返回从指定位置开始的字符串的子串。 |
| TO_CHAR | 转换为指定格式化字符串 | TO_CHAR(SYS_TIME, 'yyyy-MM-dd HH:mm:ss') | Oracle 兼容的 TO_CHAR 函数可用于格式化时间戳、数字或文本。 |
| TRANSLATE | 转换替换 | TRANSLATE('Hello world', 'eo', 'EO') | Oracle 兼容的 TRANSLATE 函数用于将字符串中的一系列字符替换为另一组字符。 |
| ABS | 绝对值 | ABS(I) | 返回指定值的绝对值。返回的值与参数的数据类型相同。注意,TINYINT、SMALLINT、INT 和 BIGINT 数据类型无法表示它们的最小负值的绝对值,这可能导致异常。 |
| ACOS | 反余弦 | ACOS(D) | 计算反余弦值。该方法返回一个双精度浮点数。 |
| ASIN | 反正弦 | ASIN(D) | 计算反正弦值。该方法返回一个双精度浮点数。 |
| ATAN | 反正切 | ATAN(D) | 计算反正切值。该方法返回一个双精度浮点数。 |
| COS | 余弦 | COS(ANGLE) | 计算三角余弦值。该方法返回一个双精度浮点数。 |
| COSH | 双曲余弦 | COSH(X) | 计算双曲余弦值。该方法返回一个双精度浮点数。 |
| COT | 余切 | COT(ANGLE) | 计算三角余切值(1/TAN(角度))。该方法返回一个双精度浮点数。 |
| SIN | 正弦 | SIN(ANGLE) | 计算三角正弦值。该方法返回一个双精度浮点数。 |
| SINH | 双曲正弦 | SINH(ANGLE) | 计算双曲正弦值。该方法返回一个双精度浮点数。 |
| TAN | 正切 | TAN(ANGLE) | 计算三角正切值。该方法返回一个双精度浮点数。 |
| TANH | 双曲正切 | TANH(X) | 计算双曲正切值。该方法返回一个双精度浮点数。 |
| MOD | 模运算 | MOD(A, B) | 取模运算表达式。结果与除数的类型相同。结果与被除数的符号相同,或者等于 0。 |
| CEIL | 向上取整 | CEIL(A) | 返回大于或等于参数的最小整数值。 |
| CEILING | 向上取整函数 | CEILING(A) | 返回大于或等于参数的最小整数值。 |
| EXP | 指数 | EXP(A) | 计算参数的指数值,该方法返回一个双精度浮点数。 |
| FLOOR | 地板函数 | FLOOR(A) | 返回小于或等于参数的最大整数值。 |
| LN | 自然对数 | LN(A) | 计算自然对数(以 e 为底)。参数必须是一个正数值。 |
| LOG | 对数 | LOG(2, A) | 计算以指定底数的对数。底数和参数必须是正数值。 |
| LOG10 | 以10为底的对数 | LOG10(A) | 计算以 10 为底的对数。参数必须是一个正数值。 |
| RADIANS | 弧度 | RADIANS(A) | 将角度转换为弧度。 |
| SQRT | 平方根 | SQRT(A) | 计算参数的平方根,返回一个双精度浮点数。 |
| PI | 圆周率 | PI() | 返回圆周率常数 PI。 |
| POWER | 幂运算 | POWER(A, B) | 计算底数的幂。返回一个双精度浮点数。 |
| RAND | 随机数 | RAND() | 生成一个介于 0 和 1 之间的伪随机数。如果带有参数调用,则将会给该会话的随机数生成器设定种子。 |
| RANDOM | 随机数字 | RANDOM() | 生成一个介于 0 和 1 之间的伪随机数。如果带有参数调用,则将会给该会话的随机数生成器设定种子。 |
| ROUND | 四舍五入 | ROUND(N, 2) | 将数值四舍五入到指定的小数位数,只支持Double类型。 |
| SIGN | 数值符号 | SIGN(N) | 返回数值的符号。如果值小于 0,则返回 -1;如果值为 0,则返回 0;如果值大于 0,则返回 1。 |
| TRUNC | 截断小数 | TRUNC(N, 2) | 将数值截断到指定的小数位数。 |
| TRUNCATE | 截断小数部分 | TRUNCATE(N, 2) | 将数值截断到指定的小数位数。 |
| CURRENT_DATE | 当前日期 | CURRENT_DATE() | 返回当前日期。这些函数在事务(默认)或命令内部返回相同的值,具体取决于数据库模式。 |
| CURRENT_TIME | 当前时间 | CURRENT_TIME() | 返回带有系统时区的当前时间。实际可用的最大精度取决于操作系统和 JVM,可以是 3(毫秒)或更高。在 Java 9 之前不支持更高的精度。 |
| CURRENT_TIMESTAMP | 当前时间戳 | CURRENT_TIMESTAMP() | 返回带有系统时区的当前时间戳。实际可用的最大精度取决于操作系统和 JVM,可以是 3(毫秒)或更高。在 Java 9 之前不支持更高的精度。 |
| NOW | 当前系统时间 | NOW() | 返回带有系统时区的当前时间戳。实际可用的最大精度取决于操作系统和 JVM,可以是 3(毫秒)或更高。在 Java 9 之前不支持更高的精度。 |
| DATEADD | 日期加法 | DATEADD(CREATED, 1, 'MONTH') | 将单位添加到日期时间值中。datetimeFieldString 表示单位。使用负值来减去单位。当操作毫秒、微秒或纳秒时,addIntLong 可能是一个 long 值,否则其范围被限制为 int。 |
| TIMESTAMPADD | 时间戳加法 | TIMESTAMPADD(CREATED, 1, 'MONTH') | 将单位添加到日期时间值中。datetimeFieldString 表示单位。使用负值来减去单位。当操作毫秒、微秒或纳秒时,addIntLong 可能是一个 long 值,否则其范围被限制为 int。 |
| DATEDIFF | 日期差 | DATEDIFF(T1.CREATED, T2.CREATED, 'MONTH') | 返回两个日期时间值之间跨越的单位边界数。此方法返回一个 long 值。datetimeField 表示单位。 |
| DATE_TRUNC | 日期截断 | DATE_TRUNC(CREATED, 'DAY') | 将指定的日期时间值截断到指定的字段。 |
| DAYNAME | 星期名称 | DAYNAME(CREATED) | 返回星期几的名称(英文)。 |
| DAY_OF_MONTH | 月份中的天 | DAY_OF_MONTH(CREATED) | 返回月份中的日期(1-31)。 |
| DAY_OF_WEEK | 周中的天 | DAY_OF_WEEK(CREATED) | 返回星期几的数值(1-7)(星期一至星期日),根据本地化设置。 |
| DAY_OF_YEAR | 年份中的天 | DAY_OF_YEAR(CREATED) | 返回一年中的日期(1-366)。 |
| EXTRACT | 提取时间 | EXTRACT(SECOND FROM CURRENT_TIMESTAMP) | 从日期/时间值中返回特定时间单位的值。该方法对于 EPOCH 字段返回一个数值,对于其他字段返回一个整数。 |
| FORMATDATETIME | 格式化日期时间 | FORMATDATETIME(CREATED, 'yyyy-MM-dd HH:mm:ss') | 将日期、时间或时间戳格式化为字符串。最重要的格式字符包括:y(年)、M(月)、d(日)、H(时)、m(分)、s(秒)。 |
| HOUR | 小时 | HOUR(CREATED) | 从日期/时间值中返回小时(0-23)。 |
| MINUTE | 分钟 | MINUTE(CREATED) | 从日期/时间值中返回分钟(0-59)。该函数已经被弃用,请使用 EXTRACT 替代。 |
| MONTH | 月份 | MONTH(CREATED) | 从日期/时间值中返回月份(1-12)。该函数已经被弃用,请使用 EXTRACT 替代。 |
| MONTHNAME | 月份名称 | MONTHNAME(CREATED) | 返回月份的名称(英文)。 |
| PARSEDATETIME | 解析日期时间 | PARSEDATETIME('2021-04-08 13:34:45','yyyy-MM-dd HH:mm:ss') | 解析一个字符串并返回一个 TIMESTAMP WITH TIME ZONE 值。 |
| TO_DATE | 转换为日期 | TO_DATE('2021-04-08 13:34:45','yyyy-MM-dd HH:mm:ss') | 解析一个字符串并返回一个 TIMESTAMP WITH TIME ZONE 值。 |
| QUARTER | 季度 | QUARTER(CREATED) | 从日期/时间值中返回季度(1-4)。 |
| SECOND | 秒 | SECOND(CREATED) | 从日期/时间值中返回秒数(0-59)。该函数已经被弃用,请使用 EXTRACT 替代。 |
| WEEK | 周 | WEEK(CREATED) | 返回日期/时间值中的周数(1-53)。该函数使用当前系统的区域设置。 |
| YEAR | 年 | YEAR(CREATED) | 返回日期/时间值中的年份。 |
| FROM_UNIXTIME | 时间戳转时间 | CALL FROM_UNIXTIME(1672502400, 'yyyy-MM-dd HH:mm:ss') | 将从 UNIX 纪元(1970-01-01 00:00:00 UTC)开始的秒数转换为表示该时刻时间戳的字符串。 |
| CAST | 强转换类型 | CAST(NAME AS INT) | 将一个值强转为另一个数据类型,如不支持会报错。支持的数据类型有:STRING | VARCHAR,INT | INTEGER,LONG | BIGINT,BYTE,FLOAT,DOUBLE,DECIMAL(p,s),TIMESTAMP,DATE,TIME。 |
| COALESCE | 返回第一个非空值 | COALESCE(A, B, C) | 返回第一个非空值。 |
| IFNULL | 返回两者的第一个非空值 | IFNULL(A, B) | 返回第一个非空值。 |
| NULLIF | 相等则为空 | NULLIF(A, B) | 如果 'a' 等于 'b',则返回 NULL,否则返回 'a'。 |
| MASK_MIDDLE | 掩码屏蔽 | MASK_MIDDLE(fieldName, 1, 4, '*') | 对fieldName一定长度内进行屏蔽 |
| ENCRYPT | 加密 | ENCRYPT(NAME, 'AES' ) | 将输入字段进行加密,字段名称,字段加密方式支支持ASE |
| DECRYPT | 解密 | DECRYPT(NAME, 'AES' ) | 将输入字段进行解密,字段名称,,字段解密方式支支持ASE |