Загрузка XML-файлов
В данной статье будет описан подход к загрузке xml-файлов в Greenplum. Была поставлена задача разработать хранилище данных в Greenplum и загружать данные фактов и справочников непосредственно из xml-файлов, так как данные предоставлялись в файлах формата xml.
CREATE OR REPLACE FUNCTION public.getxmldocument(p_filename varchar, charset varchar)
RETURNS xml
LANGUAGE sql
SECURITY DEFINER
VOLATILE
AS $$
SELECT
XMLPARSE(DOCUMENT convert_from(
pg_read_binary_file($1), $2));
$$
EXECUTE ON ANY;
<?xml version="1.0" encoding="UTF-8"?>
<root><success>1</success><type>warehouse</type><count>31</count>
<warehouses>
<warehouse>
<id>1</id>
<number/>
<name>Органик Нева, Лебедева 31</name>
</warehouse>
<warehouse>
<id>2</id>
<number/>
<name>Лебедева 31, карантин</name>
</warehouse>
…
<warehouse>
<id>24</id>
<number>1</number>
<name>НЕВАПРОМСНАБ</name>
</warehouse>
…
</warehouses></root>
INSERT INTO tempstore(
store_id,
"name",
store_number
)
select
cast(cast((xpath('//id/text()',wayp.pt))[1] as varchar) as int) as store_id,
cast((xpath('//name/text()',wayp.pt))[1] as varchar(500)) as "name",
cast((xpath('//number/text()',wayp.pt))[1] as varchar(100)) as store_number
from(
select
unnest(xpath('//warehouse',g)) as pt
from getxmldocument('virtualpos/stores.xml','windows-1251') as g) as wayp;