数据采集、数据处理积累

1、数据去重

Oracle去重脚本(通过rowid):select * from person t where t.rowid=(select max(rowid) from person t1 where t1.id_card_no = t.id_card_no)
SqlServer去重脚本(通过一张表的自查询比较):select * from person t where not exists (select 1 from person t1 where t1.id_card_no =t.id_card_no and t1.patient_id

注意:id_card_no为person表内身份证号码属性

2、数据更新

方法一:

merge into person_info a
using ehr.ph_person_info b
on (a.person_info_id = b.person_info_id)
when matched then
  update set a.photo_url = b.photo_url ;
commit;

方法二:
UPDATE person_info a
   SET a.photo_url =
       (SELECT b.photo_url
          FROM ehr.ph_person_info b
         WHERE a.person_info_id = b.person_info_id
           AND b.photo_url IS NOT NULL)
 WHERE EXISTS (SELECT b.photo_url
          FROM ehr.ph_person_info b
         WHERE a.person_info_id = b.person_info_id
           AND b.photo_url IS NOT NULL);

必须加上WHERE条件,如果不加上有两处影响1,a表有多少条记录就会执行多少条,影响效率;2,a表photo_url如果有值,b表的photo_url没值会被更新为空,使数据出现错误。

3、查看数据源中的数据是否存在重复

SELECT t.CBRID as PATIENT_ID
, t.CZYH as INPATIENT_FORM_NO
, t.IBH as DIAGNOSIS_ID ,
count(*)
FROM TBZYZDXX t where t.CZDLB=1
group by t.CBRID 
, t.CZYH 
, t.IBH 
having count(*)>1;

使用having语句。

4,使用case when then时是要注意,then的值要和目标表的类型一样,否则不成功

5、oracle恢复误删表
flashback table dim_organization to before drop;

6、使用left join的时候尽量不要使用(select *)

7、kettle抽取数据时表中一定要建立主键,否则效率太低(几十倍的效率)

8、kettle乱码解决 
打开spoon.bat,在if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m" 

后面加了"-Dfile.encoding=UTF-8",再重启即可解决乱码。

9、mysql   时间问题 0000-00-00
使用case when 判断语句

10、抽取数据时,如果联合主键为空  需要设置默认值

11、with的用法
with bb  as(select *  from dual),
cc as (select *  from dual) select * from bb left join cc on bb.id=cc.id

12、子查询返回多个值
用group by确保子查询没有重复数据

13、orcl中数据加减乘除   需要判断字段是否为空   用nvl(字段名,0)

14、ORA-01438: 值大于为此列指定的允许精度 修改字段长度

15、必填项为空  提示不能将null值插入到数据库
方法一  case when
方法二 decode(字段,条件,结果,条件,结果)

16、用kettle抽取MySQL数据到Oracle时,提示内存不足,执行下列语句扩大内存
show variables like '%max_allowed_packet%';   
set global max_allowed_packet= 1024*1024*50;

17、varchar2字段长度不够 需要修改为clob或者blob类型

需要先修改为long类型   再修改为clob类型

18、sqlserver、mysql、oracle获取系统时间
getdate()、SYSDATE() 、sysdate

19、sqlserver、mysql、oracle生成uuid
newId()、uuid()、sys_guid()

20、可以用这个 让索引可见、不可见 (起不起作用) 来分析走哪个索引好:

alter index INDEX_PH_ORGANIZATION5 invisible;
alter index INDEX_PH_ORGANIZATION5 visible; 

 

转载于:https://my.oschina.net/ciVa1Wi2bM/blog/1832266

你可能感兴趣的:(数据采集、数据处理积累)