PostgreSQL:使用SQL管理数据中心

在数据中心的元数据中包含了数据作者和单位信息(部分元数据),可以采用如下方法将其分解处理。

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就是将信息补充到原来的数据库中。


已发布

分类

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注