在数据中心的元数据中包含了数据作者和单位信息(部分元数据),可以采用如下方法将其分解处理。
1. 测试查看
select (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[1] as name_zh, (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[3] as org_zh, (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[6] as name_en, (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[7] as org_en, (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.')), regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g') from metadata where uuid in (select uuid from datasource where sourceid=2) and uuid in (select uuid from datadoi)
查看后发现部分元数据中存在格式不统一的错误,需要修改。
此SQL已基本满足要求,但要将数据保存到datadoi,还需要进一步优化:
select uuid,string_to_array(replace((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[1],', ',','),',') as name_zh, string_to_array(replace(trim((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[3]),'; ',';'),';') as org_zh, string_to_array(replace((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[6],', ',','),',') as name_en, string_to_array(replace(trim((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[7]),'; ',';'),';') as org_en, (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.')), regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g') from metadata where uuid in (select uuid from datasource where sourceid=2) and uuid in (select uuid from datadoi)
这样就可以将作者姓名、单位等信息转换为数组,以保存到数据库。
2. 批量更新现有DOI数据
update datadoi set authors=md.name_zh,organization=md.org_zh,author_en=md.name_en,organization_en=md.org_en, publisher='黑河计划数据管理中心',publisher_en='Cold and Arid Regions Science Data Center at Lanzhou' from ( select uuid,string_to_array(replace((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[1],', ',','),',') as name_zh, string_to_array(replace(trim((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[3]),'; ',';'),';') as org_zh, string_to_array(replace((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[6],', ',','),',') as name_en, string_to_array(replace(trim((regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.'))[7]),'; ',';'),';') as org_en, (regexp_matches(regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g'), '^(.*?)\.(.*?)\.(.*?)\.(.*?)\.(.*?)\[(.*?)\..WATER.*\.(.*?)\.')), regexp_replace(citation,'.(Jan\.|Feb\.|Mar\.|Apr\.|May\.|Jun\.|Jul\.|Aug\.|Sep\.|Oct\.|Nov\.|Dec\.)','','g') from metadata where uuid in (select uuid from datasource where sourceid=2) and uuid in (select uuid from datadoi) ) as md where datadoi.uuid=md.uuid and datadoi.publisher is null
WATER专题的数据DOI在以前已经注册过,但信息不全,需要补充,因此这个SQL就是将信息补充到原来的数据库中。
发表回复