更新NCBI中taxdmp數據

NCBI中的taxonomy信息可以通過FTP進行批量下載,獲取的txt文檔可以導入DB中,並用sql語言的遞歸查詢工具篩選出所有蜘蛛目的taxa,並單獨存儲成SIG_TAXDMP_NAMES和SIG_TAXDMP_NODES兩張表。以供調用。具體做法是:

1.從NCBI的FTP中下載最新的taxdmp.zip文件,其中/pub/taxonomy目錄下有此文件。其中names.dmp和nodes.dmp分別有taxa和taxa之間從屬關係的信息。

2.將names.dmp和nodes.dmp改爲txt文件,然後導入DB。注意:由於這兩個表有上百萬條記錄,不可能每次都重新完全導入。幸運的是ncbi的taxid是順序編碼,因此記下上次的最大taxid,然後只本次文件中之後的新taxid導入即可了。導入nodes.txt時注意,是否所有列都對齊了。

3.使用ORACLE遞歸查詢功能,將蜘蛛目6893下所有的tax_id篩選出來存在SIG_TAXDMP_NAMES和SIG_TAXDMP_NODES中。注意:ftp中dmp文件導入時,會在每一字段的前或後加上空格,即十六進制字符0x09的文本字符,在查詢時需要用replace函數將其全部去掉,否則遞歸查詢會出錯。在ncbi_node中,tax_id列後面有一個0x09,parent_tax_id前後都有0x09. 使用遞歸語句查詢所有蜘蛛目taxa並生成mv的代碼是

create materialized view SIG2_TAXDMP_NODES as
SELECT
replace(tax_id,chr(to_number('09')),'') as tax_id,
replace(parent_tax_id,chr(to_number('09')),'') as parent_tax_id,
replace(rank,chr(to_number('09')),'') as rank,
replace(embl_code,chr(to_number('09')),'') as embl_code,
replace(division_id,chr(to_number('09')),'') as division_id,
replace(inherited_div_flag,chr(to_number('09')),'') as inherited_div_flag,
replace(genetic_code_id,chr(to_number('09')),'') as genetic_code_id,
replace(inherited_gc_flag,chr(to_number('09')),'') as inherited_gc_flag,
replace(mitochondrial_genetic_code_id,chr(to_number('09')),'') as mitochondrial_genetic_code_id,
replace(inherited_mgc_flag_from_parent,chr(to_number('09')),'') as inherited_mgc_flag_from_parent,
replace(genbank_hidden_flag_lineage,chr(to_number('09')),'') as genbank_hidden_flag_lineage,
replace(hidden_subtree_root_flag,chr(to_number('09')),'') as hidden_subtree_root_flag,
replace(comments,chr(to_number('09')),'') as comments
FROM NCBI_NODES
CONNECT BY replace(parent_tax_id,chr(to_number('09')),'') = PRIOR replace(tax_id,chr(to_number('09')),'')  -- 找出所有PARENT_ID等於當前記錄DEPT_ID的記錄。
START WITH replace(tax_id,chr(to_number('09')),'') = '6893'     


create materialized view SIG2_TAXDMP_NAMES as
SELECT
(replace(ncbi_taxdmp_names.tax_id,chr(to_number('09')),'')
||'-'||
replace(ncbi_taxdmp_names.name_txt,chr(to_number('09')),'')
||' '||'@'||
replace(ncbi_taxdmp_names.name_class,chr(to_number('09')),''))
 as names,
replace(ncbi_taxdmp_names.tax_id,chr(to_number('09')),'') as tax_id,
replace(ncbi_taxdmp_names.name_txt,chr(to_number('09')),'') as name_txt,
replace(ncbi_taxdmp_names.unique_name,chr(to_number('09')),'') as unique_name,
replace(ncbi_taxdmp_names.name_class,chr(to_number('09')),'') as name_class,
replace(ncbi_taxdmp_names.note,chr(to_number('09')),'') as note
FROM NCBI_TAXDMP_NAMES
inner join SIG2_TAXDMP_NODES
on
replace(ncbi_taxdmp_names.tax_id,chr(to_number('09')),'') = replace(sig2_taxdmp_nodes.tax_id,chr(to_number('09')),'')  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章