|
· 当目标数据库为Hive时,受限于Hive JDBC的底层实现,“加载至表”组件加载效率不高,部分数据类型不兼容。建议使用NEW ETL任务类型中的“表加载”组件,通过其提供的Hive批量加载方案进行数据导入。 · 当目标数据库为MySQL时,输入数据中包含有emoji表情符号之类的不在基本多平面Unicode字符之中的字符,会导致MySQL utf8无法存储,加载失败,报错日志中出现java.sql.SQLException:incorrect string value。此时可以更改MySQL数据库的字符集为utf8mb4,更改完成后重新运行该任务。 · 当目标数据库为PostgreSQL时,输入数据中包含有"UTF8":0x00字符,会加载失败,报错日志中出现invalid byte sequence for encoding "UTF8":0x00。PostgreSQL数据库不允许使用该字符,需要通过转换组件去除这些0x00字符。 · 当目标数据库为SQLServer时,datatime类型的值会根据数据库内部机制进行自动调整,导致与传入的datatime的值有所差异。所有的datetime类型的值在显示、处理时自动调整到几个特殊的毫秒个位值:0、3、7,比如:(9、0、1)会引起进0调整;(5、6、7、8)引起7调整;(2、3、4)引起3调整。 |
加载至表组件可以将数据加载到数据库表中。
双击画布中的加载至表组件,弹出加载至数据表窗口。
输入步骤名称,名称要求为非空,2到50个字符。
选择数据源连接,并配置目标模式、目标表、提交记录数量参数项。
根据需要选择是否清空表、是否忽略插入错误、是否指定数据库字段。
单击<确定>按钮完成配置。
单击<SQL>按钮,弹出SQL编辑框,用户可在编辑框中自定义SQL语句创建或更新表结构。默认输入库中没有的表名时,会自动生成SQL创建语句。注意:当勾选了“指定数据库字段”时,使用该功能需要先获取字段。
如果正在运行转换或存在多个步骤副本时,请不要勾选清空表选项,例如在作业中,清空表应在转换开始之前。
当目标数据库的表区分字段名称大小时(如DB2数据库),建议使用“输入字段映射”配置按钮将流中源字段映射到目标表中的字段,否则可能会因为字段不匹配而出现插入失败的情况。
当目标数据库为Oracle时,同时向多个varchar2(4000)字段加载数据可能会产生报错,是因为在使用UTF-8或其他能存储中文的字符集时,Oracle存储一个字符可能需要2个或3个字节的存储空间。虽然表字段被定义为varchar2(4000) 类型,但是该字段的data_length为4000的2或3倍长,这种情况下Oracle会把data_length长度超过4000的字节当做LONG型处理,当表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段,所以会产生报错,建议减小字段长度定义来避免此问题。
Navicat对于SQLServer、MySQL等不同数据库的部分数据类型值的呈现方式有所不同,因为此工具对应不同数据库的适配方式不同。比如:Navicat中显示MySQL“3.3999999521443642e38”与SQLServer“3.4E38”实际值是一样的,都是“339999995214436420000000000000000000000”。
从SQLServer抽取数据并加载至MySQL,bit类型会被映射为MySQL的tinyint(1)类型。
SQLServer数据库中的bit即位数据类型,取值0或1,经常用于逻辑值判断true(1)或false(0),输入非0值时系统将其替换为1。
MySQL中功能上最接近SQLServer中bit类型的是tinyint(1),且MySQL驱动中预留了一个名为tinyInt1isBit的属性,缺省值为true,表示数据库中出现的长度为1的tinyint类型当做bit用。所以,MySQL本身没有bit类型,且官方提供的JDBC驱动中默认会把tinyint(1)当做bit用。
PostgreSQL的numeric能存储巨大数据量的数值,当定义字段时未显式指定precision、scale,仅使用numeric时,可能由于字段过长,无法在其他数据库找到数值范围一致的numeric、decimal或者number类型,导致表加载报错。此时推荐加载至Oracle中,使用number类型采用缺省precision、scale的方式加载数据,该方式在Oracle中是可存储额数值范围最大的。
在加载数据时如果需要设置内容或过程,可以配置以下参数:
并发度:指定当前步骤同时运行的副本数,可设置1~100的整数。若并发度大于1,在任务启动时,先将原始步骤拷贝生成多个副本,然后并行处理数据。若抽取的字段包含Blob、Clob、XMLtype、text、long var binary、image等大字段类型时,建议并行度配置为1,否则可能导致执行器内存溢出,任务执行失败。
数据库连接:必填项,单击进入数据库连接。
目标模式:写入数据的表的架构名称,对于数据源来说,允许表名周期性被使用。
目标表:必填项,写入数据的表的名称。
用户可通过<选择表>按钮选择指定数据库下已存在的表。
用户可通过在“目标表”输入框输入表名(数据库中没有该表)并在下拉框中选中该表名,然后单击<SQL>按钮,可在指定数据库下创建目标表。
提交记录数量:使用事务在数据库表中插入行。如果大于0,则每n行提交事务,否则,不使用事务(不是所有数据库平台都支持事务)。
清空表:在第一行被插入表之前,将表数据清空。部分数据库的某些配置,可能会导致清空表失败(任务运行时会出现错误提示),此时用户可手动清空表,然后取消勾选该配置项。例如SQL Server开启了主从同步,此时清空表操作会失败,需要用户手动在数据库中清空对应表。
忽略插入错误:忽略插入错误,如违反主键。
使用批量插入时,会跳过所有错误数据。
不使用批量插入方式时,出现插入错误时,最多可显示20条告警信息,通过告警信息确认相应数据插入失败的原因。
指定数据库字段:勾选该配置项后,配置“数据库字段”页签下内容时,可通过<获取字段>按钮选择需要的字段进行加载;如果不指定,则配置“数据库字段”页签下内容时,默认情况下所有字段都会被考虑在内。
表分区数据:这里的分区不是常规意义上的分区(partition)的概念,而是一种伪分区,需要用户提前在数据库中建好符合规则的表。数据不会插入到用户选择的“目标表”中,而是会插入“目标表_date”表中。
分区字段:该字段需要选择一个Date类型或Timestamp类型数据,该字段值用于被解析生成对应的目标表名。
每个月分区数据:若选择按月分区,则解析每条数据中分区字段中的数值,按照格式“YYYYMM”获得字符串“yyyymm”,该条数据被插入“目标表_yyyymm”表中。
每天分区数据:若选择按天分区,则解析每条数据中分区字段中的数值,按照格式“YYYYMMDD”获得字符串“yyyymmdd”,该条数据被插入“目标表_yyyymmdd”表中。
使用批量插入:此功能将插入语句组合以限制到数据库的往返。这是最快的选项,默认情况下启用。此选项存在限制因素,取决于所使用的数据库类型和进一步的步骤选项。仅当选中此复选框时才使用批处理模式。具体为:
提交记录数量大于0。
数据库类型支持批量更新(具体请参阅所选数据库功能列表 ,检查是否支持批量更新)。
表名定义在一个字段里:可以拆分数据到一个或者多个表里,目标表名可以使用指定的字段来定义。例如,如果想存储顾客性别数据,这些数据可能会存储到表M和表F里面(female女性和male男性表)。
包含表名的字段:当“表名定义在一个字段里”启用,输入字段名称。
存储表名字段:如果要存储表名,启用此选项。
返回自动产生的关键字:被插入数据的表中的主键列可自动生成,则勾选此项后数据库中自动生成的数据会加入后续输出端的数据流中。
自动产生的关键字字段名:指定从数据库中取出的数值在后续数据流中的名称。
表字段:插入表的字段名称。
流字段:输出字段名称。
获取字段:单击<获取字段>按钮,进入获取字段页面,获取此步骤需要处理的字段。